From 3c5ea01e092b03ebaf3563490f65d6dd2f2c8b45 Mon Sep 17 00:00:00 2001 From: Richard Davey Date: Tue, 17 Sep 2013 16:28:59 +0100 Subject: [PATCH] 1.0.3 release - fixed Text and Bitmap Fonts, Animation documentation and more examples --- Docs/Documentation Checklist.xlsx | Bin 0 -> 10438 bytes Docs/Screen Shots/phaser_fruit.png | Bin 0 -> 48749 bytes Docs/Screen Shots/phaser_platformer.png | Bin 0 -> 84809 bytes Docs/Screen Shots/phaser_quadtree.png | Bin 0 -> 42465 bytes Docs/tags.txt | 5 +- README.md | 18 +- examples/animation/sprite sheet.php | 43 ++++ examples/animation/texture atlas.php | 38 ++++ examples/assets/games/starstruck/level1.json | 2 +- examples/assets/games/starstruck/level1.tmx | 124 +++++------ examples/collision/bounding box.php | 68 ++++++ examples/collision/larger bounding box.php | 66 ++++++ examples/collision/offset bounding box.php | 69 ++++++ examples/games/starstruck.php | 3 +- examples/js.php | 15 +- examples/text/bitmap fonts.php | 29 +++ examples/text/hello arial.php | 28 +++ examples/text/kern of duty.php | 78 +++++++ examples/text/text stroke.php | 34 +++ src/Phaser.js | 2 +- src/animation/Animation.js | 186 ++++++++++++---- src/animation/AnimationManager.js | 215 ++++++++++++------- src/animation/Frame.js | 214 +++++++++++------- src/animation/FrameData.js | 207 +++++++++++------- src/animation/Parser.js | 69 +++--- src/core/StateManager.js | 2 +- src/gameobjects/BitmapText.js | 8 +- src/gameobjects/Text.js | 119 ++++++++-- src/utils/Utils.js | 3 + 29 files changed, 1253 insertions(+), 392 deletions(-) create mode 100644 Docs/Documentation Checklist.xlsx create mode 100644 Docs/Screen Shots/phaser_fruit.png create mode 100644 Docs/Screen Shots/phaser_platformer.png create mode 100644 Docs/Screen Shots/phaser_quadtree.png create mode 100644 examples/animation/sprite sheet.php create mode 100644 examples/animation/texture atlas.php create mode 100644 examples/collision/bounding box.php create mode 100644 examples/collision/larger bounding box.php create mode 100644 examples/collision/offset bounding box.php create mode 100644 examples/text/bitmap fonts.php create mode 100644 examples/text/hello arial.php create mode 100644 examples/text/kern of duty.php create mode 100644 examples/text/text stroke.php diff --git a/Docs/Documentation Checklist.xlsx b/Docs/Documentation Checklist.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..09a7b4475470f36db257a49c1a6074d54e3d4b5b GIT binary patch literal 10438 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 literal 0 HcmV?d00001 diff --git a/Docs/Screen Shots/phaser_platformer.png b/Docs/Screen Shots/phaser_platformer.png new file mode 100644 index 0000000000000000000000000000000000000000..d53be64f6e797428909f53abbb6d82700ba16ee1 GIT binary patch literal 84809 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 literal 0 HcmV?d00001 diff --git a/Docs/Screen Shots/phaser_quadtree.png b/Docs/Screen Shots/phaser_quadtree.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5470f8bad5b170feba4877325a7cbe975089dd GIT binary patch literal 42465 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 Sh3GRf;B!k`U#nIV75#rz#=E8f literal 0 HcmV?d00001 diff --git a/Docs/tags.txt b/Docs/tags.txt index ff212b63..3a300098 100644 --- a/Docs/tags.txt +++ b/Docs/tags.txt @@ -34,11 +34,10 @@ public game: Phaser.Game; */ /** -* My property description. Like other pieces of your comment blocks, -* this can span multiple lines. +* Property description. * * @property propertyName -* @public +* @public @private * @type {Object} * @default "foo" */ diff --git a/README.md b/README.md index f5aa3da0..5ebf41d7 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Phaser 1.0 Phaser is a fast, free and fun open source game framework for making desktop and mobile browser HTML5 games. It supports Canvas and WebGL rendering. -Version: 1.0.2 - Released: September 15th 2013 +Version: 1.0.3 - Released: September 17th 2013 By Richard Davey, [Photon Storm](http://www.photonstorm.com) @@ -20,10 +20,6 @@ Try out the [Phaser Test Suite](http://gametest.mobi/phaser/) Latest Update ------------- -September 15th 2013 - -Version 1.0.1 and 1.0.2 have been tagged and released. See the Change Log for full details. As 1.0 is so fresh please expect small minor updates every few days, but we will be sure to tag them. - September 13th 2013 We're very pleased to have finally shipped the 1.0 release of Phaser. This version represents many months of hard work, feedback and refactoring based on the previous 0.5 through to 0.97 releases. You can see the full gory details in our change log. @@ -41,7 +37,15 @@ Phaser is everything we ever wanted from an HTML5 game framework. It will power Change Log ---------- -Version 1.0.2 +Version 1.0.3 (September 17th 2013) + +* FrameData.getFrameIndexes and getFrameIndexesByName refactored into a more versatile getFrames function. +* Various fixes to looping parameters in the Sound system. +* Documentation started across most classes. Keep track of progress in the Docs folder. +* Optimised AnimationManager.add so it will only get the required frames rather than all of them and is now faster at parsing the frame data. +* Fixed Phaser.Text and Phaser.BitmapText so they now render correctly and added several Text examples. + +Version 1.0.2 (September 16th 2013) * Added optional parameter to Animation.stop: resetFrame. If true the animation will be stopped and then the current frame reset to the first frame in the animation. * Fixed an issue causing 'explode' particle bursts to ignore the quantity parameter. @@ -53,7 +57,7 @@ Version 1.0.2 * Added in the start of a Breakout game * Added in the start of a Platformer game -Version 1.0.1 +Version 1.0.1 (September 15th 2013) * Added checks into every Group function to ensure that the Group has children before running them. * Added optional flag to Group.create which allows you to set the default exists state of the Sprites. diff --git a/examples/animation/sprite sheet.php b/examples/animation/sprite sheet.php new file mode 100644 index 00000000..b108cf4b --- /dev/null +++ b/examples/animation/sprite sheet.php @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/examples/animation/texture atlas.php b/examples/animation/texture atlas.php new file mode 100644 index 00000000..e33baf68 --- /dev/null +++ b/examples/animation/texture atlas.php @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/examples/assets/games/starstruck/level1.json b/examples/assets/games/starstruck/level1.json index 3cf85dc2..2c450746 100644 --- a/examples/assets/games/starstruck/level1.json +++ b/examples/assets/games/starstruck/level1.json @@ -1,7 +1,7 @@ { "height":64, "layers":[ { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 2, 3, 4, 5, 2, 6, 2, 3, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 2, 6, 2, 3, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 37, 19, 19, 36, 19, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 19, 37, 19, 19, 36, 19, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 36, 19, 19, 21, 19, 19, 39, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 19, 36, 19, 19, 38, 19, 19, 39, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 53, 54, 53, 53, 55, 53, 54, 55, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 53, 53, 55, 53, 54, 55, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 6, 2, 3, 6, 7, 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 1, 34, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 36, 19, 22, 23, 24, 0, 0, 0, 0, 0, 1, 30, 31, 9, 0, 0, 0, 0, 1, 30, 31, 9, 0, 0, 0, 59, 55, 57, 60, 0, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 39, 40, 41, 0, 0, 0, 0, 0, 25, 19, 19, 26, 0, 0, 0, 0, 25, 19, 19, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 65, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 20, 54, 55, 57, 60, 0, 0, 0, 0, 0, 59, 57, 53, 60, 0, 0, 0, 0, 59, 57, 53, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 56, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 43, 0, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 9, 0, 0, 0, 1, 4, 64, 65, 2, 3, 4, 5, 2, 64, 65, 3, 6, 7, 0, 1, 2, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 26, 0, 0, 0, 18, 19, 19, 19, 19, 19, 37, 19, 19, 36, 19, 22, 23, 24, 0, 18, 19, 19, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 43, 0, 0, 0, 25, 19, 19, 19, 19, 36, 19, 19, 19, 19, 19, 39, 40, 41, 0, 18, 19, 19, 19, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 41, 0, 0, 0, 42, 19, 19, 19, 53, 54, 53, 53, 55, 53, 54, 55, 57, 60, 0, 59, 56, 56, 56, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 43, 0, 0, 0, 18, 19, 19, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 26, 0, 0, 0, 35, 19, 19, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 37, 26, 0, 0, 0, 52, 56, 56, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 9, 0, 0, 0, 1, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 2, 30, 30, 31, 2, 6, 7, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 42, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 21, 22, 23, 19, 19, 19, 19, 19, 19, 19, 6, 3, 30, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 41, 0, 49, 50, 51, 0, 47, 48, 0, 0, 0, 1, 36, 37, 38, 39, 40, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 3, 66, 67, 68, 2, 64, 65, 6, 2, 3, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 57, 57, 58, 0, 0, 0, 0, 0, 0, 44, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 20, 19, 19, 19, 19, 19, 37, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 41, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 19, 37, 19, 19, 19, 19, 19, 20, 19, 19, 38, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 41, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 19, 19, 38, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 60, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 53, 19, 19, 36, 19, 19, 37, 19, 36, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 54, 57, 19, 19, 36, 36, 19, 20, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 19, 19, 37, 38, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 54, 19, 36, 19, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 19, 19, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 19, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 19, 21, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 19, 19, 38, 21, 19, 50, 0, 49, 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 53, 19, 19, 22, 67, 3, 66, 5, 2, 6, 66, 67, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 64, 65, 5, 2, 6, 66, 67, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 19, 39, 19, 19, 37, 19, 19, 36, 19, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 19, 37, 19, 19, 36, 19, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 52, 19, 19, 36, 19, 19, 21, 19, 19, 39, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 19, 36, 19, 19, 38, 19, 19, 39, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 19, 41, 0, 0, 0, 0, 0, 25, 53, 54, 53, 53, 55, 53, 54, 55, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 53, 53, 55, 53, 54, 55, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 57, 53, 60, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 5, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 54, 55, 57, 58, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 19, 41, 0, 0, 0, 0, 0, 0, 0, 50, 8, 19, 6, 2, 3, 6, 7, 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 1, 34, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 57, 53, 60, 0, 0, 0, 0, 0, 0, 1, 67, 19, 19, 36, 19, 22, 23, 24, 0, 0, 0, 0, 0, 1, 30, 31, 9, 0, 0, 0, 0, 1, 30, 31, 9, 0, 0, 0, 59, 55, 57, 60, 0, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 19, 19, 19, 19, 19, 19, 39, 40, 41, 0, 0, 0, 0, 0, 25, 19, 19, 26, 0, 0, 0, 0, 25, 19, 19, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 65, 9, 0, 0, 0, 0, 0, 46, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 19, 19, 19, 19, 19, 20, 54, 55, 57, 60, 0, 0, 0, 0, 0, 59, 57, 53, 60, 0, 0, 0, 0, 59, 57, 53, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 56, 60, 0, 0, 0, 0, 1, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 57, 54, 53, 19, 19, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 19, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 19, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 58, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 43, 0, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 31, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 9, 0, 0, 0, 1, 4, 64, 65, 2, 3, 4, 5, 2, 64, 65, 3, 6, 7, 0, 1, 2, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 19, 36, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 25, 19, 26, 0, 0, 0, 18, 19, 19, 19, 19, 19, 37, 19, 19, 36, 19, 22, 23, 24, 0, 18, 19, 19, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 19, 43, 0, 0, 0, 25, 19, 19, 19, 19, 36, 19, 19, 19, 19, 19, 39, 40, 41, 0, 18, 19, 19, 19, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 19, 41, 0, 0, 0, 42, 19, 19, 19, 53, 54, 53, 53, 55, 53, 54, 55, 57, 60, 0, 59, 56, 56, 56, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 19, 19, 43, 0, 0, 0, 18, 19, 19, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 19, 19, 19, 26, 0, 0, 0, 35, 19, 19, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 53, 54, 19, 37, 26, 0, 0, 0, 52, 56, 56, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 2, 30, 30, 31, 2, 6, 7, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 59, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 21, 22, 23, 19, 19, 19, 19, 19, 19, 19, 6, 3, 30, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 41, 0, 49, 50, 51, 0, 47, 48, 0, 0, 0, 1, 36, 37, 38, 39, 40, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 3, 66, 67, 68, 2, 64, 65, 6, 2, 3, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 57, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 20, 19, 19, 19, 19, 19, 37, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 19, 37, 19, 19, 19, 19, 19, 20, 19, 19, 38, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 38, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 60, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19], "height":64, "name":"Tile Layer 1", "opacity":1, diff --git a/examples/assets/games/starstruck/level1.tmx b/examples/assets/games/starstruck/level1.tmx index 893d41bf..17847c7c 100644 --- a/examples/assets/games/starstruck/level1.tmx +++ b/examples/assets/games/starstruck/level1.tmx @@ -5,69 +5,69 @@ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19, -2,3,4,5,2,6,2,3,6,7,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,2,6,2,3,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19, -19,19,37,19,19,36,19,22,23,24,0,0,0,0,0,0,0,0,0,0,0,18,19,19,37,19,19,36,19,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19, -19,36,19,19,21,19,19,39,40,41,0,0,0,0,0,0,0,0,0,0,0,35,19,36,19,19,38,19,19,39,40,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -53,54,53,53,55,53,54,55,57,60,0,0,0,0,0,0,0,0,0,0,0,52,53,54,53,53,55,53,54,55,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,19,19, -6,2,3,6,7,0,0,0,0,0,0,13,14,0,0,0,0,0,0,13,14,0,0,0,0,1,34,6,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,19,19,19,19, -36,19,22,23,24,0,0,0,0,0,1,30,31,9,0,0,0,0,1,30,31,9,0,0,0,59,55,57,60,0,0,0,0,0,0,47,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,19,19,19,19,19, -19,19,39,40,41,0,0,0,0,0,25,19,19,26,0,0,0,0,25,19,19,26,0,0,0,0,0,0,0,0,0,0,0,0,1,64,65,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19, -20,54,55,57,60,0,0,0,0,0,59,57,53,60,0,0,0,0,59,57,53,60,0,0,0,0,0,0,0,0,0,0,0,0,59,57,56,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19, -24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -43,0,0,0,0,0,0,47,48,0,0,0,0,0,47,48,0,0,0,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,0,0,0,19, -19,9,0,0,0,1,4,64,65,2,3,4,5,2,64,65,3,6,7,0,1,2,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,0,0,0,0,0,0,0,0,19, -19,26,0,0,0,18,19,19,19,19,19,37,19,19,36,19,22,23,24,0,18,19,19,24,0,0,0,0,0,0,0,0,0,0,1,6,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,19, -19,43,0,0,0,25,19,19,19,19,36,19,19,19,19,19,39,40,41,0,18,19,19,19,9,0,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -19,41,0,0,0,42,19,19,19,53,54,53,53,55,53,54,55,57,60,0,59,56,56,56,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,6,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19, -19,43,0,0,0,18,19,19,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19, -19,26,0,0,0,35,19,19,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,66,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19, -37,26,0,0,0,52,56,56,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -19,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,19, -19,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,9,0,0,0,1,19,19,19,0,0,0,0,0,19,19,19,0,0,0,0,0,0,0,0,0,19, -19,26,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,2,30,30,31,2,6,7,0,0,13,0,0,0,0,0,0,0,0,59,57,60,0,0,0,42,19,19,19,0,0,0,0,0,0,19,19,19,0,0,0,0,0,0,0,0,19, -19,43,0,0,0,0,0,0,0,0,0,0,0,1,20,21,22,23,19,19,19,19,19,19,19,6,3,30,4,7,0,0,0,0,0,0,0,0,0,0,0,44,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -19,41,0,49,50,51,0,47,48,0,0,0,1,36,37,38,39,40,19,19,19,19,19,19,19,19,19,19,19,26,0,0,0,0,0,0,0,0,0,44,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -19,19,3,66,67,68,2,64,65,6,2,3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,57,57,58,0,0,0,0,0,0,44,19,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -19,19,20,19,19,19,19,19,37,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,41,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,19,19,19,0,0,0,0,0,0,19,0,0,0,0,0,19, -37,19,19,19,19,19,20,19,19,38,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,57,60,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,0,0,0,0,0,19,19,19,0,0,0,0,19, -19,19,20,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,41,0,0,0,0,0,0,0,0,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,0,0,0,0,19, -19,38,19,19,19,19,19,19,19,19,19,19,19,19,57,57,57,57,57,57,57,57,57,57,60,0,0,0,0,0,0,0,19,19,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -19,19,19,19,19,19,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,0,0,0,0,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -19,19,19,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,19,19,19,19,19,19,19,19,0,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,19, -19,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,19,19,0,0,0,0,0,19, -19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,0,0,0,0,19,19,19,19,0,0,0,0,0,19,19,19,19,19,0,19,19,0,0,0,0,0,19,19,19,19,0,0,0,0,19, -19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,19,19, -19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19, -19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19, -19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,0,0,0,0,0,0,0,0,0,0,19,19,19, -19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,0,19,19,19,19,19, -19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,19,19,19,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,19, -19,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,19,19,19,19,19,19,19,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,19,19, -19,19,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,19,19,19,19,19,19,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,19,19,19,19,19,19,19, -19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19, -19,19,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19, -19,19,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19, -19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,19,19,0,0,19,19,19,19,19,19,19,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,53,53,19,19,36,19,19,37,19,36,19,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,57,54,57,19,19,36,36,19,20,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,19,19,37,38,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,54,19,36,19,36, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,19,19,22, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,19,39, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,20,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,19,21,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,19,19,38,21,19, +50,0,49,0,0,0,49,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,48,0,0,0,49,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,57,53,19,19,22, +67,3,66,5,2,6,66,67,6,7,0,0,0,0,0,0,0,0,0,0,0,1,2,64,65,5,2,6,66,67,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,19,39, +19,19,37,19,19,36,19,22,23,24,0,0,0,0,0,0,0,0,0,0,0,18,19,19,37,19,19,36,19,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,9,0,0,0,0,52,19, +19,36,19,19,21,19,19,39,40,41,0,0,0,0,0,0,0,0,0,0,0,35,19,36,19,19,38,19,19,39,40,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,19,41,0,0,0,0,0,25, +53,54,53,53,55,53,54,55,57,60,0,0,0,0,0,0,0,0,0,0,0,52,53,54,53,53,55,53,54,55,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,57,53,60,0,0,0,0,0,18, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,6,5,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,54,55,57,58,0,0,0,0,0,0,8,9,0,0,0,0,0,0,0,0,0,42, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,19,41,0,0,0,0,0,0,0,50,8,19, +6,2,3,6,7,0,0,0,0,0,0,13,14,0,0,0,0,0,0,13,14,0,0,0,0,1,34,6,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,57,53,60,0,0,0,0,0,0,1,67,19,19, +36,19,22,23,24,0,0,0,0,0,1,30,31,9,0,0,0,0,1,30,31,9,0,0,0,59,55,57,60,0,0,0,0,0,0,47,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,19,19,19,19, +19,19,39,40,41,0,0,0,0,0,25,19,19,26,0,0,0,0,25,19,19,26,0,0,0,0,0,0,0,0,0,0,0,0,1,64,65,9,0,0,0,0,0,46,7,0,0,0,0,0,0,0,0,0,0,0,0,0,1,19,19,19,19,19, +20,54,55,57,60,0,0,0,0,0,59,57,53,60,0,0,0,0,59,57,53,60,0,0,0,0,0,0,0,0,0,0,0,0,59,57,56,60,0,0,0,0,1,5,19,7,0,0,0,0,0,0,0,0,0,0,0,0,52,57,54,53,19,19, +24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,53,19,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,19, +43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,58,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,35, +43,0,0,0,0,0,0,47,48,0,0,0,0,0,47,48,0,0,0,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,31,31,31,9,17,0,0,0,0,0,0,0,0,18, +19,9,0,0,0,1,4,64,65,2,3,4,5,2,64,65,3,6,7,0,1,2,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,57,19,36,57,60,0,0,0,0,0,0,0,0,25, +19,26,0,0,0,18,19,19,19,19,19,37,19,19,36,19,22,23,24,0,18,19,19,24,0,0,0,0,0,0,0,0,0,0,1,6,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,60,0,0,0,0,0,0,0,0,0,0,42, +19,43,0,0,0,25,19,19,19,19,36,19,19,19,19,19,39,40,41,0,18,19,19,19,9,0,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, +19,41,0,0,0,42,19,19,19,53,54,53,53,55,53,54,55,57,60,0,59,56,56,56,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,19, +19,43,0,0,0,18,19,19,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,19,19, +19,26,0,0,0,35,19,19,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,66,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,0,0,0,0,0,0,0,0,0,0,0,0,59,53,54,19, +37,26,0,0,0,52,56,56,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, +19,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,19,19,0,0,0,0,0,0,0,0,0,19, +19,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,0,0,0,0,0,0,0,0,0,19, +19,26,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,2,30,30,31,2,6,7,0,0,13,0,0,0,0,0,0,0,0,59,57,60,0,0,0,0,0,0,0,0,0,0,0,0,59,19,19,19,0,0,0,0,0,0,0,0,19, +19,43,0,0,0,0,0,0,0,0,0,0,0,1,20,21,22,23,19,19,19,19,19,19,19,6,3,30,4,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, +19,41,0,49,50,51,0,47,48,0,0,0,1,36,37,38,39,40,19,19,19,19,19,19,19,19,19,19,19,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, +19,19,3,66,67,68,2,64,65,6,2,3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,57,57,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, +19,19,20,19,19,19,19,19,37,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,19,19,0,0,0,0,19, +37,19,19,19,19,19,20,19,19,38,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,57,60,0,0,0,0,0,0,0,0,19,19,19,19,19,19,0,0,0,0,0,0,0,19,19,0,0,0,0,0,19,19,19,19,0,0,0,0,19, +19,19,20,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,41,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,19, +19,38,19,19,19,19,19,19,19,19,19,19,19,19,57,57,57,57,57,57,57,57,57,57,60,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, +19,19,19,19,19,19,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, +19,19,19,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,19, +19,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,19,19,19,19,19,19,19,19,0,0,0,0,0,19,19,0,0,0,0,0,19, +19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,19,19,19,0,0,0,0,19,19,19,19,0,0,0,0,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,0,0,0,0,0,0,0,0,0,0,19,19,19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,0,19,19,19,19,19, +19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,19,19,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,19, +19,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,19,0,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,19,19, +19,19,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19, +19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19, +19,19,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19, +19,19,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19, +19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19, 19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,19,19,19,0,19,19,19,19,19,19,19,19,19,19, -19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,19,19,19,19,19,19,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19,0,0,0,0,0,0,0,19,19,19,19,19,19,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19 diff --git a/examples/collision/bounding box.php b/examples/collision/bounding box.php new file mode 100644 index 00000000..3ae50f31 --- /dev/null +++ b/examples/collision/bounding box.php @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/examples/collision/larger bounding box.php b/examples/collision/larger bounding box.php new file mode 100644 index 00000000..ef0bc16e --- /dev/null +++ b/examples/collision/larger bounding box.php @@ -0,0 +1,66 @@ + + + + + \ No newline at end of file diff --git a/examples/collision/offset bounding box.php b/examples/collision/offset bounding box.php new file mode 100644 index 00000000..54c42dfa --- /dev/null +++ b/examples/collision/offset bounding box.php @@ -0,0 +1,69 @@ + + + + + \ No newline at end of file diff --git a/examples/games/starstruck.php b/examples/games/starstruck.php index 701c90de..42bfb566 100644 --- a/examples/games/starstruck.php +++ b/examples/games/starstruck.php @@ -41,6 +41,7 @@ player = game.add.sprite(32, 32, 'dude'); player.body.bounce.y = 0.2; player.body.collideWorldBounds = true; + player.body.gravity.y = 10; player.animations.add('left', [0, 1, 2, 3], 10, true); player.animations.add('turn', [4], 20, true); @@ -55,7 +56,7 @@ game.physics.collide(player, map); player.body.velocity.x = 0; - player.body.acceleration.y = 500; + // player.body.acceleration.y = 500; if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT)) { diff --git a/examples/js.php b/examples/js.php index dfdbaae3..3c6650cf 100644 --- a/examples/js.php +++ b/examples/js.php @@ -50,6 +50,7 @@ + @@ -57,41 +58,51 @@ - + + - + + + + + + + + + + diff --git a/examples/text/bitmap fonts.php b/examples/text/bitmap fonts.php new file mode 100644 index 00000000..27c7c9fb --- /dev/null +++ b/examples/text/bitmap fonts.php @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/examples/text/hello arial.php b/examples/text/hello arial.php new file mode 100644 index 00000000..5f58cbc2 --- /dev/null +++ b/examples/text/hello arial.php @@ -0,0 +1,28 @@ + + + + + \ No newline at end of file diff --git a/examples/text/kern of duty.php b/examples/text/kern of duty.php new file mode 100644 index 00000000..442a02b3 --- /dev/null +++ b/examples/text/kern of duty.php @@ -0,0 +1,78 @@ + + + + + \ No newline at end of file diff --git a/examples/text/text stroke.php b/examples/text/text stroke.php new file mode 100644 index 00000000..7d0a4d7f --- /dev/null +++ b/examples/text/text stroke.php @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file diff --git a/src/Phaser.js b/src/Phaser.js index c2073c68..52f6f188 100644 --- a/src/Phaser.js +++ b/src/Phaser.js @@ -3,7 +3,7 @@ */ var Phaser = Phaser || { - VERSION: '1.0.2', + VERSION: '1.0.3', GAMES: [], AUTO: 0, CANVAS: 1, diff --git a/src/animation/Animation.js b/src/animation/Animation.js index 24ba0381..88e505ce 100644 --- a/src/animation/Animation.js +++ b/src/animation/Animation.js @@ -1,43 +1,126 @@ /** -* Animation -* -* An Animation instance contains a single animation and the controls to play it. -* It is created by the AnimationManager and belongs to Game Objects such as Sprite. -* -* @package Phaser.Animation -* @author Richard Davey -* @copyright 2013 Photon Storm Ltd. -* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License -* -* @param parent {Sprite} Owner sprite of this animation. -* @param frameData {FrameData} The FrameData object contains animation data. -* @param name {string} Unique name of this animation. -* @param frames {number[]/string[]} An array of numbers or strings indicating what frames to play in what order. -* @param delay {number} Time between frames in ms. -* @param looped {bool} Whether or not the animation is looped or just plays once. +* @author Richard Davey +* @copyright 2013 Photon Storm Ltd. +* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @module Phaser.Animation */ -Phaser.Animation = function (game, parent, frameData, name, frames, delay, looped) { +/** +* An Animation instance contains a single animation and the controls to play it. +* It is created by the AnimationManager, consists of Animation.Frame objects and belongs to a single Game Object such as a Sprite. +* +* @class Animation +* @constructor +* @param {Phaser.Game} game A reference to the currently running game. +* @param {Phaser.Sprite} parent A reference to the owner of this Animation. +* @param {String} name The unique name for this animation, used in playback commands. +* @param {Phaser.Animation.FrameData} frameData The FrameData object that contains all frames used by this Animation. +* @param {Mixed} frames An array of numbers or strings indicating which frames to play in which order. +* @param {Number} delay The time between each frame of the animation, given in ms. +* @param {Boolean} looped Should this animation loop or play through once. +*/ +Phaser.Animation = function (game, parent, name, frameData, frames, delay, looped) { + + /** + * A reference to the currently running Game. + * @property game + * @public + * @type {Phaser.Game} + */ this.game = game; + + /** + * A reference to the parent Sprite that owns this Animation. + * @property _parent + * @private + * @type {Phaser.Sprite} + */ this._parent = parent; + + /** + * The FrameData the Animation uses. + * @property _frameData + * @private + * @type {Phaser.FrameData} + */ + this._frameData = frameData; + + /** + * The user defined name given to this Animation. + * @property name + * @public + * @type {String} + */ + this.name = name; + + /** + * @property _frames + * @private + * @type {Object} + */ this._frames = frames; - this._frameData = frameData; - this.name = name; + + /** + * The delay in ms between each frame of the Animation. + * @property delay + * @public + * @type {Number} + */ this.delay = 1000 / delay; + + /** + * The loop state of the Animation. + * @property looped + * @public + * @type {Boolean} + */ this.looped = looped; + + /** + * The finished state of the Animation. Set to true once playback completes, false during playback. + * @property isFinished + * @public + * @type {Boolean} + * default true + */ this.isFinished = false; + + /** + * The playing state of the Animation. Set to false once playback completes, true during playback. + * @property isPlaying + * @public + * @type {Boolean} + * default false + */ this.isPlaying = false; + + /** + * @property _frameIndex + * @private + * @type {Number} + * default 0 + */ this._frameIndex = 0; + + /** + * The currently displayed frame of the Animation. + * @property currentFrame + * @public + * @type {Phaser.Animation.Frame} + */ this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]); }; Phaser.Animation.prototype = { - /** - * Play this animation. - * @param frameRate {number} FrameRate you want to specify instead of using default. - * @param loop {bool} Whether or not the animation is looped or just plays once. + /** + * Plays this animation. + * + * @method play + * @param {Number} [frameRate=null] The framerate to play the animation at. The speed is given in frames per second. If not provided the previously set frameRate of the Animation is used. + * @param {Boolean} [loop=null] Should the animation be looped after playback. If not provided the previously set loop value of the Animation is used. + * @return {Phaser.Animation} A reference to this Animation instance. */ play: function (frameRate, loop) { @@ -65,14 +148,20 @@ Phaser.Animation.prototype = { this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]); this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]); - this._parent.events.onAnimationStart.dispatch(this._parent, this); + + if (this._parent.events) + { + this._parent.events.onAnimationStart.dispatch(this._parent, this); + } return this; }, - /** - * Play this animation from the first frame. + /** + * Sets this animation back to the first frame and restarts the animation. + * + * @method restart */ restart: function () { @@ -88,12 +177,15 @@ Phaser.Animation.prototype = { }, - /** - * Stop playing animation and set it finished. + /** + * Stops playback of this animation and set it to a finished state. If a resetFrame is provided it will stop playback and set frame to the first in the animation. + * + * @method stop + * @param {Boolean} [resetFrame=false] If true after the animation stops the currentFrame value will be set to the first frame in this animation. */ stop: function (resetFrame) { - if (typeof resetFrame == 'undefined') { resetFrame = false; } + if (typeof resetFrame === 'undefined') { resetFrame = false; } this.isPlaying = false; this.isFinished = true; @@ -105,8 +197,10 @@ Phaser.Animation.prototype = { }, - /** - * Update animation frames. + /** + * Updates this animation. Called automatically by the AnimationManager. + * + * @method update */ update: function () { @@ -144,8 +238,10 @@ Phaser.Animation.prototype = { }, - /** - * Clean up animation memory. + /** + * Cleans up this animation ready for deletion. Nulls all values and references. + * + * @method destroy */ destroy: function () { @@ -158,14 +254,20 @@ Phaser.Animation.prototype = { }, - /** - * Animation complete callback method. + /** + * Called internally when the animation finishes playback. Sets the isPlaying and isFinished states and dispatches the onAnimationComplete event if it exists on the parent. + * + * @method onComplete */ onComplete: function () { this.isPlaying = false; this.isFinished = true; - this._parent.events.onAnimationComplete.dispatch(this._parent, this); + + if (this._parent.events) + { + this._parent.events.onAnimationComplete.dispatch(this._parent, this); + } } @@ -173,6 +275,10 @@ Phaser.Animation.prototype = { Object.defineProperty(Phaser.Animation.prototype, "frameTotal", { + /** + * @method frameTotal + * @return {Number} The total number of frames in this animation. + */ get: function () { return this._frames.length; } @@ -181,6 +287,10 @@ Object.defineProperty(Phaser.Animation.prototype, "frameTotal", { Object.defineProperty(Phaser.Animation.prototype, "frame", { + /** + * @method frame + * @return {Animation.Frame} Returns the current frame, or if not set the index of the most recent frame. + */ get: function () { if (this.currentFrame !== null) @@ -194,6 +304,10 @@ Object.defineProperty(Phaser.Animation.prototype, "frame", { }, + /** + * @method frame + * @return {Number} Sets the current frame to the given frame index and updates the texture cache. + */ set: function (value) { this.currentFrame = this._frameData.getFrame(value); diff --git a/src/animation/AnimationManager.js b/src/animation/AnimationManager.js index 3b120838..cd10dd95 100644 --- a/src/animation/AnimationManager.js +++ b/src/animation/AnimationManager.js @@ -1,44 +1,89 @@ /** -* AnimationManager +* @author Richard Davey +* @copyright 2013 Photon Storm Ltd. +* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @module Phaser.Animation +*/ + +/** +* The AnimationManager is used to add, play and update Phaser Animations. +* Any Game Object such as Phaser.Sprite that supports animation contains a single AnimationManager instance. * -* Any Game Object that supports animation contains a single AnimationManager instance. It is used to add, -* play and update Phaser.Animation objects. -* -* @package Phaser.Components.AnimationManager -* @author Richard Davey -* @copyright 2013 Photon Storm Ltd. -* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @class AnimationManager +* @constructor +* @param {Phaser.Sprite} sprite A reference to the Game Object that owns this AnimationManager. */ Phaser.AnimationManager = function (sprite) { - /** - * Data contains animation frames. - * @type {FrameData} - */ - this._frameData = null; - - /** - * Keeps track of the current frame of the animation. - */ - this.currentFrame = null; - + /** + * A reference to the parent Sprite that owns this AnimationManager. + * @property sprite + * @public + * @type {Phaser.Sprite} + */ this.sprite = sprite; + /** + * A reference to the currently running Game. + * @property game + * @public + * @type {Phaser.Game} + */ this.game = sprite.game; + /** + * The currently displayed Frame of animation, if any. + * @property currentFrame + * @public + * @type {Phaser.Animation.Frame} + */ + this.currentFrame = null; + + /** + * Should the animation data continue to update even if the Sprite.visible is set to false. + * @property updateIfVisible + * @public + * @type {Boolean} + * @default true + */ + this.updateIfVisible = true; + + /** + * A temp. var for holding the currently playing Animations FrameData. + * @property _frameData + * @private + * @type {Phaser.Animation.FrameData} + */ + this._frameData = null; + + /** + * An internal object that stores all of the Animation instances. + * @property _anims + * @private + * @type {Object} + */ this._anims = {}; - this.updateIfVisible = true; + /** + * An internal object to help avoid gc. + * @property _outputFrames + * @private + * @type {Object} + */ + this._outputFrames = []; }; Phaser.AnimationManager.prototype = { - - /** - * Load animation frame data. - * @param frameData Data to be loaded. - */ + /** + * Loads FrameData into the internal temporary vars and resets the frame index to zero. + * This is called automatically when a new Sprite is created. + * + * @method loadFrameData + * @private + * @param {Phaser.Animation.FrameData} frameData The FrameData set to load. + */ loadFrameData: function (frameData) { this._frameData = frameData; @@ -47,28 +92,30 @@ Phaser.AnimationManager.prototype = { }, /** - * Add a new animation. - * @param name {string} What this animation should be called (e.g. "run"). - * @param frames {any[]} An array of numbers/strings indicating what frames to play in what order (e.g. [1, 2, 3] or ['run0', 'run1', run2]). - * @param frameRate {number} The speed in frames per second that the animation should play at (e.g. 60 fps). - * @param loop {bool} Whether or not the animation is looped or just plays once. - * @param useNumericIndex {bool} Use number indexes instead of string indexes? - * @return {Animation} The Animation that was created + * Adds a new animation under the given key. Optionally set the frames, frame rate and loop. + * Animations added in this way are played back with the play function. + * + * @method add + * @param {String} name The unique (within this Sprite) name for the animation, i.e. "run", "fire", "walk". + * @param {Array} [frames=null] An array of numbers/strings that correspond to the frames to add to this animation and in which order. e.g. [1, 2, 3] or ['run0', 'run1', run2]). If null then all frames will be used. + * @param {Number} [frameRate=60] The speed at which the animation should play. The speed is given in frames per second. + * @param {Boolean} [loop=false] {bool} Whether or not the animation is looped or just plays once. + * @param {Boolean} [useNumericIndex=true] Are the given frames using numeric indexes (default) or strings? (false) + * @return {Phaser.Animation} The Animation object that was created. */ add: function (name, frames, frameRate, loop, useNumericIndex) { - frames = frames || null; - frameRate = frameRate || 60; - - if (typeof loop == 'undefined') { loop = false; } - if (typeof useNumericIndex == 'undefined') { useNumericIndex = true; } - if (this._frameData == null) { - console.warn('No frameData available for Phaser.Animation ' + name); + console.warn('No FrameData available for Phaser.Animation ' + name); return; } + frameRate = frameRate || 60; + + if (typeof loop === 'undefined') { loop = false; } + if (typeof useNumericIndex === 'undefined') { useNumericIndex = true; } + // Create the signals the AnimationManager will emit if (this.sprite.events.onAnimationStart == null) { @@ -77,25 +124,11 @@ Phaser.AnimationManager.prototype = { this.sprite.events.onAnimationLoop = new Phaser.Signal(); } - if (frames == null) - { - frames = this._frameData.getFrameIndexes(); - } - else - { - if (this.validateFrames(frames, useNumericIndex) == false) - { - console.warn('Invalid frames given to Phaser.Animation ' + name); - return; - } - } + this._outputFrames.length = 0; - if (useNumericIndex == false) - { - frames = this._frameData.getFrameIndexesByName(frames); - } + this._frameData.getFrameIndexes(frames, useNumericIndex, this._outputFrames); - this._anims[name] = new Phaser.Animation(this.game, this.sprite, this._frameData, name, frames, frameRate, loop); + this._anims[name] = new Phaser.Animation(this.game, this.sprite, name, this._frameData, this._outputFrames, frameRate, loop); this.currentAnim = this._anims[name]; this.currentFrame = this.currentAnim.currentFrame; this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]); @@ -105,10 +138,12 @@ Phaser.AnimationManager.prototype = { }, /** - * Check whether the frames is valid. - * @param frames {any[]} Frames to be validated. - * @param useNumericIndex {bool} Does these frames use number indexes or string indexes? - * @return {bool} True if they're valid, otherwise return false. + * Check whether the frames in the given array are valid and exist. + * + * @method validateFrames + * @param {Array} frames An array of frames to be validated. + * @param {Boolean} [useNumericIndex=true] Validate the frames based on their numeric index (true) or string index (false) + * @return {Boolean} True if all given Frames are valid, otherwise false. */ validateFrames: function (frames, useNumericIndex) { @@ -137,16 +172,17 @@ Phaser.AnimationManager.prototype = { }, /** - * Play animation with specific name. - * @param name {string} The string name of the animation you want to play. - * @param frameRate {number} FrameRate you want to specify instead of using default. - * @param loop {bool} Whether or not the animation is looped or just plays once. + * Play an animation based on the given key. The animation should previously have been added via sprite.animations.add() + * If the requested animation is already playing this request will be ignored. If you need to reset an already running animation do so directly on the Animation object itself. + * + * @method play + * @param {String} name The name of the animation to be played, e.g. "fire", "walk", "jump". + * @param {Number} [frameRate=null] The framerate to play the animation at. The speed is given in frames per second. If not provided the previously set frameRate of the Animation is used. + * @param {Boolean} [loop=null] Should the animation be looped after playback. If not provided the previously set loop value of the Animation is used. + * @return {Phaser.Animation} A reference to playing Animation instance. */ play: function (name, frameRate, loop) { - frameRate = frameRate || null; - loop = loop || null; - if (this._anims[name]) { if (this.currentAnim == this._anims[name]) @@ -166,8 +202,12 @@ Phaser.AnimationManager.prototype = { }, /** - * Stop animation. If a name is given that specific animation is stopped, otherwise the current one is stopped. - * Current animation will be automatically set to the stopped one. + * Stop playback of an animation. If a name is given that specific animation is stopped, otherwise the current animation is stopped. + * The currentAnim property of the AnimationManager is automatically set to the animation given. + * + * @method stop + * @param {String} [name=null] The name of the animation to be stopped, e.g. "fire". If none is given the currently running animation is stopped. + * @param {Boolean} [resetFrame=false] When the animation is stopped should the currentFrame be set to the first frame of the animation (true) or paused on the last frame displayed (false) */ stop: function (name, resetFrame) { @@ -192,8 +232,11 @@ Phaser.AnimationManager.prototype = { }, /** - * Update animation and parent sprite's bounds. - * Returns true if a new frame has been set, otherwise false. + * The main update function is called by the Sprites update loop. It's responsible for updating animation frames and firing related events. + * + * @method update + * @protected + * @return {Boolean} True if a new animation frame has been set, otherwise false. */ update: function () { @@ -213,8 +256,10 @@ Phaser.AnimationManager.prototype = { }, - /** - * Removes all related references + /** + * Destroys all references this AnimationManager contains. Sets the _anims to a new object and nulls the current animation. + * + * @method destroy */ destroy: function () { @@ -230,6 +275,10 @@ Phaser.AnimationManager.prototype = { Object.defineProperty(Phaser.AnimationManager.prototype, "frameData", { + /** + * @method frameData + * @return {Phaser.Animation.FrameData} Returns the FrameData of the current animation. + */ get: function () { return this._frameData; } @@ -238,6 +287,10 @@ Object.defineProperty(Phaser.AnimationManager.prototype, "frameData", { Object.defineProperty(Phaser.AnimationManager.prototype, "frameTotal", { + /** + * @method frameTotal + * @return {Number} Returns the total number of frames in the loaded FrameData, or -1 if no FrameData is loaded. + */ get: function () { if (this._frameData) @@ -254,6 +307,10 @@ Object.defineProperty(Phaser.AnimationManager.prototype, "frameTotal", { Object.defineProperty(Phaser.AnimationManager.prototype, "frame", { + /** + * @method frame + * @return {Number} Returns the index of the current frame. + */ get: function () { if (this.currentFrame) @@ -264,8 +321,8 @@ Object.defineProperty(Phaser.AnimationManager.prototype, "frame", { }, /** - * - * @param value + * @method frame + * @param {Number} value Sets the current frame on the Sprite and updates the texture cache for display. */ set: function (value) { @@ -283,6 +340,10 @@ Object.defineProperty(Phaser.AnimationManager.prototype, "frame", { Object.defineProperty(Phaser.AnimationManager.prototype, "frameName", { + /** + * @method frameName + * @return {String} Returns the name of the current frame if it has one. + */ get: function () { if (this.currentFrame) @@ -292,6 +353,10 @@ Object.defineProperty(Phaser.AnimationManager.prototype, "frameName", { }, + /** + * @method frameName + * @param {String} value Sets the current frame on the Sprite and updates the texture cache for display. + */ set: function (value) { if (this._frameData && this._frameData.getFrameByName(value)) diff --git a/src/animation/Frame.js b/src/animation/Frame.js index 649b7ff9..35132c13 100644 --- a/src/animation/Frame.js +++ b/src/animation/Frame.js @@ -1,123 +1,181 @@ /** -* Frame -* +* @author Richard Davey +* @copyright 2013 Photon Storm Ltd. +* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @module Phaser.Animation +*/ + +/** * A Frame is a single frame of an animation and is part of a FrameData collection. * -* @package Phaser.Animation.Frame -* @author Richard Davey -* @copyright 2013 Photon Storm Ltd. -* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @class Frame +* @constructor +* @param {Number} index The index of this Frame within the FrameData set it is being added to. +* @param {Number} x X position of the frame within the texture image. +* @param {Number} y Y position of the frame within the texture image. +* @param {Number} width Width of the frame within the texture image. +* @param {Number} height Height of the frame within the texture image. +* @param {String} name The name of the frame. In Texture Atlas data this is usually set to the filename. +* @param {String} uuid Internal UUID key. */ -Phaser.Animation.Frame = function (x, y, width, height, name, uuid) { +Phaser.Animation.Frame = function (index, x, y, width, height, name, uuid) { /** - * X position within the image to cut from. - * @type {number} - */ + * The index of this Frame within the FrameData set it is being added to. + * @property index + * @public + * @type {Number} + */ + this.index = index; + + /** + * X position within the image to cut from. + * @property x + * @public + * @type {Number} + */ this.x = x; /** - * Y position within the image to cut from. - * @type {number} - */ + * Y position within the image to cut from. + * @property y + * @public + * @type {Number} + */ this.y = y; /** - * Width of the frame. - * @type {number} - */ + * Width of the frame. + * @property width + * @public + * @type {Number} + */ this.width = width; /** - * Height of the frame. - * @type {number} - */ + * Height of the frame. + * @property height + * @public + * @type {Number} + */ this.height = height; /** - * center X position within the image to cut from. - * @type {number} - */ - this.centerX = Math.floor(width / 2); - - /** - * center Y position within the image to cut from. - * @type {number} - */ - this.centerY = Math.floor(height / 2); - - /** - * Useful for Sprite Sheets. - * @type {number} - */ - this.index = 0; - - /** - * Useful for Texture Atlas files. (is set to the filename value) - */ + * Useful for Texture Atlas files. (is set to the filename value) + * @property name + * @public + * @type {String} + */ this.name = name; /** - * A link to the PIXI.TextureCache entry - */ + * A link to the PIXI.TextureCache entry + * @property uuid + * @public + * @type {String} + */ this.uuid = uuid; /** - * The distance from the top left to the bottom-right of this Frame. - * @type {number} - */ + * center X position within the image to cut from. + * @property centerX + * @public + * @type {Number} + */ + this.centerX = Math.floor(width / 2); + + /** + * center Y position within the image to cut from. + * @property centerY + * @public + * @type {Number} + */ + this.centerY = Math.floor(height / 2); + + /** + * The distance from the top left to the bottom-right of this Frame. + * @property distance + * @public + * @type {Number} + */ this.distance = Phaser.Math.distance(0, 0, width, height); /** - * Rotated? (not yet implemented) - */ + * Rotated? (not yet implemented) + * @property rotated + * @public + * @type {Boolean} + * @default false + */ this.rotated = false; /** - * Either cw or ccw, rotation is always 90 degrees. - */ + * Either cw or ccw, rotation is always 90 degrees. + * @property rotationDirection + * @public + * @type {String} + * @default "cw" + */ this.rotationDirection = 'cw'; /** - * Was it trimmed when packed? - * @type {bool} - */ + * Was it trimmed when packed? + * @property trimmed + * @public + * @type {Boolean} + */ this.trimmed = false; /** - * Width of the original sprite. - * @type {number} - */ + * Width of the original sprite. + * @property sourceSizeW + * @public + * @type {Number} + */ this.sourceSizeW = width; /** - * Height of the original sprite. - * @type {number} - */ + * Height of the original sprite. + * @property sourceSizeH + * @public + * @type {Number} + */ this.sourceSizeH = height; /** - * X position of the trimmed sprite inside original sprite. - * @type {number} - */ + * X position of the trimmed sprite inside original sprite. + * @property spriteSourceSizeX + * @public + * @type {Number} + * @default 0 + */ this.spriteSourceSizeX = 0; /** - * Y position of the trimmed sprite inside original sprite. - * @type {number} - */ + * Y position of the trimmed sprite inside original sprite. + * @property spriteSourceSizeY + * @public + * @type {Number} + * @default 0 + */ this.spriteSourceSizeY = 0; /** - * Width of the trimmed sprite. - * @type {number} - */ + * Width of the trimmed sprite. + * @property spriteSourceSizeW + * @public + * @type {Number} + * @default 0 + */ this.spriteSourceSizeW = 0; /** - * Height of the trimmed sprite. - * @type {number} - */ + * Height of the trimmed sprite. + * @property spriteSourceSizeH + * @public + * @type {Number} + * @default 0 + */ this.spriteSourceSizeH = 0; }; @@ -125,14 +183,16 @@ Phaser.Animation.Frame = function (x, y, width, height, name, uuid) { Phaser.Animation.Frame.prototype = { /** - * Set trim of the frame. - * @param trimmed {bool} Whether this frame trimmed or not. - * @param actualWidth {number} Actual width of this frame. - * @param actualHeight {number} Actual height of this frame. - * @param destX {number} Destination x position. - * @param destY {number} Destination y position. - * @param destWidth {number} Destination draw width. - * @param destHeight {number} Destination draw height. + * If the frame was trimmed when added to the Texture Atlas this records the trim and source data. + * + * @method setTrim + * @param {Boolean} trimmed If this frame was trimmed or not. + * @param {Number} actualWidth The width of the frame before being trimmed. + * @param {Number} actualHeight The height of the frame before being trimmed. + * @param {Number} destX The destination X position of the trimmed frame for display. + * @param {Number} destY The destination Y position of the trimmed frame for display. + * @param {Number} destWidth The destination width of the trimmed frame for display. + * @param {Number} destHeight The destination height of the trimmed frame for display. */ setTrim: function (trimmed, actualWidth, actualHeight, destX, destY, destWidth, destHeight) { diff --git a/src/animation/FrameData.js b/src/animation/FrameData.js index 7fd09e24..842d6161 100644 --- a/src/animation/FrameData.js +++ b/src/animation/FrameData.js @@ -1,37 +1,45 @@ /** -* FrameData -* +* @author Richard Davey +* @copyright 2013 Photon Storm Ltd. +* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @module Phaser.Animation.FrameData +*/ + +/** * FrameData is a container for Frame objects, which are the internal representation of animation data in Phaser. * -* @package Phaser.Animation.FrameData -* @author Richard Davey -* @copyright 2013 Photon Storm Ltd. -* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @class FrameData +* @constructor */ Phaser.Animation.FrameData = function () { /** - * Local frame container. - * @type {Phaser.Frame[]} - * @private - */ + * Local array of frames. + * @property _frames + * @private + * @type {Array} + */ this._frames = []; /** - * Local frameName<->index container. - * @private - */ + * Local array of frame names for name to index conversions. + * @property _frameNames + * @private + * @type {Array} + */ this._frameNames = []; }; Phaser.Animation.FrameData.prototype = { - /** - * Add a new frame. - * @param frame {Frame} The frame you want to add. - * @return {Frame} The frame you just added. - */ + /** + * Adds a new Frame to this FrameData collection. Typically called by the Animation.Parser and not directly. + * + * @method addFrame + * @param {Phaser.Animation.Frame} frame The frame to add to this FrameData set. + * @return {Phaser.Animation.Frame} The frame that was just added. + */ addFrame: function (frame) { frame.index = this._frames.length; @@ -48,9 +56,11 @@ Phaser.Animation.FrameData.prototype = { }, /** - * Get a frame by its index. - * @param index {number} Index of the frame you want to get. - * @return {Frame} The frame you want. + * Get a Frame by its numerical index. + * + * @method getFrame + * @param {Number} index The index of the frame you want to get. + * @return {Phaser.Animation.Frame} The frame, if found. */ getFrame: function (index) { @@ -63,14 +73,16 @@ Phaser.Animation.FrameData.prototype = { }, - /** - * Get a frame by its name. - * @param name {string} Name of the frame you want to get. - * @return {Frame} The frame you want. - */ + /** + * Get a Frame by its frame name. + * + * @method getFrameByName + * @param {String} name The name of the frame you want to get. + * @return {Phaser.Animation.Frame} The frame, if found. + */ getFrameByName: function (name) { - if (this._frameNames[name] !== '') + if (this._frameNames[name] && this._frameNames[name] !== '') { return this._frames[this._frameNames[name]]; } @@ -79,11 +91,13 @@ Phaser.Animation.FrameData.prototype = { }, - /** - * Check whether there's a frame with given name. - * @param name {string} Name of the frame you want to check. - * @return {bool} True if frame with given name found, otherwise return false. - */ + /** + * Check if there is a Frame with the given name. + * + * @method checkFrameName + * @param {String} name The name of the frame you want to check. + * @return {Boolean} True if the frame is found, otherwise false. + */ checkFrameName: function (name) { if (this._frameNames[name] == null) @@ -96,11 +110,13 @@ Phaser.Animation.FrameData.prototype = { }, /** - * Get ranges of frames in an array. - * @param start {number} Start index of frames you want. - * @param end {number} End index of frames you want. - * @param [output] {Frame[]} result will be added into this array. - * @return {Frame[]} Ranges of specific frames in an array. + * Returns a range of frames based on the given start and end frame indexes and returns them in an Array. + * + * @method getFrameRange + * @param {Number} start The starting frame index. + * @param {Number} end The ending frame index. + * @param {Array} [output] Optional array. If given the results will be appended to the end of this Array. + * @return {Array} An array of Frames between the start and end index values, or an empty array if none were found. */ getFrameRange: function (start, end, output) { @@ -116,37 +132,45 @@ Phaser.Animation.FrameData.prototype = { }, /** - * Get all indexes of frames by giving their name. - * @param [output] {number[]} result will be added into this array. - * @return {number[]} Indexes of specific frames in an array. + * Returns all of the Frames in this FrameData set where the frame index is found in the input array. + * The frames are returned in the output array, or if none is provided in a new Array object. + * + * @method getFrames + * @param {Array} frames An Array containing the indexes of the frames to retrieve. If the array is empty then all frames in the FrameData are returned. + * @param {Boolean} [useNumericIndex=true] Are the given frames using numeric indexes (default) or strings? (false) + * @param {Array} [output] Optional array. If given the results will be appended to the end of this Array, otherwise a new array is created. + * @return {Array} An array of all Frames in this FrameData set matching the given names or IDs. */ - getFrameIndexes: function (output) { + getFrames: function (frames, useNumericIndex, output) { + if (typeof useNumericIndex === "undefined") { useNumericIndex = true; } if (typeof output === "undefined") { output = []; } - for (var i = 0; i < this._frames.length; i++) + if (typeof frames === "undefined" || frames.length == 0) { - output.push(i); - } - - return output; - - }, - - /** - * Get the frame indexes by giving the frame names. - * @param [output] {number[]} result will be added into this array. - * @return {number[]} Names of specific frames in an array. - */ - getFrameIndexesByName: function (input) { - - var output = []; - - for (var i = 0; i < input.length; i++) - { - if (this.getFrameByName(input[i])) + // No input array, so we loop through all frames + for (var i = 0; i < this._frames.length; i++) { - output.push(this.getFrameByName(input[i]).index); + // We only need the indexes + output.push(this._frames[i]); + } + } + else + { + // Input array given, loop through that instead + for (var i = 0, len = frames.length; i < len; i++) + { + // Does the input array contain names or indexes? + if (useNumericIndex) + { + // The actual frame + output.push(this.getFrame(input[i])); + } + else + { + // The actual frame + output.push(this.getFrameByName(input[i])); + } } } @@ -154,35 +178,60 @@ Phaser.Animation.FrameData.prototype = { }, - /** - * Get all frames in this frame data. - * @return {Frame[]} All the frames in an array. - */ - getAllFrames: function () { - return this._frames; - }, + /** + * Returns all of the Frame indexes in this FrameData set. + * The frames indexes are returned in the output array, or if none is provided in a new Array object. + * + * @method getFrameIndexes + * @param {Array} frames An Array containing the indexes of the frames to retrieve. If the array is empty then all frames in the FrameData are returned. + * @param {Boolean} [useNumericIndex=true] Are the given frames using numeric indexes (default) or strings? (false) + * @param {Array} [output] Optional array. If given the results will be appended to the end of this Array, otherwise a new array is created. + * @return {Array} An array of all Frame indexes matching the given names or IDs. + */ + getFrameIndexes: function (input, useNumericIndex, output) { - /** - * Get All frames with specific ranges. - * @param range {number[]} Ranges in an array. - * @return {Frame[]} All frames in an array. - */ - getFrames: function (range) { + if (typeof useNumericIndex === "undefined") { useNumericIndex = true; } + if (typeof output === "undefined") { output = []; } - var output = []; - - for (var i = 0; i < range.length; i++) + if (typeof frames === "undefined" || frames.length == 0) { - output.push(this._frames[i]); + // No input array, so we loop through all frames + for (var i = 0, len = this._frames.length; i < len; i++) + { + output.push(this._frames[i].index); + } + } + else + { + // Input array given, loop through that instead + for (var i = 0, len = input.length; i < len; i++) + { + // Does the input array contain names or indexes? + if (useNumericIndex) + { + output.push(input[i].index); + } + else + { + output.push(this.getFrameByName(input[i]).index); + } + } } return output; + } }; Object.defineProperty(Phaser.Animation.FrameData.prototype, "total", { + /** + * Returns the total number of frames in this FrameData set. + * + * @method total + * @return {Number} The total number of frames in this FrameData set. + */ get: function () { return this._frames.length; } diff --git a/src/animation/Parser.js b/src/animation/Parser.js index fafe3cb9..68a6e89d 100644 --- a/src/animation/Parser.js +++ b/src/animation/Parser.js @@ -1,23 +1,25 @@ /** -* Animation Parser -* * Responsible for parsing sprite sheet and JSON data into the internal FrameData format that Phaser uses for animations. * -* @package Phaser.Animation.Parser -* @author Richard Davey -* @copyright 2013 Photon Storm Ltd. -* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @author Richard Davey +* @copyright 2013 Photon Storm Ltd. +* @license https://github.com/photonstorm/phaser/blob/master/license.txt MIT License +* @module Phaser.Animation */ + Phaser.Animation.Parser = { - /** - * Parse a sprite sheet from asset data. - * @param key {string} Asset key for the sprite sheet data. - * @param frameWidth {number} Width of animation frame. - * @param frameHeight {number} Height of animation frame. - * @param frameMax {number} Number of animation frames. - * @return {FrameData} Generated FrameData object. - */ + /** + * Parse a Sprite Sheet and extract the animation frame data from it. + * + * @method spriteSheet + * @param {Phaser.Game} game A reference to the currently running game. + * @param {String} key The Game.Cache asset key of the Sprite Sheet image. + * @param {Number} frameWidth The fixed width of each frame of the animation. + * @param {Number} frameHeight The fixed height of each frame of the animation. + * @param {Number} [frameMax=-1] The total number of animation frames to extact from the Sprite Sheet. The default value of -1 means "extract all frames". + * @return {Phaser.Animation.FrameData} A FrameData object containing the parsed frames. + */ spriteSheet: function (game, key, frameWidth, frameHeight, frameMax) { // How big is our image? @@ -55,7 +57,7 @@ Phaser.Animation.Parser = { { var uuid = game.rnd.uuid(); - data.addFrame(new Phaser.Animation.Frame(x, y, frameWidth, frameHeight, '', uuid)); + data.addFrame(new Phaser.Animation.Frame(i, x, y, frameWidth, frameHeight, '', uuid)); PIXI.TextureCache[uuid] = new PIXI.Texture(PIXI.BaseTextureCache[key], { x: x, @@ -78,9 +80,13 @@ Phaser.Animation.Parser = { }, /** - * Parse frame data from json texture atlas in Array format. - * @param json {object} Json data you want to parse. - * @return {FrameData} Generated FrameData object. + * Parse the JSON data and extract the animation frame data from it. + * + * @method JSONData + * @param {Phaser.Game} game A reference to the currently running game. + * @param {Object} json The JSON data from the Texture Atlas. Must be in Array format. + * @param {String} cacheKey The Game.Cache asset key of the texture image. + * @return {Phaser.Animation.FrameData} A FrameData object containing the parsed frames. */ JSONData: function (game, json, cacheKey) { @@ -104,6 +110,7 @@ Phaser.Animation.Parser = { var uuid = game.rnd.uuid(); newFrame = data.addFrame(new Phaser.Animation.Frame( + i, frames[i].frame.x, frames[i].frame.y, frames[i].frame.w, @@ -141,9 +148,13 @@ Phaser.Animation.Parser = { }, /** - * Parse frame data from json texture atlas in Hash format. - * @param json {object} Json data you want to parse. - * @return {FrameData} Generated FrameData object. + * Parse the JSON data and extract the animation frame data from it. + * + * @method JSONDataHash + * @param {Phaser.Game} game A reference to the currently running game. + * @param {Object} json The JSON data from the Texture Atlas. Must be in JSON Hash format. + * @param {String} cacheKey The Game.Cache asset key of the texture image. + * @return {Phaser.Animation.FrameData} A FrameData object containing the parsed frames. */ JSONDataHash: function (game, json, cacheKey) { @@ -161,13 +172,14 @@ Phaser.Animation.Parser = { // By this stage frames is a fully parsed array var frames = json['frames']; var newFrame; + var i = 0; for (var key in frames) { - console.log(key); var uuid = game.rnd.uuid(); newFrame = data.addFrame(new Phaser.Animation.Frame( + i, frames[key].frame.x, frames[key].frame.y, frames[key].frame.w, @@ -198,6 +210,8 @@ Phaser.Animation.Parser = { PIXI.TextureCache[uuid].realSize = frames[key].spriteSourceSize; PIXI.TextureCache[uuid].trim.x = 0; } + + i++; } return data; @@ -205,9 +219,13 @@ Phaser.Animation.Parser = { }, /** - * Parse frame data from an XML file. - * @param xml {object} XML data you want to parse. - * @return {FrameData} Generated FrameData object. + * Parse the XML data and extract the animation frame data from it. + * + * @method XMLData + * @param {Phaser.Game} game A reference to the currently running game. + * @param {Object} xml The XML data from the Texture Atlas. Must be in Starling XML format. + * @param {String} cacheKey The Game.Cache asset key of the texture image. + * @return {Phaser.Animation.FrameData} A FrameData object containing the parsed frames. */ XMLData: function (game, xml, cacheKey) { @@ -230,6 +248,7 @@ Phaser.Animation.Parser = { var frame = frames[i].attributes; newFrame = data.addFrame(new Phaser.Animation.Frame( + i, frame.x.nodeValue, frame.y.nodeValue, frame.width.nodeValue, diff --git a/src/core/StateManager.js b/src/core/StateManager.js index fc653d30..1a104afb 100644 --- a/src/core/StateManager.js +++ b/src/core/StateManager.js @@ -361,8 +361,8 @@ Phaser.StateManager.prototype = { if (this._created == false && this.onCreateCallback) { // console.log('Create callback found'); - this.onCreateCallback.call(this.callbackContext); this._created = true; + this.onCreateCallback.call(this.callbackContext); } }, diff --git a/src/gameobjects/BitmapText.js b/src/gameobjects/BitmapText.js index 74882418..ea73b007 100644 --- a/src/gameobjects/BitmapText.js +++ b/src/gameobjects/BitmapText.js @@ -19,10 +19,13 @@ Phaser.BitmapText = function (game, x, y, text, style) { PIXI.BitmapText.call(this, text, style); + this.type = Phaser.BITMAPTEXT; + this.position.x = x; this.position.y = y; // Replaces the PIXI.Point with a slightly more flexible one + this.anchor = new Phaser.Point(); this.scale = new Phaser.Point(1, 1); // Influence of camera movement upon the position @@ -51,11 +54,10 @@ Phaser.BitmapText = function (game, x, y, text, style) { }; -Phaser.BitmapText.prototype = Phaser.Utils.extend(true, PIXI.BitmapText.prototype); +Phaser.BitmapText.prototype = Object.create(PIXI.BitmapText.prototype); +// Phaser.BitmapText.prototype = Phaser.Utils.extend(true, PIXI.BitmapText.prototype); Phaser.BitmapText.prototype.constructor = Phaser.BitmapText; -// Add our own custom methods - /** * Automatically called by World.update */ diff --git a/src/gameobjects/Text.js b/src/gameobjects/Text.js index 110fcf8c..b919dffa 100644 --- a/src/gameobjects/Text.js +++ b/src/gameobjects/Text.js @@ -5,31 +5,112 @@ Phaser.Text = function (game, x, y, text, style) { text = text || ''; style = style || ''; + // If exists = false then the Sprite isn't updated by the core game loop or physics subsystem at all + this.exists = true; + + // This is a handy little var your game can use to determine if a sprite is alive or not, it doesn't effect rendering + this.alive = true; + + this.group = null; + + this.name = ''; + + this.game = game; + PIXI.Text.call(this, text, style); - /* - this.canvas = document.createElement("canvas"); - this.context = this.canvas.getContext("2d"); - - var canvasID = game.rnd.uuid(); - - PIXI.TextureCache[canvasID] = new PIXI.Texture(new PIXI.BaseTexture(this.canvas)); - - Phaser.Sprite.call(this, game, x, y, canvasID); - this.type = Phaser.TEXT; - this.setText(text); - this.setStyle(style); - - this.updateText(); - this.dirty = false; - */ + this.position.x = x; + this.position.y = y; + + // Replaces the PIXI.Point with a slightly more flexible one + this.anchor = new Phaser.Point(); + this.scale = new Phaser.Point(1, 1); + + // Influence of camera movement upon the position + this.scrollFactor = new Phaser.Point(1, 1); + + // A mini cache for storing all of the calculated values + this._cache = { + + dirty: false, + + // Transform cache + a00: 1, a01: 0, a02: x, a10: 0, a11: 1, a12: y, id: 1, + + // The previous calculated position inc. camera x/y and scrollFactor + x: -1, y: -1, + + // The actual scale values based on the worldTransform + scaleX: 1, scaleY: 1 + + }; + + this._cache.x = this.x - (this.game.world.camera.x * this.scrollFactor.x); + this._cache.y = this.y - (this.game.world.camera.y * this.scrollFactor.y); + + this.renderable = true; }; -// Phaser.Text.prototype = Phaser.Utils.extend(true, Phaser.Sprite.prototype, PIXI.Text.prototype); -Phaser.Text.prototype = Phaser.Utils.extend(true, PIXI.Text.prototype); +Phaser.Text.prototype = Object.create(PIXI.Text.prototype); Phaser.Text.prototype.constructor = Phaser.Text; -// Add our own custom methods +// Automatically called by World.update +Phaser.Text.prototype.update = function() { + + if (!this.exists) + { + return; + } + + this._cache.dirty = false; + + this._cache.x = this.x - (this.game.world.camera.x * this.scrollFactor.x); + this._cache.y = this.y - (this.game.world.camera.y * this.scrollFactor.y); + + if (this.position.x != this._cache.x || this.position.y != this._cache.y) + { + this.position.x = this._cache.x; + this.position.y = this._cache.y; + this._cache.dirty = true; + } + +} + +Object.defineProperty(Phaser.Text.prototype, 'angle', { + + get: function() { + return Phaser.Math.radToDeg(this.rotation); + }, + + set: function(value) { + this.rotation = Phaser.Math.degToRad(value); + } + +}); + +Object.defineProperty(Phaser.Text.prototype, 'x', { + + get: function() { + return this.position.x; + }, + + set: function(value) { + this.position.x = value; + } + +}); + +Object.defineProperty(Phaser.Text.prototype, 'y', { + + get: function() { + return this.position.y; + }, + + set: function(value) { + this.position.y = value; + } + +}); diff --git a/src/utils/Utils.js b/src/utils/Utils.js index 73e704c4..19282111 100644 --- a/src/utils/Utils.js +++ b/src/utils/Utils.js @@ -69,6 +69,9 @@ Phaser.Utils = { // deep, target, objects to copy to the target object // This is a slightly modified version of jQuery.extend (http://api.jquery.com/jQuery.extend/) + // deep (boolean) + // target (object to add to) + // objects ... (objects to recurse and copy from) extend: function () { var options, name, src, copy, copyIsArray, clone,