From 02561173070d66dfe3f05d179b33a3ca9d2cfd81 Mon Sep 17 00:00:00 2001 From: photonstorm Date: Fri, 29 Nov 2013 19:40:28 +0000 Subject: [PATCH 001/154] Preparing dev branch for 1.1.4 --- README.md | 114 ++++++++---------------- changelog.md | 127 +++++++++++++++++++++++++-- examples/_site/js/phaser-examples.js | 2 +- examples/_site/js/phaser-viewer.js | 2 +- examples/_site/view_full.html | 2 +- examples/index.html | 2 +- examples/sideview.html | 2 +- package.json | 2 +- src/IntroDocs.js | 2 +- src/Phaser.js | 2 +- 10 files changed, 164 insertions(+), 93 deletions(-) diff --git a/README.md b/README.md index 3de3b8d4..1d6d0275 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ ![Phaser Logo](http://www.photonstorm.com/wp-content/uploads/2013/09/phaser_10_release.jpg) -Phaser 1.1 -========== +Phaser 1.1.4-dev +================ Phaser is a fast, free and fun open source game framework for making desktop and mobile browser HTML5 games. It uses [Pixi.js](https://github.com/GoodBoyDigital/pixi.js/) internally for fast 2D Canvas and WebGL rendering. -Version: 1.1.3 "Arafel" - Released: November 29th 2013 +Version: 1.1.4 "Kandor" - Released: -in development- By Richard Davey, [Photon Storm](http://www.photonstorm.com) @@ -14,98 +14,51 @@ Follow on [Twitter](https://twitter.com/photonstorm)
Join the [Forum](http://www.html5gamedevs.com/forum/14-phaser/)
Try out 160+ [Phaser Examples](http://gametest.mobi/phaser/examples/) -[Un-official Getting Started with Phaser](http://www.antonoffplus.com/coding-an-html5-game-for-30-minutes-or-an-introduction-to-the-phaser-framework) - [Subscribe to our new Phaser Newsletter](https://confirmsubscription.com/h/r/369DE48E3E86AF1E). We'll email you when new versions are released as well as send you our regular Phaser game making magazine. + Welcome to Phaser ----------------- -It's staggering to think just how much has been achieved in the short time Phaser has been alive. We've implemented literally hundreds of bug fixes and updates, thanks to the effort the community puts in to reporting issues they find. Exciting new features have been merged into the core and we revisited old ones and pimped them out. We also completely overhauled the Examples Suite, removed the requirement for PHP, rebuilt it and filled it with over 150 examples to dig in and learn from. And more importantly we've got our first pass at the API docs ready too. +Over 1000 github stars! Wow! The latest release of Phaser represents another hard months work by the development team and the community at large. We've had some great contributions and have not let-up the pace of innovating and pushing Phaser forward. As we march towards the end of 2013 we do so knowing that with every passing month more and more developers are using Phaser, and more games are being made. All while it is getting stronger with each release. -There is still more to be done of course. The API docs, while a good start, are lacking in places and still need to be backed up with a proper comprehensive manual. And we desperately need to write some 'best practises' and 'getting started' tutorials too. But we hope you appreciate the amount of effort that has been put in by the team so far. +Our plan is to end 2013 with one final point release (1.1.4 - "Kandor") and then we'll start planning out the features we wish to see in version 1.2 in the New Year. -There are many exciting new features and tweaks in this build that we felt it warranted a proper point release, hence the shift to version 1.1. Because of several core changes games that were in development in a 1.0.x version of Phaser may need refactoring for 1.1, but we feel those changes have helped the framework grow and mature as a whole. - -As before we offer a heart-felt "Thank you!" to everyone who has encouraged us along the way. To those of you who worked with Phaser during its various incarnations, and who released full games with it despite there being zero API documentation available: you are our heroes. It's your kind words and enthusiasm that has kept us going. +As always we offer a heart-felt "Thank you!" to everyone who has encouraged us along the way. To those of you who worked with Phaser during its various incarnations, and who released full games with it despite there being zero API documentation available back then: you are our heroes. It's your kind words and enthusiasm that has kept us going. Phaser is everything we ever wanted from an HTML5 game framework. It powers all of our client work in build today and remains our single most important product, and we've only just scratched the surface of what we have planned for it. ![MiniCybernoid](http://www.photonstorm.com/wp-content/uploads/2013/10/phaser-cybernoid-640x480.png) -Getting Started Guide ---------------------- + +Getting Started Guides +---------------------- We have a new [Getting Started Guide](http://phaser.io/getting-started-js.php) which covers all you need to begin developing games with Phaser. From setting up a web server to picking an IDE. If you're new to HTML5 game development (or are coming from another language like AS3) then we recommend starting there. +There is also this great [Un-official Getting Started Guide](http://www.antonoffplus.com/coding-an-html5-game-for-30-minutes-or-an-introduction-to-the-phaser-framework) which is well worth running through as well. + + Change Log ---------- -Version 1.1.3 - "Arafel" - November 29th 2013 +Version 1.1.4 - "Kandor" - In development -* New: Added a .jshintrc so contributions can be run through JSHint to help retain formatting across the library (thanks kevinthompson) -* New: The entire Phaser library has been updated to match the new JSHint configuration. -* New: Added a new in-built texture. Sprites now use __default if no texture was provided (a 32x32 transparent PNG) or __missing if one was given but not found (a 32x32 black box with a green cross through it) -* New: Phaser.Filter. A new way to use the new WebGL shaders/filters that the new version of Pixi supports. -* New: Phaser.BitmapData object. A Canvas you can freely draw to with lots of functions. Can be used as a texture for Sprites. See the new examples and docs for details. -* New: Loader can now load JavaScript files. Just use game.load.script('key', 'url') - the file will be turned into a script tag in the document head on successful load. -* New: RenderTexture.render now takes a Phaser.Group. Also added renderXY for when you don't want to make a new Point object. -* New: Physics.overlap now supports Sprites, Groups or Emitters and can perform group vs. group (etc) overlap checks with a custom callback and process handler. -* New: Added Sound.externalNode which allows you to connect a Sound to an external node input rather than the SoundManager gain node. -* New: Added SoundManager.connectToMaster boolean. Used in conjunction with Sound.externalNode you can easily configure audio nodes to connect together for special effects. -* New: PluginManager.remove, added PluginManager.removeAll (thanks crazysam) -* New: scrollFactorX/scrollFactorY have been added to TilemapLayers (thanks jcd-as) -* New: Phaser.Game parent can now be an HTMLElement or a string (thanks beeglebug) -* New: Now using the latest version of Pixi.js. Which means you can use all the sexy new WebGL filters :) -* New: Sprite.animations.getAnimation will return an animation instance which was added by name. -* New: Added Mouse.button which is set to the button that was pressed: Phaser.Mouse.LEFT_BUTTON, MIDDLE_BUTTON or RIGHT_BUTTON (thanks wKLV) -* New: Added Mouse.pointerLock signal which you can listen to whenever the browser enters or leaves pointer lock mode. -* New: StageScaleMode.forceOrientation allows you to lock your game to one orientation and display a Sprite (i.e. a "please rotate" screen) when incorrect. -* New: World.visible boolean added, toggles rendering of the world on/off entirely. -* New: Polygon class & drawPolygon method added to Graphics (thanks rjimenezda) -* New: Added Group.iterate, a powerful way to count or return children that match a certain criteria. Refactored Group to use iterate, lots of repeated code cut. -* New: Added Group.sort. You can now sort the Group based on any given numeric property (x, y, health), finally you can do depth-sorting :) Example created to show. -* New: Enhanced renderTexture so it can accept a Phaser.Group object and improved documentation and examples. -* New: Device.littleEndian boolean added. Only safe to use if the browser supports TypedArrays (which IE9 doesn't, but nearly all others do) -* New: You can now call game.sound.play() and simply pass it a key. The sound will play if the audio system is unlocked and optionally destroy itself on complete. -* New: Mouse.capture is a boolean. If set to true then DOM mouse events will have event.preventDefault() applied, if false they will propogate fully. -* New: The object returned by Math.sinCosGenerator now contains a length property. +New features: -* Updated: Lots of documentation fixes and updates across nearly all files. Tilemap now documented for example and lots of instances of 'Description' filled out. -* Updated: ArcadePhysics.updateMotion applies the dt to the velocity calculations as well as position now (thanks jcs) -* Updated: RequestAnimationFrame now retains the callbackID which is passed to cancelRequestAnimationFrame. -* Updated: Button now goes back to over state when setFrames used in action (thanks beeglebug) -* Updated: plugins now have a postUpdate callback (thanks cocoademon) -* Updated: Tided up the Graphics object (thanks BorisKozo) -* Updated: If running in Canvas mode and you have a render function it will save the context and reset the transform before running your render function. -* Updated: Sprite will now check the exists property of the Group it is in, if the Group.exists = false the Sprite won't update. -* Updated: If you specify 'null' as a Group parent it will now revert to using the World as the parent (before only 'undefined' worked) -* Updated: Skip preupdate/update for PIXI hierarchies in which an ancestor doesn't exist (thanks cocoademon) -* Updated: Loader.audio can now accept either an array of URL strings or a single URL string (thanks crazysam + kevinthompson) -* Updated: MSPointer updated to support IE11 by dropping the prefix from the event listeners. -* Updated: Device.cocoonJS added to detect if the game is running under Cocoon or a native browser. -* Updated: Loader now uses a new queue system internally, meaning you can have assets with the same key spread across different types. +* TBC -* Fixed: Lots of fixes to the TypeScript definitions file (many thanks gltovar) -* Fixed: Tilemap commands use specified layer when one given (thanks Izzimach) -* Fixed: Mouse.stop now uses the true useCapture, which means the event listeners stop listening correctly (thanks beeglebug) -* Fixed: Input Keyboard example fix (thanks Atrodilla) -* Fixed: BitmapText.destroy now checks if it has a canvas before calling parentNode on it. -* Fixed: Group.swap had a hellish to find bug that only manifested when B-A upward swaps occured. Hours of debugging later = bug crushed. -* Fixed: Point.rotate asDegrees fixed (thanks BorisKozo) -* Fixed: ArcadePhysics.separateTile wasn't returning the value, so the custom process callback wasn't getting called (thanks flameiguana) -* Fixed: StageScaleMode.forceOrientation now correctly stores the forcePortrait value (thanks haden) -* Fixed: Fixes to Math and Loader (thanks theJare) -* Fixed: Tween - isRunning not reset when non-looped tween completes (thanks crazysam + kevinthompson) -* Fixed: Math.normalizeAngle and Math.wrapAngle (thanks theJare) -* Fixed: Device.isTouch modified to test maxTouchPointers instead of MSPointer. -* Fixed: InputHandler.checkPointerOver now checks the visible status of the Sprite Group before processing. -* Fixed: The Sprite hulls (used for tile collision) were not being updated in sprite->sprite separations (thanks jcs) -* Fixed: Plugins that had a postUpdate but no Update weren't being marked as active (thanks crazysam) -* Fixed: StateManager.onPausedCallback function is not called when the game is paused (thanks haden) -* Fixed: Fix for 'jitter' in scrolling where tilemaps & sprites are one frame off (thanks jcs) +Updates: + +* TBC + +Bug Fixes: + +* TBC + + +You can view the Change Log for all previous versions at https://github.com/photonstorm/phaser/changelog.md -You can view the complete Change Log for all previous versions at https://github.com/photonstorm/phaser/changelog.md How to Build ------------ @@ -118,6 +71,7 @@ Run `grunt` in the phaser folder for a list of command-line options. ![Tanks](http://www.photonstorm.com/wp-content/uploads/2013/10/phaser_tanks-640x480.png) + Requirements ------------ @@ -125,18 +79,19 @@ Games created with Phaser require a modern web browser that supports the canvas For developing with Phaser you can use either a plain-vanilla JavaScript approach or [TypeScript](https://typescript.codeplex.com/) using the provided TypeScript definitions file. We made no assumptions about how you like to code your games, and were careful not to impose any form of class/inheritance/structure upon you. -Phaser is 281 KB minified and 66 KB gzipped. +Phaser is 321 KB minified and 72 KB gzipped. + Features -------- **WebGL & Canvas** -Phaser uses both a Canvas and WebGL renderer internally and can automatically swap between them based on browser support. This allows for lightning fast rendering across Desktop and Mobile. Phaser uses and contributes towards the excellent Pixi.js library for rendering. +Phaser uses both a Canvas and WebGL renderer internally and can automatically swap between them based on browser support. This allows for lightning fast rendering across Desktop and Mobile. When running under WebGL Phaser now supports shaders, allowing for some incredible in-game effects. Phaser uses and contributes towards the excellent Pixi.js library for rendering. **Preloader** -We've made the loading of assets as simple as one line of code. Images, Sounds, Sprite Sheets, Tilemaps, JSON data, XML - all parsed and handled automatically, ready for use in game and stored in a global Cache for Sprites to share. +We've made the loading of assets as simple as one line of code. Images, Sounds, Sprite Sheets, Tilemaps, JSON data, XML and JavaScrtip files - all parsed and handled automatically, ready for use in game and stored in a global Cache for Sprites to share. **Physics** @@ -197,6 +152,7 @@ Although Phaser 1.0 is a brand new release it is born from years of experience b ![FruitParty](http://www.photonstorm.com/wp-content/uploads/2013/10/phaser_fruit_particles-640x480.png) + Road Map -------- @@ -227,6 +183,7 @@ Version 1.2+ * Create more touch input examples (http://www.html5gamedevs.com/topic/1556-mobile-touch-event/) * Look at HiDPI Canvas settings. + Learn By Example ---------------- @@ -244,6 +201,7 @@ There is a new 'Side View' example viewer as well. This loads all the examples i You can also browse all [Phaser Examples](http://gametest.mobi/phaser/) online. + Contributing ------------ @@ -255,6 +213,7 @@ You can do this on the Phaser board that is part of the [HTML5 Game Devs forum]( Before submitting a pull request, please run your code through [JSHint](http://www.jshint.com/) to check for stylistic or formatting errors. To use JSHint, first install it by running `npm install jshint`, then test your code by running `jshint src`. This isn't a requirement, we are happy to receive pull requests that haven't been JSHinted, so don't let it put you off contributing - but do know that we'll reformat your source before going live with it. + Bugs? ----- @@ -264,10 +223,11 @@ Please add them to the [Issue Tracker][1] with as much info as possible, especia "Being negative is not how we make progress" - Larry Page, Google + License ------- -Phaser is released under the (http://opensource.org/licenses/MIT) MIT License. +Phaser is released under the [MIT License](http://opensource.org/licenses/MIT). [1]: https://github.com/photonstorm/phaser/issues [phaser]: https://github.com/photonstorm/phaser diff --git a/changelog.md b/changelog.md index 58ff30ca..b8556ae2 100644 --- a/changelog.md +++ b/changelog.md @@ -1,7 +1,80 @@ Change Log ----------- +========== + +Version 1.1.3 - "Arafel" - November 29th 2013 +--------------------------------------------- + +New features: + +* Phaser.Filter. A new way to use the new WebGL shaders/filters that the new version of Pixi supports. +* Phaser.BitmapData object. A Canvas you can freely draw to with lots of functions. Can be used as a texture for Sprites. See the new examples and docs for details. +* The entire Phaser library has been updated to match the new JSHint configuration. +* Added a .jshintrc so contributions can be run through JSHint to help retain formatting across the library (thanks kevinthompson) +* Added a new in-built texture. Sprites now use __default if no texture was provided (a 32x32 transparent PNG) or __missing if one was given but not found (a 32x32 black box with a green cross through it) +* Loader can now load JavaScript files. Just use game.load.script('key', 'url') - the file will be turned into a script tag in the document head on successful load. +* RenderTexture.render now takes a Phaser.Group. Also added renderXY for when you don't want to make a new Point object. +* Physics.overlap now supports Sprites, Groups or Emitters and can perform group vs. group (etc) overlap checks with a custom callback and process handler. +* Added Sound.externalNode which allows you to connect a Sound to an external node input rather than the SoundManager gain node. +* Added SoundManager.connectToMaster boolean. Used in conjunction with Sound.externalNode you can easily configure audio nodes to connect together for special effects. +* PluginManager.remove, added PluginManager.removeAll (thanks crazysam) +* scrollFactorX/scrollFactorY have been added to TilemapLayers (thanks jcd-as) +* Phaser.Game parent can now be an HTMLElement or a string (thanks beeglebug) +* Now using the latest version of Pixi.js. Which means you can use all the sexy new WebGL filters :) +* Sprite.animations.getAnimation will return an animation instance which was added by name. +* Added Mouse.button which is set to the button that was pressed: Phaser.Mouse.LEFT_BUTTON, MIDDLE_BUTTON or RIGHT_BUTTON (thanks wKLV) +* Added Mouse.pointerLock signal which you can listen to whenever the browser enters or leaves pointer lock mode. +* StageScaleMode.forceOrientation allows you to lock your game to one orientation and display a Sprite (i.e. a "please rotate" screen) when incorrect. +* World.visible boolean added, toggles rendering of the world on/off entirely. +* Polygon class & drawPolygon method added to Graphics (thanks rjimenezda) +* Added Group.iterate, a powerful way to count or return children that match a certain criteria. Refactored Group to use iterate, lots of repeated code cut. +* Added Group.sort. You can now sort the Group based on any given numeric property (x, y, health), finally you can do depth-sorting :) Example created to show. +* Enhanced renderTexture so it can accept a Phaser.Group object and improved documentation and examples. +* Device.littleEndian boolean added. Only safe to use if the browser supports TypedArrays (which IE9 doesn't, but nearly all others do) +* You can now call game.sound.play() and simply pass it a key. The sound will play if the audio system is unlocked and optionally destroy itself on complete. +* Mouse.capture is a boolean. If set to true then DOM mouse events will have event.preventDefault() applied, if false they will propogate fully. +* The object returned by Math.sinCosGenerator now contains a length property. + +Updates: + +* Lots of documentation fixes and updates across nearly all files. Tilemap now documented for example and lots of instances of 'Description' filled out. +* ArcadePhysics.updateMotion applies the dt to the velocity calculations as well as position now (thanks jcs) +* RequestAnimationFrame now retains the callbackID which is passed to cancelRequestAnimationFrame. +* Button now goes back to over state when setFrames used in action (thanks beeglebug) +* plugins now have a postUpdate callback (thanks cocoademon) +* Tided up the Graphics object (thanks BorisKozo) +* If running in Canvas mode and you have a render function it will save the context and reset the transform before running your render function. +* Sprite will now check the exists property of the Group it is in, if the Group.exists = false the Sprite won't update. +* If you specify 'null' as a Group parent it will now revert to using the World as the parent (before only 'undefined' worked) +* Skip preupdate/update for PIXI hierarchies in which an ancestor doesn't exist (thanks cocoademon) +* Loader.audio can now accept either an array of URL strings or a single URL string (thanks crazysam + kevinthompson) +* MSPointer updated to support IE11 by dropping the prefix from the event listeners. +* Device.cocoonJS added to detect if the game is running under Cocoon or a native browser. +* Loader now uses a new queue system internally, meaning you can have assets with the same key spread across different types. + +Bug Fixes: + +* Lots of fixes to the TypeScript definitions file (many thanks gltovar) +* Tilemap commands use specified layer when one given (thanks Izzimach) +* Mouse.stop now uses the true useCapture, which means the event listeners stop listening correctly (thanks beeglebug) +* Input Keyboard example fix (thanks Atrodilla) +* BitmapText.destroy now checks if it has a canvas before calling parentNode on it. +* Group.swap had a hellish to find bug that only manifested when B-A upward swaps occured. Hours of debugging later = bug crushed. +* Point.rotate asDegrees fixed (thanks BorisKozo) +* ArcadePhysics.separateTile wasn't returning the value, so the custom process callback wasn't getting called (thanks flameiguana) +* StageScaleMode.forceOrientation now correctly stores the forcePortrait value (thanks haden) +* Fixes to Math and Loader (thanks theJare) +* Tween - isRunning not reset when non-looped tween completes (thanks crazysam + kevinthompson) +* Math.normalizeAngle and Math.wrapAngle (thanks theJare) +* Device.isTouch modified to test maxTouchPointers instead of MSPointer. +* InputHandler.checkPointerOver now checks the visible status of the Sprite Group before processing. +* The Sprite hulls (used for tile collision) were not being updated in sprite->sprite separations (thanks jcs) +* Plugins that had a postUpdate but no Update weren't being marked as active (thanks crazysam) +* StateManager.onPausedCallback function is not called when the game is paused (thanks haden) +* Fix for 'jitter' in scrolling where tilemaps & sprites are one frame off (thanks jcs) + Version 1.1.2 - November 1st 2013 +--------------------------------- * New: You'll now find a complete Basic project Template in the resources/Project Templates folder. Will add more complex ones soon. * New: Phaser.Button now has the ability to set over/out/up/down sound effects so they play automatically based on those events. @@ -33,12 +106,16 @@ Version 1.1.2 - November 1st 2013 * Fixed issue 88 - Incorrect game.input.x/y values on click with scaled stage (thanks DrHackenstein) * Fixed issue 143 - Entering full screen mode made the Input x/y coordinates go wrong. + Version 1.1.1 - October 26th 2013 +--------------------------------- * Quick patch to get Phaser.AUTO working again on Firefox / Android. * Any key added via addKey now automatically adds it to the capture list. + Version 1.1 - October 25th 2013 +------------------------------- What's New: @@ -164,7 +241,9 @@ What has been fixed: * Game.destroy will now stop the raf from running as well as close down all input related event listeners (issue 92, thanks astrism) * Pixel Perfect click detection now works even if the Sprite is part of a texture atlas. -Version 1.0.6 (September 24th 2013) + +Version 1.0.6 - September 24th 2013 +----------------------------------- * Added check into Pointer.move to always consider a Sprite that has pixelPerfect enabled, regardless of render ID. * BUG: The pixel perfect click check doesn't work if the sprite is part of a texture atlas yet. @@ -180,7 +259,9 @@ Version 1.0.6 (September 24th 2013) * Added time smoothing to Animation update to help frames hopefully not get too out of sync during long animations with high frame rates. * Added frame skip to Animation.update. If it gets too far behind it will now skip frames to try and catch up. -Version 1.0.5 (September 20th 2013) + +Version 1.0.5 - September 20th 2013 +----------------------------------- * Fixed issue in FrameData.getFrameIndexes where the input array was being ignored. * Added Math.numberArray - Returns an Array containing the numbers from min to max (inclusive), useful for animation frame construction. @@ -199,7 +280,9 @@ Version 1.0.5 (September 20th 2013) * Updated Sprite.update to set renderable to false when the object goes out of Camera, not 'visible' false, otherwise it stops the transform being updated by Pixi. * BUG: There is a known issue where the wrong rect coordinates are given to the QuadTree if the Sprite is a child of a Group or another Sprite which has an x/y offset. -Version 1.0.4 (September 18th 2013) + +Version 1.0.4 - September 18th 2013 +----------------------------------- * Small fix to Phaser.Canvas to stop it from setting overflow hidden if the parent DOM element doesn't exist. * Added Loader.setPreloadSprite(sprite, direction) - this will automatically apply a crop rect to the Sprite which is updated in line with the load progress. @@ -210,7 +293,9 @@ Version 1.0.4 (September 18th 2013) * Fixed issue in Sprite where boundsY wasn't set (thanks Cameron) * For some reason there were 2 copies of the Canvas class in the build file - fixed, a few KB saved :) -Version 1.0.3 (September 17th 2013) + +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. @@ -218,7 +303,9 @@ Version 1.0.3 (September 17th 2013) * 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) + +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. @@ -230,7 +317,9 @@ Version 1.0.2 (September 16th 2013) * Added in the start of a Breakout game * Added in the start of a Platformer game -Version 1.0.1 (September 15th 2013) + +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. @@ -238,7 +327,9 @@ Version 1.0.1 (September 15th 2013) * Fixed the license in package.json * Fixed a logic bug in the separateTileX function that would sometimes cause tunneling of big sprites through small tiles. + Version 0.9.8 +------------- * Massive refactoring across the entire codebase. * Removed Basic and GameObject and put Sprite on a diet. 127 properties and methods cut down to 32. @@ -347,6 +438,7 @@ Version 0.9.8 Version 0.9.6 +------------- * Virtually every class now has documentation - if you spot a typo or something missing please shout (thanks pixelpicosean). * Grunt file updated to produce the new Special FX JS file (thanks HackManiac). @@ -434,7 +526,9 @@ Version 0.9.6 * Added the GameObjectFactory to Phaser.State * Added new format parameter to Loader.addTextureAtlas defining the format. Currently supported: JSON Array and Starling/Sparrow XML. + Version 0.9.5 +------------- * Moved the BootScreen and PauseScreen out of Stage into their own classes (system/screens/BootScreen and PauseScreen). * Updated the PauseScreen to show a subtle animation effect, making it easier to create your own interesting pause screens. @@ -468,7 +562,9 @@ Version 0.9.5 * Added fun new "map draw" test - rebound those carrots! :) * Changed SoundManager class to respect volume on first play (thanks initials and hackmaniac) + Version 0.9.4 +-------------- * Added Tilemap.getTile, getTileFromWorldXY, getTileFromInputXY * Added Tilemap.setCollisionByIndex and setCollisionByRange @@ -480,7 +576,9 @@ Version 0.9.4 * Fixed: Circle.isEmpty properly checks diameter (thanks bapuna) * Updated Gruntfile to export new version of phaser.js wrapped in a UMD block for require.js/commonJS (thanks Hackmaniac) -V0.9.3 + +Version 0.9.3 +------------- * Added the new ScrollZone game object. Endlessly useful but especially for scrolling backdrops. Created 6 example tests. * Added GameObject.hideFromCamera(cameraID) to stop an object rendering to specific cameras (also showToCamera and clearCameraList) @@ -498,7 +596,9 @@ V0.9.3 * Removed the need for DynamicTextures to require a key property and updated test cases. * You can now pass an array or a single value to Input.Keyboard.addKeyCapture(). + Version 0.9.2 +------------- * Fixed issue with create not being called if there was an empty init method. * Added ability to flip a sprite (Sprite.flipped = true) + a test case for it. @@ -506,7 +606,9 @@ Version 0.9.2 * Sprite animations don't restart if you call play on them when they are already running. * Added Stage.disablePauseScreen. Set to true to stop your game pausing when the tab loses focus. + Version 0.9.1 +------------- * Added the new align property to GameObjects that controls placement when rendering. * Added an align example to the Sprites test group (click the mouse to change alignment position) @@ -517,6 +619,7 @@ for new collision system. * Updated the States examples to bring in-line with 0.9 release. Version 0.9 +----------- * Large refactoring. Everything now lives inside the Phaser module, so all code and all tests have been updated to reflect this. Makes coding a tiny bit more verbose but stops the framework from globbing up the global namespace. Also should make code-insight work in WebStorm and similar editors. * Added the new GeomSprite object. This is a sprite that uses a geometry class for display (Circle, Rectangle, Point, Line). It's extremely flexible! @@ -527,27 +630,35 @@ Version 0.9 * Added new Motion class which contains lots of handy functions like 'moveTowardsObject', 'velocityFromAngle' and more. * Tween Manager added. You can now create tweens via Game.createTween (or for more control game.tweens). All the usual suspects are here: Bounce, * Elastic, Quintic, etc and it's hooked into the core game clock, so if your game pauses and resumes your tweens adjust accordingly. + Version 0.8 +----------- * Added ability to set Sprite frame by name (sprite.frameName), useful when you've loaded a Texture Atlas with filename values set rather than using frame indexes. * Updated texture atlas 4 demo to show this. * Fixed a bug that would cause a run-time error if you tried to create a sprite using an invalid texture key. * Added in DynamicTexture support and a test case for it. + Version 0.7 +----------- * Renamed FullScreen to StageScaleMode as it's much more fitting. Tested across Android and iOS with the various scale modes. * Added in world x/y coordinates to the input class, and the ability to get world x/y input coordinates from any Camera. * Added the RandomDataGenerator for seeded random number generation. * Setting the game world size now resizes the default camera (optional bool flag) + Version 0.6 +----------- * Added in Touch support for mobile devices (and desktops that enable it) and populated x/y coords in Input with common values from touch and mouse. * Added new Circle geometry class (used by Touch) and moved them into a Geom folder. * Added in Device class for device inspection. * Added FullScreen class to enable full-screen support on mobile devices (scrolls URL bar out of the way on iOS and Android) + Version 0.5 +----------- * Initial release diff --git a/examples/_site/js/phaser-examples.js b/examples/_site/js/phaser-examples.js index 51c7587a..d82363e0 100644 --- a/examples/_site/js/phaser-examples.js +++ b/examples/_site/js/phaser-examples.js @@ -95,7 +95,7 @@ $(document).ready(function(){ .done(function(data) { - if (data.version !== '1.1.3') + if (data.version !== '1.1.4') { $("#upgrade").append(data.version); $("#upgrade").css('display', 'inline-block'); diff --git a/examples/_site/js/phaser-viewer.js b/examples/_site/js/phaser-viewer.js index 6b154048..bc57fe0a 100644 --- a/examples/_site/js/phaser-viewer.js +++ b/examples/_site/js/phaser-viewer.js @@ -58,7 +58,7 @@ $(document).ready(function(){ .done(function(data) { - if (data.version !== '1.1.3') + if (data.version !== '1.1.4') { $("#upgrade").append(data.version); $("#upgrade").css('display', 'inline-block'); diff --git a/examples/_site/view_full.html b/examples/_site/view_full.html index 931c65a0..3b1ee5ef 100644 --- a/examples/_site/view_full.html +++ b/examples/_site/view_full.html @@ -156,7 +156,7 @@
- Phaser Version: 1.1.3 + Phaser Version: 1.1.4 New version:
diff --git a/examples/index.html b/examples/index.html index e6d47fa1..00ac901a 100644 --- a/examples/index.html +++ b/examples/index.html @@ -12,7 +12,7 @@
- Phaser Version: 1.1.3 + Phaser Version: 1.1.4 New version:
diff --git a/examples/sideview.html b/examples/sideview.html index 8861fd44..64e2601c 100644 --- a/examples/sideview.html +++ b/examples/sideview.html @@ -19,7 +19,7 @@
diff --git a/package.json b/package.json index e8eab2d6..c3c07166 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Phaser", - "version": "1.1.3", + "version": "1.1.4", "description": "A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers.", "author": "Richard Davey", "logo": "https://raw.github.com/photonstorm/phaser/master/phaser-logo-small.png", diff --git a/src/IntroDocs.js b/src/IntroDocs.js index 323a0f43..531814ed 100644 --- a/src/IntroDocs.js +++ b/src/IntroDocs.js @@ -9,7 +9,7 @@ * * Phaser - http://www.phaser.io * -* v1.1.3 - Released November 28th 2013. +* v1.1.4-dev - Released November 28th 2013. * * By Richard Davey http://www.photonstorm.com @photonstorm * diff --git a/src/Phaser.js b/src/Phaser.js index d726a6eb..4225286d 100644 --- a/src/Phaser.js +++ b/src/Phaser.js @@ -10,7 +10,7 @@ var Phaser = Phaser || { VERSION: '<%= version %>', - DEV_VERSION: '1.1.3', + DEV_VERSION: '1.1.4', GAMES: [], AUTO: 0, From 2b99cb4be4fb9092bda80434027551b6c905809e Mon Sep 17 00:00:00 2001 From: "Josh Shepard (jcs)" Date: Sat, 30 Nov 2013 17:40:24 -0800 Subject: [PATCH 002/154] =?UTF-8?q?move=20TilemapLayer=20positioning/rende?= =?UTF-8?q?ring=20to=20postUpdate=20to=20be=20in=20line=20with=20=E2=80=98?= =?UTF-8?q?normal=E2=80=99=20Sprites.=20reverts=20e91d40b9fcee53c453f8d942?= =?UTF-8?q?53b6fea8014a1087=20-=20fix=20was=20incorrect=20&=20regressed=20?= =?UTF-8?q?fixedToCamera=20Sprites=E2=80=99=20&=20TilemapLayer=20positioni?= =?UTF-8?q?ng.=20Fixes=20#237?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/World.js | 4 ++-- src/tilemap/TilemapLayer.js | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/core/World.js b/src/core/World.js index 61114e23..9ecd1cd9 100644 --- a/src/core/World.js +++ b/src/core/World.js @@ -113,6 +113,8 @@ Phaser.World.prototype.update = function () { */ Phaser.World.prototype.postUpdate = function () { + this.camera.update(); + if (this.game.stage._stage.first._iNext) { var currentNode = this.game.stage._stage.first._iNext; @@ -128,8 +130,6 @@ Phaser.World.prototype.postUpdate = function () { } while (currentNode != this.game.stage._stage.last._iNext) } - - this.camera.update(); } /** diff --git a/src/tilemap/TilemapLayer.js b/src/tilemap/TilemapLayer.js index 5099bcd9..5efcaceb 100644 --- a/src/tilemap/TilemapLayer.js +++ b/src/tilemap/TilemapLayer.js @@ -279,13 +279,15 @@ Phaser.TilemapLayer.prototype = Phaser.Utils.extend(true, Phaser.TilemapLayer.pr Phaser.TilemapLayer.prototype.constructor = Phaser.TilemapLayer; /** -* Automatically called by World.preUpdate. Handles cache updates. +* Automatically called by World.postUpdate. Handles cache updates. * -* @method Phaser.TilemapLayer#update +* @method Phaser.TilemapLayer#postUpdate * @memberof Phaser.TilemapLayer */ -Phaser.TilemapLayer.prototype.update = function () { +Phaser.TilemapLayer.prototype.postUpdate = function () { + Phaser.Sprite.prototype.postUpdate.call( this ); + this.scrollX = this.game.camera.x * this.scrollFactorX; this.scrollY = this.game.camera.y * this.scrollFactorY; From 3bfea2101a38bd12dd803e06b9453bf43b1aeab3 Mon Sep 17 00:00:00 2001 From: photonstorm Date: Sun, 1 Dec 2013 20:59:52 +0000 Subject: [PATCH 003/154] Start of the Dragonfire game sample --- .../assets/sprites/stormlord-dragon96x64.png | Bin 0 -> 9957 bytes examples/assets/wip/karamoon.png | Bin 0 -> 6912 bytes examples/wip/dragonfire.js | 53 ++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 examples/assets/sprites/stormlord-dragon96x64.png create mode 100644 examples/assets/wip/karamoon.png create mode 100644 examples/wip/dragonfire.js diff --git a/examples/assets/sprites/stormlord-dragon96x64.png b/examples/assets/sprites/stormlord-dragon96x64.png new file mode 100644 index 0000000000000000000000000000000000000000..2fbc4a952601c901734700682c992993d7e9352c GIT binary patch literal 9957 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 Date: Tue, 3 Dec 2013 02:13:57 +0000 Subject: [PATCH 004/154] Fixed World.scale and Group.scale. --- README.md | 4 +++- examples/groups/bring a child to top.js | 6 ----- examples/groups/bring a group to top.js | 1 - src/PixiPatch.js | 4 ++-- src/core/Group.js | 7 ++++-- src/core/World.js | 6 +---- src/gameobjects/Sprite.js | 2 -- src/input/InputHandler.js | 32 ------------------------- src/loader/Cache.js | 2 +- src/net/Net.js | 4 ++-- src/pixi/textures/Texture.js | 3 ++- 11 files changed, 16 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index 1d6d0275..fb26e70f 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,9 @@ Updates: Bug Fixes: -* TBC +* Cache.getImageKeys returned __missing in the array, now excluded. +* Fixed Group.scale so you can now scale a Group directly. +* Removed World.scale as it was preventing Group.scale from working - you can still scale the world, but you'll need to factor in Input changes yourself. You can view the Change Log for all previous versions at https://github.com/photonstorm/phaser/changelog.md diff --git a/examples/groups/bring a child to top.js b/examples/groups/bring a child to top.js index 425524ba..de80a920 100644 --- a/examples/groups/bring a child to top.js +++ b/examples/groups/bring a child to top.js @@ -2,12 +2,6 @@ var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: function preload() { - // Enable scaling - game.stage.scaleMode = Phaser.StageScaleMode.SHOW_ALL; - game.stage.scale.maxWidth = 1024; - game.stage.scale.maxHeight = 672; - game.stage.scale.refresh(); - game.load.image('atari1', 'assets/sprites/atari130xe.png'); game.load.image('atari2', 'assets/sprites/atari800xl.png'); game.load.image('atari4', 'assets/sprites/atari800.png'); diff --git a/examples/groups/bring a group to top.js b/examples/groups/bring a group to top.js index 2a67bf2b..2365053c 100644 --- a/examples/groups/bring a group to top.js +++ b/examples/groups/bring a group to top.js @@ -31,7 +31,6 @@ function create() { // Now let's create some random sprites and enable them all for drag and 'bring to top' for (var i = 0; i < 10; i++) { - var tempSprite = game.add.sprite(game.stage.randomX, game.stage.randomY, 'atari1'); tempSprite.name = 'atari' + i; diff --git a/src/PixiPatch.js b/src/PixiPatch.js index 23cd92d2..282dee22 100644 --- a/src/PixiPatch.js +++ b/src/PixiPatch.js @@ -79,8 +79,8 @@ PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) displayObject.texture.frame.y, displayObject.texture.frame.width, displayObject.texture.frame.height, - (displayObject.anchor.x) * -displayObject.texture.frame.width, - (displayObject.anchor.y) * -displayObject.texture.frame.height, + Math.floor((displayObject.anchor.x) * -displayObject.texture.frame.width), + Math.floor((displayObject.anchor.y) * -displayObject.texture.frame.height), displayObject.texture.frame.width, displayObject.texture.frame.height); } diff --git a/src/core/Group.js b/src/core/Group.js index d7bed67c..71b5f8fa 100644 --- a/src/core/Group.js +++ b/src/core/Group.js @@ -77,10 +77,13 @@ Phaser.Group = function (game, parent, name, useStage) { */ this.exists = true; + // Replaces the PIXI.Point with a slightly more flexible one. + this._container.scale = new Phaser.Point(1, 1); + /** - * @property {Phaser.Point} scale - Replaces the PIXI.Point with a slightly more flexible one. + * @property {Phaser.Point} scale - The scane of the Group container. */ - this.scale = new Phaser.Point(1, 1); + this.scale = this._container.scale; /** * The cursor is a simple way to iterate through the objects in a Group using the Group.next and Group.previous functions. diff --git a/src/core/World.js b/src/core/World.js index 9ecd1cd9..9eadf09e 100644 --- a/src/core/World.js +++ b/src/core/World.js @@ -12,6 +12,7 @@ * the world at world-based coordinates. By default a world is created the same size as your Stage. * * @class Phaser.World +* @extends Phaser.Group * @constructor * @param {Phaser.Game} game - Reference to the current game instance. */ @@ -19,11 +20,6 @@ Phaser.World = function (game) { Phaser.Group.call(this, game, null, '__world', false); - /** - * @property {Phaser.Point} scale - Replaces the PIXI.Point with a slightly more flexible one. - */ - this.scale = new Phaser.Point(1, 1); - /** * The World has no fixed size, but it does have a bounds outside of which objects are no longer considered as being "in world" and you should use this to clean-up the display list and purge dead objects. * By default we set the Bounds to be from 0,0 to Game.width,Game.height. I.e. it will match the size given to the game constructor with 0,0 representing the top-left of the display. diff --git a/src/gameobjects/Sprite.js b/src/gameobjects/Sprite.js index be7ab1e9..71cdd228 100644 --- a/src/gameobjects/Sprite.js +++ b/src/gameobjects/Sprite.js @@ -1101,8 +1101,6 @@ Object.defineProperty(Phaser.Sprite.prototype, "inputEnabled", { set: function (value) { - console.log('inputEnabled', value, this.input); - if (value) { if (this.input.enabled === false) diff --git a/src/input/InputHandler.js b/src/input/InputHandler.js index 9bd137ed..01c04ca2 100644 --- a/src/input/InputHandler.js +++ b/src/input/InputHandler.js @@ -28,36 +28,6 @@ Phaser.InputHandler = function (sprite) { */ this.enabled = false; - /** - * @property {Description} parent - Description. - * @default - */ - // this.parent = null; - - /** - * @property {Description} next - Linked List - * @default - */ - // this.next = null; - - /** - * @property {Description} prev - Description. - * @default - */ - // this.prev = null; - - /** - * @property {Description} last - Description. - * @default - */ - // this.last = this; - - /** - * @property {Description} first - Description. - * @default - */ - // this.first = this; - /** * @property {number} priorityID - The PriorityID controls which Sprite receives an Input event first if they should overlap. * @default @@ -199,8 +169,6 @@ Phaser.InputHandler.prototype = { */ start: function (priority, useHandCursor) { - console.log('InputHandler start'); - priority = priority || 0; if (typeof useHandCursor == 'undefined') { useHandCursor = false; } diff --git a/src/loader/Cache.js b/src/loader/Cache.js index ab380a3c..40ce6d0a 100644 --- a/src/loader/Cache.js +++ b/src/loader/Cache.js @@ -745,7 +745,7 @@ Phaser.Cache.prototype = { for (var item in array) { - if (item !== '__default') + if (item !== '__default' && item !== '__missing') { output.push(item); } diff --git a/src/net/Net.js b/src/net/Net.js index b41fb5b6..cb412371 100644 --- a/src/net/Net.js +++ b/src/net/Net.js @@ -128,8 +128,8 @@ Phaser.Net.prototype = { var output = {}; var keyValues = location.search.substring(1).split('&'); - for (var i in keyValues) { - + for (var i in keyValues) + { var key = keyValues[i].split('='); if (key.length > 1) diff --git a/src/pixi/textures/Texture.js b/src/pixi/textures/Texture.js index 11d82a0b..6ac48717 100644 --- a/src/pixi/textures/Texture.js +++ b/src/pixi/textures/Texture.js @@ -115,7 +115,8 @@ PIXI.Texture.prototype.setFrame = function(frame) if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) { - throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + console.log(frame); + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions ", frame); } this.updateFrame = true; From 666df6745302962026bb4ebdf75a6ba0102e52ef Mon Sep 17 00:00:00 2001 From: photonstorm Date: Tue, 3 Dec 2013 20:50:34 +0000 Subject: [PATCH 005/154] Tidying up the wip folder and updating pixi. --- .../wip/{ => filters}/TRSIPlasmaFilter.js | 0 .../wip/{ => filters}/binarySerpentsFilter.js | 0 examples/wip/{ => filters}/c64PlasmaFilter.js | 0 examples/wip/{ => filters}/caustic lights.js | 0 .../wip/{ => filters}/checkerWaveFilter.js | 0 .../wip/{ => filters}/classicTunnelFilter.js | 0 examples/wip/{ => filters}/colorBoxFilter.js | 0 examples/wip/{ => filters}/colorWaveFilter.js | 0 examples/wip/{ => filters}/colorbars_demo.js | 0 .../wip/{ => filters}/deformStarFilter.js | 0 examples/wip/{ => filters}/fakeLenseFilter.js | 0 examples/wip/{ => filters}/filter.js | 0 examples/wip/{ => filters}/fireFilter.js | 0 examples/wip/{ => filters}/fire_demo.js | 0 examples/wip/{ => filters}/flameFilter.js | 0 examples/wip/{ => filters}/flowerFilter.js | 0 .../{ => filters}/fractalRayMarchFilter.js | 0 examples/wip/{ => filters}/heroku.js | 0 .../wip/{ => filters}/hueRotationFilter.js | 0 .../{ => filters}/hypnoticRipplesFilter.js | 0 .../wip/{ => filters}/icosohedronFilter.js | 0 examples/wip/filters/index.php | 109 ++++++++++++++++++ examples/wip/{ => filters}/lightbeam_demo.js | 0 .../wip/{ => filters}/mengerTunnelFilter.js | 0 examples/wip/{ => filters}/metaBallsFilter.js | 0 examples/wip/{ => filters}/mouseStarFilter.js | 0 .../wip/{ => filters}/mysteryVortexFilter.js | 0 .../{ => filters}/planeDeformationFilter.js | 0 examples/wip/{ => filters}/plasma3DFilter.js | 0 .../wip/{ => filters}/plasmaBeamFilter.js | 0 examples/wip/{ => filters}/plasmaFilter.js | 0 .../wip/{ => filters}/plasmaFlowerFilter.js | 0 examples/wip/{ => filters}/plasma_demo.js | 0 .../pulsingInterferenceFilter.js | 0 .../wip/{ => filters}/rayTracedBallsFilter.js | 0 .../wip/{ => filters}/retroPlasmaFilter.js | 0 .../{ => filters}/rotationalFractalsFilter.js | 0 .../wip/{ => filters}/rotoZoomerFilter.js | 0 .../wip/{ => filters}/shadertoy-effect.js | 0 .../wip/{ => filters}/shinyTaffyFilter.js | 0 examples/wip/{ => filters}/sineWaveFilter.js | 0 .../{ => filters}/sineWaveFixedBaseFilter.js | 0 .../wip/{ => filters}/softTunnelFilter.js | 0 .../{ => filters}/spaceRacingLiteFilter.js | 0 examples/wip/{ => filters}/starNestFilter.js | 0 .../wip/{ => filters}/starNurseryFilter.js | 0 examples/wip/{ => filters}/starfieldFilter.js | 0 .../{ => filters}/starsBackgroundFilter.js | 0 examples/wip/{ => filters}/tex00.jpg | Bin examples/wip/{ => filters}/tex01.jpg | Bin examples/wip/{ => filters}/tex02.jpg | Bin examples/wip/{ => filters}/tex03.jpg | Bin examples/wip/{ => filters}/tex04.jpg | Bin examples/wip/{ => filters}/tex05.jpg | Bin examples/wip/{ => filters}/tex06.jpg | Bin examples/wip/{ => filters}/tex07.jpg | Bin examples/wip/{ => filters}/tex08.jpg | Bin examples/wip/{ => filters}/tex09.jpg | Bin examples/wip/{ => filters}/tex10.png | Bin examples/wip/{ => filters}/tex11.png | Bin examples/wip/{ => filters}/tex12.png | Bin examples/wip/{ => filters}/tex14.png | Bin examples/wip/{ => filters}/tex15.png | Bin examples/wip/{ => filters}/tex16.png | Bin .../wip/{ => filters}/trippyLinesFilter.js | 0 examples/wip/{ => filters}/tunnelFilter.js | 0 examples/wip/{ => filters}/tunnel_demo.js | 0 examples/wip/{ => filters}/vortexFilter.js | 0 examples/wip/{ => filters}/wobbleFilter.js | 0 examples/wip/index.php | 2 +- examples/wip/removeFilter.js | 47 ++++++++ examples/wip/template.js | 22 ++++ src/gameobjects/Sprite.js | 7 ++ src/pixi/InteractionManager.js | 2 +- src/pixi/core/Circle.js | 24 ++-- src/pixi/core/Ellipse.js | 32 ++--- src/pixi/display/DisplayObject.js | 20 +++- src/pixi/display/DisplayObjectContainer.js | 7 +- src/pixi/display/Sprite.js | 6 +- src/pixi/extras/Spine.js | 12 +- src/pixi/filters/CrossHatchFilter.js | 8 +- src/pixi/loaders/AssetLoader.js | 24 ++-- src/pixi/loaders/BitmapFontLoader.js | 50 ++++---- src/pixi/loaders/ImageLoader.js | 18 +-- src/pixi/loaders/SpriteSheetLoader.js | 20 ++-- src/pixi/primitives/Graphics.js | 64 +++++----- src/pixi/renderers/webgl/PixiShader.js | 1 + src/pixi/renderers/webgl/WebGLBatch.js | 6 +- .../renderers/webgl/WebGLFilterManager.js | 13 ++- src/pixi/renderers/webgl/WebGLGraphics.js | 2 +- src/pixi/renderers/webgl/WebGLRenderGroup.js | 6 +- src/pixi/renderers/webgl/WebGLRenderer.js | 2 +- src/pixi/textures/BaseTexture.js | 13 +++ src/pixi/textures/Texture.js | 3 +- 94 files changed, 374 insertions(+), 146 deletions(-) rename examples/wip/{ => filters}/TRSIPlasmaFilter.js (100%) rename examples/wip/{ => filters}/binarySerpentsFilter.js (100%) rename examples/wip/{ => filters}/c64PlasmaFilter.js (100%) rename examples/wip/{ => filters}/caustic lights.js (100%) rename examples/wip/{ => filters}/checkerWaveFilter.js (100%) rename examples/wip/{ => filters}/classicTunnelFilter.js (100%) rename examples/wip/{ => filters}/colorBoxFilter.js (100%) rename examples/wip/{ => filters}/colorWaveFilter.js (100%) rename examples/wip/{ => filters}/colorbars_demo.js (100%) rename examples/wip/{ => filters}/deformStarFilter.js (100%) rename examples/wip/{ => filters}/fakeLenseFilter.js (100%) rename examples/wip/{ => filters}/filter.js (100%) rename examples/wip/{ => filters}/fireFilter.js (100%) rename examples/wip/{ => filters}/fire_demo.js (100%) rename examples/wip/{ => filters}/flameFilter.js (100%) rename examples/wip/{ => filters}/flowerFilter.js (100%) rename examples/wip/{ => filters}/fractalRayMarchFilter.js (100%) rename examples/wip/{ => filters}/heroku.js (100%) rename examples/wip/{ => filters}/hueRotationFilter.js (100%) rename examples/wip/{ => filters}/hypnoticRipplesFilter.js (100%) rename examples/wip/{ => filters}/icosohedronFilter.js (100%) create mode 100644 examples/wip/filters/index.php rename examples/wip/{ => filters}/lightbeam_demo.js (100%) rename examples/wip/{ => filters}/mengerTunnelFilter.js (100%) rename examples/wip/{ => filters}/metaBallsFilter.js (100%) rename examples/wip/{ => filters}/mouseStarFilter.js (100%) rename examples/wip/{ => filters}/mysteryVortexFilter.js (100%) rename examples/wip/{ => filters}/planeDeformationFilter.js (100%) rename examples/wip/{ => filters}/plasma3DFilter.js (100%) rename examples/wip/{ => filters}/plasmaBeamFilter.js (100%) rename examples/wip/{ => filters}/plasmaFilter.js (100%) rename examples/wip/{ => filters}/plasmaFlowerFilter.js (100%) rename examples/wip/{ => filters}/plasma_demo.js (100%) rename examples/wip/{ => filters}/pulsingInterferenceFilter.js (100%) rename examples/wip/{ => filters}/rayTracedBallsFilter.js (100%) rename examples/wip/{ => filters}/retroPlasmaFilter.js (100%) rename examples/wip/{ => filters}/rotationalFractalsFilter.js (100%) rename examples/wip/{ => filters}/rotoZoomerFilter.js (100%) rename examples/wip/{ => filters}/shadertoy-effect.js (100%) rename examples/wip/{ => filters}/shinyTaffyFilter.js (100%) rename examples/wip/{ => filters}/sineWaveFilter.js (100%) rename examples/wip/{ => filters}/sineWaveFixedBaseFilter.js (100%) rename examples/wip/{ => filters}/softTunnelFilter.js (100%) rename examples/wip/{ => filters}/spaceRacingLiteFilter.js (100%) rename examples/wip/{ => filters}/starNestFilter.js (100%) rename examples/wip/{ => filters}/starNurseryFilter.js (100%) rename examples/wip/{ => filters}/starfieldFilter.js (100%) rename examples/wip/{ => filters}/starsBackgroundFilter.js (100%) rename examples/wip/{ => filters}/tex00.jpg (100%) rename examples/wip/{ => filters}/tex01.jpg (100%) rename examples/wip/{ => filters}/tex02.jpg (100%) rename examples/wip/{ => filters}/tex03.jpg (100%) rename examples/wip/{ => filters}/tex04.jpg (100%) rename examples/wip/{ => filters}/tex05.jpg (100%) rename examples/wip/{ => filters}/tex06.jpg (100%) rename examples/wip/{ => filters}/tex07.jpg (100%) rename examples/wip/{ => filters}/tex08.jpg (100%) rename examples/wip/{ => filters}/tex09.jpg (100%) rename examples/wip/{ => filters}/tex10.png (100%) rename examples/wip/{ => filters}/tex11.png (100%) rename examples/wip/{ => filters}/tex12.png (100%) rename examples/wip/{ => filters}/tex14.png (100%) rename examples/wip/{ => filters}/tex15.png (100%) rename examples/wip/{ => filters}/tex16.png (100%) rename examples/wip/{ => filters}/trippyLinesFilter.js (100%) rename examples/wip/{ => filters}/tunnelFilter.js (100%) rename examples/wip/{ => filters}/tunnel_demo.js (100%) rename examples/wip/{ => filters}/vortexFilter.js (100%) rename examples/wip/{ => filters}/wobbleFilter.js (100%) create mode 100644 examples/wip/removeFilter.js create mode 100644 examples/wip/template.js diff --git a/examples/wip/TRSIPlasmaFilter.js b/examples/wip/filters/TRSIPlasmaFilter.js similarity index 100% rename from examples/wip/TRSIPlasmaFilter.js rename to examples/wip/filters/TRSIPlasmaFilter.js diff --git a/examples/wip/binarySerpentsFilter.js b/examples/wip/filters/binarySerpentsFilter.js similarity index 100% rename from examples/wip/binarySerpentsFilter.js rename to examples/wip/filters/binarySerpentsFilter.js diff --git a/examples/wip/c64PlasmaFilter.js b/examples/wip/filters/c64PlasmaFilter.js similarity index 100% rename from examples/wip/c64PlasmaFilter.js rename to examples/wip/filters/c64PlasmaFilter.js diff --git a/examples/wip/caustic lights.js b/examples/wip/filters/caustic lights.js similarity index 100% rename from examples/wip/caustic lights.js rename to examples/wip/filters/caustic lights.js diff --git a/examples/wip/checkerWaveFilter.js b/examples/wip/filters/checkerWaveFilter.js similarity index 100% rename from examples/wip/checkerWaveFilter.js rename to examples/wip/filters/checkerWaveFilter.js diff --git a/examples/wip/classicTunnelFilter.js b/examples/wip/filters/classicTunnelFilter.js similarity index 100% rename from examples/wip/classicTunnelFilter.js rename to examples/wip/filters/classicTunnelFilter.js diff --git a/examples/wip/colorBoxFilter.js b/examples/wip/filters/colorBoxFilter.js similarity index 100% rename from examples/wip/colorBoxFilter.js rename to examples/wip/filters/colorBoxFilter.js diff --git a/examples/wip/colorWaveFilter.js b/examples/wip/filters/colorWaveFilter.js similarity index 100% rename from examples/wip/colorWaveFilter.js rename to examples/wip/filters/colorWaveFilter.js diff --git a/examples/wip/colorbars_demo.js b/examples/wip/filters/colorbars_demo.js similarity index 100% rename from examples/wip/colorbars_demo.js rename to examples/wip/filters/colorbars_demo.js diff --git a/examples/wip/deformStarFilter.js b/examples/wip/filters/deformStarFilter.js similarity index 100% rename from examples/wip/deformStarFilter.js rename to examples/wip/filters/deformStarFilter.js diff --git a/examples/wip/fakeLenseFilter.js b/examples/wip/filters/fakeLenseFilter.js similarity index 100% rename from examples/wip/fakeLenseFilter.js rename to examples/wip/filters/fakeLenseFilter.js diff --git a/examples/wip/filter.js b/examples/wip/filters/filter.js similarity index 100% rename from examples/wip/filter.js rename to examples/wip/filters/filter.js diff --git a/examples/wip/fireFilter.js b/examples/wip/filters/fireFilter.js similarity index 100% rename from examples/wip/fireFilter.js rename to examples/wip/filters/fireFilter.js diff --git a/examples/wip/fire_demo.js b/examples/wip/filters/fire_demo.js similarity index 100% rename from examples/wip/fire_demo.js rename to examples/wip/filters/fire_demo.js diff --git a/examples/wip/flameFilter.js b/examples/wip/filters/flameFilter.js similarity index 100% rename from examples/wip/flameFilter.js rename to examples/wip/filters/flameFilter.js diff --git a/examples/wip/flowerFilter.js b/examples/wip/filters/flowerFilter.js similarity index 100% rename from examples/wip/flowerFilter.js rename to examples/wip/filters/flowerFilter.js diff --git a/examples/wip/fractalRayMarchFilter.js b/examples/wip/filters/fractalRayMarchFilter.js similarity index 100% rename from examples/wip/fractalRayMarchFilter.js rename to examples/wip/filters/fractalRayMarchFilter.js diff --git a/examples/wip/heroku.js b/examples/wip/filters/heroku.js similarity index 100% rename from examples/wip/heroku.js rename to examples/wip/filters/heroku.js diff --git a/examples/wip/hueRotationFilter.js b/examples/wip/filters/hueRotationFilter.js similarity index 100% rename from examples/wip/hueRotationFilter.js rename to examples/wip/filters/hueRotationFilter.js diff --git a/examples/wip/hypnoticRipplesFilter.js b/examples/wip/filters/hypnoticRipplesFilter.js similarity index 100% rename from examples/wip/hypnoticRipplesFilter.js rename to examples/wip/filters/hypnoticRipplesFilter.js diff --git a/examples/wip/icosohedronFilter.js b/examples/wip/filters/icosohedronFilter.js similarity index 100% rename from examples/wip/icosohedronFilter.js rename to examples/wip/filters/icosohedronFilter.js diff --git a/examples/wip/filters/index.php b/examples/wip/filters/index.php new file mode 100644 index 00000000..7938ad82 --- /dev/null +++ b/examples/wip/filters/index.php @@ -0,0 +1,109 @@ + $value) + { + if (is_array($value) && count($value) > 0) + { + $total += count($value); + } + } + + function getFile() { + + global $files, $dir, $filename, $title, $code; + + if (isset($_GET['d']) && isset($_GET['f'])) + { + $dir = urldecode($_GET['d']); + $filename = urldecode($_GET['d']) . '/' . urldecode($_GET['f']); + $title = urldecode($_GET['t']); + + if (file_exists($filename)) + { + $code = file_get_contents($filename); + $files = dirToArray($dir); + } + } + + } + + function dirToArray($dir) { + + $ignore = array('.', '..', '_site', 'assets', 'states', 'book'); + $result = array(); + $root = scandir($dir); + $dirs = array_diff($root, $ignore); + + foreach ($dirs as $key => $value) + { + if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) + { + $result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value); + } + else + { + if (substr($value, -3) == '.js') + { + $result[] = $value; + } + } + } + + return $result; + } + + function printJSLinks($dir, $files) { + + $output = ""; + + foreach ($files as $key => $value) + { + $value2 = substr($value, 0, -3); + $file = urlencode($value); + + $output .= "$value2
"; + } + + return $output; + + } +?> + + + + + phaser + + + + + + + + +
+ +

work in progress filters

+ + + + + \ No newline at end of file diff --git a/examples/wip/lightbeam_demo.js b/examples/wip/filters/lightbeam_demo.js similarity index 100% rename from examples/wip/lightbeam_demo.js rename to examples/wip/filters/lightbeam_demo.js diff --git a/examples/wip/mengerTunnelFilter.js b/examples/wip/filters/mengerTunnelFilter.js similarity index 100% rename from examples/wip/mengerTunnelFilter.js rename to examples/wip/filters/mengerTunnelFilter.js diff --git a/examples/wip/metaBallsFilter.js b/examples/wip/filters/metaBallsFilter.js similarity index 100% rename from examples/wip/metaBallsFilter.js rename to examples/wip/filters/metaBallsFilter.js diff --git a/examples/wip/mouseStarFilter.js b/examples/wip/filters/mouseStarFilter.js similarity index 100% rename from examples/wip/mouseStarFilter.js rename to examples/wip/filters/mouseStarFilter.js diff --git a/examples/wip/mysteryVortexFilter.js b/examples/wip/filters/mysteryVortexFilter.js similarity index 100% rename from examples/wip/mysteryVortexFilter.js rename to examples/wip/filters/mysteryVortexFilter.js diff --git a/examples/wip/planeDeformationFilter.js b/examples/wip/filters/planeDeformationFilter.js similarity index 100% rename from examples/wip/planeDeformationFilter.js rename to examples/wip/filters/planeDeformationFilter.js diff --git a/examples/wip/plasma3DFilter.js b/examples/wip/filters/plasma3DFilter.js similarity index 100% rename from examples/wip/plasma3DFilter.js rename to examples/wip/filters/plasma3DFilter.js diff --git a/examples/wip/plasmaBeamFilter.js b/examples/wip/filters/plasmaBeamFilter.js similarity index 100% rename from examples/wip/plasmaBeamFilter.js rename to examples/wip/filters/plasmaBeamFilter.js diff --git a/examples/wip/plasmaFilter.js b/examples/wip/filters/plasmaFilter.js similarity index 100% rename from examples/wip/plasmaFilter.js rename to examples/wip/filters/plasmaFilter.js diff --git a/examples/wip/plasmaFlowerFilter.js b/examples/wip/filters/plasmaFlowerFilter.js similarity index 100% rename from examples/wip/plasmaFlowerFilter.js rename to examples/wip/filters/plasmaFlowerFilter.js diff --git a/examples/wip/plasma_demo.js b/examples/wip/filters/plasma_demo.js similarity index 100% rename from examples/wip/plasma_demo.js rename to examples/wip/filters/plasma_demo.js diff --git a/examples/wip/pulsingInterferenceFilter.js b/examples/wip/filters/pulsingInterferenceFilter.js similarity index 100% rename from examples/wip/pulsingInterferenceFilter.js rename to examples/wip/filters/pulsingInterferenceFilter.js diff --git a/examples/wip/rayTracedBallsFilter.js b/examples/wip/filters/rayTracedBallsFilter.js similarity index 100% rename from examples/wip/rayTracedBallsFilter.js rename to examples/wip/filters/rayTracedBallsFilter.js diff --git a/examples/wip/retroPlasmaFilter.js b/examples/wip/filters/retroPlasmaFilter.js similarity index 100% rename from examples/wip/retroPlasmaFilter.js rename to examples/wip/filters/retroPlasmaFilter.js diff --git a/examples/wip/rotationalFractalsFilter.js b/examples/wip/filters/rotationalFractalsFilter.js similarity index 100% rename from examples/wip/rotationalFractalsFilter.js rename to examples/wip/filters/rotationalFractalsFilter.js diff --git a/examples/wip/rotoZoomerFilter.js b/examples/wip/filters/rotoZoomerFilter.js similarity index 100% rename from examples/wip/rotoZoomerFilter.js rename to examples/wip/filters/rotoZoomerFilter.js diff --git a/examples/wip/shadertoy-effect.js b/examples/wip/filters/shadertoy-effect.js similarity index 100% rename from examples/wip/shadertoy-effect.js rename to examples/wip/filters/shadertoy-effect.js diff --git a/examples/wip/shinyTaffyFilter.js b/examples/wip/filters/shinyTaffyFilter.js similarity index 100% rename from examples/wip/shinyTaffyFilter.js rename to examples/wip/filters/shinyTaffyFilter.js diff --git a/examples/wip/sineWaveFilter.js b/examples/wip/filters/sineWaveFilter.js similarity index 100% rename from examples/wip/sineWaveFilter.js rename to examples/wip/filters/sineWaveFilter.js diff --git a/examples/wip/sineWaveFixedBaseFilter.js b/examples/wip/filters/sineWaveFixedBaseFilter.js similarity index 100% rename from examples/wip/sineWaveFixedBaseFilter.js rename to examples/wip/filters/sineWaveFixedBaseFilter.js diff --git a/examples/wip/softTunnelFilter.js b/examples/wip/filters/softTunnelFilter.js similarity index 100% rename from examples/wip/softTunnelFilter.js rename to examples/wip/filters/softTunnelFilter.js diff --git a/examples/wip/spaceRacingLiteFilter.js b/examples/wip/filters/spaceRacingLiteFilter.js similarity index 100% rename from examples/wip/spaceRacingLiteFilter.js rename to examples/wip/filters/spaceRacingLiteFilter.js diff --git a/examples/wip/starNestFilter.js b/examples/wip/filters/starNestFilter.js similarity index 100% rename from examples/wip/starNestFilter.js rename to examples/wip/filters/starNestFilter.js diff --git a/examples/wip/starNurseryFilter.js b/examples/wip/filters/starNurseryFilter.js similarity index 100% rename from examples/wip/starNurseryFilter.js rename to examples/wip/filters/starNurseryFilter.js diff --git a/examples/wip/starfieldFilter.js b/examples/wip/filters/starfieldFilter.js similarity index 100% rename from examples/wip/starfieldFilter.js rename to examples/wip/filters/starfieldFilter.js diff --git a/examples/wip/starsBackgroundFilter.js b/examples/wip/filters/starsBackgroundFilter.js similarity index 100% rename from examples/wip/starsBackgroundFilter.js rename to examples/wip/filters/starsBackgroundFilter.js diff --git a/examples/wip/tex00.jpg b/examples/wip/filters/tex00.jpg similarity index 100% rename from examples/wip/tex00.jpg rename to examples/wip/filters/tex00.jpg diff --git a/examples/wip/tex01.jpg b/examples/wip/filters/tex01.jpg similarity index 100% rename from examples/wip/tex01.jpg rename to examples/wip/filters/tex01.jpg diff --git a/examples/wip/tex02.jpg b/examples/wip/filters/tex02.jpg similarity index 100% rename from examples/wip/tex02.jpg rename to examples/wip/filters/tex02.jpg diff --git a/examples/wip/tex03.jpg b/examples/wip/filters/tex03.jpg similarity index 100% rename from examples/wip/tex03.jpg rename to examples/wip/filters/tex03.jpg diff --git a/examples/wip/tex04.jpg b/examples/wip/filters/tex04.jpg similarity index 100% rename from examples/wip/tex04.jpg rename to examples/wip/filters/tex04.jpg diff --git a/examples/wip/tex05.jpg b/examples/wip/filters/tex05.jpg similarity index 100% rename from examples/wip/tex05.jpg rename to examples/wip/filters/tex05.jpg diff --git a/examples/wip/tex06.jpg b/examples/wip/filters/tex06.jpg similarity index 100% rename from examples/wip/tex06.jpg rename to examples/wip/filters/tex06.jpg diff --git a/examples/wip/tex07.jpg b/examples/wip/filters/tex07.jpg similarity index 100% rename from examples/wip/tex07.jpg rename to examples/wip/filters/tex07.jpg diff --git a/examples/wip/tex08.jpg b/examples/wip/filters/tex08.jpg similarity index 100% rename from examples/wip/tex08.jpg rename to examples/wip/filters/tex08.jpg diff --git a/examples/wip/tex09.jpg b/examples/wip/filters/tex09.jpg similarity index 100% rename from examples/wip/tex09.jpg rename to examples/wip/filters/tex09.jpg diff --git a/examples/wip/tex10.png b/examples/wip/filters/tex10.png similarity index 100% rename from examples/wip/tex10.png rename to examples/wip/filters/tex10.png diff --git a/examples/wip/tex11.png b/examples/wip/filters/tex11.png similarity index 100% rename from examples/wip/tex11.png rename to examples/wip/filters/tex11.png diff --git a/examples/wip/tex12.png b/examples/wip/filters/tex12.png similarity index 100% rename from examples/wip/tex12.png rename to examples/wip/filters/tex12.png diff --git a/examples/wip/tex14.png b/examples/wip/filters/tex14.png similarity index 100% rename from examples/wip/tex14.png rename to examples/wip/filters/tex14.png diff --git a/examples/wip/tex15.png b/examples/wip/filters/tex15.png similarity index 100% rename from examples/wip/tex15.png rename to examples/wip/filters/tex15.png diff --git a/examples/wip/tex16.png b/examples/wip/filters/tex16.png similarity index 100% rename from examples/wip/tex16.png rename to examples/wip/filters/tex16.png diff --git a/examples/wip/trippyLinesFilter.js b/examples/wip/filters/trippyLinesFilter.js similarity index 100% rename from examples/wip/trippyLinesFilter.js rename to examples/wip/filters/trippyLinesFilter.js diff --git a/examples/wip/tunnelFilter.js b/examples/wip/filters/tunnelFilter.js similarity index 100% rename from examples/wip/tunnelFilter.js rename to examples/wip/filters/tunnelFilter.js diff --git a/examples/wip/tunnel_demo.js b/examples/wip/filters/tunnel_demo.js similarity index 100% rename from examples/wip/tunnel_demo.js rename to examples/wip/filters/tunnel_demo.js diff --git a/examples/wip/vortexFilter.js b/examples/wip/filters/vortexFilter.js similarity index 100% rename from examples/wip/vortexFilter.js rename to examples/wip/filters/vortexFilter.js diff --git a/examples/wip/wobbleFilter.js b/examples/wip/filters/wobbleFilter.js similarity index 100% rename from examples/wip/wobbleFilter.js rename to examples/wip/filters/wobbleFilter.js diff --git a/examples/wip/index.php b/examples/wip/index.php index 7fa7f2b6..58a4a658 100644 --- a/examples/wip/index.php +++ b/examples/wip/index.php @@ -32,7 +32,7 @@ function dirToArray($dir) { - $ignore = array('.', '..', '_site', 'assets', 'states', 'book'); + $ignore = array('.', '..', '_site', 'assets', 'states', 'book', 'filters'); $result = array(); $root = scandir($dir); $dirs = array_diff($root, $ignore); diff --git a/examples/wip/removeFilter.js b/examples/wip/removeFilter.js new file mode 100644 index 00000000..d5d11586 --- /dev/null +++ b/examples/wip/removeFilter.js @@ -0,0 +1,47 @@ + +var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update }); + +var logo; +var background; +var filter; + +function preload() { + + game.load.image('phaser', 'assets/sprites/phaser2.png'); + game.load.script('fire', '../filters/Fire.js'); + +} + +function create() { + + + background = game.add.sprite(0, 0); + background.width = 800; + background.height = 600; + + filter = game.add.filter('Fire', 800, 600); + filter.alpha = 0.0; + + background.filters = [filter]; + + logo = game.add.sprite(game.world.centerX, game.world.centerY, 'phaser'); + logo.anchor.setTo(0.5, 0.5); + + game.input.onDown.add(removeBackground, this); + +} + +function update() { + + filter.update(); + +} + +function removeBackground() { + + console.log('removeBackground'); + + // background.destroy(); + background.removeFilter(filter); + +} diff --git a/examples/wip/template.js b/examples/wip/template.js new file mode 100644 index 00000000..544dd8f3 --- /dev/null +++ b/examples/wip/template.js @@ -0,0 +1,22 @@ + +var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update, render: render }); + +function preload() { + + +} + +var sprite; + +function create() { + +} + +function update() { + + +} + +function render() { + +} diff --git a/src/gameobjects/Sprite.js b/src/gameobjects/Sprite.js index 71cdd228..4ebded88 100644 --- a/src/gameobjects/Sprite.js +++ b/src/gameobjects/Sprite.js @@ -860,6 +860,13 @@ Phaser.Sprite.prototype.destroy = function() { this.animations.destroy(); } + if (this._filters) + { + console.log('removeFilter', this._filters); + this.removeFilter(this._filters); + console.log(this._filters); + } + this.alive = false; this.exists = false; this.visible = false; diff --git a/src/pixi/InteractionManager.js b/src/pixi/InteractionManager.js index ad111752..bc655d28 100644 --- a/src/pixi/InteractionManager.js +++ b/src/pixi/InteractionManager.js @@ -246,7 +246,7 @@ PIXI.InteractionManager.prototype.update = function() // loks like there was a hit! if(item.__hit) { - if(item.buttonMode) this.interactionDOMElement.style.cursor = "pointer"; + if(item.buttonMode) this.interactionDOMElement.style.cursor = item.defaultCursor; if(!item.__isOver) { diff --git a/src/pixi/core/Circle.js b/src/pixi/core/Circle.js index 3844f426..e2728335 100644 --- a/src/pixi/core/Circle.js +++ b/src/pixi/core/Circle.js @@ -14,24 +14,24 @@ PIXI.Circle = function(x, y, radius) { /** - * @property x - * @type Number - * @default 0 - */ + * @property x + * @type Number + * @default 0 + */ this.x = x || 0; /** - * @property y - * @type Number - * @default 0 - */ + * @property y + * @type Number + * @default 0 + */ this.y = y || 0; /** - * @property radius - * @type Number - * @default 0 - */ + * @property radius + * @type Number + * @default 0 + */ this.radius = radius || 0; } diff --git a/src/pixi/core/Ellipse.js b/src/pixi/core/Ellipse.js index 0d05b3ed..1a95d20a 100644 --- a/src/pixi/core/Ellipse.js +++ b/src/pixi/core/Ellipse.js @@ -15,31 +15,31 @@ PIXI.Ellipse = function(x, y, width, height) { /** - * @property x - * @type Number - * @default 0 - */ + * @property x + * @type Number + * @default 0 + */ this.x = x || 0; /** - * @property y - * @type Number - * @default 0 - */ + * @property y + * @type Number + * @default 0 + */ this.y = y || 0; /** - * @property width - * @type Number - * @default 0 - */ + * @property width + * @type Number + * @default 0 + */ this.width = width || 0; /** - * @property height - * @type Number - * @default 0 - */ + * @property height + * @type Number + * @default 0 + */ this.height = height || 0; } diff --git a/src/pixi/display/DisplayObject.js b/src/pixi/display/DisplayObject.js index 4cc10273..2a8f6d86 100644 --- a/src/pixi/display/DisplayObject.js +++ b/src/pixi/display/DisplayObject.js @@ -122,6 +122,8 @@ PIXI.DisplayObject = function() */ this._interactive = false; + this.defaultCursor = "pointer"; + /** * [read-only] Current transform of the object based on world (parent) factors * @@ -368,6 +370,12 @@ Object.defineProperty(PIXI.DisplayObject.prototype, 'filters', { */ PIXI.DisplayObject.prototype.addFilter = function(data) { + //if(this.filter)return; + //this.filter = true; +// data[0].target = this; + +console.log('addFilter'); +console.log(data); // insert a filter block.. // TODO Onject pool thease bad boys.. @@ -386,6 +394,8 @@ PIXI.DisplayObject.prototype.addFilter = function(data) start.open = true; start.target = this; + +console.log('start', start); /* * insert start @@ -455,6 +465,7 @@ PIXI.DisplayObject.prototype.addFilter = function(data) // if webGL... if(this.__renderGroup) { + console.log('__renderGroup'); this.__renderGroup.addFilterBlocks(start, end); } @@ -470,13 +481,20 @@ PIXI.DisplayObject.prototype.removeFilter = function(data) { //if(!this.filter)return; //this.filter = false; - console.log("YUOIO") + // console.log("YUOIO") // modify the list.. + +console.log('DisplayObject removeFilter'); +console.log(data); + var startBlock = data.start; +console.log('start', startBlock); var nextObject = startBlock._iNext; var previousObject = startBlock._iPrev; + + if(nextObject)nextObject._iPrev = previousObject; if(previousObject)previousObject._iNext = nextObject; diff --git a/src/pixi/display/DisplayObjectContainer.js b/src/pixi/display/DisplayObjectContainer.js index 04a4df59..bb972f43 100644 --- a/src/pixi/display/DisplayObjectContainer.js +++ b/src/pixi/display/DisplayObjectContainer.js @@ -166,7 +166,7 @@ PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) updateLast = updateLast.parent; } } - else if(index === 0) + else if(index == 0) { previousObject = this; } @@ -295,14 +295,17 @@ PIXI.DisplayObjectContainer.prototype.removeChild = function(child) if(this.last == childLast) { + var tempLast = childFirst._iPrev; // need to make sure the parents last is updated too var updateLast = this; - while(updateLast.last == childLast.last) + + while(updateLast.last == childLast) { updateLast.last = tempLast; updateLast = updateLast.parent; if(!updateLast)break; + } } diff --git a/src/pixi/display/Sprite.js b/src/pixi/display/Sprite.js index bb36f1b1..e567c795 100644 --- a/src/pixi/display/Sprite.js +++ b/src/pixi/display/Sprite.js @@ -26,9 +26,9 @@ PIXI.Sprite = function(texture) * Setting than anchor to 0.5,0.5 means the textures origin is centered * Setting the anchor to 1,1 would mean the textures origin points will be the bottom right * - * @property anchor - * @type Point - */ + * @property anchor + * @type Point + */ this.anchor = new PIXI.Point(); /** diff --git a/src/pixi/extras/Spine.js b/src/pixi/extras/Spine.js index 2249dda5..27995ae6 100644 --- a/src/pixi/extras/Spine.js +++ b/src/pixi/extras/Spine.js @@ -296,7 +296,7 @@ spine.Animation.prototype = { spine.binarySearch = function (values, target, step) { var low = 0; var high = Math.floor(values.length / step) - 2; - if (high === 0) return step; + if (high == 0) return step; var current = high >>> 1; while (true) { if (values[(current + 1) * step] <= target) @@ -368,7 +368,7 @@ spine.Curves.prototype = { var lastY = y - dfy; return lastY + (y - lastY) * (percent - lastX) / (x - lastX); } - if (i === 0) break; + if (i == 0) break; i--; dfx += ddfx; dfy += ddfy; @@ -711,7 +711,7 @@ spine.Skeleton.prototype = { }, /** @return May return null. */ getRootBone: function () { - return this.bones.length === 0 ? null : this.bones[0]; + return this.bones.length == 0 ? null : this.bones[0]; }, /** @return May be null. */ findBone: function (boneName) { @@ -983,7 +983,7 @@ spine.AnimationState.prototype = { entry.loop = loop; if (!delay || delay <= 0) { - var previousAnimation = this.queue.length === 0 ? this.current : this.queue[this.queue.length - 1].animation; + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; if (previousAnimation != null) delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); else @@ -1232,7 +1232,7 @@ spine.Atlas = function (atlasText, textureLoader) { var line = reader.readLine(); if (line == null) break; line = reader.trim(line); - if (line.length === 0) + if (line.length == 0) page = null; else if (!page) { page = new spine.AtlasPage(); @@ -1421,7 +1421,7 @@ spine.AtlasReader.prototype = { for (; i < 3; i++) { var comma = line.indexOf(",", lastMatch); if (comma == -1) { - if (i === 0) throw "Invalid line: " + line; + if (i == 0) throw "Invalid line: " + line; break; } tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); diff --git a/src/pixi/filters/CrossHatchFilter.js b/src/pixi/filters/CrossHatchFilter.js index b5009114..2d26715e 100644 --- a/src/pixi/filters/CrossHatchFilter.js +++ b/src/pixi/filters/CrossHatchFilter.js @@ -29,25 +29,25 @@ PIXI.CrossHatchFilter = function() " gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);", " ", " if (lum < 1.00) {", - " if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) === 0.0) {", + " if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {", " gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", " }", " }", " ", " if (lum < 0.75) {", - " if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) === 0.0) {", + " if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {", " gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", " }", " }", " ", " if (lum < 0.50) {", - " if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) === 0.0) {", + " if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {", " gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", " }", " }", " ", " if (lum < 0.3) {", - " if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) === 0.0) {", + " if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {", " gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", " }", " }", diff --git a/src/pixi/loaders/AssetLoader.js b/src/pixi/loaders/AssetLoader.js index d984d889..57c4e8ab 100644 --- a/src/pixi/loaders/AssetLoader.js +++ b/src/pixi/loaders/AssetLoader.js @@ -24,26 +24,26 @@ PIXI.AssetLoader = function(assetURLs, crossorigin) /** * The array of asset URLs that are going to be loaded - * + * * @property assetURLs * @type Array */ this.assetURLs = assetURLs; /** - * Whether the requests should be treated as cross origin - * - * @property crossorigin - * @type Boolean - */ + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ this.crossorigin = crossorigin; /** - * Maps file extension to loader types - * - * @property loadersByType - * @type Object - */ + * Maps file extension to loader types + * + * @property loadersByType + * @type Object + */ this.loadersByType = { "jpg": PIXI.ImageLoader, "jpeg": PIXI.ImageLoader, @@ -113,7 +113,7 @@ PIXI.AssetLoader.prototype.onAssetLoaded = function() this.dispatchEvent({type: "onProgress", content: this}); if(this.onProgress) this.onProgress(); - if(this.loadCount === 0) + if(this.loadCount == 0) { this.dispatchEvent({type: "onComplete", content: this}); if(this.onComplete) this.onComplete(); diff --git a/src/pixi/loaders/BitmapFontLoader.js b/src/pixi/loaders/BitmapFontLoader.js index f0b0aef9..ef050943 100644 --- a/src/pixi/loaders/BitmapFontLoader.js +++ b/src/pixi/loaders/BitmapFontLoader.js @@ -17,43 +17,43 @@ PIXI.BitmapFontLoader = function(url, crossorigin) { /* - * i use texture packer to load the assets.. - * http://www.codeandweb.com/texturepacker - * make sure to set the format as "JSON" - */ + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as "JSON" + */ PIXI.EventTarget.call(this); /** - * The url of the bitmap font data - * - * @property url - * @type String - */ + * The url of the bitmap font data + * + * @property url + * @type String + */ this.url = url; /** - * Whether the requests should be treated as cross origin - * - * @property crossorigin - * @type Boolean - */ + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ this.crossorigin = crossorigin; /** - * [read-only] The base url of the bitmap font data - * - * @property baseUrl - * @type String - * @readOnly - */ + * [read-only] The base url of the bitmap font data + * + * @property baseUrl + * @type String + * @readOnly + */ this.baseUrl = url.replace(/[^\/]*$/, ""); /** - * [read-only] The texture of the bitmap font - * - * @property baseUrl - * @type String - */ + * [read-only] The texture of the bitmap font + * + * @property baseUrl + * @type String + */ this.texture = null; }; diff --git a/src/pixi/loaders/ImageLoader.js b/src/pixi/loaders/ImageLoader.js index 2372b10c..d8a41374 100644 --- a/src/pixi/loaders/ImageLoader.js +++ b/src/pixi/loaders/ImageLoader.js @@ -18,18 +18,18 @@ PIXI.ImageLoader = function(url, crossorigin) PIXI.EventTarget.call(this); /** - * The texture being loaded - * - * @property texture - * @type Texture - */ + * The texture being loaded + * + * @property texture + * @type Texture + */ this.texture = PIXI.Texture.fromImage(url, crossorigin); /** - * if the image is loaded with loadFramedSpriteSheet - * frames will contain the sprite sheet frames - * - */ + * if the image is loaded with loadFramedSpriteSheet + * frames will contain the sprite sheet frames + * + */ this.frames = []; }; diff --git a/src/pixi/loaders/SpriteSheetLoader.js b/src/pixi/loaders/SpriteSheetLoader.js index 9490d57c..169fb70d 100644 --- a/src/pixi/loaders/SpriteSheetLoader.js +++ b/src/pixi/loaders/SpriteSheetLoader.js @@ -52,19 +52,19 @@ PIXI.SpriteSheetLoader = function (url, crossorigin) { this.baseUrl = url.replace(/[^\/]*$/, ""); /** - * The texture being loaded - * - * @property texture - * @type Texture - */ + * The texture being loaded + * + * @property texture + * @type Texture + */ this.texture = null; /** - * The frames of the sprite sheet - * - * @property frames - * @type Object - */ + * The frames of the sprite sheet + * + * @property frames + * @type Object + */ this.frames = {}; }; diff --git a/src/pixi/primitives/Graphics.js b/src/pixi/primitives/Graphics.js index c15d701a..8e8c3dd2 100644 --- a/src/pixi/primitives/Graphics.js +++ b/src/pixi/primitives/Graphics.js @@ -19,45 +19,45 @@ PIXI.Graphics = function() this.renderable = true; /** - * The alpha of the fill of this graphics object - * - * @property fillAlpha - * @type Number - */ + * The alpha of the fill of this graphics object + * + * @property fillAlpha + * @type Number + */ this.fillAlpha = 1; /** - * The width of any lines drawn - * - * @property lineWidth - * @type Number - */ + * The width of any lines drawn + * + * @property lineWidth + * @type Number + */ this.lineWidth = 0; /** - * The color of any lines drawn - * - * @property lineColor - * @type String - */ + * The color of any lines drawn + * + * @property lineColor + * @type String + */ this.lineColor = "black"; /** - * Graphics data - * - * @property graphicsData - * @type Array - * @private - */ + * Graphics data + * + * @property graphicsData + * @type Array + * @private + */ this.graphicsData = []; /** - * Current path - * - * @property currentPath - * @type Object - * @private - */ + * Current path + * + * @property currentPath + * @type Object + * @private + */ this.currentPath = {points:[]}; } @@ -75,7 +75,7 @@ PIXI.Graphics.prototype.constructor = PIXI.Graphics; */ PIXI.Graphics.prototype.lineStyle = function(lineWidth, color, alpha) { - if(this.currentPath.points.length === 0)this.graphicsData.pop(); + if(this.currentPath.points.length == 0)this.graphicsData.pop(); this.lineWidth = lineWidth || 0; this.lineColor = color || 0; @@ -96,7 +96,7 @@ PIXI.Graphics.prototype.lineStyle = function(lineWidth, color, alpha) */ PIXI.Graphics.prototype.moveTo = function(x, y) { - if(this.currentPath.points.length === 0)this.graphicsData.pop(); + if(this.currentPath.points.length == 0)this.graphicsData.pop(); this.currentPath = this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, points:[], type:PIXI.Graphics.POLY}; @@ -157,7 +157,7 @@ PIXI.Graphics.prototype.endFill = function() */ PIXI.Graphics.prototype.drawRect = function( x, y, width, height ) { - if(this.currentPath.points.length === 0)this.graphicsData.pop(); + if(this.currentPath.points.length == 0)this.graphicsData.pop(); this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, @@ -177,7 +177,7 @@ PIXI.Graphics.prototype.drawRect = function( x, y, width, height ) */ PIXI.Graphics.prototype.drawCircle = function( x, y, radius) { - if(this.currentPath.points.length === 0)this.graphicsData.pop(); + if(this.currentPath.points.length == 0)this.graphicsData.pop(); this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, @@ -198,7 +198,7 @@ PIXI.Graphics.prototype.drawCircle = function( x, y, radius) */ PIXI.Graphics.prototype.drawElipse = function( x, y, width, height) { - if(this.currentPath.points.length === 0)this.graphicsData.pop(); + if(this.currentPath.points.length == 0)this.graphicsData.pop(); this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, diff --git a/src/pixi/renderers/webgl/PixiShader.js b/src/pixi/renderers/webgl/PixiShader.js index 3b4ceb98..f7fbf850 100644 --- a/src/pixi/renderers/webgl/PixiShader.js +++ b/src/pixi/renderers/webgl/PixiShader.js @@ -226,6 +226,7 @@ PIXI.PixiShader.prototype.syncUniforms = function() // This would probably be faster in an array and it would guarantee key order for (var key in this.uniforms) { + uniform = this.uniforms[key]; if (uniform.glValueLength == 1) diff --git a/src/pixi/renderers/webgl/WebGLBatch.js b/src/pixi/renderers/webgl/WebGLBatch.js index 32f82946..fa09fc43 100644 --- a/src/pixi/renderers/webgl/WebGLBatch.js +++ b/src/pixi/renderers/webgl/WebGLBatch.js @@ -9,7 +9,7 @@ PIXI._batchs = []; */ PIXI._getBatch = function(gl) { - if(PIXI._batchs.length === 0) + if(PIXI._batchs.length == 0) { return new PIXI.WebGLBatch(gl); } @@ -189,7 +189,7 @@ PIXI.WebGLBatch.prototype.remove = function(sprite) { this.size--; - if(this.size === 0) + if(this.size == 0) { sprite.batch = null; sprite.__prev = null; @@ -522,7 +522,7 @@ PIXI.WebGLBatch.prototype.render = function(start, end) this.dirty = false; } - if (this.size === 0)return; + if (this.size == 0)return; this.update(); var gl = this.gl; diff --git a/src/pixi/renderers/webgl/WebGLFilterManager.js b/src/pixi/renderers/webgl/WebGLFilterManager.js index f3e9027c..a98afb45 100644 --- a/src/pixi/renderers/webgl/WebGLFilterManager.js +++ b/src/pixi/renderers/webgl/WebGLFilterManager.js @@ -45,8 +45,15 @@ PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock) var texture = this.texturePool.pop(); - if(!texture)texture = new PIXI.FilterTexture(this.width, this.height); - + if(!texture) + { + texture = new PIXI.FilterTexture(this.width, this.height); + } + else + { + texture.resize(this.width, this.height); + } + gl.bindTexture(gl.TEXTURE_2D, texture.texture); this.getBounds(filterBlock.target); @@ -508,6 +515,8 @@ PIXI.FilterTexture = function(width, height) PIXI.FilterTexture.prototype.resize = function(width, height) { + if(this.width == width && this.height == height)return; + this.width = width; this.height = height; diff --git a/src/pixi/renderers/webgl/WebGLGraphics.js b/src/pixi/renderers/webgl/WebGLGraphics.js index 2c4a1284..1d949853 100644 --- a/src/pixi/renderers/webgl/WebGLGraphics.js +++ b/src/pixi/renderers/webgl/WebGLGraphics.js @@ -280,7 +280,7 @@ PIXI.WebGLGraphics.buildLine = function(graphicsData, webGLData) var wrap = true; var points = graphicsData.points; - if(points.length === 0)return; + if(points.length == 0)return; // if the line width is an odd number add 0.5 to align to a whole pixel if(graphicsData.lineWidth%2) diff --git a/src/pixi/renderers/webgl/WebGLRenderGroup.js b/src/pixi/renderers/webgl/WebGLRenderGroup.js index 83ecf45f..7a52a9f2 100644 --- a/src/pixi/renderers/webgl/WebGLRenderGroup.js +++ b/src/pixi/renderers/webgl/WebGLRenderGroup.js @@ -25,7 +25,7 @@ PIXI.WebGLRenderGroup = function(gl, transparent) this.batchs = []; this.toRemove = []; - // console.log(this.transparent) + console.log(this.transparent) this.filterManager = new PIXI.WebGLFilterManager(this.transparent); } @@ -775,7 +775,7 @@ PIXI.WebGLRenderGroup.prototype.removeObject = function(displayObject) // ok so.. check to see if you adjacent batchs should be joined. // TODO may optimise? - if(index === 0 || index == this.batchs.length-1) + if(index == 0 || index == this.batchs.length-1) { // wha - eva! just get of the empty batch! this.batchs.splice(index, 1); @@ -848,7 +848,7 @@ PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); -// return ( (x > 0) && ((x & (x - 1)) === 0) ); +// return ( (x > 0) && ((x & (x - 1)) == 0) ); if(sprite.texture.baseTexture._glTexture) { diff --git a/src/pixi/renderers/webgl/WebGLRenderer.js b/src/pixi/renderers/webgl/WebGLRenderer.js index 9cdff41c..e11cd44f 100644 --- a/src/pixi/renderers/webgl/WebGLRenderer.js +++ b/src/pixi/renderers/webgl/WebGLRenderer.js @@ -111,7 +111,7 @@ PIXI.WebGLRenderer.prototype.constructor = PIXI.WebGLRenderer; */ PIXI.WebGLRenderer.getBatch = function() { - if(PIXI._batchs.length === 0) + if(PIXI._batchs.length == 0) { return new PIXI.WebGLBatch(PIXI.WebGLRenderer.gl); } diff --git a/src/pixi/textures/BaseTexture.js b/src/pixi/textures/BaseTexture.js index 22ac5a03..e58bc116 100644 --- a/src/pixi/textures/BaseTexture.js +++ b/src/pixi/textures/BaseTexture.js @@ -111,6 +111,19 @@ PIXI.BaseTexture.prototype.destroy = function() PIXI.texturesToDestroy.push(this); } +/** + * + * + * @method destroy + */ + +PIXI.BaseTexture.prototype.updateSourceImage = function(newSrc) +{ + this.hasLoaded = false; + this.source.src = null; + this.source.src = newSrc; +} + /** * Helper function that returns a base texture based on an image url * If the image is not in the base texture cache it will be created and loaded diff --git a/src/pixi/textures/Texture.js b/src/pixi/textures/Texture.js index 6ac48717..11d82a0b 100644 --- a/src/pixi/textures/Texture.js +++ b/src/pixi/textures/Texture.js @@ -115,8 +115,7 @@ PIXI.Texture.prototype.setFrame = function(frame) if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) { - console.log(frame); - throw new Error("Texture Error: frame does not fit inside the base Texture dimensions ", frame); + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); } this.updateFrame = true; From 539dcdd18a1588a452d9e07028e234d09913a66e Mon Sep 17 00:00:00 2001 From: "Josh Shepard (jcs)" Date: Wed, 4 Dec 2013 09:42:25 -0800 Subject: [PATCH 006/154] move 'dirty' flag for Tilemap to a per-layer flag. Fixes #242 --- src/tilemap/Tilemap.js | 20 +++++--------------- src/tilemap/TilemapLayer.js | 12 ++++++------ 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/tilemap/Tilemap.js b/src/tilemap/Tilemap.js index 07b34872..87dda754 100644 --- a/src/tilemap/Tilemap.js +++ b/src/tilemap/Tilemap.js @@ -48,11 +48,6 @@ Phaser.Tilemap = function (game, key) { this.debugMap = []; - /** - * @property {boolean} dirty - Internal rendering related flag. - */ - this.dirty = false; - /** * @property {array} _results - Internal var. * @private @@ -120,14 +115,12 @@ Phaser.Tilemap.prototype = { tileSpacing: 0, format: Phaser.Tilemap.CSV, data: data, - indexes: [] - + indexes: [], + dirty: true }); this.currentLayer = this.layers.length - 1; - this.dirty = true; - }, /** @@ -187,10 +180,9 @@ Phaser.Tilemap.prototype = { if (x >= 0 && x < this.layers[layer].width && y >= 0 && y < this.layers[layer].height) { this.layers[layer].data[y][x] = index; + this.layers[layer].dirty = true; } - this.dirty = true; - }, /** @@ -254,10 +246,9 @@ Phaser.Tilemap.prototype = { if (x >= 0 && x < this.layers[layer].width && y >= 0 && y < this.layers[layer].height) { this.layers[layer].data[y][x] = index; + this.layers[layer].dirty = true; } - this.dirty = true; - }, /** @@ -349,8 +340,7 @@ Phaser.Tilemap.prototype = { this.layers[layer].data[ diffY + tileblock[i].y ][ diffX + tileblock[i].x ] = tileblock[i].index; } - this.dirty = true; - + this.layers[layer].dirty = true; }, /** diff --git a/src/tilemap/TilemapLayer.js b/src/tilemap/TilemapLayer.js index 5efcaceb..e546cb10 100644 --- a/src/tilemap/TilemapLayer.js +++ b/src/tilemap/TilemapLayer.js @@ -359,7 +359,7 @@ Phaser.TilemapLayer.prototype.updateMapData = function (tilemap, layer) { this.layer = this.tilemap.layers[layer]; this.index = layer; this.updateMax(); - this.tilemap.dirty = true; + this.tilemap.layers[layer].dirty = true; } } @@ -633,7 +633,7 @@ Phaser.TilemapLayer.prototype.updateMax = function () { */ Phaser.TilemapLayer.prototype.render = function () { - if (this.tilemap && this.tilemap.dirty) + if (this.tilemap && this.tilemap.layers[this.index].dirty ) { this.dirty = true; } @@ -694,10 +694,10 @@ Phaser.TilemapLayer.prototype.render = function () { this.dirty = false; - if (this.tilemap.dirty) - { - this.tilemap.dirty = false; - } + if( this.tilemap.layers[this.index].dirty ) + { + this.tilemap.layers[this.index].dirty = false; + } return true; From c5c754725a6d65007ebe5114aab06ed8ab9d9a3d Mon Sep 17 00:00:00 2001 From: photonstorm Date: Wed, 4 Dec 2013 22:39:53 +0000 Subject: [PATCH 007/154] * When a Sprite is destroyed any active filters are removed as well. * Updated Pixi.js so that removing filters now works correctly without breaking the display list. --- README.md | 6 ++++-- examples/wip/removeFilter.js | 12 ++++++++---- src/gameobjects/Sprite.js | 12 +++++------- src/system/Canvas.js | 28 ++++++++++++++++++---------- 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index fb26e70f..f56efd5b 100644 --- a/README.md +++ b/README.md @@ -50,14 +50,16 @@ New features: Updates: -* TBC +* When a Sprite is destroyed any active filters are removed as well. +* Updated Pixi.js so that removing filters now works correctly without breaking the display list. +* Phaser.Canvas.create updated to it can be given an ID as the 3rd parameter. Bug Fixes: * Cache.getImageKeys returned __missing in the array, now excluded. * Fixed Group.scale so you can now scale a Group directly. * Removed World.scale as it was preventing Group.scale from working - you can still scale the world, but you'll need to factor in Input changes yourself. - +* Moved 'dirty' flag for Tilemap to a per-layer flag. Fixes #242 You can view the Change Log for all previous versions at https://github.com/photonstorm/phaser/changelog.md diff --git a/examples/wip/removeFilter.js b/examples/wip/removeFilter.js index d5d11586..cf67aba4 100644 --- a/examples/wip/removeFilter.js +++ b/examples/wip/removeFilter.js @@ -15,6 +15,9 @@ function preload() { function create() { + logo = game.add.sprite(game.world.centerX, game.world.centerY, 'phaser'); + logo.anchor.setTo(0.5, 0.5); + background = game.add.sprite(0, 0); background.width = 800; background.height = 600; @@ -24,8 +27,6 @@ function create() { background.filters = [filter]; - logo = game.add.sprite(game.world.centerX, game.world.centerY, 'phaser'); - logo.anchor.setTo(0.5, 0.5); game.input.onDown.add(removeBackground, this); @@ -41,7 +42,10 @@ function removeBackground() { console.log('removeBackground'); - // background.destroy(); - background.removeFilter(filter); + + // background.filters = null; + background.destroy(); + + // console.log(background.filters); } diff --git a/src/gameobjects/Sprite.js b/src/gameobjects/Sprite.js index 4ebded88..de08e4c2 100644 --- a/src/gameobjects/Sprite.js +++ b/src/gameobjects/Sprite.js @@ -840,6 +840,11 @@ Phaser.Sprite.prototype.kill = function() { */ Phaser.Sprite.prototype.destroy = function() { + if (this.filters) + { + this.filters = null; + } + if (this.group) { this.group.remove(this); @@ -860,13 +865,6 @@ Phaser.Sprite.prototype.destroy = function() { this.animations.destroy(); } - if (this._filters) - { - console.log('removeFilter', this._filters); - this.removeFilter(this._filters); - console.log(this._filters); - } - this.alive = false; this.exists = false; this.visible = false; diff --git a/src/system/Canvas.js b/src/system/Canvas.js index c763be8c..ee4347c2 100644 --- a/src/system/Canvas.js +++ b/src/system/Canvas.js @@ -13,21 +13,29 @@ Phaser.Canvas = { /** - * Creates the <canvas> tag + * Creates a `canvas` DOM element. The element is not automatically added to the document. * * @method Phaser.Canvas.create - * @param {number} width - The desired width. - * @param {number} height - The desired height. - * @return {HTMLCanvasElement} The newly created <canvas> tag. + * @param {number} [width=256] - The width of the canvas element. + * @param {number} [height=256] - The height of the canvas element.. + * @param {string} [id=''] - If given this will be set as the ID of the canvas element, otherwise no ID will be set. + * @return {HTMLCanvasElement} The newly created canvas element. */ - create: function (width, height) { + create: function (width, height, id) { width = width || 256; height = height || 256; var canvas = document.createElement('canvas'); + + if (typeof id === 'string') + { + canvas.id = id; + } + canvas.width = width; canvas.height = height; + canvas.style.display = 'block'; return canvas; @@ -137,7 +145,7 @@ Phaser.Canvas = { * * @method Phaser.Canvas.addToDOM * @param {HTMLCanvasElement} canvas - The canvas to set the touch action on. - * @param {string|HTMLElement} parent - The DOM element to add the canvas to. Defaults to ''. + * @param {string|HTMLElement} parent - The DOM element to add the canvas to. * @param {boolean} overflowHidden - If set to true it will add the overflow='hidden' style to the parent DOM element. * @return {HTMLCanvasElement} Returns the source canvas. */ @@ -149,14 +157,14 @@ Phaser.Canvas = { if (parent) { - // hopefully an element ID if (typeof parent === 'string') { + // hopefully an element ID target = document.getElementById(parent); } - // quick test for a HTMLelement else if (typeof parent === 'object' && parent.nodeType === 1) { + // quick test for a HTMLelement target = parent; } @@ -166,8 +174,8 @@ Phaser.Canvas = { } } - // fallback, covers an invalid ID and a none HTMLelement object - if(!target) + // Fallback, covers an invalid ID and a non HTMLelement object + if (!target) { target = document.body; } From b978a2b73b02e6520be45e2de0450859eb5a3c35 Mon Sep 17 00:00:00 2001 From: John Date: Thu, 5 Dec 2013 01:00:36 +0000 Subject: [PATCH 008/154] Introduced a separate stage.fullScreenScaleMode property that is used to decide scaling when fullscreen. --- examples/display/fullscreen.js | 7 ++++++ src/core/Stage.js | 5 ++++ src/system/StageScaleMode.js | 45 +++++++++++++++++++++++++--------- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/examples/display/fullscreen.js b/examples/display/fullscreen.js index 5f38a7fa..5c5932f8 100644 --- a/examples/display/fullscreen.js +++ b/examples/display/fullscreen.js @@ -13,6 +13,13 @@ function create() { game.stage.backgroundColor = '#e3ed49'; + // Stretch to fill +// game.stage.fullScreenScaleMode = Phaser.StageScaleMode.EXACT_FIT; + // Keep original size +// game.stage.fullScreenScaleMode = Phaser.StageScaleMode.NO_SCALE; + // Maintain aspect ratio + game.stage.fullScreenScaleMode = Phaser.StageScaleMode.NO_SCALE; + game.input.onDown.add(gofull, this); } diff --git a/src/core/Stage.js b/src/core/Stage.js index 12b053a2..44d0a0fd 100644 --- a/src/core/Stage.js +++ b/src/core/Stage.js @@ -52,6 +52,11 @@ Phaser.Stage = function (game, width, height) { */ this.scaleMode = Phaser.StageScaleMode.NO_SCALE; + /* + * @property {number} fullScreenScaleMode - Scale mode to be used in fullScreen + */ + this.fullScreenScaleMode = Phaser.StageScaleMode.NO_SCALE; + /** * @property {Phaser.StageScaleMode} scale - The scale of the current running game. */ diff --git a/src/system/StageScaleMode.js b/src/system/StageScaleMode.js index f3abb009..70079717 100644 --- a/src/system/StageScaleMode.js +++ b/src/system/StageScaleMode.js @@ -310,16 +310,25 @@ Phaser.StageScaleMode.prototype = { if (this.isFullScreen) { - this.game.stage.canvas.style['width'] = '100%'; - this.game.stage.canvas.style['height'] = '100%'; + if (this.game.stage.fullScreenScaleMode === Phaser.StageScaleMode.EXACT_FIT) + { + this.game.stage.canvas.style['width'] = '100%'; + this.game.stage.canvas.style['height'] = '100%'; - this.setMaximum(); + this.setMaximum(); - this.game.input.scale.setTo(this.game.width / this.width, this.game.height / this.height); + this.game.input.scale.setTo(this.game.width / this.width, this.game.height / this.height); + + this.aspectRatio = this.width / this.height; + this.scaleFactor.x = this.game.width / this.width; + this.scaleFactor.y = this.game.height / this.height; + } + else if (this.game.stage.fullScreenScaleMode === Phaser.StageScaleMode.SHOW_ALL) + { + this.game.stage.scale.setShowAll(); + this.game.stage.scale.refresh(); + } - this.aspectRatio = this.width / this.height; - this.scaleFactor.x = this.game.width / this.width; - this.scaleFactor.y = this.game.height / this.height; } else { @@ -560,13 +569,27 @@ Phaser.StageScaleMode.prototype = { { this.setMaximum(); } - else if (this.game.stage.scaleMode == Phaser.StageScaleMode.EXACT_FIT) + else if (!this.isFullScreen) { - this.setExactFit(); + if (this.game.stage.scaleMode == Phaser.StageScaleMode.EXACT_FIT) + { + this.setExactFit(); + } + else if (this.game.stage.scaleMode == Phaser.StageScaleMode.SHOW_ALL) + { + this.setShowAll(); + } } - else if (this.game.stage.scaleMode == Phaser.StageScaleMode.SHOW_ALL) + else { - this.setShowAll(); + if (this.game.stage.fullScreenScaleMode == Phaser.StageScaleMode.EXACT_FIT) + { + this.setExactFit(); + } + else if (this.game.stage.fullScreenScaleMode == Phaser.StageScaleMode.SHOW_ALL) + { + this.setShowAll(); + } } this.setSize(); From 8469a9c51ed6d047cc832288f11ea3cea7fe8c67 Mon Sep 17 00:00:00 2001 From: Cameron Foale Date: Thu, 5 Dec 2013 14:52:26 +1100 Subject: [PATCH 009/154] Switch method of using trimmed sprites to support scaling and rotation --- src/PixiPatch.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/PixiPatch.js b/src/PixiPatch.js index 282dee22..65b17bde 100644 --- a/src/PixiPatch.js +++ b/src/PixiPatch.js @@ -63,14 +63,18 @@ PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) if (displayObject.texture.frame) { this.context.globalAlpha = displayObject.worldAlpha; + + this.context.setTransform( + displayObject.worldTransform[0], + displayObject.worldTransform[3], + displayObject.worldTransform[1], + displayObject.worldTransform[4], + displayObject.worldTransform[2], + displayObject.worldTransform[5]); if (displayObject.texture.trimmed) { - this.context.setTransform(displayObject.worldTransform[0], displayObject.worldTransform[3], displayObject.worldTransform[1], displayObject.worldTransform[4], displayObject.worldTransform[2] + displayObject.texture.trim.x, displayObject.worldTransform[5] + displayObject.texture.trim.y); - } - else - { - this.context.setTransform(displayObject.worldTransform[0], displayObject.worldTransform[3], displayObject.worldTransform[1], displayObject.worldTransform[4], displayObject.worldTransform[2], displayObject.worldTransform[5]); + this.context.transform(1, 0, 0, 1, displayObject.texture.trim.x, displayObject.texture.trim.y); } this.context.drawImage( From b48669dded6bde391d9d9038fcd3c4017ecae746 Mon Sep 17 00:00:00 2001 From: Cameron Foale Date: Thu, 5 Dec 2013 16:26:03 +1100 Subject: [PATCH 010/154] =?UTF-8?q?Don=E2=80=99t=20test=20self-collisions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/physics/arcade/ArcadePhysics.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/physics/arcade/ArcadePhysics.js b/src/physics/arcade/ArcadePhysics.js index 570b3b2e..c2178305 100644 --- a/src/physics/arcade/ArcadePhysics.js +++ b/src/physics/arcade/ArcadePhysics.js @@ -750,9 +750,12 @@ Phaser.Physics.Arcade.prototype = { * @returns {boolean} Returns true if the bodies were separated, otherwise false. */ separate: function (body1, body2) { - - this._result = (this.separateX(body1, body2) || this.separateY(body1, body2)); - + if(body1 !== body2) + { + this._result = (this.separateX(body1, body2) || this.separateY(body1, body2)); + } else { + this._result = false; + } }, /** From f6712da77422bde61955aa26524280184fc27095 Mon Sep 17 00:00:00 2001 From: Cameron Foale Date: Thu, 5 Dec 2013 16:28:17 +1100 Subject: [PATCH 011/154] Switch Camera.setBoundsToWorld to match world.bounds instead of world --- src/core/Camera.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/Camera.js b/src/core/Camera.js index 151e51ac..c4181726 100644 --- a/src/core/Camera.js +++ b/src/core/Camera.js @@ -244,7 +244,7 @@ Phaser.Camera.prototype = { setBoundsToWorld: function () { - this.bounds.setTo(this.game.world.x, this.game.world.y, this.game.world.width, this.game.world.height); + this.bounds.setTo(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height); }, From 2e11801f9f1a8c88ffffddd7bac96e5d90890547 Mon Sep 17 00:00:00 2001 From: John Date: Thu, 5 Dec 2013 07:15:50 +0000 Subject: [PATCH 012/154] Added a fix for fullscreen scaling in firefox. --- examples/display/fullscreen.js | 2 +- src/system/StageScaleMode.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/display/fullscreen.js b/examples/display/fullscreen.js index 5c5932f8..d02dd75c 100644 --- a/examples/display/fullscreen.js +++ b/examples/display/fullscreen.js @@ -18,7 +18,7 @@ function create() { // Keep original size // game.stage.fullScreenScaleMode = Phaser.StageScaleMode.NO_SCALE; // Maintain aspect ratio - game.stage.fullScreenScaleMode = Phaser.StageScaleMode.NO_SCALE; + game.stage.fullScreenScaleMode = Phaser.StageScaleMode.SHOW_ALL; game.input.onDown.add(gofull, this); diff --git a/src/system/StageScaleMode.js b/src/system/StageScaleMode.js index 70079717..fd558885 100644 --- a/src/system/StageScaleMode.js +++ b/src/system/StageScaleMode.js @@ -268,7 +268,7 @@ Phaser.StageScaleMode.prototype = { } else if (element['mozRequestFullScreen']) { - element['mozRequestFullScreen'](); + element.parentNode['mozRequestFullScreen'](); } else if (element['webkitRequestFullScreen']) { From cd314cd03e175a2ab41a8d469c59e7c8e7b6554a Mon Sep 17 00:00:00 2001 From: photonstorm Date: Thu, 5 Dec 2013 09:14:49 +0000 Subject: [PATCH 013/154] Group.length now returns the number of children in the Group regardless of their exists/alive state, or 0 if the Group is has no children. --- README.md | 8 +++++++- src/core/Group.js | 16 +++++++--------- src/pixi/display/DisplayObject.js | 11 ----------- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index f56efd5b..92cfd002 100644 --- a/README.md +++ b/README.md @@ -46,13 +46,16 @@ Version 1.1.4 - "Kandor" - In development New features: -* TBC +* Added a stage.fullScreenScaleMode property to determine scaling when fullscreen (thanks oysterCrusher) + Updates: * When a Sprite is destroyed any active filters are removed as well. * Updated Pixi.js so that removing filters now works correctly without breaking the display list. * Phaser.Canvas.create updated to it can be given an ID as the 3rd parameter. +* Updated display/fullscreen example to reflect new full screen change. + Bug Fixes: @@ -60,6 +63,9 @@ Bug Fixes: * Fixed Group.scale so you can now scale a Group directly. * Removed World.scale as it was preventing Group.scale from working - you can still scale the world, but you'll need to factor in Input changes yourself. * Moved 'dirty' flag for Tilemap to a per-layer flag. Fixes #242 +* Group.length now returns the number of children in the Group regardless of their exists/alive state, or 0 if the Group is has no children. +* Switch Camera.setBoundsToWorld to match world.bounds instead of world (thanks cocoademon) + You can view the Change Log for all previous versions at https://github.com/photonstorm/phaser/changelog.md diff --git a/src/core/Group.js b/src/core/Group.js index 71b5f8fa..fdf199e3 100644 --- a/src/core/Group.js +++ b/src/core/Group.js @@ -1047,7 +1047,7 @@ Phaser.Group.prototype = { */ iterate: function (key, value, returnType, callback, callbackContext, args) { - if (returnType == Phaser.Group.RETURN_TOTAL && this._container.children.length === 0) + if (returnType === Phaser.Group.RETURN_TOTAL && this._container.children.length === 0) { return -1; } @@ -1075,7 +1075,7 @@ Phaser.Group.prototype = { callback.apply(callbackContext, args); } - if (returnType == Phaser.Group.RETURN_CHILD) + if (returnType === Phaser.Group.RETURN_CHILD) { return currentNode; } @@ -1086,11 +1086,11 @@ Phaser.Group.prototype = { while (currentNode != this._container.last._iNext); } - if (returnType == Phaser.Group.RETURN_TOTAL) + if (returnType === Phaser.Group.RETURN_TOTAL) { return total; } - else if (returnType == Phaser.Group.RETURN_CHILD) + else if (returnType === Phaser.Group.RETURN_CHILD) { return null; } @@ -1460,28 +1460,26 @@ Phaser.Group.prototype = { /** * @name Phaser.Group#total -* @property {number} total - The total number of children in this Group, regardless of their alive state. +* @property {number} total - The total number of children in this Group who have a state of exists = true. * @readonly */ Object.defineProperty(Phaser.Group.prototype, "total", { get: function () { return this.iterate('exists', true, Phaser.Group.RETURN_TOTAL); - // return this._container.children.length; } }); /** * @name Phaser.Group#length -* @property {number} length - The number of children in this Group. +* @property {number} length - The total number of children in this Group, regardless of their exists/alive status. * @readonly */ Object.defineProperty(Phaser.Group.prototype, "length", { get: function () { - return this.iterate('exists', true, Phaser.Group.RETURN_TOTAL); - // return this._container.children.length; + return this._container.children.length; } }); diff --git a/src/pixi/display/DisplayObject.js b/src/pixi/display/DisplayObject.js index 2a8f6d86..23ee88d0 100644 --- a/src/pixi/display/DisplayObject.js +++ b/src/pixi/display/DisplayObject.js @@ -374,9 +374,6 @@ PIXI.DisplayObject.prototype.addFilter = function(data) //this.filter = true; // data[0].target = this; -console.log('addFilter'); -console.log(data); - // insert a filter block.. // TODO Onject pool thease bad boys.. var start = new PIXI.FilterBlock(); @@ -395,8 +392,6 @@ console.log(data); start.target = this; -console.log('start', start); - /* * insert start */ @@ -484,13 +479,7 @@ PIXI.DisplayObject.prototype.removeFilter = function(data) // console.log("YUOIO") // modify the list.. -console.log('DisplayObject removeFilter'); -console.log(data); - var startBlock = data.start; - -console.log('start', startBlock); - var nextObject = startBlock._iNext; var previousObject = startBlock._iPrev; From ea3802a556fff45433743ee32d3b2496c421eebd Mon Sep 17 00:00:00 2001 From: photonstorm Date: Thu, 5 Dec 2013 18:12:16 +0000 Subject: [PATCH 014/154] Lots of new tilemap code in here. If your game relies on tilemaps then please don't update to this commit unless you want to help debugging! --- examples/assets/maps/newtest.json | 76 ++++++++++++++++ examples/assets/maps/newtest.tmx | 27 ++++++ examples/tilemaps/sci fly.js | 3 +- examples/wip/tilemap.js | 118 ++++++++++++++++++++++++ src/physics/arcade/ArcadePhysics.js | 119 ++++++++++++++++++++++-- src/physics/arcade/Body.js | 57 +++++++++++- src/tilemap/Tile.js | 41 ++++++--- src/tilemap/Tilemap.js | 136 ++++++++++++++++++++++++++++ src/tilemap/TilemapLayer.js | 134 +++++++++++++++++++++------ src/tilemap/TilemapParser.js | 64 ++++++++++++- src/utils/Debug.js | 50 ++++++++-- 11 files changed, 762 insertions(+), 63 deletions(-) create mode 100644 examples/assets/maps/newtest.json create mode 100644 examples/assets/maps/newtest.tmx create mode 100644 examples/wip/tilemap.js diff --git a/examples/assets/maps/newtest.json b/examples/assets/maps/newtest.json new file mode 100644 index 00000000..824ff849 --- /dev/null +++ b/examples/assets/maps/newtest.json @@ -0,0 +1,76 @@ +{ "height":18, + "layers":[ + { + "data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + "height":18, + "name":"Tile Layer 1", + "opacity":1, + "properties": + { + "bob":"eat's cheese" + }, + "type":"tilelayer", + "visible":true, + "width":50, + "x":0, + "y":0 + }, + { + "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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":18, + "name":"Tile Layer 2", + "opacity":1, + "type":"tilelayer", + "visible":false, + "width":50, + "x":0, + "y":0 + }], + "orientation":"orthogonal", + "properties": + { + + }, + "tileheight":32, + "tilesets":[ + { + "firstgid":1, + "image":"ground_1x1.png", + "imageheight":32, + "imagewidth":800, + "margin":0, + "name":"ground_1x1", + "properties": + { + + }, + "spacing":0, + "tileheight":32, + "tileproperties": + { + "1": + { + "bounce":"1" + } + }, + "tilewidth":32 + }, + { + "firstgid":26, + "image":"walls_1x2.png", + "imageheight":64, + "imagewidth":256, + "margin":0, + "name":"walls_1x2", + "properties": + { + + }, + "spacing":0, + "tileheight":64, + "tilewidth":32 + }], + "tilewidth":32, + "version":1, + "width":50 +} \ No newline at end of file diff --git a/examples/assets/maps/newtest.tmx b/examples/assets/maps/newtest.tmx new file mode 100644 index 00000000..472bfe21 --- /dev/null +++ b/examples/assets/maps/newtest.tmx @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + diff --git a/examples/tilemaps/sci fly.js b/examples/tilemaps/sci fly.js index c0e15f28..cf6c92d5 100644 --- a/examples/tilemaps/sci fly.js +++ b/examples/tilemaps/sci fly.js @@ -52,7 +52,7 @@ function create() { sprite = game.add.sprite(450, 80, 'phaser'); sprite.anchor.setTo(0.5, 0.5); - // sprite.angle = 45; + sprite.angle = 5; game.camera.follow(sprite); // game.camera.deadzone = new Phaser.Rectangle(160, 160, layer.renderWidth-320, layer.renderHeight-320); @@ -113,6 +113,7 @@ function update() { function render() { game.debug.renderSpriteBounds(sprite); + // game.debug.renderSpriteInfo(sprite, 32, 32); // game.debug.renderSpriteCoords(sprite, 32, 32); diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js new file mode 100644 index 00000000..7de691ee --- /dev/null +++ b/examples/wip/tilemap.js @@ -0,0 +1,118 @@ + +var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render }); + +function preload() { + + game.load.tilemap('map', 'assets/maps/newtest.json', null, Phaser.Tilemap.TILED_JSON); + game.load.tileset('tiles', 'assets/maps/ground_1x1.png', 32, 32); + // game.load.image('phaser', 'assets/sprites/phaser-ship.png'); + game.load.image('phaser', 'assets/sprites/mushroom2.png'); + +} + +var cursors; +var map; +var layer; +var sprite; + +function create() { + + game.stage.backgroundColor = '#5c94fc'; + + map = game.add.tilemap('map'); + + map.setCollisionByIndex(1); + + // Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, tileset, tilemap, layer) { + + layer = game.add.tilemapLayer(0, 0, 800, 600, null, map, 0); + + // tileset = game.add.tileset('tilesNes'); + // layer = game.add.tilemapLayer(0, 0, map.layers[0].width*tilesetNes.tileWidth, 600, tileset, map, 0); + + // disable this and you can place anywhere, but will almost certainly screw collision + // layer.fixedToCamera=false; + + // this screws something up - not quite sure what, but needs investigating! + // layer.resizeWorld(); + + sprite = game.add.sprite(120, 510, 'phaser'); + sprite.anchor.setTo(0.5, 0.5); + // sprite.angle = 5; + + // game.camera.follow(sprite); + + cursors = game.input.keyboard.createCursorKeys(); + + game.input.onDown.add(dump, this); + + +} + +function dump() { + + console.log(sprite.bounds); + console.log(sprite.body.hull); + console.log('wy', sprite.world.y); + +} + +function update() { + + /* + if (cursors.left.isDown) + { + layer.scrollX -= 4; + } + else if (cursors.right.isDown) + { + layer.scrollX += 4; + } + + if (cursors.up.isDown) + { + layer.scrollY -= 4; + } + else if (cursors.down.isDown) + { + layer.scrollY += 4; + } + */ + + game.physics.collide(sprite, layer); + + sprite.body.velocity.x = 0; + sprite.body.velocity.y = 0; + + if (cursors.up.isDown) + { + sprite.body.velocity.y = -150; + } + else if (cursors.down.isDown) + { + sprite.body.velocity.y = 150; + } + + if (cursors.left.isDown) + { + sprite.body.velocity.x = -150; + sprite.scale.x = -1; + } + else if (cursors.right.isDown) + { + sprite.body.velocity.x = 150; + sprite.scale.x = 1; + } + + +} + +function render() { + + game.debug.renderSpriteBody(sprite); + // game.debug.renderSpriteBounds(sprite); + + game.debug.renderText(sprite.x, 32, 32); + game.debug.renderText(sprite.y, 32, 64); + +} \ No newline at end of file diff --git a/src/physics/arcade/ArcadePhysics.js b/src/physics/arcade/ArcadePhysics.js index 570b3b2e..ad3b1057 100644 --- a/src/physics/arcade/ArcadePhysics.js +++ b/src/physics/arcade/ArcadePhysics.js @@ -610,11 +610,6 @@ Phaser.Physics.Arcade.prototype = { return; } - if (group.length === 0) - { - return; - } - if (group._container.first._iNext) { var currentNode = group._container.first._iNext; @@ -995,7 +990,7 @@ Phaser.Physics.Arcade.prototype = { * @param {Phaser.Tile} tile - The tile to collide against. * @returns {boolean} Returns true if the bodies were separated, otherwise false. */ - separateTile: function (body, tile) { + XseparateTile: function (body, tile) { this._result = (this.separateTileX(body, tile, true) || this.separateTileY(body, tile, true)); @@ -1003,6 +998,110 @@ Phaser.Physics.Arcade.prototype = { }, + separateTile: function (body, tile) { + + // Can't separate two immovable objects (tiles are always immovable) + if (body.immovable || Phaser.Rectangle.intersects(body, tile) === false) + { + return false; + } + + var overlapX = 0; + var overlapY = 0; + + console.log('x', tile.x, 'y', tile.y, 'r', tile.right, 'b', tile.bottom); + console.log('x', body.x, 'y', body.y, 'r', body.right, 'b', body.bottom); + console.log(Phaser.Rectangle.intersects(body, tile)); + + if (body.deltaX() < 0 && body.allowCollision.left && tile.tile.faceRight) + { + // LEFT + if (tile.right - body.x < Math.ceil(body.deltaAbsX())) + { + overlapX = tile.right - body.x; + + body.touching.left = true; + body.touching.none = false; + } + } + else if (body.deltaX() > 0 && body.allowCollision.right && tile.tile.faceLeft) + { + // RIGHT + if (body.right - tile.x < Math.ceil(body.deltaAbsX())) + { + overlapX = tile.x - body.right; + + body.touching.right = true; + body.touching.none = false; + } + } + + if (body.deltaY() < 0 && body.allowCollision.up && tile.tile.faceBottom) + { + // UP + if (tile.bottom - body.y < Math.ceil(body.deltaAbsY())) + { + overlapY = tile.bottom - body.y; + + body.touching.up = true; + body.touching.none = false; + } + } + else if (body.deltaY() > 0 && body.allowCollision.down && tile.tile.faceTop) + { + // DOWN + if (body.bottom - tile.y < Math.ceil(body.deltaAbsY())) + { + overlapY = tile.y - body.bottom; + + body.touching.down = true; + body.touching.none = false; + } + } + + // Separate in a single sweep + + if (overlapX === 0 && overlapY === 0) + { + return false; + } + + if (overlapX !== 0) + { + // body.overlapX = overlapX; + body.x += overlapX; + body.preX = body.x; + + if (body.bounce.x === 0) + { + body.velocity.x = 0; + } + else + { + body.velocity.x = -body.velocity.x * body.bounce.x; + } + } + + if (overlapY !== 0) + { + // body.overlapY = overlapY; + body.y += overlapY; + body.preY = body.y; + + if (body.bounce.y === 0) + { + body.velocity.y = 0; + } + else + { + body.velocity.y = -body.velocity.y * body.bounce.y; + } + } + + return true; + + }, + /** * The core separation function to separate a physics body and a tile on the x axis. * @method Phaser.Physics.Arcade#separateTileX @@ -1059,6 +1158,8 @@ Phaser.Physics.Arcade.prototype = { { if (separate) { + // console.log('dx1', body.x); + if (body.deltaX() < 0) { body.x = body.x + this._overlap; @@ -1068,6 +1169,8 @@ Phaser.Physics.Arcade.prototype = { body.x = body.x - this._overlap; } + // console.log('dx2', body.x, this._overlap); + if (body.bounce.x === 0) { body.velocity.x = 0; @@ -1077,7 +1180,7 @@ Phaser.Physics.Arcade.prototype = { body.velocity.x = -body.velocity.x * body.bounce.x; } - body.updateHulls(); + body.updateHulls(false); } return true; @@ -1163,7 +1266,7 @@ Phaser.Physics.Arcade.prototype = { body.velocity.y = -body.velocity.y * body.bounce.y; } - body.updateHulls(); + body.updateHulls(false); } return true; diff --git a/src/physics/arcade/Body.js b/src/physics/arcade/Body.js index f1441d5e..ac217b70 100644 --- a/src/physics/arcade/Body.js +++ b/src/physics/arcade/Body.js @@ -286,6 +286,8 @@ Phaser.Physics.Arcade.Body = function (sprite) { */ this.overlapY = 0; + this.hull = new Phaser.Rectangle(); + /** * @property {Phaser.Rectangle} hullX - The dynamically calculated hull used during collision. */ @@ -368,6 +370,9 @@ Phaser.Physics.Arcade.Body.prototype = { this.y = this.preY; this.rotation = this.preRotation; + this.overlapX = 0; + this.overlapY = 0; + if (this.moves) { this.game.physics.updateMotion(this); @@ -377,7 +382,11 @@ Phaser.Physics.Arcade.Body.prototype = { this.checkWorldBounds(); } - this.updateHulls(); + this.hull.setTo(this.preX, this.preY, this.width, this.height); + + // this.hullX.setTo(this.x, this.preY, this.width, this.height); + // this.hullY.setTo(this.preX, this.y, this.width, this.height); + this.updateHulls(true); } if (this.skipQuadTree === false && this.allowCollision.none === false && this.sprite.visible && this.sprite.alive) @@ -415,8 +424,37 @@ Phaser.Physics.Arcade.Body.prototype = { this.facing = Phaser.DOWN; } + /* + if (this.overlapX !== 0) + { + this.sprite.x += this.overlapX; + } + else + { + if (this.deltaX() !== 0) + { + this.sprite.x += this.deltaX(); + } + } + + if (this.overlapY !== 0) + { + this.sprite.y += this.overlapY; + } + else + { + if (this.deltaY() !== 0) + { + this.sprite.y += this.deltaY(); + } + } + */ + if (this.deltaX() !== 0 || this.deltaY() !== 0) { + // console.log('dx', this.deltaX()); + // console.log('dy', this.deltaY()); + this.sprite.x += this.deltaX(); this.sprite.y += this.deltaY(); this.center.setTo(this.x + this.halfWidth, this.y + this.halfHeight); @@ -435,10 +473,21 @@ Phaser.Physics.Arcade.Body.prototype = { * @method Phaser.Physics.Arcade#updateHulls * @protected */ - updateHulls: function () { + updateHulls: function (separation) { - this.hullX.setTo(this.x, this.preY, this.width, this.height); - this.hullY.setTo(this.preX, this.y, this.width, this.height); + // this.hull.setTo(this.x, this.y, this.width, this.height); + + // if (separation) + // { + // this.hullX.setTo(this.x, this.preY, this.width, this.height); + // this.hullY.setTo(this.preX, this.y, this.width, this.height); + // } + // else + // { + // if this has separated then the preX/Y values are no longer valid + // this.hullX.setTo(this.x, this.y, this.width, this.height); + // this.hullY.setTo(this.x, this.y, this.width, this.height); + // } }, diff --git a/src/tilemap/Tile.js b/src/tilemap/Tile.js index 1c21c6f4..96e0bb9f 100644 --- a/src/tilemap/Tile.js +++ b/src/tilemap/Tile.js @@ -17,18 +17,29 @@ * @param {number} width - Width of the tile. * @param {number} height - Height of the tile. */ -Phaser.Tile = function (tileset, index, x, y, width, height) { +// Phaser.Tile = function (tileset, index, x, y, width, height) { +Phaser.Tile = function (index, x, y, width, height) { /** * @property {Phaser.Tileset} tileset - The tileset this tile belongs to. */ - this.tileset = tileset; + // this.tileset = tileset; /** * @property {number} index - The index of this tile within the tileset. */ this.index = index; + /** + * @property {number} x - The x map coordinate of this tile. + */ + this.x = x; + + /** + * @property {number} y - The y map coordinate of this tile. + */ + this.y = y; + /** * @property {number} width - The width of the tile in pixels. */ @@ -40,14 +51,9 @@ Phaser.Tile = function (tileset, index, x, y, width, height) { this.height = height; /** - * @property {number} x - The top-left corner of the tile within the tileset. + * @property {number} alpha - The alpha value at which this tile is drawn to the canvas. */ - this.x = x; - - /** - * @property {number} y - The top-left corner of the tile within the tileset. - */ - this.y = y; + this.alpha = 1; // Any extra meta data info we need here @@ -55,7 +61,18 @@ Phaser.Tile = function (tileset, index, x, y, width, height) { * @property {number} mass - The virtual mass of the tile. * @default */ - this.mass = 1.0; + // this.mass = 1.0; + + + // Keep track of our interesting faces + this.faceTop = false; + this.faceBottom = false; + this.faceLeft = false; + this.faceRight = false; + + this.collides = false; + + /** * @property {boolean} collideNone - Indicating this Tile doesn't collide at all. @@ -91,13 +108,13 @@ Phaser.Tile = function (tileset, index, x, y, width, height) { * @property {boolean} separateX - Enable separation at x-axis. * @default */ - this.separateX = true; + // this.separateX = true; /** * @property {boolean} separateY - Enable separation at y-axis. * @default */ - this.separateY = true; + // this.separateY = true; /** * @property {boolean} collisionCallback - Tilemap collision callback. diff --git a/src/tilemap/Tilemap.js b/src/tilemap/Tilemap.js index 87dda754..58dcbbb4 100644 --- a/src/tilemap/Tilemap.js +++ b/src/tilemap/Tilemap.js @@ -123,6 +123,140 @@ Phaser.Tilemap.prototype = { }, + /** + * Sets collision values on a tile in the set. + * + * @method Phaser.Tileset#setCollision + * @param {number} index - The index of the tile within the set. + * @param {boolean} left - Should the tile collide on the left? + * @param {boolean} right - Should the tile collide on the right? + * @param {boolean} up - Should the tile collide on the top? + * @param {boolean} down - Should the tile collide on the bottom? + */ + + // Sets all tiles matching the given index to collide on the given faces + // Recalculates the collision map + setCollisionByIndex: function (index, layer) { + + if (typeof layer === "undefined") { layer = this.currentLayer; } + + for (var y = 0; y < this.layers[layer].height ; y++) + { + for (var x = 0; x < this.layers[layer].width; x++) + { + var tile = this.layers[layer].data[y][x]; + + if (tile && tile.index === index) + { + tile.collides = true; + tile.faceTop = true; + tile.faceBottom = true; + tile.faceLeft = true; + tile.faceRight = true; + } + } + } + + // Now re-calculate interesting faces + this.calculateFaces(layer); + + }, + + calculateFaces: function (layer) { + + var above = null; + var below = null; + var left = null; + var right = null; + +console.log(this.layers[layer].width, 'x', this.layers[layer].height); + + for (var y = 0; y < this.layers[layer].height ; y++) + { + for (var x = 0; x < this.layers[layer].width; x++) + { + var tile = this.layers[layer].data[y][x]; + + if (tile) + { + above = this.getTileAbove(layer, x, y); + below = this.getTileBelow(layer, x, y); + left = this.getTileLeft(layer, x, y); + right = this.getTileRight(layer, x, y); + + if (above && above.collides) + { + // There is a tile above this one that also collides, so the top of this tile is no longer interesting + tile.faceTop = false; + } + + if (below && below.collides) + { + // There is a tile below this one that also collides, so the bottom of this tile is no longer interesting + tile.faceBottom = false; + } + + if (left && left.collides) + { + // There is a tile left this one that also collides, so the left of this tile is no longer interesting + tile.faceLeft = false; + } + + if (right && right.collides) + { + // There is a tile right this one that also collides, so the right of this tile is no longer interesting + tile.faceRight = false; + } + } + } + } + + }, + + getTileAbove: function (layer, x, y) { + + if (y > 0) + { + return this.layers[layer].data[y - 1][x]; + } + + return null; + + }, + + getTileBelow: function (layer, x, y) { + + if (y < this.layers[layer].height - 1) + { + return this.layers[layer].data[y + 1][x]; + } + + return null; + + }, + + getTileLeft: function (layer, x, y) { + + if (x > 0) + { + return this.layers[layer].data[y][x - 1]; + } + + return null; + + }, + + getTileRight: function (layer, x, y) { + + if (x < this.layers[layer].width - 1) + { + return this.layers[layer].data[y][x + 1]; + } + + return null; + + }, + /** * Internal function that calculates the tile indexes for the map data. * @@ -130,6 +264,7 @@ Phaser.Tilemap.prototype = { */ calculateIndexes: function () { + /* for (var layer = 0; layer < this.layers.length; layer++) { this.layers[layer].indexes = []; @@ -147,6 +282,7 @@ Phaser.Tilemap.prototype = { } } } + */ }, diff --git a/src/tilemap/TilemapLayer.js b/src/tilemap/TilemapLayer.js index e546cb10..1b21bb5b 100644 --- a/src/tilemap/TilemapLayer.js +++ b/src/tilemap/TilemapLayer.js @@ -286,8 +286,9 @@ Phaser.TilemapLayer.prototype.constructor = Phaser.TilemapLayer; */ Phaser.TilemapLayer.prototype.postUpdate = function () { - Phaser.Sprite.prototype.postUpdate.call( this ); + Phaser.Sprite.prototype.postUpdate.call(this); + // Stops you being able to scroll the camera if it's not following a sprite this.scrollX = this.game.camera.x * this.scrollFactorX; this.scrollY = this.game.camera.y * this.scrollFactorY; @@ -357,6 +358,8 @@ Phaser.TilemapLayer.prototype.updateMapData = function (tilemap, layer) { { this.tilemap = tilemap; this.layer = this.tilemap.layers[layer]; + this.tileWidth = this.layer.tileWidth; + this.tileHeight = this.layer.tileHeight; this.index = layer; this.updateMax(); this.tilemap.layers[layer].dirty = true; @@ -507,7 +510,7 @@ Phaser.TilemapLayer.prototype.getTileXY = function (x, y, point) { * @param {number} y - Y position of the top left of the area to copy (given in tiles, not pixels) * @param {number} width - The width of the area to copy (given in tiles, not pixels) * @param {number} height - The height of the area to copy (given in tiles, not pixels) -* @param {boolean} collides - If true only return tiles that collide on one or more faces. +* @param {boolean} [collides=false] - If true only return tiles that collide on one or more faces. * @return {array} Array with tiles informations (each contains x, y, and the tile). */ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides) { @@ -533,8 +536,8 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides } // adjust the x,y coordinates for scrollFactor - x = this._fixX( x ); - y = this._fixY( y ); + x = this._fixX(x); + y = this._fixY(y); if (width > this.widthInPixels) { @@ -546,6 +549,9 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides height = this.heightInPixels; } + this.context.fillStyle = 'rgba(255,0,255,0.5)'; + // this.context.fillRect(x, y, width, height); + var tileWidth = this.tileWidth * this.scale.x; var tileHeight = this.tileHeight * this.scale.y; @@ -555,19 +561,19 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides this._tw = (this.game.math.snapToCeil(width, tileWidth) + tileWidth) / tileWidth; this._th = (this.game.math.snapToCeil(height, tileHeight) + tileHeight) / tileHeight; + this.context.fillRect(this._tx * tileWidth, this._ty * tileHeight, this._tw * tileWidth, this._th * tileHeight); + // This should apply the layer x/y here - - // this._results.length = 0; - this._results = []; - - // pretty sure we don't use this any more? - // this._results.push( { x: x, y: y, width: width, height: height, tx: this._tx, ty: this._ty, tw: this._tw, th: this._th }); + this._results.length = 0; var _index = 0; var _tile = null; var sx = 0; var sy = 0; + this.context.fillStyle = 'rgba(255,0,0,0.5)'; + this.context.strokeStyle = 'rgba(0,0,0,1)'; + for (var wy = this._ty; wy < this._ty + this._th; wy++) { for (var wx = this._tx; wx < this._tx + this._tw; wx++) @@ -575,19 +581,42 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides if (this.layer.data[wy] && this.layer.data[wy][wx]) { // Could combine - _index = this.layer.data[wy][wx] - 1; - _tile = this.tileset.getTile(_index); + // _index = this.layer.data[wy][wx] - 1; + // _tile = this.tileset.getTile(_index); + _tile = this.layer.data[wy][wx]; - sx = _tile.width * this.scale.x; - sy = _tile.height * this.scale.y; - - if (collides === false || (collides && _tile.collideNone === false)) + if (_tile) { - // convert tile coordinates back to camera space for return - var _wx = this._unfixX( wx*sx ) / tileWidth; - var _wy = this._unfixY( wy*sy ) / tileHeight; - this._results.push({ x: _wx * sx, right: (_wx * sx) + sx, y: _wy * sy, bottom: (_wy * sy) + sy, width: sx, height: sy, tx: _wx, ty: _wy, tile: _tile }); + + // sx = _tile.width * this.scale.x; + // sy = _tile.height * this.scale.y; + sx = this.tileWidth * this.scale.x; + sy = this.tileHeight * this.scale.y; + + if (collides === false || (collides && _tile.collides)) + { + this.context.fillRect(_tile.x * this.tileWidth, _tile.y * this.tileHeight, this.tileWidth, this.tileHeight); + this.context.strokeRect(_tile.x * this.tileWidth, _tile.y * this.tileHeight, this.tileWidth, this.tileHeight); + + // convert tile coordinates back to camera space for return + var _wx = this._unfixX(wx * sx) / this.tileWidth; + var _wy = this._unfixY(wy * sy) / this.tileHeight; + + this._results.push({ + x: _wx * sx, + y: _wy * sy, + width: sx, + height: sy, + right: (_wx * sx) + sx, + bottom: (_wy * sy) + sy, + tx: _wx, + ty: _wy, + tile: _tile + }); + } + } + } } } @@ -633,34 +662,82 @@ Phaser.TilemapLayer.prototype.updateMax = function () { */ Phaser.TilemapLayer.prototype.render = function () { - if (this.tilemap && this.tilemap.layers[this.index].dirty ) + if (this.tilemap && this.tilemap.layers[this.index].dirty) { this.dirty = true; } if (!this.dirty || !this.tileset || !this.tilemap || !this.visible) { - return; + // return; } this._prevX = this._dx; this._prevY = this._dy; + // console.log('render', this._x); + this._dx = -(this._x - (this._startX * this.tileWidth)); this._dy = -(this._y - (this._startY * this.tileHeight)); + // this._dx = Math.floor(this._dx); + // this._dy = Math.floor(this._dy); + this._tx = this._dx; this._ty = this._dy; - this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + // this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + // this.context.fillStyle = '#000000'; + // this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); - for (var y = this._startY; y < this._startY + this._maxY; y++) + this.context.strokeStyle = '#00ff00'; + + for (var y = this._startY, lenY = this._startY + this._maxY; y < lenY; y++) { this._column = this.layer.data[y]; - for (var x = this._startX; x < this._startX + this._maxX; x++) + for (var x = this._startX, lenX = this._startX + this._maxX; x < lenX; x++) { + var tile = this._column[x]; + + if (tile && (tile.faceTop || tile.faceBottom || tile.faceLeft || tile.faceRight)) + { + this._tx = Math.floor(this._tx); + + this.context.beginPath(); + + if (tile.faceTop) + { + this.context.moveTo(this._tx, this._ty); + this.context.lineTo(this._tx + this.tileWidth, this._ty); + } + + if (tile.faceBottom) + { + this.context.moveTo(this._tx, this._ty + this.tileHeight); + this.context.lineTo(this._tx + this.tileWidth, this._ty + this.tileHeight); + } + + if (tile.faceLeft) + { + this.context.moveTo(this._tx, this._ty); + this.context.lineTo(this._tx, this._ty + this.tileHeight); + } + + if (tile.faceRight) + { + this.context.moveTo(this._tx + this.tileWidth, this._ty); + this.context.lineTo(this._tx + this.tileWidth, this._ty + this.tileHeight); + } + + this.context.stroke(); + + // this.context.fillRect(this._tx, this._ty, this.tileWidth, this.tileHeight); + // this.context.strokeRect(this._tx, this._ty, this.tileWidth, this.tileHeight); + } + // only -1 on TILED maps, not CSV + /* var tile = this.tileset.tiles[this._column[x]-1]; if (tile) @@ -677,6 +754,7 @@ Phaser.TilemapLayer.prototype.render = function () { this.tileHeight ); } + */ this._tx += this.tileWidth; @@ -684,17 +762,18 @@ Phaser.TilemapLayer.prototype.render = function () { this._tx = this._dx; this._ty += this.tileHeight; + } // Only needed if running in WebGL, otherwise this array will never get cleared down I don't think! - if (this.game.renderType == Phaser.WEBGL) + if (this.game.renderType === Phaser.WEBGL) { PIXI.texturesToUpdate.push(this.baseTexture); } this.dirty = false; - if( this.tilemap.layers[this.index].dirty ) + if (this.tilemap.layers[this.index].dirty) { this.tilemap.layers[this.index].dirty = false; } @@ -764,6 +843,7 @@ Object.defineProperty(Phaser.TilemapLayer.prototype, "scrollX", { this._x = this.widthInPixels - this.renderWidth; } + this._startX = this.game.math.floor(this._x / this.tileWidth); if (this._startX < 0) diff --git a/src/tilemap/TilemapParser.js b/src/tilemap/TilemapParser.js index 0278c21a..9714a1bf 100644 --- a/src/tilemap/TilemapParser.js +++ b/src/tilemap/TilemapParser.js @@ -140,6 +140,8 @@ Phaser.TilemapParser = { } } + // Build collision map + return [{ name: 'csv', width: width, height: height, alpha: 1, visible: true, indexes: [], tileMargin: 0, tileSpacing: 0, data: output }]; }, @@ -147,11 +149,19 @@ Phaser.TilemapParser = { /** * Parses a Tiled JSON file into valid map data. * @method Phaser.TilemapParser.parseJSON - * @param {object} json- The Tiled JSON data. + * @param {object} json - The Tiled JSON data. * @return {object} Generated map data. */ parseTiledJSON: function (json) { + // Let's work out which tilesets are in here + var tilesets = []; + + for (var i = 0; i < json.tilesets.length; i++) + { + tilesets.push(json.tilesets[i].firstgid); + } + var layers = []; for (var i = 0; i < json.layers.length; i++) @@ -168,29 +178,69 @@ Phaser.TilemapParser = { var layer = { name: json.layers[i].name, + x: json.layers[i].x, + y: json.layers[i].y, width: json.layers[i].width, height: json.layers[i].height, alpha: json.layers[i].opacity, visible: json.layers[i].visible, + properties: {}, + tileWidth: json.tilewidth, + tileHeight: json.tileheight, + indexes: [], - tileMargin: json.tilesets[0].margin, - tileSpacing: json.tilesets[0].spacing + // tileset specific + // tileMargin: json.tilesets[0].margin, + // tileSpacing: json.tilesets[0].spacing }; + if (json.layers[i].properties) + { + layer.properties = json.layers[i].properties; + } + + var x = 0; + var row = []; var output = []; - var c = 0; - var row; + + // Loop through the data field in the JSON. + + // This is an array containing the tile indexes, one after the other. 0 = no tile, everything else = the tile index (starting at 1) + // If the map contains multiple tilesets then the indexes are relative to that which the set starts from + // Need to set which tileset in the cache = which tileset in the JSON, if you do this manually it means you can use the same map data but a new tileset. for (var t = 0; t < json.layers[i].data.length; t++) { + // index, x, y, width, height + if (json.layers[i].data[t] > 0) + { + row.push(new Phaser.Tile(json.layers[i].data[t], x, output.length, json.tilewidth, json.tileheight)); + } + else + { + row.push(null); + } + + x++; + + if (x === json.layers[i].width) + { + output.push(row); + x = 0; + row = []; + } + + + /* if (c === 0) { row = []; } row.push(json.layers[i].data[t]); + c++; if (c == json.layers[i].width) @@ -198,9 +248,13 @@ Phaser.TilemapParser = { output.push(row); c = 0; } + */ } layer.data = output; + + // Build collision map + // console.log(output); layers.push(layer); diff --git a/src/utils/Debug.js b/src/utils/Debug.js index 48184bcc..edcaefe8 100644 --- a/src/utils/Debug.js +++ b/src/utils/Debug.js @@ -627,7 +627,7 @@ Phaser.Utils.Debug.prototype = { */ renderSpriteBody: function (sprite, color) { - if (this.context == null) + if (this.context == null || sprite.body.touching.none === true) { return; } @@ -636,8 +636,37 @@ Phaser.Utils.Debug.prototype = { this.start(0, 0, color); - this.context.fillStyle = color; - this.context.fillRect(sprite.body.screenX, sprite.body.screenY, sprite.body.width, sprite.body.height); + // this.context.fillStyle = color; + // this.context.fillRect(sprite.body.screenX, sprite.body.screenY, sprite.body.width, sprite.body.height); + + this.context.beginPath(); + this.context.strokeStyle = '#000000'; + + if (sprite.body.touching.up) + { + this.context.moveTo(sprite.body.x, sprite.body.y); + this.context.lineTo(sprite.body.x + sprite.body.width, sprite.body.y); + } + + if (sprite.body.touching.down) + { + this.context.moveTo(sprite.body.x, sprite.body.y + sprite.body.height); + this.context.lineTo(sprite.body.x + sprite.body.width, sprite.body.y + sprite.body.height); + } + + if (sprite.body.touching.left) + { + this.context.moveTo(sprite.body.x, sprite.body.y); + this.context.lineTo(sprite.body.x, sprite.body.y + sprite.body.height); + } + + if (sprite.body.touching.right) + { + this.context.moveTo(sprite.body.x + sprite.body.width, sprite.body.y); + this.context.lineTo(sprite.body.x + sprite.body.width, sprite.body.y + sprite.body.height); + } + + this.context.stroke(); this.stop(); @@ -670,9 +699,18 @@ Phaser.Utils.Debug.prototype = { } else { - this.context.strokeStyle = color; - this.context.strokeRect(sprite.bounds.x, sprite.bounds.y, sprite.bounds.width, sprite.bounds.height); - this.context.stroke(); + // this.context.strokeStyle = color; + // this.context.strokeRect(sprite.bounds.x, sprite.bounds.y, sprite.bounds.width, sprite.bounds.height); + // this.context.strokeRect(sprite.body.x, sprite.body.y, sprite.body.width, sprite.body.height); + // this.context.strokeRect(sprite.body.hull.x, sprite.body.hull.y, sprite.body.hull.width, sprite.body.hull.height); + // this.context.stroke(); + + // this.context.strokeStyle = '#ff0000'; + // this.context.strokeRect(sprite.body.hullX.x, sprite.body.hullX.y, sprite.body.hullX.width, sprite.body.hullX.height); + // this.context.stroke(); + // this.context.strokeStyle = '#00ff00'; + // this.context.strokeRect(sprite.body.hullY.x, sprite.body.hullY.y, sprite.body.hullY.width, sprite.body.hullY.height); + // this.context.stroke(); } this.stop(); From 1f513a333ede16df7c209f09cc64ce8842a7c105 Mon Sep 17 00:00:00 2001 From: photonstorm Date: Fri, 6 Dec 2013 01:07:25 +0000 Subject: [PATCH 015/154] Fixed an issue where passing null as the Group parent wouldn't set it to game.world as it should have (thanks tito100). Continued work on the tilemap collision - again, please don't use this version if you need working tilemaps. --- README.md | 1 + examples/wip/tilemap.js | 10 +-- src/core/Group.js | 24 +++---- src/gameobjects/GameObjectFactory.js | 2 +- src/geom/Rectangle.js | 9 ++- src/physics/arcade/ArcadePhysics.js | 75 +++++++++++++--------- src/physics/arcade/Body.js | 96 +++++++++++++++------------- 7 files changed, 123 insertions(+), 94 deletions(-) diff --git a/README.md b/README.md index 92cfd002..fd5681c8 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ Bug Fixes: * Moved 'dirty' flag for Tilemap to a per-layer flag. Fixes #242 * Group.length now returns the number of children in the Group regardless of their exists/alive state, or 0 if the Group is has no children. * Switch Camera.setBoundsToWorld to match world.bounds instead of world (thanks cocoademon) +* Fixed an issue where passing null as the Group parent wouldn't set it to game.world as it should have (thanks tito100) You can view the Change Log for all previous versions at https://github.com/photonstorm/phaser/changelog.md diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js index 7de691ee..09e8517f 100644 --- a/examples/wip/tilemap.js +++ b/examples/wip/tilemap.js @@ -36,8 +36,8 @@ function create() { // this screws something up - not quite sure what, but needs investigating! // layer.resizeWorld(); - sprite = game.add.sprite(120, 510, 'phaser'); - sprite.anchor.setTo(0.5, 0.5); + sprite = game.add.sprite(120, 450, 'phaser'); + // sprite.anchor.setTo(0.5, 0.5); // sprite.angle = 5; // game.camera.follow(sprite); @@ -96,12 +96,12 @@ function update() { if (cursors.left.isDown) { sprite.body.velocity.x = -150; - sprite.scale.x = -1; + // sprite.scale.x = -1; } else if (cursors.right.isDown) { sprite.body.velocity.x = 150; - sprite.scale.x = 1; + // sprite.scale.x = 1; } @@ -113,6 +113,6 @@ function render() { // game.debug.renderSpriteBounds(sprite); game.debug.renderText(sprite.x, 32, 32); - game.debug.renderText(sprite.y, 32, 64); + game.debug.renderText(sprite.y, 32, 48); } \ No newline at end of file diff --git a/src/core/Group.js b/src/core/Group.js index fdf199e3..0fe18896 100644 --- a/src/core/Group.js +++ b/src/core/Group.js @@ -10,32 +10,32 @@ * @classdesc A Group is a container for display objects that allows for fast pooling, recycling and collision checks. * @constructor * @param {Phaser.Game} game - A reference to the currently running game. -* @param {*} parent - The parent Group or DisplayObjectContainer that will hold this group, if any. +* @param {*} parent - The parent Group or DisplayObjectContainer that will hold this group, if any. If not set, or set to null, it will use game.world. * @param {string} [name=group] - A name for this Group. Not used internally but useful for debugging. * @param {boolean} [useStage=false] - Should the DisplayObjectContainer this Group creates be added to the World (default, false) or direct to the Stage (true). */ Phaser.Group = function (game, parent, name, useStage) { - if (typeof parent === 'undefined' || typeof parent === null) + /** + * @property {Phaser.Game} game - A reference to the currently running Game. + */ + this.game = game; + + if (typeof parent === 'undefined' || parent === null) { parent = game.world; } + /** + * @property {string} name - A name for this Group. Not used internally but useful for debugging. + */ + this.name = name || 'group'; + if (typeof useStage === 'undefined') { useStage = false; } - /** - * @property {Phaser.Game} game - A reference to the currently running Game. - */ - this.game = game; - - /** - * @property {string} name - A name for this Group. Not used internally but useful for debugging. - */ - this.name = name || 'group'; - if (useStage) { this._container = this.game.stage._stage; diff --git a/src/gameobjects/GameObjectFactory.js b/src/gameobjects/GameObjectFactory.js index 872b89ff..4996b334 100644 --- a/src/gameobjects/GameObjectFactory.js +++ b/src/gameobjects/GameObjectFactory.js @@ -90,7 +90,7 @@ Phaser.GameObjectFactory.prototype = { * * @method Phaser.GameObjectFactory#group * @param {*} parent - The parent Group or DisplayObjectContainer that will hold this group, if any. - * @param {string} [name=group] - A name for this Group. Not used internally but useful for debugging. + * @param {string} [name='group'] - A name for this Group. Not used internally but useful for debugging. * @return {Phaser.Group} The newly created group. */ group: function (parent, name) { diff --git a/src/geom/Rectangle.js b/src/geom/Rectangle.js index c27aca20..db9c4c79 100644 --- a/src/geom/Rectangle.js +++ b/src/geom/Rectangle.js @@ -644,7 +644,14 @@ Phaser.Rectangle.intersection = function (a, b, out) { */ Phaser.Rectangle.intersects = function (a, b) { - return (a.x < b.right && b.x < a.right && a.y < b.bottom && b.y < a.bottom); + if (a.width <= 0 || a.height <= 0 || b.width <= 0 || b.height <= 0) + { + return false; + } + + return !(a.right < b.x || a.bottom < b.y || a.x > b.right || a.y > b.bottom); + + // return (a.x < b.right && b.x < a.right && a.y < b.bottom && b.y < a.bottom); // return (a.x <= b.right && b.x <= a.right && a.y <= b.bottom && b.y <= a.bottom); diff --git a/src/physics/arcade/ArcadePhysics.js b/src/physics/arcade/ArcadePhysics.js index ad3b1057..ca382870 100644 --- a/src/physics/arcade/ArcadePhysics.js +++ b/src/physics/arcade/ArcadePhysics.js @@ -566,6 +566,8 @@ Phaser.Physics.Arcade.prototype = { return; } + console.log('collideSpriteVsTilemapLayer', this._mapData.length); + for (var i = 0; i < this._mapData.length; i++) { if (this.separateTile(sprite.body, this._mapData[i])) @@ -1006,20 +1008,27 @@ Phaser.Physics.Arcade.prototype = { return false; } - var overlapX = 0; - var overlapY = 0; + // use body var instead + body.overlapX = 0; + body.overlapY = 0; - console.log('x', tile.x, 'y', tile.y, 'r', tile.right, 'b', tile.bottom); - console.log('x', body.x, 'y', body.y, 'r', body.right, 'b', body.bottom); - console.log(Phaser.Rectangle.intersects(body, tile)); + // Remember - this happens AFTER the body has been moved by the motion update, so it needs moving back again + // console.log('---------------------------------------------------------------------------------------------'); + // console.log('tx', tile.x, 'ty', tile.y, 'tw', tile.width, 'th', tile.height, 'tr', tile.right, 'tb', tile.bottom); + // console.log('bx', body.x, 'by', body.y, 'bw', body.width, 'bh', body.height, 'br', body.right, 'bb', body.bottom); + // console.log(Phaser.Rectangle.intersects(body, tile)); + // console.log('dx', body.deltaX(), 'dy', body.deltaY(), 'dax', body.deltaAbsX(), 'day', body.deltaAbsY(), 'cax', Math.ceil(body.deltaAbsX()), 'cay', Math.ceil(body.deltaAbsY())); if (body.deltaX() < 0 && body.allowCollision.left && tile.tile.faceRight) { // LEFT - if (tile.right - body.x < Math.ceil(body.deltaAbsX())) - { - overlapX = tile.right - body.x; + body.overlapX = body.x - tile.right; + if (body.overlapX > body.deltaX()) + { + console.log('left overlapX', body.overlapX); + // use touching instead of blocked? + body.blocked.left = true; body.touching.left = true; body.touching.none = false; } @@ -1027,10 +1036,13 @@ Phaser.Physics.Arcade.prototype = { else if (body.deltaX() > 0 && body.allowCollision.right && tile.tile.faceLeft) { // RIGHT - if (body.right - tile.x < Math.ceil(body.deltaAbsX())) - { - overlapX = tile.x - body.right; + body.overlapX = body.right - tile.x; + // Distance check + if (body.overlapX < body.deltaX()) + { + console.log('right overlapX', body.overlapX); + body.blocked.right = true; body.touching.right = true; body.touching.none = false; } @@ -1039,10 +1051,13 @@ Phaser.Physics.Arcade.prototype = { if (body.deltaY() < 0 && body.allowCollision.up && tile.tile.faceBottom) { // UP - if (tile.bottom - body.y < Math.ceil(body.deltaAbsY())) - { - overlapY = tile.bottom - body.y; + body.overlapY = body.y - tile.bottom; + // Distance check + if (body.overlapY > body.deltaY()) + { + console.log('up overlapY', body.overlapY); + body.blocked.up = true; body.touching.up = true; body.touching.none = false; } @@ -1050,10 +1065,12 @@ Phaser.Physics.Arcade.prototype = { else if (body.deltaY() > 0 && body.allowCollision.down && tile.tile.faceTop) { // DOWN - if (body.bottom - tile.y < Math.ceil(body.deltaAbsY())) - { - overlapY = tile.y - body.bottom; + body.overlapY = body.bottom - tile.y; + if (body.overlapY < body.deltaY()) + { + console.log('down overlapY', body.overlapY); + body.blocked.down = true; body.touching.down = true; body.touching.none = false; } @@ -1061,40 +1078,38 @@ Phaser.Physics.Arcade.prototype = { // Separate in a single sweep - if (overlapX === 0 && overlapY === 0) + if (body.touching.none) { return false; } - if (overlapX !== 0) + if (body.overlapX !== 0) { - // body.overlapX = overlapX; - body.x += overlapX; - body.preX = body.x; + body.x -= body.overlapX; + body.preX -= body.overlapX; if (body.bounce.x === 0) { - body.velocity.x = 0; + // body.velocity.x = 0; } else { - body.velocity.x = -body.velocity.x * body.bounce.x; + // body.velocity.x = -body.velocity.x * body.bounce.x; } } - if (overlapY !== 0) + if (body.overlapY !== 0) { - // body.overlapY = overlapY; - body.y += overlapY; - body.preY = body.y; + body.y -= body.overlapY; + body.preY -= body.overlapY; if (body.bounce.y === 0) { - body.velocity.y = 0; + // body.velocity.y = 0; } else { - body.velocity.y = -body.velocity.y * body.bounce.y; + // body.velocity.y = -body.velocity.y * body.bounce.y; } } diff --git a/src/physics/arcade/Body.js b/src/physics/arcade/Body.js index ac217b70..a7dd54ac 100644 --- a/src/physics/arcade/Body.js +++ b/src/physics/arcade/Body.js @@ -207,6 +207,7 @@ Phaser.Physics.Arcade.Body = function (sprite) { * For example allowCollision.up = false means it won't collide when the collision happened while moving up. * @property {object} allowCollision - An object containing allowed collision. */ + // This would be faster as an array this.allowCollision = { none: false, any: true, up: true, down: true, left: true, right: true }; /** @@ -214,12 +215,14 @@ Phaser.Physics.Arcade.Body = function (sprite) { * touching.up = true means the collision happened to the top of this Body for example. * @property {object} touching - An object containing touching results. */ + // This would be faster as an array this.touching = { none: true, up: false, down: false, left: false, right: false }; /** * This object is populated with previous touching values from the bodies previous collision. * @property {object} wasTouching - An object containing previous touching results. */ + // This would be faster as an array this.wasTouching = { none: true, up: false, down: false, left: false, right: false }; /** @@ -310,6 +313,8 @@ Phaser.Physics.Arcade.Body = function (sprite) { */ this.collideWorldBounds = false; + this.blocked = { up: false, down: false, left: false, right: false }; + }; Phaser.Physics.Arcade.Body.prototype = { @@ -370,8 +375,13 @@ Phaser.Physics.Arcade.Body.prototype = { this.y = this.preY; this.rotation = this.preRotation; - this.overlapX = 0; - this.overlapY = 0; + // this.overlapX = 0; + // this.overlapY = 0; + + this.blocked.up = false; + this.blocked.down = false; + this.blocked.left = false; + this.blocked.right = false; if (this.moves) { @@ -406,60 +416,56 @@ Phaser.Physics.Arcade.Body.prototype = { */ postUpdate: function () { - if (this.deltaX() < 0) + // if (this.overlapX !== 0) + // { + // this.x -= this.overlapX; + // } + + // if (this.overlapY !== 0) + // { + // this.y -= this.overlapY; + // } + + if (this.deltaX() < 0 && this.blocked.left === false) { this.facing = Phaser.LEFT; + this.sprite.x += this.deltaX(); } - else if (this.deltaX() > 0) + else if (this.deltaX() > 0 && this.blocked.right === false) { this.facing = Phaser.RIGHT; + this.sprite.x += this.deltaX(); } - if (this.deltaY() < 0) + if (this.deltaY() < 0 && this.blocked.up === false) { this.facing = Phaser.UP; + this.sprite.y += this.deltaY(); } - else if (this.deltaY() > 0) + else if (this.deltaY() > 0 && this.blocked.down === false) { this.facing = Phaser.DOWN; - } - - /* - if (this.overlapX !== 0) - { - this.sprite.x += this.overlapX; - } - else - { - if (this.deltaX() !== 0) - { - this.sprite.x += this.deltaX(); - } - } - - if (this.overlapY !== 0) - { - this.sprite.y += this.overlapY; - } - else - { - if (this.deltaY() !== 0) - { - this.sprite.y += this.deltaY(); - } - } - */ - - if (this.deltaX() !== 0 || this.deltaY() !== 0) - { - // console.log('dx', this.deltaX()); - // console.log('dy', this.deltaY()); - - this.sprite.x += this.deltaX(); this.sprite.y += this.deltaY(); - this.center.setTo(this.x + this.halfWidth, this.y + this.halfHeight); } + // if (this.deltaY() !== 0 && this.blocked.up === false && this.blocked.down === false) + // { + // this.sprite.y += this.deltaY(); + // } + + // if (this.deltaX() !== 0 || this.deltaY() !== 0) + // { + // this.sprite.x += this.deltaX(); + // this.sprite.y += this.deltaY(); + + // this.center.setTo(this.x + this.halfWidth, this.y + this.halfHeight); + // } + + // if (this.deltaX() !== 0 || this.deltaY() !== 0) + // { + this.center.setTo(this.x + this.halfWidth, this.y + this.halfHeight); + // } + if (this.allowRotation) { this.sprite.angle += this.deltaZ(); @@ -599,7 +605,7 @@ Phaser.Physics.Arcade.Body.prototype = { * Returns the delta x value. The difference between Body.x now and in the previous step. * * @method Phaser.Physics.Arcade.Body#deltaX - * @return {number} The delta value. + * @return {number} The delta value. Positive if the motion was to the right, negative if to the left. */ deltaX: function () { return this.x - this.preX; @@ -609,7 +615,7 @@ Phaser.Physics.Arcade.Body.prototype = { * Returns the delta y value. The difference between Body.y now and in the previous step. * * @method Phaser.Physics.Arcade.Body#deltaY - * @return {number} The delta value. + * @return {number} The delta value. Positive if the motion was downwards, negative if upwards. */ deltaY: function () { return this.y - this.preY; @@ -633,7 +639,7 @@ Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, "bottom", { * @return {number} */ get: function () { - return this.y + this.height; + return Math.floor(this.y + this.height); }, /** @@ -669,7 +675,7 @@ Object.defineProperty(Phaser.Physics.Arcade.Body.prototype, "right", { * @return {number} */ get: function () { - return this.x + this.width; + return Math.floor(this.x + this.width); }, /** From 8e289e6b7cb4c8c508b88ed908943cbd8f5bfaba Mon Sep 17 00:00:00 2001 From: photonstorm Date: Fri, 6 Dec 2013 02:34:28 +0000 Subject: [PATCH 016/154] Mostly working, just need to apply a max overlap to avoid tunneling, although a ray would be better. --- examples/wip/tilemap.js | 24 ++-- src/gameobjects/Sprite.js | 2 + src/physics/arcade/ArcadePhysics.js | 170 +++++++++++++++++++++++++--- 3 files changed, 171 insertions(+), 25 deletions(-) diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js index 09e8517f..7ca46b37 100644 --- a/examples/wip/tilemap.js +++ b/examples/wip/tilemap.js @@ -6,7 +6,9 @@ function preload() { game.load.tilemap('map', 'assets/maps/newtest.json', null, Phaser.Tilemap.TILED_JSON); game.load.tileset('tiles', 'assets/maps/ground_1x1.png', 32, 32); // game.load.image('phaser', 'assets/sprites/phaser-ship.png'); - game.load.image('phaser', 'assets/sprites/mushroom2.png'); + // game.load.image('phaser', 'assets/sprites/mushroom2.png'); + // game.load.image('phaser', 'assets/sprites/wabbit.png'); + game.load.image('phaser', 'assets/sprites/arrow.png'); } @@ -36,9 +38,9 @@ function create() { // this screws something up - not quite sure what, but needs investigating! // layer.resizeWorld(); - sprite = game.add.sprite(120, 450, 'phaser'); - // sprite.anchor.setTo(0.5, 0.5); - // sprite.angle = 5; + sprite = game.add.sprite(200, 420, 'phaser'); + sprite.anchor.setTo(0.5, 0.5); + sprite.angle = 35; // game.camera.follow(sprite); @@ -84,23 +86,25 @@ function update() { sprite.body.velocity.x = 0; sprite.body.velocity.y = 0; + sprite.angle = sprite.angle + 1; + if (cursors.up.isDown) { - sprite.body.velocity.y = -150; + sprite.body.velocity.y = -900; } else if (cursors.down.isDown) { - sprite.body.velocity.y = 150; + sprite.body.velocity.y = 900; } if (cursors.left.isDown) { - sprite.body.velocity.x = -150; + sprite.body.velocity.x = -900; // sprite.scale.x = -1; } else if (cursors.right.isDown) { - sprite.body.velocity.x = 150; + sprite.body.velocity.x = 900; // sprite.scale.x = 1; } @@ -109,8 +113,8 @@ function update() { function render() { - game.debug.renderSpriteBody(sprite); - // game.debug.renderSpriteBounds(sprite); + // game.debug.renderSpriteBody(sprite); + game.debug.renderSpriteBounds(sprite); game.debug.renderText(sprite.x, 32, 32); game.debug.renderText(sprite.y, 32, 48); diff --git a/src/gameobjects/Sprite.js b/src/gameobjects/Sprite.js index de08e4c2..27b4d79f 100644 --- a/src/gameobjects/Sprite.js +++ b/src/gameobjects/Sprite.js @@ -680,6 +680,8 @@ Phaser.Sprite.prototype.postUpdate = function() { if (this.body) { this.body.postUpdate(); + this.x = Math.round(this.x); + this.y = Math.round(this.y); } if (this.fixedToCamera) diff --git a/src/physics/arcade/ArcadePhysics.js b/src/physics/arcade/ArcadePhysics.js index ca382870..1dd65f13 100644 --- a/src/physics/arcade/ArcadePhysics.js +++ b/src/physics/arcade/ArcadePhysics.js @@ -566,10 +566,14 @@ Phaser.Physics.Arcade.prototype = { return; } - console.log('collideSpriteVsTilemapLayer', this._mapData.length); - - for (var i = 0; i < this._mapData.length; i++) + if (this._mapData.length > 1) { + // console.log(' multi sep ---------------------------------------------------------------------------------------------'); + this.separateTiles(sprite.body, this._mapData); + } + else + { + var i = 0; if (this.separateTile(sprite.body, this._mapData[i])) { // They collided, is there a custom process callback? @@ -1000,14 +1004,150 @@ Phaser.Physics.Arcade.prototype = { }, + separateTiles: function (body, tiles) { + + // Can't separate two immovable objects (tiles are always immovable) + if (body.immovable) + { + return false; + } + + body.overlapX = 0; + body.overlapY = 0; + + var tile; + var localOverlapX = 0; + var localOverlapY = 0; + + for (var i = 0; i < tiles.length; i++) + { + tile = tiles[i]; + + if (Phaser.Rectangle.intersects(body, tile)) + { + if (body.deltaX() < 0 && body.allowCollision.left && tile.tile.faceRight) + { + // LEFT + localOverlapX = body.x - tile.right; + + if (localOverlapX >= body.deltaX()) + { + console.log('m left overlapX', localOverlapX, body.deltaX(), this.game.time.physicsElapsed); + // use touching instead of blocked? + body.blocked.left = true; + body.touching.left = true; + body.touching.none = false; + } + } + else if (body.deltaX() > 0 && body.allowCollision.right && tile.tile.faceLeft) + { + // RIGHT + localOverlapX = body.right - tile.x; + + // Distance check + if (localOverlapX <= body.deltaX()) + { + console.log('m right overlapX', localOverlapX, body.deltaX(), this.game.time.physicsElapsed); + body.blocked.right = true; + body.touching.right = true; + body.touching.none = false; + } + } + + if (body.deltaY() < 0 && body.allowCollision.up && tile.tile.faceBottom) + { + // UP + localOverlapY = body.y - tile.bottom; + + // Distance check + if (localOverlapY >= body.deltaY()) + { + console.log('m up overlapY', localOverlapY, body.deltaY(), this.game.time.physicsElapsed); + body.blocked.up = true; + body.touching.up = true; + body.touching.none = false; + } + } + else if (body.deltaY() > 0 && body.allowCollision.down && tile.tile.faceTop) + { + // DOWN + localOverlapY = body.bottom - tile.y; + + if (localOverlapY <= body.deltaY()) + { + console.log('m down overlapY', localOverlapY, body.deltaY(), this.game.time.physicsElapsed); + body.blocked.down = true; + body.touching.down = true; + body.touching.none = false; + } + } + } + } + + if (localOverlapX !== 0) + { + body.overlapX = localOverlapX; + } + + if (localOverlapY !== 0) + { + body.overlapY = localOverlapY; + } + + if (body.touching.none) + { + return false; + } + + if (body.overlapX !== 0) + { + body.x -= body.overlapX; + body.preX -= body.overlapX; + + if (body.bounce.x === 0) + { + body.velocity.x = 0; + } + else + { + body.velocity.x = -body.velocity.x * body.bounce.x; + } + } + + if (body.overlapY !== 0) + { + body.y -= body.overlapY; + body.preY -= body.overlapY; + + if (body.bounce.y === 0) + { + body.velocity.y = 0; + } + else + { + body.velocity.y = -body.velocity.y * body.bounce.y; + } + } + + return true; + + + }, + separateTile: function (body, tile) { // Can't separate two immovable objects (tiles are always immovable) if (body.immovable || Phaser.Rectangle.intersects(body, tile) === false) { + // console.log('no intersects'); + // console.log('tx', tile.x, 'ty', tile.y, 'tw', tile.width, 'th', tile.height, 'tr', tile.right, 'tb', tile.bottom); + // console.log('bx', body.x, 'by', body.y, 'bw', body.width, 'bh', body.height, 'br', body.right, 'bb', body.bottom); return false; } + var maxOverlapX = Math.round(tile.width / 2); + var maxOverlapY = Math.round(tile.height / 2); + // use body var instead body.overlapX = 0; body.overlapY = 0; @@ -1024,9 +1164,9 @@ Phaser.Physics.Arcade.prototype = { // LEFT body.overlapX = body.x - tile.right; - if (body.overlapX > body.deltaX()) + if (body.overlapX >= body.deltaX()) { - console.log('left overlapX', body.overlapX); + console.log('left overlapX', body.overlapX, body.deltaX(), this.game.time.physicsElapsed); // use touching instead of blocked? body.blocked.left = true; body.touching.left = true; @@ -1039,9 +1179,9 @@ Phaser.Physics.Arcade.prototype = { body.overlapX = body.right - tile.x; // Distance check - if (body.overlapX < body.deltaX()) + if (body.overlapX <= body.deltaX()) { - console.log('right overlapX', body.overlapX); + console.log('right overlapX', body.overlapX, body.deltaX(), this.game.time.physicsElapsed); body.blocked.right = true; body.touching.right = true; body.touching.none = false; @@ -1054,9 +1194,9 @@ Phaser.Physics.Arcade.prototype = { body.overlapY = body.y - tile.bottom; // Distance check - if (body.overlapY > body.deltaY()) + if (body.overlapY >= body.deltaY()) { - console.log('up overlapY', body.overlapY); + console.log('up overlapY', body.overlapY, body.deltaY(), this.game.time.physicsElapsed); body.blocked.up = true; body.touching.up = true; body.touching.none = false; @@ -1067,9 +1207,9 @@ Phaser.Physics.Arcade.prototype = { // DOWN body.overlapY = body.bottom - tile.y; - if (body.overlapY < body.deltaY()) + if (body.overlapY <= body.deltaY()) { - console.log('down overlapY', body.overlapY); + console.log('down overlapY', body.overlapY, body.deltaY(), this.game.time.physicsElapsed); body.blocked.down = true; body.touching.down = true; body.touching.none = false; @@ -1090,11 +1230,11 @@ Phaser.Physics.Arcade.prototype = { if (body.bounce.x === 0) { - // body.velocity.x = 0; + body.velocity.x = 0; } else { - // body.velocity.x = -body.velocity.x * body.bounce.x; + body.velocity.x = -body.velocity.x * body.bounce.x; } } @@ -1105,11 +1245,11 @@ Phaser.Physics.Arcade.prototype = { if (body.bounce.y === 0) { - // body.velocity.y = 0; + body.velocity.y = 0; } else { - // body.velocity.y = -body.velocity.y * body.bounce.y; + body.velocity.y = -body.velocity.y * body.bounce.y; } } From ca3c71e8f54d493d4c32cb85dbbd38389fefd3a5 Mon Sep 17 00:00:00 2001 From: photonstorm Date: Fri, 6 Dec 2013 02:44:06 +0000 Subject: [PATCH 017/154] Added max overlap clamp. --- examples/wip/tilemap.js | 3 +- src/physics/arcade/ArcadePhysics.js | 43 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js index 7ca46b37..75847531 100644 --- a/examples/wip/tilemap.js +++ b/examples/wip/tilemap.js @@ -8,7 +8,8 @@ function preload() { // game.load.image('phaser', 'assets/sprites/phaser-ship.png'); // game.load.image('phaser', 'assets/sprites/mushroom2.png'); // game.load.image('phaser', 'assets/sprites/wabbit.png'); - game.load.image('phaser', 'assets/sprites/arrow.png'); + // game.load.image('phaser', 'assets/sprites/arrow.png'); + game.load.image('phaser', 'assets/sprites/darkwing_crazy.png'); } diff --git a/src/physics/arcade/ArcadePhysics.js b/src/physics/arcade/ArcadePhysics.js index 1dd65f13..c80fd100 100644 --- a/src/physics/arcade/ArcadePhysics.js +++ b/src/physics/arcade/ArcadePhysics.js @@ -1018,6 +1018,8 @@ Phaser.Physics.Arcade.prototype = { var tile; var localOverlapX = 0; var localOverlapY = 0; + var maxOverlapX = Math.round(tiles[0].width / 2); + var maxOverlapY = Math.round(tiles[0].height / 2); for (var i = 0; i < tiles.length; i++) { @@ -1030,6 +1032,11 @@ Phaser.Physics.Arcade.prototype = { // LEFT localOverlapX = body.x - tile.right; + if (localOverlapX < -maxOverlapX) + { + localOverlapX = 0; + } + if (localOverlapX >= body.deltaX()) { console.log('m left overlapX', localOverlapX, body.deltaX(), this.game.time.physicsElapsed); @@ -1044,6 +1051,11 @@ Phaser.Physics.Arcade.prototype = { // RIGHT localOverlapX = body.right - tile.x; + if (localOverlapX > maxOverlapX) + { + localOverlapX = 0; + } + // Distance check if (localOverlapX <= body.deltaX()) { @@ -1059,6 +1071,12 @@ Phaser.Physics.Arcade.prototype = { // UP localOverlapY = body.y - tile.bottom; + // negatives + if (localOverlapY < -maxOverlapY) + { + localOverlapY = 0; + } + // Distance check if (localOverlapY >= body.deltaY()) { @@ -1073,6 +1091,11 @@ Phaser.Physics.Arcade.prototype = { // DOWN localOverlapY = body.bottom - tile.y; + if (localOverlapY > maxOverlapY) + { + localOverlapY = 0; + } + if (localOverlapY <= body.deltaY()) { console.log('m down overlapY', localOverlapY, body.deltaY(), this.game.time.physicsElapsed); @@ -1164,6 +1187,11 @@ Phaser.Physics.Arcade.prototype = { // LEFT body.overlapX = body.x - tile.right; + if (body.overlapX < -maxOverlapX) + { + body.overlapX = 0; + } + if (body.overlapX >= body.deltaX()) { console.log('left overlapX', body.overlapX, body.deltaX(), this.game.time.physicsElapsed); @@ -1178,6 +1206,11 @@ Phaser.Physics.Arcade.prototype = { // RIGHT body.overlapX = body.right - tile.x; + if (body.overlapX > maxOverlapX) + { + body.overlapX = 0; + } + // Distance check if (body.overlapX <= body.deltaX()) { @@ -1193,6 +1226,11 @@ Phaser.Physics.Arcade.prototype = { // UP body.overlapY = body.y - tile.bottom; + if (body.overlapY < -maxOverlapY) + { + body.overlapY = 0; + } + // Distance check if (body.overlapY >= body.deltaY()) { @@ -1207,6 +1245,11 @@ Phaser.Physics.Arcade.prototype = { // DOWN body.overlapY = body.bottom - tile.y; + if (body.overlapY > maxOverlapY) + { + body.overlapY = 0; + } + if (body.overlapY <= body.deltaY()) { console.log('down overlapY', body.overlapY, body.deltaY(), this.game.time.physicsElapsed); From 886618c05605292a1036cc80d8074728a044d750 Mon Sep 17 00:00:00 2001 From: photonstorm Date: Fri, 6 Dec 2013 04:34:27 +0000 Subject: [PATCH 018/154] Tilemap collision fixed, regardless of rotation, number of overlapping tiles and speed (to a point anyway). Maps also don't crash if they are smaller than the render area. Layers can be positioned successfully anywhere in camera but collision isn't yet offset for this. --- examples/wip/tilemap.js | 100 +++++++--- src/core/Camera.js | 8 +- src/core/World.js | 14 +- src/gameobjects/Sprite.js | 2 - src/physics/arcade/ArcadePhysics.js | 272 +++------------------------- src/tilemap/TilemapLayer.js | 62 +++++-- src/utils/Debug.js | 15 +- 7 files changed, 175 insertions(+), 298 deletions(-) diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js index 75847531..9cbb2036 100644 --- a/examples/wip/tilemap.js +++ b/examples/wip/tilemap.js @@ -5,17 +5,18 @@ function preload() { game.load.tilemap('map', 'assets/maps/newtest.json', null, Phaser.Tilemap.TILED_JSON); game.load.tileset('tiles', 'assets/maps/ground_1x1.png', 32, 32); - // game.load.image('phaser', 'assets/sprites/phaser-ship.png'); + game.load.image('phaser', 'assets/sprites/phaser-ship.png'); // game.load.image('phaser', 'assets/sprites/mushroom2.png'); // game.load.image('phaser', 'assets/sprites/wabbit.png'); // game.load.image('phaser', 'assets/sprites/arrow.png'); - game.load.image('phaser', 'assets/sprites/darkwing_crazy.png'); + // game.load.image('phaser', 'assets/sprites/darkwing_crazy.png'); } var cursors; var map; var layer; +var layer2; var sprite; function create() { @@ -28,48 +29,63 @@ function create() { // Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, tileset, tilemap, layer) { - layer = game.add.tilemapLayer(0, 0, 800, 600, null, map, 0); + // layer = game.add.tilemapLayer(0, 0, 800, 600, null, map, 0); + layer = game.add.tilemapLayer(0, 0, 400, 600, null, map, 0); + + // layer2 = game.add.tilemapLayer(0, 0, 400, 600, null, map, 0); + layer.cameraOffset.x = 400; // tileset = game.add.tileset('tilesNes'); // layer = game.add.tilemapLayer(0, 0, map.layers[0].width*tilesetNes.tileWidth, 600, tileset, map, 0); - // disable this and you can place anywhere, but will almost certainly screw collision - // layer.fixedToCamera=false; - // this screws something up - not quite sure what, but needs investigating! - // layer.resizeWorld(); + layer.resizeWorld(); - sprite = game.add.sprite(200, 420, 'phaser'); + sprite = game.add.sprite(260, 100, 'phaser'); sprite.anchor.setTo(0.5, 0.5); - sprite.angle = 35; - // game.camera.follow(sprite); + // We'll set a lower max angular velocity here to keep it from going totally nuts + sprite.body.maxAngular = 500; + + // Apply a drag otherwise the sprite will just spin and never slow down + sprite.body.angularDrag = 50; + + // sprite.body.drag.x = 50; + // sprite.body.drag.y = 20; + + // sprite.body.velocity.x = 50; + + sprite.body.bounce.x = 0.8; + sprite.body.bounce.y = 0.8; + + // sprite.angle = 35; + + game.camera.follow(sprite); + + game.input.onDown.add(getIt, this); cursors = game.input.keyboard.createCursorKeys(); - game.input.onDown.add(dump, this); - - } -function dump() { +function getIt() { - console.log(sprite.bounds); - console.log(sprite.body.hull); - console.log('wy', sprite.world.y); + console.log('cam', game.camera.bounds); + console.log('w', game.world.bounds); + // console.log(layer.getTiles(sprite.body.x, sprite.body.y, sprite.body.width, sprite.body.height, true, true)); } function update() { - /* +/* if (cursors.left.isDown) { - layer.scrollX -= 4; + game.camera.x -= 1; } else if (cursors.right.isDown) { - layer.scrollX += 4; + game.camera.x += 1; } if (cursors.up.isDown) @@ -80,10 +96,42 @@ function update() { { layer.scrollY += 4; } - */ - +*/ game.physics.collide(sprite, layer); + sprite.body.velocity.x = 0; + sprite.body.velocity.y = 0; + sprite.body.angularVelocity = 0; + + // sprite.body.acceleration.x = 0; + // sprite.body.angularAcceleration = 0; + + if (cursors.left.isDown) + { + // sprite.body.acceleration.x = -200; + sprite.body.angularVelocity = -300; + // sprite.body.angularAcceleration -= 200; + } + else if (cursors.right.isDown) + { + // sprite.body.acceleration.x = 200; + sprite.body.angularVelocity = 300; + // sprite.body.angularAcceleration += 200; + } + + if (cursors.up.isDown) + { + game.physics.velocityFromAngle(sprite.angle, 300, sprite.body.velocity); + } + else + { + // game.physics.velocityFromAngle(sprite.angle, sprite.body.velocity, sprite.body.velocity); + } + + + + + /* sprite.body.velocity.x = 0; sprite.body.velocity.y = 0; @@ -108,6 +156,7 @@ function update() { sprite.body.velocity.x = 900; // sprite.scale.x = 1; } + */ } @@ -117,7 +166,10 @@ function render() { // game.debug.renderSpriteBody(sprite); game.debug.renderSpriteBounds(sprite); - game.debug.renderText(sprite.x, 32, 32); - game.debug.renderText(sprite.y, 32, 48); + // game.debug.renderText(sprite.x, 32, 32); + // game.debug.renderText(sprite.y, 32, 48); + + game.debug.renderText(layer.scrollX, 32, 32); + game.debug.renderText(layer.scrollY, 32, 48); } \ No newline at end of file diff --git a/src/core/Camera.js b/src/core/Camera.js index c4181726..98b3449e 100644 --- a/src/core/Camera.js +++ b/src/core/Camera.js @@ -207,28 +207,28 @@ Phaser.Camera.prototype = { if (this.deadzone) { - this._edge = this.target.x - this.deadzone.x; + this._edge = this.target.bounds.x - this.deadzone.x; if (this.view.x > this._edge) { this.view.x = this._edge; } - this._edge = this.target.x + this.target.width - this.deadzone.x - this.deadzone.width; + this._edge = this.target.bounds.right - this.deadzone.x - this.deadzone.width; if (this.view.x < this._edge) { this.view.x = this._edge; } - this._edge = this.target.y - this.deadzone.y; + this._edge = this.target.bounds.y - this.deadzone.y; if (this.view.y > this._edge) { this.view.y = this._edge; } - this._edge = this.target.y + this.target.height - this.deadzone.y - this.deadzone.height; + this._edge = this.target.bounds.bottom - this.deadzone.y - this.deadzone.height; if (this.view.y < this._edge) { diff --git a/src/core/World.js b/src/core/World.js index 9eadf09e..8ad6e8c7 100644 --- a/src/core/World.js +++ b/src/core/World.js @@ -130,7 +130,7 @@ Phaser.World.prototype.postUpdate = function () { /** * Updates the size of this world. Note that this doesn't modify the world x/y coordinates, just the width and height. -* If you need to adjust the bounds of the world +* * @method Phaser.World#setBounds * @param {number} x - Top left most corner of the world. * @param {number} y - Top left most corner of the world. @@ -139,10 +139,22 @@ Phaser.World.prototype.postUpdate = function () { */ Phaser.World.prototype.setBounds = function (x, y, width, height) { + if (width < this.game.width) + { + width = this.game.width; + } + + if (height < this.game.height) + { + height = this.game.height; + } + this.bounds.setTo(x, y, width, height); if (this.camera.bounds) { + // The Camera can never be smaller than the game size + this.camera.bounds.setTo(x, y, width, height); } diff --git a/src/gameobjects/Sprite.js b/src/gameobjects/Sprite.js index 27b4d79f..de08e4c2 100644 --- a/src/gameobjects/Sprite.js +++ b/src/gameobjects/Sprite.js @@ -680,8 +680,6 @@ Phaser.Sprite.prototype.postUpdate = function() { if (this.body) { this.body.postUpdate(); - this.x = Math.round(this.x); - this.y = Math.round(this.y); } if (this.fixedToCamera) diff --git a/src/physics/arcade/ArcadePhysics.js b/src/physics/arcade/ArcadePhysics.js index c80fd100..5bb4fbfa 100644 --- a/src/physics/arcade/ArcadePhysics.js +++ b/src/physics/arcade/ArcadePhysics.js @@ -990,20 +990,12 @@ Phaser.Physics.Arcade.prototype = { }, /** - * The core separation function to separate a physics body and a tile. - * @method Phaser.Physics.Arcade#separateTile + * The core separation function to separate a physics body and an array of tiles. + * @method Phaser.Physics.Arcade#separateTiles * @param {Phaser.Physics.Arcade.Body} body1 - The Body object to separate. * @param {Phaser.Tile} tile - The tile to collide against. * @returns {boolean} Returns true if the bodies were separated, otherwise false. */ - XseparateTile: function (body, tile) { - - this._result = (this.separateTileX(body, tile, true) || this.separateTileY(body, tile, true)); - - return this._result; - - }, - separateTiles: function (body, tiles) { // Can't separate two immovable objects (tiles are always immovable) @@ -1018,8 +1010,6 @@ Phaser.Physics.Arcade.prototype = { var tile; var localOverlapX = 0; var localOverlapY = 0; - var maxOverlapX = Math.round(tiles[0].width / 2); - var maxOverlapY = Math.round(tiles[0].height / 2); for (var i = 0; i < tiles.length; i++) { @@ -1032,14 +1022,9 @@ Phaser.Physics.Arcade.prototype = { // LEFT localOverlapX = body.x - tile.right; - if (localOverlapX < -maxOverlapX) - { - localOverlapX = 0; - } - if (localOverlapX >= body.deltaX()) { - console.log('m left overlapX', localOverlapX, body.deltaX(), this.game.time.physicsElapsed); + console.log('m left overlapX', localOverlapX, body.deltaX()); // use touching instead of blocked? body.blocked.left = true; body.touching.left = true; @@ -1051,15 +1036,10 @@ Phaser.Physics.Arcade.prototype = { // RIGHT localOverlapX = body.right - tile.x; - if (localOverlapX > maxOverlapX) - { - localOverlapX = 0; - } - // Distance check if (localOverlapX <= body.deltaX()) { - console.log('m right overlapX', localOverlapX, body.deltaX(), this.game.time.physicsElapsed); + console.log('m right overlapX', localOverlapX, body.deltaX()); body.blocked.right = true; body.touching.right = true; body.touching.none = false; @@ -1071,16 +1051,10 @@ Phaser.Physics.Arcade.prototype = { // UP localOverlapY = body.y - tile.bottom; - // negatives - if (localOverlapY < -maxOverlapY) - { - localOverlapY = 0; - } - // Distance check if (localOverlapY >= body.deltaY()) { - console.log('m up overlapY', localOverlapY, body.deltaY(), this.game.time.physicsElapsed); + console.log('m up overlapY', localOverlapY, body.deltaY()); body.blocked.up = true; body.touching.up = true; body.touching.none = false; @@ -1091,14 +1065,9 @@ Phaser.Physics.Arcade.prototype = { // DOWN localOverlapY = body.bottom - tile.y; - if (localOverlapY > maxOverlapY) - { - localOverlapY = 0; - } - if (localOverlapY <= body.deltaY()) { - console.log('m down overlapY', localOverlapY, body.deltaY(), this.game.time.physicsElapsed); + console.log('m down overlapY', localOverlapY, body.deltaY()); body.blocked.down = true; body.touching.down = true; body.touching.none = false; @@ -1122,7 +1091,8 @@ Phaser.Physics.Arcade.prototype = { return false; } - if (body.overlapX !== 0) + // if (body.overlapX !== 0) + if (body.touching.left || body.touching.right) { body.x -= body.overlapX; body.preX -= body.overlapX; @@ -1137,7 +1107,8 @@ Phaser.Physics.Arcade.prototype = { } } - if (body.overlapY !== 0) + // if (body.overlapY !== 0) + if (body.touching.up || body.touching.down) { body.y -= body.overlapY; body.preY -= body.overlapY; @@ -1154,9 +1125,15 @@ Phaser.Physics.Arcade.prototype = { return true; - }, + /** + * The core separation function to separate a physics body and a tile. + * @method Phaser.Physics.Arcade#separateTile + * @param {Phaser.Physics.Arcade.Body} body1 - The Body object to separate. + * @param {Phaser.Tile} tile - The tile to collide against. + * @returns {boolean} Returns true if the bodies were separated, otherwise false. + */ separateTile: function (body, tile) { // Can't separate two immovable objects (tiles are always immovable) @@ -1168,9 +1145,6 @@ Phaser.Physics.Arcade.prototype = { return false; } - var maxOverlapX = Math.round(tile.width / 2); - var maxOverlapY = Math.round(tile.height / 2); - // use body var instead body.overlapX = 0; body.overlapY = 0; @@ -1187,14 +1161,9 @@ Phaser.Physics.Arcade.prototype = { // LEFT body.overlapX = body.x - tile.right; - if (body.overlapX < -maxOverlapX) - { - body.overlapX = 0; - } - if (body.overlapX >= body.deltaX()) { - console.log('left overlapX', body.overlapX, body.deltaX(), this.game.time.physicsElapsed); + console.log('left overlapX', body.overlapX, body.deltaX()); // use touching instead of blocked? body.blocked.left = true; body.touching.left = true; @@ -1206,15 +1175,10 @@ Phaser.Physics.Arcade.prototype = { // RIGHT body.overlapX = body.right - tile.x; - if (body.overlapX > maxOverlapX) - { - body.overlapX = 0; - } - // Distance check if (body.overlapX <= body.deltaX()) { - console.log('right overlapX', body.overlapX, body.deltaX(), this.game.time.physicsElapsed); + console.log('right overlapX', body.overlapX, body.deltaX()); body.blocked.right = true; body.touching.right = true; body.touching.none = false; @@ -1226,15 +1190,10 @@ Phaser.Physics.Arcade.prototype = { // UP body.overlapY = body.y - tile.bottom; - if (body.overlapY < -maxOverlapY) - { - body.overlapY = 0; - } - // Distance check if (body.overlapY >= body.deltaY()) { - console.log('up overlapY', body.overlapY, body.deltaY(), this.game.time.physicsElapsed); + console.log('up overlapY', body.overlapY, body.deltaY()); body.blocked.up = true; body.touching.up = true; body.touching.none = false; @@ -1245,14 +1204,9 @@ Phaser.Physics.Arcade.prototype = { // DOWN body.overlapY = body.bottom - tile.y; - if (body.overlapY > maxOverlapY) - { - body.overlapY = 0; - } - if (body.overlapY <= body.deltaY()) { - console.log('down overlapY', body.overlapY, body.deltaY(), this.game.time.physicsElapsed); + console.log('down overlapY', body.overlapY, body.deltaY()); body.blocked.down = true; body.touching.down = true; body.touching.none = false; @@ -1266,7 +1220,8 @@ Phaser.Physics.Arcade.prototype = { return false; } - if (body.overlapX !== 0) + // if (body.overlapX !== 0) + if (body.touching.left || body.touching.right) { body.x -= body.overlapX; body.preX -= body.overlapX; @@ -1281,7 +1236,8 @@ Phaser.Physics.Arcade.prototype = { } } - if (body.overlapY !== 0) + // if (body.overlapY !== 0) + if (body.touching.up || body.touching.down) { body.y -= body.overlapY; body.preY -= body.overlapY; @@ -1300,182 +1256,6 @@ Phaser.Physics.Arcade.prototype = { }, - /** - * The core separation function to separate a physics body and a tile on the x axis. - * @method Phaser.Physics.Arcade#separateTileX - * @param {Phaser.Physics.Arcade.Body} body1 - The Body object to separate. - * @param {Phaser.Tile} tile - The tile to collide against. - * @returns {boolean} Returns true if the bodies were separated, otherwise false. - */ - separateTileX: function (body, tile, separate) { - - // Can't separate two immovable objects (tiles are always immovable) - if (body.immovable || body.deltaX() === 0 || Phaser.Rectangle.intersects(body.hullX, tile) === false) - { - return false; - } - - this._overlap = 0; - - // The hulls overlap, let's process it - // this._maxOverlap = body.deltaAbsX() + this.OVERLAP_BIAS; - - if (body.deltaX() < 0) - { - // Moving left - this._overlap = tile.right - body.hullX.x; - - // if ((this._overlap > this._maxOverlap) || body.allowCollision.left === false || tile.tile.collideRight === false) - if (body.allowCollision.left === false || tile.tile.collideRight === false) - { - this._overlap = 0; - } - else - { - body.touching.left = true; - } - } - else - { - // Moving right - this._overlap = body.hullX.right - tile.x; - - // if ((this._overlap > this._maxOverlap) || body.allowCollision.right === false || tile.tile.collideLeft === false) - if (body.allowCollision.right === false || tile.tile.collideLeft === false) - { - this._overlap = 0; - } - else - { - body.touching.right = true; - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (this._overlap !== 0) - { - if (separate) - { - // console.log('dx1', body.x); - - if (body.deltaX() < 0) - { - body.x = body.x + this._overlap; - } - else - { - body.x = body.x - this._overlap; - } - - // console.log('dx2', body.x, this._overlap); - - if (body.bounce.x === 0) - { - body.velocity.x = 0; - } - else - { - body.velocity.x = -body.velocity.x * body.bounce.x; - } - - body.updateHulls(false); - } - - return true; - } - else - { - return false; - } - - }, - - /** - * The core separation function to separate a physics body and a tile on the x axis. - * @method Phaser.Physics.Arcade#separateTileY - * @param {Phaser.Physics.Arcade.Body} body1 - The Body object to separate. - * @param {Phaser.Tile} tile - The tile to collide against. - * @returns {boolean} Returns true if the bodies were separated, otherwise false. - */ - separateTileY: function (body, tile, separate) { - - // Can't separate two immovable objects (tiles are always immovable) - if (body.immovable || body.deltaY() === 0 || Phaser.Rectangle.intersects(body.hullY, tile) === false) - { - return false; - } - - this._overlap = 0; - - // The hulls overlap, let's process it - // this._maxOverlap = body.deltaAbsY() + this.OVERLAP_BIAS; - - if (body.deltaY() < 0) - { - // Moving up - this._overlap = tile.bottom - body.hullY.y; - - // if ((this._overlap > this._maxOverlap) || body.allowCollision.up === false || tile.tile.collideDown === false) - if (body.allowCollision.up === false || tile.tile.collideDown === false) - { - this._overlap = 0; - } - else - { - body.touching.up = true; - } - } - else - { - // Moving down - this._overlap = body.hullY.bottom - tile.y; - - // if ((this._overlap > this._maxOverlap) || body.allowCollision.down === false || tile.tile.collideUp === false) - if (body.allowCollision.down === false || tile.tile.collideUp === false) - { - this._overlap = 0; - } - else - { - body.touching.down = true; - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (this._overlap !== 0) - { - if (separate) - { - if (body.deltaY() < 0) - { - body.y = body.y + this._overlap; - } - else - { - body.y = body.y - this._overlap; - } - - if (body.bounce.y === 0) - { - body.velocity.y = 0; - } - else - { - body.velocity.y = -body.velocity.y * body.bounce.y; - } - - body.updateHulls(false); - } - - return true; - } - else - { - return false; - } - - }, - /** * Move the given display object towards the destination object at a steady velocity. * If you specify a maxTime then it will adjust the speed (over-writing what you set) so it arrives at the destination in that number of seconds. @@ -1622,7 +1402,7 @@ Phaser.Physics.Arcade.prototype = { /** * Given the rotation (in radians) and speed calculate the acceleration and return it as a Point object, or set it to the given point object. - * One way to use this is: velocityFromRotation(rotation, 200, sprite.velocity) which will set the values directly to the sprites velocity and not create a new Point object. + * One way to use this is: accelerationFromRotation(rotation, 200, sprite.acceleration) which will set the values directly to the sprites acceleration and not create a new Point object. * * @method Phaser.Physics.Arcade#accelerationFromRotation * @param {number} rotation - The angle in radians. diff --git a/src/tilemap/TilemapLayer.js b/src/tilemap/TilemapLayer.js index 1b21bb5b..87dacc31 100644 --- a/src/tilemap/TilemapLayer.js +++ b/src/tilemap/TilemapLayer.js @@ -288,7 +288,7 @@ Phaser.TilemapLayer.prototype.postUpdate = function () { Phaser.Sprite.prototype.postUpdate.call(this); - // Stops you being able to scroll the camera if it's not following a sprite + // Stops you being able to auto-scroll the camera if it's not following a sprite this.scrollX = this.game.camera.x * this.scrollFactorX; this.scrollY = this.game.camera.y * this.scrollFactorY; @@ -513,7 +513,7 @@ Phaser.TilemapLayer.prototype.getTileXY = function (x, y, point) { * @param {boolean} [collides=false] - If true only return tiles that collide on one or more faces. * @return {array} Array with tiles informations (each contains x, y, and the tile). */ -Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides) { +Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides, debug) { if (this.tilemap === null) { @@ -522,6 +522,7 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides // Should we only get tiles that have at least one of their collision flags set? (true = yes, false = no just get them all) if (typeof collides === 'undefined') { collides = false; } + if (typeof debug === 'undefined') { debug = false; } // Cap the values @@ -549,7 +550,12 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides height = this.heightInPixels; } - this.context.fillStyle = 'rgba(255,0,255,0.5)'; + if (debug) + { + console.log('x', x, 'y', y, 'w', width, 'h', height); + } + + // this.context.fillStyle = 'rgba(255,0,255,0.5)'; // this.context.fillRect(x, y, width, height); var tileWidth = this.tileWidth * this.scale.x; @@ -561,7 +567,12 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides this._tw = (this.game.math.snapToCeil(width, tileWidth) + tileWidth) / tileWidth; this._th = (this.game.math.snapToCeil(height, tileHeight) + tileHeight) / tileHeight; - this.context.fillRect(this._tx * tileWidth, this._ty * tileHeight, this._tw * tileWidth, this._th * tileHeight); + if (debug) + { + console.log('tx', this._tx, 'ty', this._ty, 'tw', this._tw, 'th', this._th); + } + + // this.context.fillRect(this._tx * tileWidth, this._ty * tileHeight, this._tw * tileWidth, this._th * tileHeight); // This should apply the layer x/y here this._results.length = 0; @@ -571,19 +582,34 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides var sx = 0; var sy = 0; - this.context.fillStyle = 'rgba(255,0,0,0.5)'; - this.context.strokeStyle = 'rgba(0,0,0,1)'; + this.context.fillStyle = 'rgba(255,0,0,1)'; + // this.context.strokeStyle = 'rgba(0,0,0,1)'; for (var wy = this._ty; wy < this._ty + this._th; wy++) { + if (debug) + { + console.log('wy', wy); + } + for (var wx = this._tx; wx < this._tx + this._tw; wx++) { + if (debug) + { + console.log('wx', wx); + } + if (this.layer.data[wy] && this.layer.data[wy][wx]) { // Could combine // _index = this.layer.data[wy][wx] - 1; // _tile = this.tileset.getTile(_index); _tile = this.layer.data[wy][wx]; + + if (debug) + { + console.log('tile', _tile); + } if (_tile) { @@ -595,8 +621,13 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides if (collides === false || (collides && _tile.collides)) { - this.context.fillRect(_tile.x * this.tileWidth, _tile.y * this.tileHeight, this.tileWidth, this.tileHeight); - this.context.strokeRect(_tile.x * this.tileWidth, _tile.y * this.tileHeight, this.tileWidth, this.tileHeight); + if (debug) + { + this.context.fillRect(_tile.x * this.tileWidth, _tile.y * this.tileHeight, this.tileWidth, this.tileHeight); + } + + + // this.context.strokeRect(_tile.x * this.tileWidth, _tile.y * this.tileHeight, this.tileWidth, this.tileHeight); // convert tile coordinates back to camera space for return var _wx = this._unfixX(wx * sx) / this.tileWidth; @@ -653,6 +684,8 @@ Phaser.TilemapLayer.prototype.updateMax = function () { this.dirty = true; + console.log('updateMax', this._maxX, this._maxY, 'px', this.widthInPixels, this.heightInPixels, 'rwh', this.width, this.height); + } /** @@ -686,9 +719,9 @@ Phaser.TilemapLayer.prototype.render = function () { this._tx = this._dx; this._ty = this._dy; - // this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); - // this.context.fillStyle = '#000000'; - // this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.context.fillStyle = '#000000'; + this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); this.context.strokeStyle = '#00ff00'; @@ -834,16 +867,15 @@ Object.defineProperty(Phaser.TilemapLayer.prototype, "scrollX", { set: function (value) { - if (value !== this._x && value >= 0 && this.layer) + if (value !== this._x && value >= 0 && this.layer && this.widthInPixels > this.renderWidth) { this._x = value; - + if (this._x > (this.widthInPixels - this.renderWidth)) { this._x = this.widthInPixels - this.renderWidth; } - this._startX = this.game.math.floor(this._x / this.tileWidth); if (this._startX < 0) @@ -875,7 +907,7 @@ Object.defineProperty(Phaser.TilemapLayer.prototype, "scrollY", { set: function (value) { - if (value !== this._y && value >= 0 && this.layer) + if (value !== this._y && value >= 0 && this.layer && this.heightInPixels > this.renderHeight) { this._y = value; diff --git a/src/utils/Debug.js b/src/utils/Debug.js index edcaefe8..1b8ed27a 100644 --- a/src/utils/Debug.js +++ b/src/utils/Debug.js @@ -636,8 +636,11 @@ Phaser.Utils.Debug.prototype = { this.start(0, 0, color); - // this.context.fillStyle = color; - // this.context.fillRect(sprite.body.screenX, sprite.body.screenY, sprite.body.width, sprite.body.height); + this.context.fillStyle = color; + this.context.fillRect(sprite.body.screenX, sprite.body.screenY, sprite.body.width, sprite.body.height); + + this.stop(); + this.start(0, 0, color); this.context.beginPath(); this.context.strokeStyle = '#000000'; @@ -699,11 +702,11 @@ Phaser.Utils.Debug.prototype = { } else { - // this.context.strokeStyle = color; - // this.context.strokeRect(sprite.bounds.x, sprite.bounds.y, sprite.bounds.width, sprite.bounds.height); - // this.context.strokeRect(sprite.body.x, sprite.body.y, sprite.body.width, sprite.body.height); + this.context.strokeStyle = color; + this.context.strokeRect(sprite.bounds.x, sprite.bounds.y, sprite.bounds.width, sprite.bounds.height); + this.context.strokeRect(sprite.body.x, sprite.body.y, sprite.body.width, sprite.body.height); // this.context.strokeRect(sprite.body.hull.x, sprite.body.hull.y, sprite.body.hull.width, sprite.body.hull.height); - // this.context.stroke(); + this.context.stroke(); // this.context.strokeStyle = '#ff0000'; // this.context.strokeRect(sprite.body.hullX.x, sprite.body.hullX.y, sprite.body.hullX.width, sprite.body.hullX.height); From 13a03f3620cd90b92e40985f6d272dc97807c06c Mon Sep 17 00:00:00 2001 From: photonstorm Date: Fri, 6 Dec 2013 13:48:40 +0000 Subject: [PATCH 019/154] TypeScript file updated, now compiles without error in VS and FlashDevelop. --- build/phaser.d.ts | 47 ++++++++++++++++++++--------------------- examples/wip/tilemap.js | 3 ++- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/build/phaser.d.ts b/build/phaser.d.ts index f7c84f8a..4d4654ac 100644 --- a/build/phaser.d.ts +++ b/build/phaser.d.ts @@ -1,7 +1,7 @@ declare class Phaser { static VERSION: string; static DEV_VERSION: string; - static GAMES: Array; + static GAMES: Array; static AUTO: number; static CANVAS: number; static WEBGL: number; @@ -62,7 +62,6 @@ declare module Phaser { stage: Phaser.Stage; math: Phaser.Math; sound: Phaser.SoundManager; - stage: Phaser.Stage; time: Phaser.Time; tweens: Phaser.TweenManager; world: Phaser.World; @@ -144,8 +143,8 @@ declare module Phaser { constructor(signal: Phaser.Signal, listener: Function, isOnce: boolean, listenerContext: Object, priority?: number); context: Object; active: boolean; - params: Array; - execute(paramsArr?: Array): void; + params: Array; + execute(paramsArr?: Array): void; detach(): Function; isBound(): boolean; isOnce(): boolean; @@ -901,13 +900,13 @@ declare module Phaser { } class RandomDataGenerator { - constructor(seeds: Array); + constructor(seeds: Array); c: number; s0: number; s1: number; s2: number; rnd(): number; - sow(seeds: Array): void; + sow(seeds: Array): void; hash(data: any): number; integer(): number; frac(): number; @@ -968,8 +967,8 @@ declare module Phaser { static floor(value: number): number; static ceil(value: number): number; static sinCosGenerator(length: number, sinAmplitude?: number, cosAmplitude?: number, frequency?: number): { sin: number[]; cos: number[]; }; - static shift(stack: Array): any; - static shuffleArray(array: Array): Array; + static shift(stack: Array): any; + static shuffleArray(array: Array): Array; static distance(x1: number, y1: number, x2: number, y2: number): number; static distanceRounded(x1: number, y1: number, x2: number, y2: number): number; static clamp(x: number, a: number, b: number): number; @@ -999,12 +998,12 @@ declare module Phaser { right: number; bottom: number; }; - objects: Array; - nodes: Array; + objects: Array; + nodes: Array; split(): void; insert(body: Object): void; getIndex(rect: Object): number; - retrieve(sprite: Object): Array; + retrieve(sprite: Object): Array; clear(): void; } @@ -1260,8 +1259,8 @@ declare module Phaser { frame: number; frameName: string; loadFrameData(frameData: Phaser.Animation.FrameData): void; - add(name: string, frames?: Array, frameRate?: number, loop?: boolean, useNumericIndex?: boolean): Phaser.Animation; - validateFrames(frames: Array, useNumericIndex?: boolean): boolean; + add(name: string, frames?: Array, frameRate?: number, loop?: boolean, useNumericIndex?: boolean): Phaser.Animation; + validateFrames(frames: Array, useNumericIndex?: boolean): boolean; play(name: string, frameRate?: number, loop?: boolean): Phaser.Animation; stop(name?: string, resetFrame?: boolean): void; update(): boolean; @@ -1317,9 +1316,9 @@ declare module Phaser { getFrame(index: number): Frame; getFrameByName(name: string): Frame; checkFrame(name: string): boolean; - getFrameRange(start: number, end: number, output: Array): Array; - getFrames(frames: Array, useNumericIndex?: boolean, output?: Array): Array; - getFrameIndexes(frames: Array, useNumericIndex?: boolean, output?: Array): Array; + getFrameRange(start: number, end: number, output: Array): Array; + getFrames(frames: Array, useNumericIndex?: boolean, output?: Array): Array; + getFrameIndexes(frames: Array, useNumericIndex?: boolean, output?: Array): Array; total: number; } @@ -1365,7 +1364,7 @@ declare module Phaser { isSoundReady(key: string): boolean; isSpriteSheet(key: string): boolean; getText(key: string): Object; - getKeys(array: Array): Array; + getKeys(array: Array): Array; getImageKeys(): string[]; getSoundKeys(): string[]; getTextKeys(): string[]; @@ -1396,7 +1395,7 @@ declare module Phaser { setPreloadSprite(sprite: Phaser.Sprite, direction?: number): void; checkKeyExists(key: string): boolean; reset(): void; - addToFileList(type: string, key: string, url: string, properties: Array): void; + addToFileList(type: string, key: string, url: string, properties: Array): void; image(key: string, url: string, overwrite?: boolean): void; text(key: string, url: string, overwrite?: boolean): void; spritesheet(key: string, url: string, frameWidth: number, frameHeight: number, frameMax: number): void; @@ -1733,8 +1732,8 @@ declare module Phaser { collisionCallback: Function; exists: boolean; visible: boolean; - tiles: Array; - layers: Array; + tiles: Array; + layers: Array; position: Phaser.Point; type: number; renderer: Phaser.TilemapRenderer; @@ -1753,7 +1752,7 @@ declare module Phaser { getTile(x: number, y: number, layer?: number): Tile; getTileFromWorldXY(x: number, y: number, layer?: number): Tile; getTileFromInputXY(layer?: number): Tile; - getTileOverlaps(object: Object): Array; + getTileOverlaps(object: Object): Array; collide(objectOrGroup: any, callback: Function, context: Object): boolean; collideGameObject(object: Object): boolean; putTile(x: number, y: number, index: number, layer?: number): void; @@ -1787,7 +1786,7 @@ declare module Phaser { baseTexture: any; texture: any; sprite: Phaser.Sprite; - mapData: Array; + mapData: Array; alpha: number; putTileWorldXY(x: number, y: number, index: number): void; putTile(x: number, y: number, index: number): void; @@ -1795,9 +1794,9 @@ declare module Phaser { fillTile(index: number, x?: number, y?: number, width?: number, height?: number): void; randomiseTiles(tiles: number[], x?: number, y?: number, width?: number, height?: number): void; replaceTile(tileA: number, tileB: number, x?: number, y?: number, width?: number, height?: number): void; - getTileBlock(x: number, y: number, width: number, height: number): Array; + getTileBlock(x: number, y: number, width: number, height: number): Array; getTileFromWorldXY(x: number, y: number): Tile; - getTileOverlaps(object: Object): Array; + getTileOverlaps(object: Object): Array; getTempBlock(x: number, y: number, width: number, height: number, collisionOnly?: boolean): void; getTileIndex(x: number, y: number): number; addColumn(column: string[]): void; diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js index 9cbb2036..4e1084e7 100644 --- a/examples/wip/tilemap.js +++ b/examples/wip/tilemap.js @@ -33,7 +33,8 @@ function create() { layer = game.add.tilemapLayer(0, 0, 400, 600, null, map, 0); // layer2 = game.add.tilemapLayer(0, 0, 400, 600, null, map, 0); - layer.cameraOffset.x = 400; + // layer.cameraOffset.x = 400; + layer.alpha = 0.5; // tileset = game.add.tileset('tilesNes'); // layer = game.add.tilemapLayer(0, 0, map.layers[0].width*tilesetNes.tileWidth, 600, tileset, map, 0); From 74e0cfb13a45b57393ba8fea9510d77846334c90 Mon Sep 17 00:00:00 2001 From: photonstorm Date: Sat, 7 Dec 2013 02:05:07 +0000 Subject: [PATCH 020/154] Added Tutorial 2. --- examples/games/invaders.js | 3 +- examples/wip/tilemap.js | 18 +- .../assets/baddie.png | Bin 0 -> 15519 bytes .../assets/diamond.png | Bin 0 -> 508 bytes .../02 Making your first game/assets/dude.png | Bin 0 -> 3226 bytes .../assets/firstaid.png | Bin 0 -> 554 bytes .../assets/platform.png | Bin 0 -> 14973 bytes .../02 Making your first game/assets/sky.png | Bin 0 -> 4757 bytes .../02 Making your first game/assets/star.png | Bin 0 -> 443 bytes .../js/phaser.min.js | 12 + .../02 Making your first game/part1.html | 31 ++ .../02 Making your first game/part2.html | 37 +++ .../02 Making your first game/part3.html | 40 +++ .../02 Making your first game/part4.html | 62 ++++ .../02 Making your first game/part5.html | 74 +++++ .../02 Making your first game/part6.html | 79 +++++ .../02 Making your first game/part7.html | 113 +++++++ .../02 Making your first game/part8.html | 143 +++++++++ .../02 Making your first game/part9.html | 152 +++++++++ .../phaser_tutorial_02.zip | Bin 0 -> 103613 bytes .../screen shots/part3.png | Bin 0 -> 4520 bytes .../screen shots/part4.png | Bin 0 -> 5116 bytes .../screen shots/part5.png | Bin 0 -> 5983 bytes .../screen shots/part6.png | Bin 0 -> 5975 bytes .../screen shots/part7.png | Bin 0 -> 7066 bytes .../screen shots/part8.png | Bin 0 -> 13305 bytes .../screen shots/part9.png | Bin 0 -> 12780 bytes .../screen shots/tutorial_header.png | Bin 0 -> 61622 bytes .../02 Making your first game/tutorial.html | 301 ++++++++++++++++++ 29 files changed, 1060 insertions(+), 5 deletions(-) create mode 100644 tutorials/02 Making your first game/assets/baddie.png create mode 100644 tutorials/02 Making your first game/assets/diamond.png create mode 100644 tutorials/02 Making your first game/assets/dude.png create mode 100644 tutorials/02 Making your first game/assets/firstaid.png create mode 100644 tutorials/02 Making your first game/assets/platform.png create mode 100644 tutorials/02 Making your first game/assets/sky.png create mode 100644 tutorials/02 Making your first game/assets/star.png create mode 100644 tutorials/02 Making your first game/js/phaser.min.js create mode 100644 tutorials/02 Making your first game/part1.html create mode 100644 tutorials/02 Making your first game/part2.html create mode 100644 tutorials/02 Making your first game/part3.html create mode 100644 tutorials/02 Making your first game/part4.html create mode 100644 tutorials/02 Making your first game/part5.html create mode 100644 tutorials/02 Making your first game/part6.html create mode 100644 tutorials/02 Making your first game/part7.html create mode 100644 tutorials/02 Making your first game/part8.html create mode 100644 tutorials/02 Making your first game/part9.html create mode 100644 tutorials/02 Making your first game/phaser_tutorial_02.zip create mode 100644 tutorials/02 Making your first game/screen shots/part3.png create mode 100644 tutorials/02 Making your first game/screen shots/part4.png create mode 100644 tutorials/02 Making your first game/screen shots/part5.png create mode 100644 tutorials/02 Making your first game/screen shots/part6.png create mode 100644 tutorials/02 Making your first game/screen shots/part7.png create mode 100644 tutorials/02 Making your first game/screen shots/part8.png create mode 100644 tutorials/02 Making your first game/screen shots/part9.png create mode 100644 tutorials/02 Making your first game/screen shots/tutorial_header.png create mode 100644 tutorials/02 Making your first game/tutorial.html diff --git a/examples/games/invaders.js b/examples/games/invaders.js index f9e0d216..47696426 100644 --- a/examples/games/invaders.js +++ b/examples/games/invaders.js @@ -28,6 +28,7 @@ var lives; var enemyBullet; var firingTimer = 0; var stateText; +var livingEnemies=[]; function create() { @@ -226,7 +227,7 @@ function enemyFires () { // Grab the first bullet we can from the pool enemyBullet = enemyBullets.getFirstExists(false); - var livingEnemies=[]; + livingEnemies.length=0; aliens.forEachAlive(function(alien){ diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js index 4e1084e7..93633159 100644 --- a/examples/wip/tilemap.js +++ b/examples/wip/tilemap.js @@ -5,10 +5,10 @@ function preload() { game.load.tilemap('map', 'assets/maps/newtest.json', null, Phaser.Tilemap.TILED_JSON); game.load.tileset('tiles', 'assets/maps/ground_1x1.png', 32, 32); - game.load.image('phaser', 'assets/sprites/phaser-ship.png'); + // game.load.image('phaser', 'assets/sprites/phaser-ship.png'); // game.load.image('phaser', 'assets/sprites/mushroom2.png'); // game.load.image('phaser', 'assets/sprites/wabbit.png'); - // game.load.image('phaser', 'assets/sprites/arrow.png'); + game.load.image('phaser', 'assets/sprites/arrow.png'); // game.load.image('phaser', 'assets/sprites/darkwing_crazy.png'); } @@ -30,11 +30,11 @@ function create() { // Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, tileset, tilemap, layer) { // layer = game.add.tilemapLayer(0, 0, 800, 600, null, map, 0); - layer = game.add.tilemapLayer(0, 0, 400, 600, null, map, 0); + layer = game.add.tilemapLayer(0, 0, 800, 600, null, map, 0); // layer2 = game.add.tilemapLayer(0, 0, 400, 600, null, map, 0); // layer.cameraOffset.x = 400; - layer.alpha = 0.5; + // layer.alpha = 0.5; // tileset = game.add.tileset('tilesNes'); // layer = game.add.tilemapLayer(0, 0, map.layers[0].width*tilesetNes.tileWidth, 600, tileset, map, 0); @@ -45,6 +45,16 @@ function create() { sprite = game.add.sprite(260, 100, 'phaser'); sprite.anchor.setTo(0.5, 0.5); + // This adjusts the collision body size. + // 100x50 is the new width/height. + // 50, 25 is the X and Y offset of the newly sized box. + // In this case the box is 50px in and 25px down. + sprite.body.setSize(16, 16, 8, 8); + + + + + // We'll set a lower max angular velocity here to keep it from going totally nuts sprite.body.maxAngular = 500; diff --git a/tutorials/02 Making your first game/assets/baddie.png b/tutorials/02 Making your first game/assets/baddie.png new file mode 100644 index 0000000000000000000000000000000000000000..84e53e902147b5cedfa200f8bfcb2fdd1fcf221d GIT binary patch literal 15519 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 literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/assets/platform.png b/tutorials/02 Making your first game/assets/platform.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4a3f86d7311592c4fdd257daaf21db4176dd21 GIT binary patch literal 14973 zcmeI3&2QsG7{;d{q@`$C0aB^BU}c3^Bocq*qqXH^X_J;#BBkmEZMzrh*pt?3VjJ6S z(q32=fy52L1tIts5Qr1n0}>J!&RpPzIG{yHoRHu`nX#StjgxeWw8x3m%Yq`wMNuk>axpI}nxtxSSx8>F+B}JL-|A>PjrC+W z@~xUX3`0*7#eTnE=obsFe;~@Ls)~{#DoUOx^1-PS8iTwOT#u6s^E7Z^`nDI^t|QRA zM%z6OtGOHLJIYGjXP!tD-C&~p$oMCDeBn?ew-oscCZh%S+6?F2jF)Kr!^%HtjT-3YX0inxn=#1aq+^3=6>hi>Qw zhwco3qwbj)L%TDB1?`z>!vlMUjrPR0sHWnr)=432bsrm{>$hCDTZ_wedpLWcUKeiM zwjImu2QTSjR-M*Nng}AzXmu00S%WKN2s;;d|t4pP_ zsw|b1)nQs-olJ{;`vhC-zT1n=vuF4LrpKh38=jNV1(0ldbkH<=a;eFD>a*uFVNK^l zlIwA|HFKp6R%T#LGmkK&OU=|ULI1jMlPlcl0#cZ}@oSfE)(Kg%c+ncg)Ug9vaR8wrb*#*RUaL(M7spU3+}L z;@0tP9G2eXw(FLubzHw^gf+Wo9AMFN4ssGFqk?xadEl z7{)E~0ETOoa=BR6#cXrdv271`UpbR-{gkgn(r3({c592XN26mVRS1~cZkn24Z&{*dafr?2}(j{@VWd7xIfs!Q9wsB6Riw zLU-Rq=$~`)`2e9~38CNj5z;)%|<_0epuk@Bjb+ literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/assets/sky.png b/tutorials/02 Making your first game/assets/sky.png new file mode 100644 index 0000000000000000000000000000000000000000..5972639f229c7362edac856b42b86b93811ef3f2 GIT binary patch literal 4757 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 literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/js/phaser.min.js b/tutorials/02 Making your first game/js/phaser.min.js new file mode 100644 index 00000000..4f17eda8 --- /dev/null +++ b/tutorials/02 Making your first game/js/phaser.min.js @@ -0,0 +1,12 @@ +/*! Phaser v1.1.3 | (c) 2013 Photon Storm Ltd. */ +!function(a,b){"function"==typeof define&&define.amd?define(b):"object"==typeof exports?module.exports=b():a.Phaser=b()}(this,function(){function a(a){return[(255&a>>16)/255,(255&a>>8)/255,(255&a)/255]}function b(){return c.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,c.Matrix}function a(a){return[(255&a>>16)/255,(255&a>>8)/255,(255&a)/255]}var c=c||{},d=d||{VERSION:"1.1.3",DEV_VERSION:"1.1.3",GAMES:[],AUTO:0,CANVAS:1,WEBGL:2,HEADLESS:3,SPRITE:0,BUTTON:1,BULLET:2,GRAPHICS:3,TEXT:4,TILESPRITE:5,BITMAPTEXT:6,GROUP:7,RENDERTEXTURE:8,TILEMAP:9,TILEMAPLAYER:10,EMITTER:11,POLYGON:12,BITMAPDATA:13,CANVAS_FILTER:14,WEBGL_FILTER:15,NONE:0,LEFT:1,RIGHT:2,UP:3,DOWN:4};c.InteractionManager=function(){},d.Utils={shuffle:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},pad:function(a,b,c,d){if("undefined"==typeof b)var b=0;if("undefined"==typeof c)var c=" ";if("undefined"==typeof d)var d=3;var e=0;if(b+1>=a.length)switch(d){case 1:a=Array(b+1-a.length).join(c)+a;break;case 3:var f=Math.ceil((e=b-a.length)/2),g=e-f;a=Array(g+1).join(c)+a+Array(f+1).join(c);break;default:a+=Array(b+1-a.length).join(c)}return a},isPlainObject:function(a){if("object"!=typeof a||a.nodeType||a===a.window)return!1;try{if(a.constructor&&!hasOwn.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},extend:function(){var a,b,c,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(b in a)c=h[b],e=a[b],h!==e&&(k&&e&&(d.Utils.isPlainObject(e)||(f=Array.isArray(e)))?(f?(f=!1,g=c&&Array.isArray(c)?c:[]):g=c&&d.Utils.isPlainObject(c)?c:{},h[b]=d.Utils.extend(k,g,e)):void 0!==e&&(h[b]=e));return h}},function(){var a=!1;a&&(window.console=void 0),void 0===window.console&&(window.console={debug:function(){return!0},info:function(){return!1},warn:function(){return!1},log:function(){return!1}}),debug=function(a){window.console.debug(a)},info=function(a){window.console.info(a)},warn=function(a){window.console.warn(a)},log=function(a){window.console.log(a)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),b(),c.mat3={},c.mat3.create=function(){var a=new c.Matrix(9);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=1,a[5]=0,a[6]=0,a[7]=0,a[8]=1,a},c.mat3.identity=function(a){return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=1,a[5]=0,a[6]=0,a[7]=0,a[8]=1,a},c.mat4={},c.mat4.create=function(){var a=new c.Matrix(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a},c.mat3.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],f=a[2],g=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],m=b[0],n=b[1],o=b[2],p=b[3],q=b[4],r=b[5],s=b[6],t=b[7],u=b[8];return c[0]=m*d+n*g+o*j,c[1]=m*e+n*h+o*k,c[2]=m*f+n*i+o*l,c[3]=p*d+q*g+r*j,c[4]=p*e+q*h+r*k,c[5]=p*f+q*i+r*l,c[6]=s*d+t*g+u*j,c[7]=s*e+t*h+u*k,c[8]=s*f+t*i+u*l,c},c.mat3.clone=function(a){var b=new c.Matrix(9);return b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8],b},c.mat3.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[5];return a[1]=a[3],a[2]=a[6],a[3]=c,a[5]=a[7],a[6]=d,a[7]=e,a}return b[0]=a[0],b[1]=a[3],b[2]=a[6],b[3]=a[1],b[4]=a[4],b[5]=a[7],b[6]=a[2],b[7]=a[5],b[8]=a[8],b},c.mat3.toMat4=function(a,b){return b||(b=c.mat4.create()),b[15]=1,b[14]=0,b[13]=0,b[12]=0,b[11]=0,b[10]=a[8],b[9]=a[7],b[8]=a[6],b[7]=0,b[6]=a[5],b[5]=a[4],b[4]=a[3],b[3]=0,b[2]=a[2],b[1]=a[1],b[0]=a[0],b},c.mat4.create=function(){var a=new c.Matrix(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a},c.mat4.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[3],f=a[6],g=a[7],h=a[11];return a[1]=a[4],a[2]=a[8],a[3]=a[12],a[4]=c,a[6]=a[9],a[7]=a[13],a[8]=d,a[9]=f,a[11]=a[14],a[12]=e,a[13]=g,a[14]=h,a}return b[0]=a[0],b[1]=a[4],b[2]=a[8],b[3]=a[12],b[4]=a[1],b[5]=a[5],b[6]=a[9],b[7]=a[13],b[8]=a[2],b[9]=a[6],b[10]=a[10],b[11]=a[14],b[12]=a[3],b[13]=a[7],b[14]=a[11],b[15]=a[15],b},c.mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],f=a[2],g=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],m=a[9],n=a[10],o=a[11],p=a[12],q=a[13],r=a[14],s=a[15],t=b[0],u=b[1],v=b[2],w=b[3];return c[0]=t*d+u*h+v*l+w*p,c[1]=t*e+u*i+v*m+w*q,c[2]=t*f+u*j+v*n+w*r,c[3]=t*g+u*k+v*o+w*s,t=b[4],u=b[5],v=b[6],w=b[7],c[4]=t*d+u*h+v*l+w*p,c[5]=t*e+u*i+v*m+w*q,c[6]=t*f+u*j+v*n+w*r,c[7]=t*g+u*k+v*o+w*s,t=b[8],u=b[9],v=b[10],w=b[11],c[8]=t*d+u*h+v*l+w*p,c[9]=t*e+u*i+v*m+w*q,c[10]=t*f+u*j+v*n+w*r,c[11]=t*g+u*k+v*o+w*s,t=b[12],u=b[13],v=b[14],w=b[15],c[12]=t*d+u*h+v*l+w*p,c[13]=t*e+u*i+v*m+w*q,c[14]=t*f+u*j+v*n+w*r,c[15]=t*g+u*k+v*o+w*s,c},c.Point=function(a,b){this.x=a||0,this.y=b||0},c.Point.prototype.clone=function(){return new c.Point(this.x,this.y)},c.Point.prototype.constructor=c.Point,c.Rectangle=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},c.Rectangle.prototype.clone=function(){return new c.Rectangle(this.x,this.y,this.width,this.height)},c.Rectangle.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=this.x;if(a>=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},c.Rectangle.prototype.constructor=c.Rectangle,c.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var b=[],d=0,e=a.length;e>d;d+=2)b.push(new c.Point(a[d],a[d+1]));a=b}this.points=a},c.Polygon.prototype.clone=function(){for(var a=[],b=0;bb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},c.Polygon.prototype.constructor=c.Polygon,c.DisplayObject=function(){this.last=this,this.first=this,this.position=new c.Point,this.scale=new c.Point(1,1),this.pivot=new c.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.worldTransform=c.mat3.create(),this.localTransform=c.mat3.create(),this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=new c.Rectangle(0,0,1,1)},c.DisplayObject.prototype.constructor=c.DisplayObject,c.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(c.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(c.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){a?this._mask?(a.start=this._mask.start,a.end=this._mask.end):(this.addFilter(a),a.renderable=!1):(this.removeFilter(this._mask),this._mask.renderable=!0),this._mask=a}}),Object.defineProperty(c.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){this._filters&&this.removeFilter(this._filters),this.addFilter(a);for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);if(void 0!=a.parent&&a.parent.removeChild(a),a.parent=this,this.stage){var c=a;do c.interactive&&(this.stage.dirty=!0),c.stage=this.stage,c=c._iNext;while(c)}var d,e,f=a.first,g=a.last;if(b==this.children.length){e=this.last;for(var h=this,i=this.last;h;)h.last==i&&(h.last=a.last),h=h.parent}else e=0===b?this:this.children[b-1].last;d=e._iNext,d&&(d._iPrev=g,g._iNext=d),f._iPrev=e,e._iNext=f,this.children.splice(b,0,a),this.__renderGroup&&(a.__renderGroup&&a.__renderGroup.removeDisplayObjectAndChildren(a),this.__renderGroup.addDisplayObjectAndChildren(a))},c.DisplayObjectContainer.prototype.swapChildren=function(){},c.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&aa;a++)this.children[a].updateTransform()}},c.blendModes={},c.blendModes.NORMAL=0,c.blendModes.SCREEN=1,c.Sprite=function(a){c.DisplayObjectContainer.call(this),this.anchor=new c.Point,this.texture=a,this.blendMode=c.blendModes.NORMAL,this._width=0,this._height=0,a.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},c.Sprite.prototype=Object.create(c.DisplayObjectContainer.prototype),c.Sprite.prototype.constructor=c.Sprite,Object.defineProperty(c.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(c.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),c.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!=a.baseTexture?(this.textureChange=!0,this.texture=a,this.__renderGroup&&this.__renderGroup.updateTexture(this)):this.texture=a,this.updateFrame=!0},c.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},c.Sprite.fromFrame=function(a){var b=c.TextureCache[a];if(!b)throw new Error("The frameId '"+a+"' does not exist in the texture cache"+this);return new c.Sprite(b)},c.Sprite.fromImage=function(a){var b=c.Texture.fromImage(a);return new c.Sprite(b)},c.Stage=function(a){c.DisplayObjectContainer.call(this),this.worldTransform=c.mat3.create(),this.interactive=!0,this.interactionManager=new c.InteractionManager(this),this.dirty=!0,this.__childrenAdded=[],this.__childrenRemoved=[],this.stage=this,this.stage.hitArea=new c.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a),this.worldVisible=!0},c.Stage.prototype=Object.create(c.DisplayObjectContainer.prototype),c.Stage.prototype.constructor=c.Stage,c.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},c.Stage.prototype.updateTransform=function(){this.worldAlpha=1,this.vcount=c.visibleCount;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},c.Stage.prototype.setBackgroundColor=function(b){this.backgroundColor=b||0,this.backgroundColorSplit=a(this.backgroundColor);var c=this.backgroundColor.toString(16);c="000000".substr(0,6-c.length)+c,this.backgroundColorString="#"+c},c.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},c.CustomRenderable=function(){c.DisplayObject.call(this),this.renderable=!0},c.CustomRenderable.prototype=Object.create(c.DisplayObject.prototype),c.CustomRenderable.prototype.constructor=c.CustomRenderable,c.CustomRenderable.prototype.renderCanvas=function(){},c.CustomRenderable.prototype.initWebGL=function(){},c.CustomRenderable.prototype.renderWebGL=function(){},c.Strip=function(a,b,d){c.DisplayObjectContainer.call(this),this.texture=a,this.blendMode=c.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(e){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=b,this.height=d,a.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},c.Strip.prototype=Object.create(c.DisplayObjectContainer.prototype),c.Strip.prototype.constructor=c.Strip,c.Strip.prototype.setTexture=function(a){this.texture=a,this.width=a.frame.width,this.height=a.frame.height,this.updateFrame=!0},c.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},c.Rope=function(a,b){c.Strip.call(this,a),this.points=b;try{this.verticies=new Float32Array(4*b.length),this.uvs=new Float32Array(4*b.length),this.colors=new Float32Array(2*b.length),this.indices=new Uint16Array(2*b.length)}catch(d){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},c.Rope.prototype=Object.create(c.Strip.prototype),c.Rope.prototype.constructor=c.Rope,c.Rope.prototype.refresh=function(){var a=this.points;if(!(a.length<1)){var b=this.uvs,c=this.indices,d=this.colors,e=a[0],f=a[0];this.count-=.2,b[0]=0,b[1]=1,b[2]=0,b[3]=1,d[0]=1,d[1]=1,c[0]=0,c[1]=1;for(var g=a.length,h=1;g>h;h++){var f=a[h],i=4*h,j=h/(g-1);h%2?(b[i]=j,b[i+1]=0,b[i+2]=j,b[i+3]=1):(b[i]=j,b[i+1]=0,b[i+2]=j,b[i+3]=1),i=2*h,d[i]=1,d[i+1]=1,i=2*h,c[i]=i,c[i+1]=i+1,e=f}}},c.Rope.prototype.updateTransform=function(){var a=this.points;if(!(a.length<1)){var b,d=this.verticies,e=a[0],f={x:0,y:0},g=a[0];this.count-=.2,d[0]=g.x+f.x,d[1]=g.y+f.y,d[2]=g.x-f.x,d[3]=g.y-f.y;for(var h=a.length,i=1;h>i;i++){var g=a[i],j=4*i;b=i1&&(k=1);var l=Math.sqrt(f.x*f.x+f.y*f.y),m=this.texture.height/2;f.x/=l,f.y/=l,f.x*=m,f.y*=m,d[j]=g.x+f.x,d[j+1]=g.y+f.y,d[j+2]=g.x-f.x,d[j+3]=g.y-f.y,e=g}c.DisplayObjectContainer.prototype.updateTransform.call(this)}},c.Rope.prototype.setTexture=function(a){this.texture=a,this.updateFrame=!0},c.TilingSprite=function(a,b,d){c.DisplayObjectContainer.call(this),this.texture=a,this.width=b,this.height=d,this.tileScale=new c.Point(1,1),this.tilePosition=new c.Point(0,0),this.renderable=!0,this.blendMode=c.blendModes.NORMAL},c.TilingSprite.prototype=Object.create(c.DisplayObjectContainer.prototype),c.TilingSprite.prototype.constructor=c.TilingSprite,c.TilingSprite.prototype.setTexture=function(a){this.texture=a,this.updateFrame=!0},c.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},c.AbstractFilter=function(a,b){this.passes=[this],this.dirty=!0,this.padding=0,this.uniforms=b||{},this.fragmentSrc=a||[]},c.FilterBlock=function(){this.visible=!0,this.renderable=!0},c.Graphics=function(){c.DisplayObjectContainer.call(this),this.renderable=!0,this.fillAlpha=1,this.lineWidth=0,this.lineColor="black",this.graphicsData=[],this.currentPath={points:[]}},c.Graphics.prototype=Object.create(c.DisplayObjectContainer.prototype),c.Graphics.prototype.constructor=c.Graphics,c.Graphics.prototype.lineStyle=function(a,b,d){0===this.currentPath.points.length&&this.graphicsData.pop(),this.lineWidth=a||0,this.lineColor=b||0,this.lineAlpha=void 0==d?1:d,this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[],type:c.Graphics.POLY},this.graphicsData.push(this.currentPath)},c.Graphics.prototype.moveTo=function(a,b){0===this.currentPath.points.length&&this.graphicsData.pop(),this.currentPath=this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[],type:c.Graphics.POLY},this.currentPath.points.push(a,b),this.graphicsData.push(this.currentPath)},c.Graphics.prototype.lineTo=function(a,b){this.currentPath.points.push(a,b),this.dirty=!0},c.Graphics.prototype.beginFill=function(a,b){this.filling=!0,this.fillColor=a||0,this.fillAlpha=void 0==b?1:b},c.Graphics.prototype.endFill=function(){this.filling=!1,this.fillColor=null,this.fillAlpha=1},c.Graphics.prototype.drawRect=function(a,b,d,e){0===this.currentPath.points.length&&this.graphicsData.pop(),this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[a,b,d,e],type:c.Graphics.RECT},this.graphicsData.push(this.currentPath),this.dirty=!0},c.Graphics.prototype.drawCircle=function(a,b,d){0===this.currentPath.points.length&&this.graphicsData.pop(),this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[a,b,d,d],type:c.Graphics.CIRC},this.graphicsData.push(this.currentPath),this.dirty=!0},c.Graphics.prototype.drawElipse=function(a,b,d,e){0===this.currentPath.points.length&&this.graphicsData.pop(),this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[a,b,d,e],type:c.Graphics.ELIP},this.graphicsData.push(this.currentPath),this.dirty=!0},c.Graphics.prototype.clear=function(){this.lineWidth=0,this.filling=!1,this.dirty=!0,this.clearDirty=!0,this.graphicsData=[],this.bounds=null},c.Graphics.prototype.updateFilterBounds=function(){if(!this.bounds){for(var a,b,d,e=1/0,f=-1/0,g=1/0,h=-1/0,i=0;ib?b:e,f=b+m>f?b+m:f,g=g>d?b:g,h=d+n>h?d+n:h}else if(k===c.Graphics.CIRC||k===c.Graphics.ELIP){b=a.x,d=a.y;var o=a.radius+l/2;e=e>b-o?b-o:e,f=b+o>f?b+o:f,g=g>d-o?d-o:g,h=d+o>h?d+o:h}else for(var p=0;pb-l?b-l:e,f=b+l>f?b+l:f,g=g>d-l?d-l:g,h=d+l>h?d+l:h}this.bounds=new c.Rectangle(e,g,f-e,h-g)}},c.Graphics.POLY=0,c.Graphics.RECT=1,c.Graphics.CIRC=2,c.Graphics.ELIP=3,c.CanvasGraphics=function(){},c.CanvasGraphics.renderGraphics=function(a,b){for(var d=a.worldAlpha,e=0;e1&&(d=1,console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var e=0;1>e;e++){var f=a.graphicsData[e],g=f.points;if(f.type==c.Graphics.POLY){b.beginPath(),b.moveTo(g[0],g[1]);for(var h=1;h0&&(c.Texture.frameUpdates=[])},c.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},c.CanvasRenderer.prototype.renderDisplayObject=function(a){var b,d=this.context;d.globalCompositeOperation="source-over";var e=a.last._iNext;a=a.first;do if(b=a.worldTransform,a.visible)if(a.renderable){if(a instanceof c.Sprite){var f=a.texture.frame;f&&f.width&&f.height&&(d.globalAlpha=a.worldAlpha,d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),d.drawImage(a.texture.baseTexture.source,f.x,f.y,f.width,f.height,a.anchor.x*-f.width,a.anchor.y*-f.height,f.width,f.height))}else if(a instanceof c.Strip)d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),this.renderStrip(a);else if(a instanceof c.TilingSprite)d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),this.renderTilingSprite(a);else if(a instanceof c.CustomRenderable)d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),a.renderCanvas(this);else if(a instanceof c.Graphics)d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),c.CanvasGraphics.renderGraphics(a,d);else if(a instanceof c.FilterBlock&&a.data instanceof c.Graphics){var g=a.data;if(a.open){d.save();var h=g.alpha,i=g.worldTransform;d.setTransform(i[0],i[3],i[1],i[4],i[2],i[5]),g.worldAlpha=.5,d.worldAlpha=0,c.CanvasGraphics.renderGraphicsMask(g,d),d.clip(),g.worldAlpha=h}else d.restore()}a=a._iNext}else a=a._iNext;else a=a.last._iNext;while(a!=e)},c.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies;a.uvs;var d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},c.CanvasRenderer.prototype.renderTilingSprite=function(a){var b=this.context;b.globalAlpha=a.worldAlpha,a.__tilePattern||(a.__tilePattern=b.createPattern(a.texture.baseTexture.source,"repeat")),b.beginPath();var c=a.tilePosition,d=a.tileScale;b.scale(d.x,d.y),b.translate(c.x,c.y),b.fillStyle=a.__tilePattern,b.fillRect(-c.x,-c.y,a.width/d.x,a.height/d.y),b.scale(1/d.x,1/d.y),b.translate(-c.x,-c.y),b.closePath()},c.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},c.PixiShader=function(){this.program,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor;","}"],this.textureCount=0},c.PixiShader.prototype.init=function(){var a=c.compileProgram(this.vertexSrc||c.PixiShader.defaultVertexSrc,this.fragmentSrc),b=c.gl;b.useProgram(a),this.uSampler=b.getUniformLocation(a,"uSampler"),this.projectionVector=b.getUniformLocation(a,"projectionVector"),this.offsetVector=b.getUniformLocation(a,"offsetVector"),this.dimensions=b.getUniformLocation(a,"dimensions"),this.aVertexPosition=b.getAttribLocation(a,"aVertexPosition"),this.colorAttribute=b.getAttribLocation(a,"aColor"),this.aTextureCoord=b.getAttribLocation(a,"aTextureCoord");for(var d in this.uniforms)this.uniforms[d].uniformLocation=b.getUniformLocation(a,d);this.initUniforms(),this.program=a},c.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a;for(var b in this.uniforms){var a=this.uniforms[b],d=a.type;"sampler2D"==d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"==d||"mat3"==d||"mat4"==d?(a.glMatrix=!0,a.glValueLength=1,"mat2"==d?a.glFunc=c.gl.uniformMatrix2fv:"mat3"==d?a.glFunc=c.gl.uniformMatrix3fv:"mat4"==d&&(a.glFunc=c.gl.uniformMatrix4fv)):(a.glFunc=c.gl["uniform"+d],a.glValueLength="2f"==d||"2i"==d?2:"3f"==d||"3i"==d?3:"4f"==d||"4i"==d?4:1)}},c.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){if(c.gl.activeTexture(c.gl["TEXTURE"+this.textureCount]),c.gl.bindTexture(c.gl.TEXTURE_2D,a.value.baseTexture._glTexture),a.textureData){var b=a.textureData,d=b.magFilter?b.magFilter:c.gl.LINEAR,e=b.minFilter?b.minFilter:c.gl.LINEAR,f=b.wrapS?b.wrapS:c.gl.CLAMP_TO_EDGE,g=b.wrapT?b.wrapT:c.gl.CLAMP_TO_EDGE,h=b.luminance?c.gl.LUMINANCE:c.gl.RGBA;if(b.repeat&&(f=c.gl.REPEAT,g=c.gl.REPEAT),c.gl.pixelStorei(c.gl.UNPACK_FLIP_Y_WEBGL,!1),b.width){var i=b.width?b.width:512,j=b.height?b.height:2,k=b.border?b.border:0;c.gl.texImage2D(c.gl.TEXTURE_2D,0,h,i,j,k,h,c.gl.UNSIGNED_BYTE,null)}else c.gl.texImage2D(c.gl.TEXTURE_2D,0,h,c.gl.RGBA,c.gl.UNSIGNED_BYTE,a.value.baseTexture.source);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MAG_FILTER,d),c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MIN_FILTER,e),c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_S,f),c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_T,g)}c.gl.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},c.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a;for(var b in this.uniforms)a=this.uniforms[b],1==a.glValueLength?a.glMatrix===!0?a.glFunc.call(c.gl,a.uniformLocation,a.transpose,a.value):a.glFunc.call(c.gl,a.uniformLocation,a.value):2==a.glValueLength?a.glFunc.call(c.gl,a.uniformLocation,a.value.x,a.value.y):3==a.glValueLength?a.glFunc.call(c.gl,a.uniformLocation,a.value.x,a.value.y,a.value.z):4==a.glValueLength?a.glFunc.call(c.gl,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"==a.type&&(a._init?(c.gl.activeTexture(c.gl["TEXTURE"+this.textureCount]),c.gl.bindTexture(c.gl.TEXTURE_2D,a.value.baseTexture._glTexture),c.gl.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a))},c.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying float vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {","gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],c.PrimitiveShader=function(){this.program,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {","gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","varying vec4 vColor;","void main(void) {","vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);","v -= offsetVector.xyx;","gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);","vColor = aColor * alpha;","}"] +},c.PrimitiveShader.prototype.init=function(){var a=c.compileProgram(this.vertexSrc,this.fragmentSrc),b=c.gl;b.useProgram(a),this.projectionVector=b.getUniformLocation(a,"projectionVector"),this.offsetVector=b.getUniformLocation(a,"offsetVector"),this.aVertexPosition=b.getAttribLocation(a,"aVertexPosition"),this.colorAttribute=b.getAttribLocation(a,"aColor"),this.translationMatrix=b.getUniformLocation(a,"translationMatrix"),this.alpha=b.getUniformLocation(a,"alpha"),this.program=a},c.StripShader=function(){this.program,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","varying vec2 offsetVector;","varying float vColor;","void main(void) {","vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);","v -= offsetVector.xyx;","gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"]},c.StripShader.prototype.init=function(){var a=c.compileProgram(this.vertexSrc,this.fragmentSrc),b=c.gl;b.useProgram(a),this.uSampler=b.getUniformLocation(a,"uSampler"),this.projectionVector=b.getUniformLocation(a,"projectionVector"),this.offsetVector=b.getUniformLocation(a,"offsetVector"),this.colorAttribute=b.getAttribLocation(a,"aColor"),this.aVertexPosition=b.getAttribLocation(a,"aVertexPosition"),this.aTextureCoord=b.getAttribLocation(a,"aTextureCoord"),this.translationMatrix=b.getUniformLocation(a,"translationMatrix"),this.alpha=b.getUniformLocation(a,"alpha"),this.program=a},c._batchs=[],c._getBatch=function(a){return 0===c._batchs.length?new c.WebGLBatch(a):c._batchs.pop()},c._returnBatch=function(a){a.clean(),c._batchs.push(a)},c._restoreBatchs=function(a){for(var b=0;bc;c++){var d=6*c,e=4*c;this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3}a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW)},c.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSizethis.width&&(f.width=this.width),f.y<0&&(f.y=0),f.height>this.height&&(f.height=this.height),b.bindFramebuffer(b.FRAMEBUFFER,e.frameBuffer),b.viewport(0,0,f.width,f.height),c.projection.x=f.width/2,c.projection.y=-f.height/2,c.offset.x=-f.x,c.offset.y=-f.y,b.uniform2f(c.defaultShader.projectionVector,f.width/2,-f.height/2),b.uniform2f(c.defaultShader.offsetVector,-f.x,-f.y),b.colorMask(!0,!0,!0,!0),b.clearColor(0,0,0,0),b.clear(b.COLOR_BUFFER_BIT),a._glFilterTexture=e},c.WebGLFilterManager.prototype.popFilter=function(){var a=c.gl,b=this.filterStack.pop(),d=b.target.filterArea,e=b._glFilterTexture;if(b.filterPasses.length>1){a.viewport(0,0,d.width,d.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=d.height,this.vertexArray[2]=d.width,this.vertexArray[3]=d.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=d.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=d.width/this.width,this.uvArray[5]=d.height/this.height,this.uvArray[6]=d.width/this.width,this.uvArray[7]=d.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray);var f=e,g=this.texturePool.pop();g||(g=new c.FilterTexture(this.width,this.height)),a.bindFramebuffer(a.FRAMEBUFFER,g.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var h=0;hs?s:E,E=E>t?t:E,E=E>u?u:E,E=E>v?v:E,F=F>w?w:F,F=F>x?x:F,F=F>y?y:F,F=F>z?z:F,C=s>C?s:C,C=t>C?t:C,C=u>C?u:C,C=v>C?v:C,D=w>D?w:D,D=x>D?x:D,D=y>D?y:D,D=z>D?z:D),l=!1,A=A._iNext}while(A!=B);a.filterArea.x=E,a.filterArea.y=F,a.filterArea.width=C-E,a.filterArea.height=D-F},c.FilterTexture=function(a,b){var d=c.gl;this.frameBuffer=d.createFramebuffer(),this.texture=d.createTexture(),d.bindTexture(d.TEXTURE_2D,this.texture),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MAG_FILTER,d.LINEAR),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MIN_FILTER,d.LINEAR),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.bindFramebuffer(d.FRAMEBUFFER,this.framebuffer),d.bindFramebuffer(d.FRAMEBUFFER,this.frameBuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,d.TEXTURE_2D,this.texture,0),this.resize(a,b)},c.FilterTexture.prototype.resize=function(a,b){this.width=a,this.height=b;var d=c.gl;d.bindTexture(d.TEXTURE_2D,this.texture),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,a,b,0,d.RGBA,d.UNSIGNED_BYTE,null)},c.WebGLGraphics=function(){},c.WebGLGraphics.renderGraphics=function(a,b){var d=c.gl;a._webGL||(a._webGL={points:[],indices:[],lastIndex:0,buffer:d.createBuffer(),indexBuffer:d.createBuffer()}),a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,a._webGL.lastIndex=0,a._webGL.points=[],a._webGL.indices=[]),c.WebGLGraphics.updateGraphics(a)),c.activatePrimitiveShader();var e=c.mat3.clone(a.worldTransform);c.mat3.transpose(e),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.uniformMatrix3fv(c.primitiveShader.translationMatrix,!1,e),d.uniform2f(c.primitiveShader.projectionVector,b.x,-b.y),d.uniform2f(c.primitiveShader.offsetVector,-c.offset.x,-c.offset.y),d.uniform1f(c.primitiveShader.alpha,a.worldAlpha),d.bindBuffer(d.ARRAY_BUFFER,a._webGL.buffer),d.vertexAttribPointer(c.primitiveShader.aVertexPosition,2,d.FLOAT,!1,24,0),d.vertexAttribPointer(c.primitiveShader.colorAttribute,4,d.FLOAT,!1,24,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,a._webGL.indexBuffer),d.drawElements(d.TRIANGLE_STRIP,a._webGL.indices.length,d.UNSIGNED_SHORT,0),c.deactivatePrimitiveShader()},c.WebGLGraphics.updateGraphics=function(a){for(var b=a._webGL.lastIndex;b3&&c.WebGLGraphics.buildPoly(d,a._webGL),d.lineWidth>0&&c.WebGLGraphics.buildLine(d,a._webGL)):d.type==c.Graphics.RECT?c.WebGLGraphics.buildRectangle(d,a._webGL):(d.type==c.Graphics.CIRC||d.type==c.Graphics.ELIP)&&c.WebGLGraphics.buildCircle(d,a._webGL)}a._webGL.lastIndex=a.graphicsData.length;var e=c.gl;a._webGL.glPoints=new Float32Array(a._webGL.points),e.bindBuffer(e.ARRAY_BUFFER,a._webGL.buffer),e.bufferData(e.ARRAY_BUFFER,a._webGL.glPoints,e.STATIC_DRAW),a._webGL.glIndicies=new Uint16Array(a._webGL.indices),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a._webGL.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,a._webGL.glIndicies,e.STATIC_DRAW)},c.WebGLGraphics.buildRectangle=function(b,d){var e=b.points,f=e[0],g=e[1],h=e[2],i=e[3];if(b.fill){var j=a(b.fillColor),k=b.fillAlpha,l=j[0]*k,m=j[1]*k,n=j[2]*k,o=d.points,p=d.indices,q=o.length/6;o.push(f,g),o.push(l,m,n,k),o.push(f+h,g),o.push(l,m,n,k),o.push(f,g+i),o.push(l,m,n,k),o.push(f+h,g+i),o.push(l,m,n,k),p.push(q,q,q+1,q+2,q+3,q+3)}b.lineWidth&&(b.points=[f,g,f+h,g,f+h,g+i,f,g+i,f,g],c.WebGLGraphics.buildLine(b,d))},c.WebGLGraphics.buildCircle=function(b,d){var e=b.points,f=e[0],g=e[1],h=e[2],i=e[3],j=40,k=2*Math.PI/j;if(b.fill){var l=a(b.fillColor),m=b.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=d.points,r=d.indices,s=q.length/6;r.push(s);for(var t=0;j+1>t;t++)q.push(f,g,n,o,p,m),q.push(f+Math.sin(k*t)*h,g+Math.cos(k*t)*i,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(b.lineWidth){b.points=[];for(var t=0;j+1>t;t++)b.points.push(f+Math.sin(k*t)*h,g+Math.cos(k*t)*i);c.WebGLGraphics.buildLine(b,d)}},c.WebGLGraphics.buildLine=function(b,d){var e=b.points;if(0!==e.length){if(b.lineWidth%2)for(var f=0;ff;f++)k=e[2*(f-1)],l=e[2*(f-1)+1],m=e[2*f],n=e[2*f+1],o=e[2*(f+1)],p=e[2*(f+1)+1],q=-(l-n),r=k-m,E=Math.sqrt(q*q+r*r),q/=E,r/=E,q*=K,r*=K,s=-(n-p),t=m-o,E=Math.sqrt(s*s+t*t),s/=E,t/=E,s*=K,t*=K,w=-r+l-(-r+n),x=-q+m-(-q+k),y=(-q+k)*(-r+n)-(-q+m)*(-r+l),z=-t+p-(-t+n),A=-s+m-(-s+o),B=(-s+o)*(-t+n)-(-s+m)*(-t+p),C=w*A-z*x,Math.abs(C)<.1?(C+=10.1,F.push(m-q,n-r,N,O,P,M),F.push(m+q,n+r,N,O,P,M)):(px=(x*B-A*y)/C,py=(z*y-w*B)/C,D=(px-m)*(px-m)+(py-n)+(py-n),D>19600?(u=q-s,v=r-t,E=Math.sqrt(u*u+v*v),u/=E,v/=E,u*=K,v*=K,F.push(m-u,n-v),F.push(N,O,P,M),F.push(m+u,n+v),F.push(N,O,P,M),F.push(m-u,n-v),F.push(N,O,P,M),I++):(F.push(px,py),F.push(N,O,P,M),F.push(m-(px-m),n-(py-n)),F.push(N,O,P,M)));k=e[2*(H-2)],l=e[2*(H-2)+1],m=e[2*(H-1)],n=e[2*(H-1)+1],q=-(l-n),r=k-m,E=Math.sqrt(q*q+r*r),q/=E,r/=E,q*=K,r*=K,F.push(m-q,n-r),F.push(N,O,P,M),F.push(m+q,n+r),F.push(N,O,P,M),G.push(J);for(var f=0;I>f;f++)G.push(J++);G.push(J-1)}},c.WebGLGraphics.buildPoly=function(b,d){var e=b.points;if(!(e.length<6)){for(var f=d.points,g=d.indices,h=e.length/2,i=a(b.fillColor),j=b.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=c.PolyK.Triangulate(e),o=f.length/6,p=0;pp;p++)f.push(e[2*p],e[2*p+1],k,l,m,j)}},c._defaultFrame=new c.Rectangle(0,0,1,1),c.gl,c.WebGLRenderer=function(a,b,d,e,f){this.transparent=!!e,this.width=a||800,this.height=b||600,this.view=d||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var g=this;this.view.addEventListener("webglcontextlost",function(a){g.handleContextLost(a)},!1),this.view.addEventListener("webglcontextrestored",function(a){g.handleContextRestored(a)},!1),this.batchs=[];var h={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!1,stencil:!0};try{c.gl=this.gl=this.view.getContext("experimental-webgl",h)}catch(i){try{c.gl=this.gl=this.view.getContext("webgl",h)}catch(i){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}c.initDefaultShaders();var j=this.gl;j.useProgram(c.defaultShader.program),c.WebGLRenderer.gl=j,this.batch=new c.WebGLBatch(j),j.disable(j.DEPTH_TEST),j.disable(j.CULL_FACE),j.enable(j.BLEND),j.colorMask(!0,!0,!0,this.transparent),c.projection=new c.Point(400,300),c.offset=new c.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.stageRenderGroup=new c.WebGLRenderGroup(this.gl,this.transparent)},c.WebGLRenderer.prototype.constructor=c.WebGLRenderer,c.WebGLRenderer.getBatch=function(){return 0===c._batchs.length?new c.WebGLBatch(c.WebGLRenderer.gl):c._batchs.pop()},c.WebGLRenderer.returnBatch=function(a){a.clean(),c._batchs.push(a)},c.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(this.__stage=a,this.stageRenderGroup.setRenderable(a)),c.WebGLRenderer.updateTextures(),c.visibleCount++,a.updateTransform();var b=this.gl;if(b.colorMask(!0,!0,!0,this.transparent),b.viewport(0,0,this.width,this.height),b.bindFramebuffer(b.FRAMEBUFFER,null),b.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],!this.transparent),b.clear(b.COLOR_BUFFER_BIT),this.stageRenderGroup.backgroundColor=a.backgroundColorSplit,c.projection.x=this.width/2,c.projection.y=-this.height/2,this.stageRenderGroup.render(c.projection),a.interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this))),c.Texture.frameUpdates.length>0){for(var d=0;dn;n++)renderable=this.batchs[n],renderable instanceof c.WebGLBatch?this.batchs[n].render():this.renderSpecial(renderable,b);endBatch instanceof c.WebGLBatch?endBatch.render(0,h+1):this.renderSpecial(endBatch,b)},c.WebGLRenderGroup.prototype.renderSpecial=function(a,b){var d=a.vcount===c.visibleCount;a instanceof c.TilingSprite?d&&this.renderTilingSprite(a,b):a instanceof c.Strip?d&&this.renderStrip(a,b):a instanceof c.CustomRenderable?d&&a.renderWebGL(this,b):a instanceof c.Graphics?d&&a.renderable&&c.WebGLGraphics.renderGraphics(a,b):a instanceof c.FilterBlock&&this.handleFilterBlock(a,b)},flip=!1;var e=[],f=0;return c.WebGLRenderGroup.prototype.handleFilterBlock=function(a,b){var d=c.gl;if(a.open)a.data instanceof Array?this.filterManager.pushFilter(a):(f++,e.push(a),d.enable(d.STENCIL_TEST),d.colorMask(!1,!1,!1,!1),d.stencilFunc(d.ALWAYS,1,1),d.stencilOp(d.KEEP,d.KEEP,d.INCR),c.WebGLGraphics.renderGraphics(a.data,b),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,e.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP));else if(a.data instanceof Array)this.filterManager.popFilter();else{var g=e.pop(a);g&&(d.colorMask(!1,!1,!1,!1),d.stencilFunc(d.ALWAYS,1,1),d.stencilOp(d.KEEP,d.KEEP,d.DECR),c.WebGLGraphics.renderGraphics(g.data,b),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,e.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP)),d.disable(d.STENCIL_TEST)}},c.WebGLRenderGroup.prototype.updateTexture=function(a){this.removeObject(a);for(var b=a.first;b!=this.root&&(b=b._iPrev,!b.renderable||!b.__renderGroup););for(var c=a.last;c._iNext&&(c=c._iNext,!c.renderable||!c.__renderGroup););this.insertObject(a,b,c)},c.WebGLRenderGroup.prototype.addFilterBlocks=function(a,b){a.__renderGroup=this,b.__renderGroup=this;for(var c=a;c!=this.root.first&&(c=c._iPrev,!c.renderable||!c.__renderGroup););this.insertAfter(a,c);for(var d=b;d!=this.root.first&&(d=d._iPrev,!d.renderable||!d.__renderGroup););this.insertAfter(b,d)},c.WebGLRenderGroup.prototype.removeFilterBlocks=function(a,b){this.removeObject(a),this.removeObject(b)},c.WebGLRenderGroup.prototype.addDisplayObjectAndChildren=function(a){a.__renderGroup&&a.__renderGroup.removeDisplayObjectAndChildren(a);for(var b=a.first;b!=this.root.first&&(b=b._iPrev,!b.renderable||!b.__renderGroup););for(var c=a.last;c._iNext&&(c=c._iNext,!c.renderable||!c.__renderGroup););var d=a.first,e=a.last._iNext;do d.__renderGroup=this,d.renderable&&(this.insertObject(d,b,c),b=d),d=d._iNext;while(d!=e)},c.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren=function(a){if(a.__renderGroup==this){a.last;do a.__renderGroup=null,a.renderable&&this.removeObject(a),a=a._iNext;while(a)}},c.WebGLRenderGroup.prototype.insertObject=function(a,b,d){var e=b,f=d;if(a instanceof c.Sprite){var g,h;if(e instanceof c.Sprite){if(g=e.batch,g&&g.texture==a.texture.baseTexture&&g.blendMode==a.blendMode)return g.insertAfter(a,e),void 0}else g=e;if(f)if(f instanceof c.Sprite){if(h=f.batch){if(h.texture==a.texture.baseTexture&&h.blendMode==a.blendMode)return h.insertBefore(a,f),void 0;if(h==g){var i=g.split(f),j=c.WebGLRenderer.getBatch(),k=this.batchs.indexOf(g);return j.init(a),this.batchs.splice(k+1,0,j,i),void 0}}}else h=f;var j=c.WebGLRenderer.getBatch();if(j.init(a),g){var k=this.batchs.indexOf(g);this.batchs.splice(k+1,0,j)}else this.batchs.push(j)}else a instanceof c.TilingSprite?this.initTilingSprite(a):a instanceof c.Strip&&this.initStrip(a),this.insertAfter(a,e)},c.WebGLRenderGroup.prototype.insertAfter=function(a,b){if(b instanceof c.Sprite){var d=b.batch;if(d)if(d.tail==b){var e=this.batchs.indexOf(d);this.batchs.splice(e+1,0,a)}else{var f=d.split(b.__next),e=this.batchs.indexOf(d);this.batchs.splice(e+1,0,a,f)}else this.batchs.push(a)}else{var e=this.batchs.indexOf(b);this.batchs.splice(e+1,0,a)}},c.WebGLRenderGroup.prototype.removeObject=function(a){var b;if(a instanceof c.Sprite){var d=a.batch;if(!d)return;d.remove(a),0==d.size&&(b=d)}else b=a;if(b){var e=this.batchs.indexOf(b);if(-1==e)return;if(0===e||e==this.batchs.length-1)return this.batchs.splice(e,1),b instanceof c.WebGLBatch&&c.WebGLRenderer.returnBatch(b),void 0;if(this.batchs[e-1]instanceof c.WebGLBatch&&this.batchs[e+1]instanceof c.WebGLBatch&&this.batchs[e-1].texture==this.batchs[e+1].texture&&this.batchs[e-1].blendMode==this.batchs[e+1].blendMode)return this.batchs[e-1].merge(this.batchs[e+1]),b instanceof c.WebGLBatch&&c.WebGLRenderer.returnBatch(b),c.WebGLRenderer.returnBatch(this.batchs[e+1]),this.batchs.splice(e,2),void 0;this.batchs.splice(e,1),b instanceof c.WebGLBatch&&c.WebGLRenderer.returnBatch(b)}},c.WebGLRenderGroup.prototype.initTilingSprite=function(a){var b=this.gl;a.verticies=new Float32Array([0,0,a.width,0,a.width,a.height,0,a.height]),a.uvs=new Float32Array([0,0,1,0,1,1,0,1]),a.colors=new Float32Array([1,1,1,1]),a.indices=new Uint16Array([0,1,3,2]),a._vertexBuffer=b.createBuffer(),a._indexBuffer=b.createBuffer(),a._uvBuffer=b.createBuffer(),a._colorBuffer=b.createBuffer(),b.bindBuffer(b.ARRAY_BUFFER,a._vertexBuffer),b.bufferData(b.ARRAY_BUFFER,a.verticies,b.STATIC_DRAW),b.bindBuffer(b.ARRAY_BUFFER,a._uvBuffer),b.bufferData(b.ARRAY_BUFFER,a.uvs,b.DYNAMIC_DRAW),b.bindBuffer(b.ARRAY_BUFFER,a._colorBuffer),b.bufferData(b.ARRAY_BUFFER,a.colors,b.STATIC_DRAW),b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,a._indexBuffer),b.bufferData(b.ELEMENT_ARRAY_BUFFER,a.indices,b.STATIC_DRAW),a.texture.baseTexture._glTexture?(b.bindTexture(b.TEXTURE_2D,a.texture.baseTexture._glTexture),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.REPEAT),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.REPEAT),a.texture.baseTexture._powerOf2=!0):a.texture.baseTexture._powerOf2=!0},c.WebGLRenderGroup.prototype.renderStrip=function(a,b){var d=this.gl;c.activateStripShader();var e=c.stripShader;e.program;var f=c.mat3.clone(a.worldTransform);c.mat3.transpose(f),d.uniformMatrix3fv(e.translationMatrix,!1,f),d.uniform2f(e.projectionVector,b.x,b.y),d.uniform2f(e.offsetVector,-c.offset.x,-c.offset.y),d.uniform1f(e.alpha,a.worldAlpha),a.dirty?(a.dirty=!1,d.bindBuffer(d.ARRAY_BUFFER,a._vertexBuffer),d.bufferData(d.ARRAY_BUFFER,a.verticies,d.STATIC_DRAW),d.vertexAttribPointer(e.aVertexPosition,2,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,a._uvBuffer),d.bufferData(d.ARRAY_BUFFER,a.uvs,d.STATIC_DRAW),d.vertexAttribPointer(e.aTextureCoord,2,d.FLOAT,!1,0,0),d.activeTexture(d.TEXTURE0),d.bindTexture(d.TEXTURE_2D,a.texture.baseTexture._glTexture),d.bindBuffer(d.ARRAY_BUFFER,a._colorBuffer),d.bufferData(d.ARRAY_BUFFER,a.colors,d.STATIC_DRAW),d.vertexAttribPointer(e.colorAttribute,1,d.FLOAT,!1,0,0),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,a._indexBuffer),d.bufferData(d.ELEMENT_ARRAY_BUFFER,a.indices,d.STATIC_DRAW)):(d.bindBuffer(d.ARRAY_BUFFER,a._vertexBuffer),d.bufferSubData(d.ARRAY_BUFFER,0,a.verticies),d.vertexAttribPointer(e.aVertexPosition,2,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,a._uvBuffer),d.vertexAttribPointer(e.aTextureCoord,2,d.FLOAT,!1,0,0),d.activeTexture(d.TEXTURE0),d.bindTexture(d.TEXTURE_2D,a.texture.baseTexture._glTexture),d.bindBuffer(d.ARRAY_BUFFER,a._colorBuffer),d.vertexAttribPointer(e.colorAttribute,1,d.FLOAT,!1,0,0),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,a._indexBuffer)),d.drawElements(d.TRIANGLE_STRIP,a.indices.length,d.UNSIGNED_SHORT,0),c.deactivateStripShader() +},c.WebGLRenderGroup.prototype.renderTilingSprite=function(a,b){var d=this.gl;c.shaderProgram;var e=a.tilePosition,f=a.tileScale,g=e.x/a.texture.baseTexture.width,h=e.y/a.texture.baseTexture.height,i=a.width/a.texture.baseTexture.width/f.x,j=a.height/a.texture.baseTexture.height/f.y;a.uvs[0]=0-g,a.uvs[1]=0-h,a.uvs[2]=1*i-g,a.uvs[3]=0-h,a.uvs[4]=1*i-g,a.uvs[5]=1*j-h,a.uvs[6]=0-g,a.uvs[7]=1*j-h,d.bindBuffer(d.ARRAY_BUFFER,a._uvBuffer),d.bufferSubData(d.ARRAY_BUFFER,0,a.uvs),this.renderStrip(a,b)},c.WebGLRenderGroup.prototype.initStrip=function(a){var b=this.gl;this.shaderProgram,a._vertexBuffer=b.createBuffer(),a._indexBuffer=b.createBuffer(),a._uvBuffer=b.createBuffer(),a._colorBuffer=b.createBuffer(),b.bindBuffer(b.ARRAY_BUFFER,a._vertexBuffer),b.bufferData(b.ARRAY_BUFFER,a.verticies,b.DYNAMIC_DRAW),b.bindBuffer(b.ARRAY_BUFFER,a._uvBuffer),b.bufferData(b.ARRAY_BUFFER,a.uvs,b.STATIC_DRAW),b.bindBuffer(b.ARRAY_BUFFER,a._colorBuffer),b.bufferData(b.ARRAY_BUFFER,a.colors,b.STATIC_DRAW),b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,a._indexBuffer),b.bufferData(b.ELEMENT_ARRAY_BUFFER,a.indices,b.STATIC_DRAW)},c.initDefaultShaders=function(){c.primitiveShader=new c.PrimitiveShader,c.primitiveShader.init(),c.stripShader=new c.StripShader,c.stripShader.init(),c.defaultShader=new c.PixiShader,c.defaultShader.init();var a=c.gl,b=c.defaultShader.program;a.useProgram(b),a.enableVertexAttribArray(c.defaultShader.aVertexPosition),a.enableVertexAttribArray(c.defaultShader.colorAttribute),a.enableVertexAttribArray(c.defaultShader.aTextureCoord)},c.activatePrimitiveShader=function(){var a=c.gl;a.useProgram(c.primitiveShader.program),a.disableVertexAttribArray(c.defaultShader.aVertexPosition),a.disableVertexAttribArray(c.defaultShader.colorAttribute),a.disableVertexAttribArray(c.defaultShader.aTextureCoord),a.enableVertexAttribArray(c.primitiveShader.aVertexPosition),a.enableVertexAttribArray(c.primitiveShader.colorAttribute)},c.deactivatePrimitiveShader=function(){var a=c.gl;a.useProgram(c.defaultShader.program),a.disableVertexAttribArray(c.primitiveShader.aVertexPosition),a.disableVertexAttribArray(c.primitiveShader.colorAttribute),a.enableVertexAttribArray(c.defaultShader.aVertexPosition),a.enableVertexAttribArray(c.defaultShader.colorAttribute),a.enableVertexAttribArray(c.defaultShader.aTextureCoord)},c.activateStripShader=function(){var a=c.gl;a.useProgram(c.stripShader.program)},c.deactivateStripShader=function(){var a=c.gl;a.useProgram(c.defaultShader.program)},c.CompileVertexShader=function(a,b){return c._CompileShader(a,b,a.VERTEX_SHADER)},c.CompileFragmentShader=function(a,b){return c._CompileShader(a,b,a.FRAGMENT_SHADER)},c._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(console.log(a.getShaderInfoLog(e)),null)},c.compileProgram=function(a,b){var d=c.gl,e=c.CompileFragmentShader(d,b),f=c.CompileVertexShader(d,a),g=d.createProgram();return d.attachShader(g,f),d.attachShader(g,e),d.linkProgram(g),d.getProgramParameter(g,d.LINK_STATUS)||console.log("Could not initialise shaders"),g},c.BitmapText=function(a,b){c.DisplayObjectContainer.call(this),this.setText(a),this.setStyle(b),this.updateText(),this.dirty=!1},c.BitmapText.prototype=Object.create(c.DisplayObjectContainer.prototype),c.BitmapText.prototype.constructor=c.BitmapText,c.BitmapText.prototype.setText=function(a){this.text=a||" ",this.dirty=!0},c.BitmapText.prototype.setStyle=function(a){a=a||{},a.align=a.align||"left",this.style=a;var b=a.font.split(" ");this.fontName=b[b.length-1],this.fontSize=b.length>=2?parseInt(b[b.length-2],10):c.BitmapText.fonts[this.fontName].size,this.dirty=!0},c.BitmapText.prototype.updateText=function(){for(var a=c.BitmapText.fonts[this.fontName],b=new c.Point,d=null,e=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"==this.style.align?n=f-g[j]:"center"==this.style.align&&(n=(f-g[j])/2),m.push(n)}for(j=0;j0;)this.removeChild(this.getChildAt(0));this.updateText(),this.dirty=!1}c.DisplayObjectContainer.prototype.updateTransform.call(this)},c.BitmapText.fonts={},c.Text=function(a,b){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),c.Sprite.call(this,c.Texture.fromCanvas(this.canvas)),this.setText(a),this.setStyle(b),this.updateText(),this.dirty=!1},c.Text.prototype=Object.create(c.Sprite.prototype),c.Text.prototype.constructor=c.Text,c.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,this.style=a,this.dirty=!0},c.Text.prototype.setText=function(a){this.text=a.toString()||" ",this.dirty=!0},c.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.wordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),d=[],e=0,f=0;fe?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}b+="\n"}return b},c.Text.prototype.destroy=function(a){a&&this.texture.destroy()},c.Text.heightCache={},c.BaseTextureCache={},c.texturesToUpdate=[],c.texturesToDestroy=[],c.BaseTexture=function(a){if(c.EventTarget.call(this),this.width=100,this.height=100,this.hasLoaded=!1,this.source=a,a){if(this.source instanceof Image||this.source instanceof HTMLImageElement)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,c.texturesToUpdate.push(this);else{var b=this;this.source.onload=function(){b.hasLoaded=!0,b.width=b.source.width,b.height=b.source.height,c.texturesToUpdate.push(b),b.dispatchEvent({type:"loaded",content:b})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,c.texturesToUpdate.push(this);this._powerOf2=!1}},c.BaseTexture.prototype.constructor=c.BaseTexture,c.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,c.texturesToDestroy.push(this)},c.BaseTexture.fromImage=function(a,b){var d=c.BaseTextureCache[a];if(!d){var e=new Image;b&&(e.crossOrigin=""),e.src=a,d=new c.BaseTexture(e),c.BaseTextureCache[a]=d}return d},c.TextureCache={},c.FrameCache={},c.Texture=function(a,b){if(c.EventTarget.call(this),b||(this.noFrame=!0,b=new c.Rectangle(0,0,1,1)),a instanceof c.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=b,this.trim=new c.Point,this.scope=this,a.hasLoaded)this.noFrame&&(b=new c.Rectangle(0,0,a.width,a.height)),this.setFrame(b);else{var d=this;a.addEventListener("loaded",function(){d.onBaseTextureLoaded()})}},c.Texture.prototype.constructor=c.Texture,c.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new c.Rectangle(0,0,a.width,a.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},c.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},c.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,c.Texture.frameUpdates.push(this)},c.Texture.fromImage=function(a,b){var d=c.TextureCache[a];return d||(d=new c.Texture(c.BaseTexture.fromImage(a,b)),c.TextureCache[a]=d),d},c.Texture.fromFrame=function(a){var b=c.TextureCache[a];if(!b)throw new Error("The frameId '"+a+"' does not exist in the texture cache "+this);return b},c.Texture.fromCanvas=function(a){var b=new c.BaseTexture(a);return new c.Texture(b)},c.Texture.addTextureToCache=function(a,b){c.TextureCache[b]=a},c.Texture.removeTextureFromCache=function(a){var b=c.TextureCache[a];return c.TextureCache[a]=null,b},c.Texture.frameUpdates=[],c.RenderTexture=function(a,b){c.EventTarget.call(this),this.width=a||100,this.height=b||100,this.indetityMatrix=c.mat3.create(),this.frame=new c.Rectangle(0,0,this.width,this.height),c.gl?this.initWebGL():this.initCanvas()},c.RenderTexture.prototype=Object.create(c.Texture.prototype),c.RenderTexture.prototype.constructor=c.RenderTexture,c.RenderTexture.prototype.initWebGL=function(){var a=c.gl;this.glFramebuffer=a.createFramebuffer(),a.bindFramebuffer(a.FRAMEBUFFER,this.glFramebuffer),this.glFramebuffer.width=this.width,this.glFramebuffer.height=this.height,this.baseTexture=new c.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTexture=a.createTexture(),a.bindTexture(a.TEXTURE_2D,this.baseTexture._glTexture),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,this.width,this.height,0,a.RGBA,a.UNSIGNED_BYTE,null),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),this.baseTexture.isRender=!0,a.bindFramebuffer(a.FRAMEBUFFER,this.glFramebuffer),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,this.baseTexture._glTexture,0),this.projection=new c.Point(this.width/2,-this.height/2),this.render=this.renderWebGL},c.RenderTexture.prototype.resize=function(a,b){if(this.width=a,this.height=b,c.gl){this.projection.x=this.width/2,this.projection.y=-this.height/2;var d=c.gl;d.bindTexture(d.TEXTURE_2D,this.baseTexture._glTexture),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,this.width,this.height,0,d.RGBA,d.UNSIGNED_BYTE,null)}else this.frame.width=this.width,this.frame.height=this.height,this.renderer.resize(this.width,this.height)},c.RenderTexture.prototype.initCanvas=function(){this.renderer=new c.CanvasRenderer(this.width,this.height,null,0),this.baseTexture=new c.BaseTexture(this.renderer.view),this.frame=new c.Rectangle(0,0,this.width,this.height),this.render=this.renderCanvas},c.RenderTexture.prototype.renderWebGL=function(a,b,d){var e=c.gl;e.colorMask(!0,!0,!0,!0),e.viewport(0,0,this.width,this.height),e.bindFramebuffer(e.FRAMEBUFFER,this.glFramebuffer),d&&(e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT));var f=a.children,g=a.worldTransform;a.worldTransform=c.mat3.create(),a.worldTransform[4]=-1,a.worldTransform[5]=-2*this.projection.y,b&&(a.worldTransform[2]=b.x,a.worldTransform[5]-=b.y),c.visibleCount++,a.vcount=c.visibleCount;for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();var j=a.__renderGroup;j?a==j.root?j.render(this.projection,this.glFramebuffer):j.renderSpecific(a,this.projection,this.glFramebuffer):(this.renderGroup||(this.renderGroup=new c.WebGLRenderGroup(e)),this.renderGroup.setRenderable(a),this.renderGroup.render(this.projection,this.glFramebuffer)),a.worldTransform=g},c.RenderTexture.prototype.renderCanvas=function(a,b,d){var e=a.children;a.worldTransform=c.mat3.create(),b&&(a.worldTransform[2]=b.x,a.worldTransform[5]=b.y);for(var f=0,g=e.length;g>f;f++)e[f].updateTransform();d&&this.renderer.context.clearRect(0,0,this.width,this.height),this.renderer.renderDisplayObject(a),this.renderer.context.setTransform(1,0,0,1,0,0)},c.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)}},c.PolyK={},c.PolyK.Triangulate=function(a){var b=!0,d=a.length>>1;if(3>d)return[];for(var e=[],f=[],g=0;d>g;g++)f.push(g);for(var g=0,h=d;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(c.PolyK._convex(l,m,n,o,p,q,b)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!=i&&t!=j&&t!=k&&c.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)e.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!b)return console.log("PIXI Warning: shape too complex to fill"),[];var e=[];f=[];for(var g=0;d>g;g++)f.push(g);g=0,h=d,b=!1}}return e.push(f[0],f[1],f[2]),e},c.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},c.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0==g},d.Camera=function(a,b,c,e,f,g){this.game=a,this.world=a.world,this.id=0,this.view=new d.Rectangle(c,e,f,g),this.screenView=new d.Rectangle(c,e,f,g),this.bounds=new d.Rectangle(c,e,f,g),this.deadzone=null,this.visible=!0,this.atLimit={x:!1,y:!1},this.target=null,this._edge=0,this.displayObject=null},d.Camera.FOLLOW_LOCKON=0,d.Camera.FOLLOW_PLATFORMER=1,d.Camera.FOLLOW_TOPDOWN=2,d.Camera.FOLLOW_TOPDOWN_TIGHT=3,d.Camera.prototype={follow:function(a,b){"undefined"==typeof b&&(b=d.Camera.FOLLOW_LOCKON),this.target=a;var c;switch(b){case d.Camera.FOLLOW_PLATFORMER:var e=this.width/8,f=this.height/3;this.deadzone=new d.Rectangle((this.width-e)/2,(this.height-f)/2-.25*f,e,f);break;case d.Camera.FOLLOW_TOPDOWN:c=Math.max(this.width,this.height)/4,this.deadzone=new d.Rectangle((this.width-c)/2,(this.height-c)/2,c,c);break;case d.Camera.FOLLOW_TOPDOWN_TIGHT:c=Math.max(this.width,this.height)/8,this.deadzone=new d.Rectangle((this.width-c)/2,(this.height-c)/2,c,c);break;case d.Camera.FOLLOW_LOCKON:this.deadzone=null;break;default:this.deadzone=null}},focusOn:function(a){this.setPosition(Math.round(a.x-this.view.halfWidth),Math.round(a.y-this.view.halfHeight))},focusOnXY:function(a,b){this.setPosition(Math.round(a-this.view.halfWidth),Math.round(b-this.view.halfHeight))},update:function(){this.target&&this.updateTarget(),this.bounds&&this.checkBounds(),this.displayObject.position.x=-this.view.x,this.displayObject.position.y=-this.view.y},updateTarget:function(){this.deadzone?(this._edge=this.target.x-this.deadzone.x,this.view.x>this._edge&&(this.view.x=this._edge),this._edge=this.target.x+this.target.width-this.deadzone.x-this.deadzone.width,this.view.xthis._edge&&(this.view.y=this._edge),this._edge=this.target.y+this.target.height-this.deadzone.y-this.deadzone.height,this.view.ythis.bounds.right-this.width&&(this.atLimit.x=!0,this.view.x=this.bounds.right-this.width+1),this.view.ythis.bounds.bottom-this.height&&(this.atLimit.y=!0,this.view.y=this.bounds.bottom-this.height+1),this.view.floor()},setPosition:function(a,b){this.view.x=a,this.view.y=b,this.bounds&&this.checkBounds()},setSize:function(a,b){this.view.width=a,this.view.height=b}},Object.defineProperty(d.Camera.prototype,"x",{get:function(){return this.view.x},set:function(a){this.view.x=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(d.Camera.prototype,"y",{get:function(){return this.view.y},set:function(a){this.view.y=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(d.Camera.prototype,"width",{get:function(){return this.view.width},set:function(a){this.view.width=a}}),Object.defineProperty(d.Camera.prototype,"height",{get:function(){return this.view.height},set:function(a){this.view.height=a}}),d.State=function(){this.game=null,this.add=null,this.camera=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.particles=null,this.physics=null},d.State.prototype={preload:function(){},loadUpdate:function(){},loadRender:function(){},create:function(){},update:function(){},render:function(){},paused:function(){},destroy:function(){}},d.StateManager=function(a,b){this.game=a,this.states={},this._pendingState=null,null!==b&&(this._pendingState=b),this._created=!1,this.current="",this.onInitCallback=null,this.onPreloadCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPreRenderCallback=null,this.onLoadUpdateCallback=null,this.onLoadRenderCallback=null,this.onPausedCallback=null,this.onShutDownCallback=null},d.StateManager.prototype={boot:function(){this.game.onPause.add(this.pause,this),this.game.onResume.add(this.resume,this),null!==this._pendingState&&("string"==typeof this._pendingState?this.start(this._pendingState,!1,!1):this.add("default",this._pendingState,!0))},add:function(a,b,c){"undefined"==typeof c&&(c=!1);var e;return b instanceof d.State?e=b:"object"==typeof b?(e=b,e.game=this.game):"function"==typeof b&&(e=new b(this.game)),this.states[a]=e,c&&(this.game.isBooted?this.start(a):this._pendingState=a),e},remove:function(a){this.current==a&&(this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onDestroyCallback=null),delete this.states[a]},start:function(a,b,c){return"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!1),this.game.isBooted===!1?(this._pendingState=a,void 0):(this.checkState(a)!==!1&&(this.current&&this.onShutDownCallback.call(this.callbackContext,this.game),b&&(this.game.tweens.removeAll(),this.game.world.destroy(),c===!0&&this.game.cache.destroy()),this.setCurrentState(a),this.onPreloadCallback?(this.game.load.reset(),this.onPreloadCallback.call(this.callbackContext,this.game),0===this.game.load.totalQueuedFiles()?this.game.loadComplete():this.game.load.start()):this.game.loadComplete()),void 0)},dummy:function(){},checkState:function(a){if(this.states[a]){var b=!1;return this.states[a].preload&&(b=!0),b===!1&&this.states[a].loadRender&&(b=!0),b===!1&&this.states[a].loadUpdate&&(b=!0),b===!1&&this.states[a].create&&(b=!0),b===!1&&this.states[a].update&&(b=!0),b===!1&&this.states[a].preRender&&(b=!0),b===!1&&this.states[a].render&&(b=!0),b===!1&&this.states[a].paused&&(b=!0),b===!1?(console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions."),!1):!0}return console.warn("Phaser.StateManager - No state found with the key: "+a),!1},link:function(a){this.states[a].game=this.game,this.states[a].add=this.game.add,this.states[a].camera=this.game.camera,this.states[a].cache=this.game.cache,this.states[a].input=this.game.input,this.states[a].load=this.game.load,this.states[a].math=this.game.math,this.states[a].sound=this.game.sound,this.states[a].stage=this.game.stage,this.states[a].time=this.game.time,this.states[a].tweens=this.game.tweens,this.states[a].world=this.game.world,this.states[a].particles=this.game.particles,this.states[a].physics=this.game.physics,this.states[a].rnd=this.game.rnd},setCurrentState:function(a){this.callbackContext=this.states[a],this.link(a),this.onInitCallback=this.states[a].init||this.dummy,this.onPreloadCallback=this.states[a].preload||null,this.onLoadRenderCallback=this.states[a].loadRender||null,this.onLoadUpdateCallback=this.states[a].loadUpdate||null,this.onCreateCallback=this.states[a].create||null,this.onUpdateCallback=this.states[a].update||null,this.onPreRenderCallback=this.states[a].preRender||null,this.onRenderCallback=this.states[a].render||null,this.onPausedCallback=this.states[a].paused||null,this.onShutDownCallback=this.states[a].shutdown||this.dummy,this.current=a,this._created=!1,this.onInitCallback.call(this.callbackContext,this.game)},loadComplete:function(){this._created===!1&&this.onCreateCallback?(this._created=!0,this.onCreateCallback.call(this.callbackContext,this.game)):this._created=!0},pause:function(){this._created&&this.onPausedCallback&&this.onPausedCallback.call(this.callbackContext,this.game,!0)},resume:function(){this._created&&this.onre&&this.onPausedCallback.call(this.callbackContext,this.game,!1)},update:function(){this._created&&this.onUpdateCallback?this.onUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},preRender:function(){this.onPreRenderCallback&&this.onPreRenderCallback.call(this.callbackContext,this.game)},render:function(){this._created&&this.onRenderCallback?(this.game.renderType===d.CANVAS&&(this.game.context.save(),this.game.context.setTransform(1,0,0,1,0,0)),this.onRenderCallback.call(this.callbackContext,this.game),this.game.renderType===d.CANVAS&&this.game.context.restore()):this.onLoadRenderCallback&&this.onLoadRenderCallback.call(this.callbackContext,this.game)},destroy:function(){this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onDestroyCallback=null,this.game=null,this.states={},this._pendingState=null}},d.LinkedList=function(){this.next=null,this.prev=null,this.first=null,this.last=null,this.total=0},d.LinkedList.prototype={add:function(a){return 0===this.total&&null==this.first&&null==this.last?(this.first=a,this.last=a,this.next=a,a.prev=this,this.total++,a):(this.last.next=a,a.prev=this.last,this.last=a,this.total++,a)},remove:function(a){a==this.first?this.first=this.first.next:a==this.last&&(this.last=this.last.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),a.next=a.prev=null,null==this.first&&(this.last=null),this.total--},callAll:function(a){if(this.first&&this.last){var b=this.first;do b&&b[a]&&b[a].call(b),b=b.next;while(b!=this.last.next)}}},d.Signal=function(){this._bindings=[],this._prevParams=null;var a=this;this.dispatch=function(){d.Signal.prototype.dispatch.apply(a,arguments)}},d.Signal.prototype={memorize:!1,_shouldPropagate:!0,active:!0,validateListener:function(a,b){if("function"!=typeof a)throw new Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}",b))},_registerListener:function(a,b,c,e){var f,g=this._indexOfListener(a,c);if(-1!==g){if(f=this._bindings[g],f.isOnce()!==b)throw new Error("You cannot add"+(b?"":"Once")+"() then add"+(b?"Once":"")+"() the same listener without removing the relationship first.")}else f=new d.SignalBinding(this,a,b,c,e),this._addBinding(f);return this.memorize&&this._prevParams&&f.execute(this._prevParams),f},_addBinding:function(a){var b=this._bindings.length;do--b;while(this._bindings[b]&&a._priority<=this._bindings[b]._priority);this._bindings.splice(b+1,0,a)},_indexOfListener:function(a,b){for(var c,d=this._bindings.length;d--;)if(c=this._bindings[d],c._listener===a&&c.context===b)return d;return-1},has:function(a,b){return-1!==this._indexOfListener(a,b)},add:function(a,b,c){return this.validateListener(a,"add"),this._registerListener(a,!1,b,c)},addOnce:function(a,b,c){return this.validateListener(a,"addOnce"),this._registerListener(a,!0,b,c)},remove:function(a,b){this.validateListener(a,"remove");var c=this._indexOfListener(a,b);return-1!==c&&(this._bindings[c]._destroy(),this._bindings.splice(c,1)),a},removeAll:function(){for(var a=this._bindings.length;a--;)this._bindings[a]._destroy();this._bindings.length=0},getNumListeners:function(){return this._bindings.length},halt:function(){this._shouldPropagate=!1},dispatch:function(){if(this.active){var a,b=Array.prototype.slice.call(arguments),c=this._bindings.length;if(this.memorize&&(this._prevParams=b),c){a=this._bindings.slice(),this._shouldPropagate=!0;do c--;while(a[c]&&this._shouldPropagate&&a[c].execute(b)!==!1)}}},forget:function(){this._prevParams=null},dispose:function(){this.removeAll(),delete this._bindings,delete this._prevParams},toString:function(){return"[Phaser.Signal active:"+this.active+" numListeners:"+this.getNumListeners()+"]"}},d.SignalBinding=function(a,b,c,d,e){this._listener=b,this._isOnce=c,this.context=d,this._signal=a,this._priority=e||0},d.SignalBinding.prototype={active:!0,params:null,execute:function(a){var b,c;return this.active&&this._listener&&(c=this.params?this.params.concat(a):a,b=this._listener.apply(this.context,c),this._isOnce&&this.detach()),b},detach:function(){return this.isBound()?this._signal.remove(this._listener,this.context):null},isBound:function(){return!!this._signal&&!!this._listener},isOnce:function(){return this._isOnce},getListener:function(){return this._listener},getSignal:function(){return this._signal},_destroy:function(){delete this._signal,delete this._listener,delete this.context},toString:function(){return"[Phaser.SignalBinding isOnce:"+this._isOnce+", isBound:"+this.isBound()+", active:"+this.active+"]"}},d.Filter=function(a,b,c){this.game=a,this.type=d.WEBGL_FILTER,this.passes=[this],this.dirty=!0,this.padding=0,this.uniforms={time:{type:"1f",value:0},resolution:{type:"2f",value:{x:256,y:256}},mouse:{type:"2f",value:{x:0,y:0}}},this.fragmentSrc=c||[]},d.Filter.prototype={init:function(){},setResolution:function(a,b){this.uniforms.resolution.value.x=a,this.uniforms.resolution.value.y=b},update:function(a){"undefined"!=typeof a&&(a.x>0&&(this.uniforms.mouse.x=a.x.toFixed(2)),a.y>0&&(this.uniforms.mouse.y=a.y.toFixed(2))),this.uniforms.time.value=this.game.time.totalElapsedSeconds()},destroy:function(){this.game=null}},Object.defineProperty(d.Filter.prototype,"width",{get:function(){return this.uniforms.resolution.value.x},set:function(a){this.uniforms.resolution.value.x=a}}),Object.defineProperty(d.Filter.prototype,"height",{get:function(){return this.uniforms.resolution.value.y},set:function(a){this.uniforms.resolution.value.y=a}}),d.Plugin=function(a,b){"undefined"==typeof b&&(b=null),this.game=a,this.parent=b,this.active=!1,this.visible=!1,this.hasPreUpdate=!1,this.hasUpdate=!1,this.hasPostUpdate=!1,this.hasRender=!1,this.hasPostRender=!1},d.Plugin.prototype={preUpdate:function(){},update:function(){},render:function(){},postRender:function(){},destroy:function(){this.game=null,this.parent=null,this.active=!1,this.visible=!1}},d.PluginManager=function(a,b){this.game=a,this._parent=b,this.plugins=[],this._pluginsLength=0},d.PluginManager.prototype={add:function(a){var b=!1;return"function"==typeof a?a=new a(this.game,this._parent):(a.game=this.game,a.parent=this._parent),"function"==typeof a.preUpdate&&(a.hasPreUpdate=!0,b=!0),"function"==typeof a.update&&(a.hasUpdate=!0,b=!0),"function"==typeof a.postUpdate&&(a.hasPostUpdate=!0,b=!0),"function"==typeof a.render&&(a.hasRender=!0,b=!0),"function"==typeof a.postRender&&(a.hasPostRender=!0,b=!0),b?((a.hasPreUpdate||a.hasUpdate||a.hasPostUpdate)&&(a.active=!0),(a.hasRender||a.hasPostRender)&&(a.visible=!0),this._pluginsLength=this.plugins.push(a),"function"==typeof a.init&&a.init(),a):null},remove:function(a){if(0!==this._pluginsLength)for(this._p=0;this._pthis._nextOffsetCheck&&(d.Canvas.getOffset(this.canvas,this.offset),this._nextOffsetCheck=this.game.time.now+this.checkOffsetInterval)},visibilityChange:function(a){this.disableVisibilityChange||(this.game.paused="pagehide"==a.type||"blur"==a.type||document.hidden===!0||document.webkitHidden===!0?!0:!1)}},Object.defineProperty(d.Stage.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(a){this._backgroundColor=a,this.game.transparent===!1&&(this.game.renderType==d.CANVAS?this.game.canvas.style.backgroundColor=a:("string"==typeof a&&(a=d.Color.hexToRGB(a)),this._stage.setBackgroundColor(a)))}}),d.Group=function(a,b,e,f){("undefined"==typeof b||null===typeof b)&&(b=a.world),"undefined"==typeof f&&(f=!1),this.game=a,this.name=e||"group",f?this._container=this.game.stage._stage:(this._container=new c.DisplayObjectContainer,this._container.name=this.name,b?b instanceof d.Group?(b._container.addChild(this._container),b._container.updateTransform()):(b.addChild(this._container),b.updateTransform()):(this.game.stage._stage.addChild(this._container),this.game.stage._stage.updateTransform())),this.type=d.GROUP,this.exists=!0,this.scale=new d.Point(1,1),this.cursor=null},d.Group.RETURN_NONE=0,d.Group.RETURN_TOTAL=1,d.Group.RETURN_CHILD=2,d.Group.SORT_ASCENDING=-1,d.Group.SORT_DESCENDING=1,d.Group.prototype={add:function(a){return a.group!==this&&(a.group=this,a.events&&a.events.onAddedToGroup.dispatch(a,this),this._container.addChild(a),a.updateTransform(),null===this.cursor&&(this.cursor=a)),a},addAt:function(a,b){return a.group!==this&&(a.group=this,a.events&&a.events.onAddedToGroup.dispatch(a,this),this._container.addChildAt(a,b),a.updateTransform(),null===this.cursor&&(this.cursor=a)),a},getAt:function(a){return this._container.getChildAt(a)},create:function(a,b,c,e,f){"undefined"==typeof f&&(f=!0);var g=new d.Sprite(this.game,a,b,c,e);return g.group=this,g.exists=f,g.visible=f,g.alive=f,g.events&&g.events.onAddedToGroup.dispatch(g,this),this._container.addChild(g),g.updateTransform(),null===this.cursor&&(this.cursor=g),g},createMultiple:function(a,b,c,e){"undefined"==typeof e&&(e=!1);for(var f=0;a>f;f++){var g=new d.Sprite(this.game,0,0,b,c);g.group=this,g.exists=e,g.visible=e,g.alive=e,g.events&&g.events.onAddedToGroup.dispatch(g,this),this._container.addChild(g),g.updateTransform(),null===this.cursor&&(this.cursor=g)}},next:function(){this.cursor&&(this.cursor=this.cursor==this._container.last?this._container._iNext:this.cursor._iNext)},previous:function(){this.cursor&&(this.cursor=this.cursor==this._container._iNext?this._container.last:this.cursor._iPrev)},childTest:function(a,b){var c=a+" next: ";c+=b._iNext?b._iNext.name:"-null-",c=c+" "+a+" prev: ",c+=b._iPrev?b._iPrev.name:"-null-",console.log(c)},swapIndex:function(a,b){var c=this.getAt(a),d=this.getAt(b);console.log("swapIndex ",a," with ",b),this.swap(c,d)},swap:function(a,b){if(a===b||!a.parent||!b.parent||a.group!==this||b.group!==this)return!1;var c=a._iPrev,d=a._iNext,e=b._iPrev,f=b._iNext,g=this._container.last._iNext,h=this.game.stage._stage;do h!==a&&h!==b&&(h.first===a?h.first=b:h.first===b&&(h.first=a),h.last===a?h.last=b:h.last===b&&(h.last=a)),h=h._iNext;while(h!=g);return a._iNext==b?(a._iNext=f,a._iPrev=b,b._iNext=a,b._iPrev=c,c&&(c._iNext=b),f&&(f._iPrev=a),a.__renderGroup&&a.__renderGroup.updateTexture(a),b.__renderGroup&&b.__renderGroup.updateTexture(b),!0):b._iNext==a?(a._iNext=b,a._iPrev=e,b._iNext=d,b._iPrev=a,e&&(e._iNext=a),d&&(d._iPrev=b),a.__renderGroup&&a.__renderGroup.updateTexture(a),b.__renderGroup&&b.__renderGroup.updateTexture(b),!0):(a._iNext=f,a._iPrev=e,b._iNext=d,b._iPrev=c,c&&(c._iNext=b),d&&(d._iPrev=b),e&&(e._iNext=a),f&&(f._iPrev=a),a.__renderGroup&&a.__renderGroup.updateTexture(a),b.__renderGroup&&b.__renderGroup.updateTexture(b),!0)},bringToTop:function(a){return a.group===this&&(this.remove(a),this.add(a)),a},getIndex:function(a){return this._container.children.indexOf(a)},replace:function(a,b){if(this._container.first._iNext){var c=this.getIndex(a);-1!=c&&(void 0!==b.parent&&(b.events.onRemovedFromGroup.dispatch(b,this),b.parent.removeChild(b)),this._container.removeChild(a),this._container.addChildAt(b,c),b.events.onAddedToGroup.dispatch(b,this),b.updateTransform(),this.cursor==a&&(this.cursor=this._container._iNext))}},setProperty:function(a,b,c,d){d=d||0;var e=b.length;1==e?0===d?a[b[0]]=c:1==d?a[b[0]]+=c:2==d?a[b[0]]-=c:3==d?a[b[0]]*=c:4==d&&(a[b[0]]/=c):2==e?0===d?a[b[0]][b[1]]=c:1==d?a[b[0]][b[1]]+=c:2==d?a[b[0]][b[1]]-=c:3==d?a[b[0]][b[1]]*=c:4==d&&(a[b[0]][b[1]]/=c):3==e?0===d?a[b[0]][b[1]][b[2]]=c:1==d?a[b[0]][b[1]][b[2]]+=c:2==d?a[b[0]][b[1]][b[2]]-=c:3==d?a[b[0]][b[1]][b[2]]*=c:4==d&&(a[b[0]][b[1]][b[2]]/=c):4==e&&(0===d?a[b[0]][b[1]][b[2]][b[3]]=c:1==d?a[b[0]][b[1]][b[2]][b[3]]+=c:2==d?a[b[0]][b[1]][b[2]][b[3]]-=c:3==d?a[b[0]][b[1]][b[2]][b[3]]*=c:4==d&&(a[b[0]][b[1]][b[2]][b[3]]/=c))},setAll:function(a,b,c,d,e){if(a=a.split("."),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),e=e||0,this._container.children.length>0&&this._container.first._iNext){var f=this._container.first._iNext;do(c===!1||c&&f.alive)&&(d===!1||d&&f.visible)&&this.setProperty(f,a,b,e),f=f._iNext;while(f!=this._container.last._iNext)}},addAll:function(a,b,c,d){this.setAll(a,b,c,d,1)},subAll:function(a,b,c,d){this.setAll(a,b,c,d,2)},multiplyAll:function(a,b,c,d){this.setAll(a,b,c,d,3)},divideAll:function(a,b,c,d){this.setAll(a,b,c,d,4)},callAllExists:function(a,b){var c=Array.prototype.splice.call(arguments,2);if(this._container.children.length>0&&this._container.first._iNext){var d=this._container.first._iNext;do d.exists==b&&d[a]&&d[a].apply(d,c),d=d._iNext;while(d!=this._container.last._iNext)}},callbackFromArray:function(a,b,c){if(1==c){if(a[b[0]])return a[b[0]]}else if(2==c){if(a[b[0]][b[1]])return a[b[0]][b[1]]}else if(3==c){if(a[b[0]][b[1]][b[2]])return a[b[0]][b[1]][b[2]]}else if(4==c){if(a[b[0]][b[1]][b[2]][b[3]])return a[b[0]][b[1]][b[2]][b[3]]}else if(a[b])return a[b];return!1},callAll:function(a,b){if("undefined"!=typeof a){a=a.split(".");var c=a.length;if("undefined"==typeof b)b=null;else if("string"==typeof b){b=b.split(".");var d=b.length}var e=Array.prototype.splice.call(arguments,2),f=null,g=null;if(this._container.children.length>0&&this._container.first._iNext){var h=this._container.first._iNext;do f=this.callbackFromArray(h,a,c),b&&f?(g=this.callbackFromArray(h,b,d),f&&f.apply(g,e)):f&&f.apply(h,e),h=h._iNext;while(h!=this._container.last._iNext)}}},forEach:function(a,b,c){"undefined"==typeof c&&(c=!1);var d=Array.prototype.splice.call(arguments,3);if(d.unshift(null),this._container.children.length>0&&this._container.first._iNext){var e=this._container.first._iNext;do(c===!1||c&&e.exists)&&(d[0]=e,a.apply(b,d)),e=e._iNext;while(e!=this._container.last._iNext)}},forEachExists:function(a,b){var c=Array.prototype.splice.call(arguments,2);c.unshift(null),this.iterate("exists",!0,d.Group.RETURN_TOTAL,a,b,c)},forEachAlive:function(a,b){var c=Array.prototype.splice.call(arguments,2);c.unshift(null),this.iterate("alive",!0,d.Group.RETURN_TOTAL,a,b,c)},forEachDead:function(a,b){var c=Array.prototype.splice.call(arguments,2);c.unshift(null),this.iterate("alive",!1,d.Group.RETURN_TOTAL,a,b,c)},sort:function(a,b){"undefined"==typeof a&&(a="y"),"undefined"==typeof b&&(b=d.Group.SORT_ASCENDING);var c,e;do{c=!1;for(var f=0,g=this._container.children.length-1;g>f;f++)b==d.Group.SORT_ASCENDING?this._container.children[f][a]>this._container.children[f+1][a]&&(this.swap(this.getAt(f),this.getAt(f+1)),e=this._container.children[f],this._container.children[f]=this._container.children[f+1],this._container.children[f+1]=e,c=!0):this._container.children[f][a]0&&this._container.first._iNext){var i=this._container.first._iNext;do{if(i[a]===b&&(h++,e&&(g[0]=i,e.apply(f,g)),c==d.Group.RETURN_CHILD))return i;i=i._iNext}while(i!=this._container.last._iNext)}return c==d.Group.RETURN_TOTAL?h:c==d.Group.RETURN_CHILD?null:void 0},getFirstExists:function(a){return"boolean"!=typeof a&&(a=!0),this.iterate("exists",a,d.Group.RETURN_CHILD)},getFirstAlive:function(){return this.iterate("alive",!0,d.Group.RETURN_CHILD)},getFirstDead:function(){return this.iterate("alive",!1,d.Group.RETURN_CHILD)},countLiving:function(){return this.iterate("alive",!0,d.Group.RETURN_TOTAL)},countDead:function(){return this.iterate("alive",!1,d.Group.RETURN_TOTAL)},getRandom:function(a,b){return 0===this._container.children.length?null:(a=a||0,b=b||this._container.children.length,this.game.math.getRandom(this._container.children,a,b))},remove:function(a){return a.group!==this?!1:(a.events&&a.events.onRemovedFromGroup.dispatch(a,this),a.parent===this._container&&this._container.removeChild(a),this.cursor==a&&(this.cursor=this._container._iNext?this._container._iNext:null),a.group=null,!0)},removeAll:function(){if(0!==this._container.children.length){do this._container.children[0].events&&this._container.children[0].events.onRemovedFromGroup.dispatch(this._container.children[0],this),this._container.removeChild(this._container.children[0]);while(this._container.children.length>0);this.cursor=null}},removeBetween:function(a,b){if(0!==this._container.children.length){if(a>b||0>a||b>this._container.children.length)return!1;for(var c=a;b>c;c++){var d=this._container.children[c];d.events.onRemovedFromGroup.dispatch(d,this),this._container.removeChild(d),this.cursor==d&&(this.cursor=this._container._iNext?this._container._iNext:null)}}},destroy:function(){this.removeAll(),this._container.parent.removeChild(this._container),this._container=null,this.game=null,this.exists=!1,this.cursor=null},validate:function(){var a=this.game.stage._stage.last._iNext,b=this.game.stage._stage,c=null,d=null,e=0;do{if(e>0){if(b!==c)return console.log("check next fail"),!1;if(b._iPrev!==d)return console.log("check previous fail"),!1}c=b._iNext,d=b,b=b._iNext,e++}while(b!=a);return!0},dump:function(a){"undefined"==typeof a&&(a=!1);var b=20,c="\n"+d.Utils.pad("Node",b)+"|"+d.Utils.pad("Next",b)+"|"+d.Utils.pad("Previous",b)+"|"+d.Utils.pad("First",b)+"|"+d.Utils.pad("Last",b);console.log(c);var c=d.Utils.pad("----------",b)+"|"+d.Utils.pad("----------",b)+"|"+d.Utils.pad("----------",b)+"|"+d.Utils.pad("----------",b)+"|"+d.Utils.pad("----------",b);if(console.log(c),a)var e=this.game.stage._stage.last._iNext,f=this.game.stage._stage;else var e=this._container.last._iNext,f=this._container;do{var g=f.name||"*";if(this.cursor==f)var g="> "+g;var h="-",i="-",j="-",k="-";f._iNext&&(h=f._iNext.name),f._iPrev&&(i=f._iPrev.name),f.first&&(j=f.first.name),f.last&&(k=f.last.name),"undefined"==typeof h&&(h="-"),"undefined"==typeof i&&(i="-"),"undefined"==typeof j&&(j="-"),"undefined"==typeof k&&(k="-");var c=d.Utils.pad(g,b)+"|"+d.Utils.pad(h,b)+"|"+d.Utils.pad(i,b)+"|"+d.Utils.pad(j,b)+"|"+d.Utils.pad(k,b);console.log(c),f=f._iNext}while(f!=e)}},Object.defineProperty(d.Group.prototype,"total",{get:function(){return this.iterate("exists",!0,d.Group.RETURN_TOTAL)}}),Object.defineProperty(d.Group.prototype,"length",{get:function(){return this.iterate("exists",!0,d.Group.RETURN_TOTAL)}}),Object.defineProperty(d.Group.prototype,"x",{get:function(){return this._container.position.x},set:function(a){this._container.position.x=a}}),Object.defineProperty(d.Group.prototype,"y",{get:function(){return this._container.position.y},set:function(a){this._container.position.y=a}}),Object.defineProperty(d.Group.prototype,"angle",{get:function(){return d.Math.radToDeg(this._container.rotation)},set:function(a){this._container.rotation=d.Math.degToRad(a)}}),Object.defineProperty(d.Group.prototype,"rotation",{get:function(){return this._container.rotation},set:function(a){this._container.rotation=a}}),Object.defineProperty(d.Group.prototype,"visible",{get:function(){return this._container.visible},set:function(a){this._container.visible=a}}),Object.defineProperty(d.Group.prototype,"alpha",{get:function(){return this._container.alpha},set:function(a){this._container.alpha=a}}),d.World=function(a){d.Group.call(this,a,null,"__world",!1),this.scale=new d.Point(1,1),this.bounds=new d.Rectangle(0,0,a.width,a.height),this.camera=null,this.currentRenderOrderID=0},d.World.prototype=Object.create(d.Group.prototype),d.World.prototype.constructor=d.World,d.World.prototype.boot=function(){this.camera=new d.Camera(this.game,0,0,0,this.game.width,this.game.height),this.camera.displayObject=this._container,this.game.camera=this.camera},d.World.prototype.update=function(){if(this.currentRenderOrderID=0,this.game.stage._stage.first._iNext){var a,b=this.game.stage._stage.first._iNext;do a=!1,b.preUpdate&&(a=b.preUpdate()===!1),b.update&&(a=b.update()===!1||a),b=a?b.last._iNext:b._iNext;while(b!=this.game.stage._stage.last._iNext)}},d.World.prototype.postUpdate=function(){if(this.game.stage._stage.first._iNext){var a=this.game.stage._stage.first._iNext;do a.postUpdate&&a.postUpdate(),a=a._iNext;while(a!=this.game.stage._stage.last._iNext)}this.camera.update()},d.World.prototype.setBounds=function(a,b,c,d){this.bounds.setTo(a,b,c,d),this.camera.bounds&&this.camera.bounds.setTo(a,b,c,d)},d.World.prototype.destroy=function(){this.camera.x=0,this.camera.y=0,this.game.input.reset(!0),this.removeAll()},Object.defineProperty(d.World.prototype,"width",{get:function(){return this.bounds.width},set:function(a){this.bounds.width=a}}),Object.defineProperty(d.World.prototype,"height",{get:function(){return this.bounds.height},set:function(a){this.bounds.height=a}}),Object.defineProperty(d.World.prototype,"centerX",{get:function(){return this.bounds.halfWidth}}),Object.defineProperty(d.World.prototype,"centerY",{get:function(){return this.bounds.halfHeight}}),Object.defineProperty(d.World.prototype,"randomX",{get:function(){return this.bounds.x<0?this.game.rnd.integerInRange(this.bounds.x,this.bounds.width-Math.abs(this.bounds.x)):this.game.rnd.integerInRange(this.bounds.x,this.bounds.width)}}),Object.defineProperty(d.World.prototype,"randomY",{get:function(){return this.bounds.y<0?this.game.rnd.integerInRange(this.bounds.y,this.bounds.height-Math.abs(this.bounds.y)):this.game.rnd.integerInRange(this.bounds.y,this.bounds.height)}}),Object.defineProperty(d.World.prototype,"visible",{get:function(){return this._container.visible},set:function(a){this._container.visible=a}}),d.Game=function(a,b,c,e,f,g,h){a=a||800,b=b||600,c=c||d.AUTO,e=e||"",f=f||null,"undefined"==typeof g&&(g=!1),"undefined"==typeof h&&(h=!0),this.id=d.GAMES.push(this)-1,this.parent=e,this.width=a,this.height=b,this.transparent=g,this.antialias=h,this.renderer=null,this.state=new d.StateManager(this,f),this._paused=!1,this.renderType=c,this._loadComplete=!1,this.isBooted=!1,this.isRunning=!1,this.raf=null,this.add=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.net=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.physics=null,this.rnd=null,this.device=null,this.camera=null,this.canvas=null,this.context=null,this.debug=null,this.particles=null;var i=this;return this._onBoot=function(){return i.boot()},"complete"===document.readyState||"interactive"===document.readyState?window.setTimeout(this._onBoot,0):(document.addEventListener("DOMContentLoaded",this._onBoot,!1),window.addEventListener("load",this._onBoot,!1)),this},d.Game.prototype={boot:function(){this.isBooted||(document.body?(document.removeEventListener("DOMContentLoaded",this._onBoot),window.removeEventListener("load",this._onBoot),this.onPause=new d.Signal,this.onResume=new d.Signal,this.isBooted=!0,this.device=new d.Device,this.math=d.Math,this.rnd=new d.RandomDataGenerator([(Date.now()*Math.random()).toString()]),this.stage=new d.Stage(this,this.width,this.height),this.setUpRenderer(),this.world=new d.World(this),this.add=new d.GameObjectFactory(this),this.cache=new d.Cache(this),this.load=new d.Loader(this),this.time=new d.Time(this),this.tweens=new d.TweenManager(this),this.input=new d.Input(this),this.sound=new d.SoundManager(this),this.physics=new d.Physics.Arcade(this),this.particles=new d.Particles(this),this.plugins=new d.PluginManager(this,this),this.net=new d.Net(this),this.debug=new d.Utils.Debug(this),this.stage.boot(),this.world.boot(),this.input.boot(),this.sound.boot(),this.state.boot(),this.load.onLoadComplete.add(this.loadComplete,this),this.showDebugHeader(),this.isRunning=!0,this._loadComplete=!1,this.raf=new d.RequestAnimationFrame(this),this.raf.start()):window.setTimeout(this._onBoot,20))},showDebugHeader:function(){var a=d.DEV_VERSION,b="Canvas",c="HTML Audio";if(this.renderType==d.WEBGL?b="WebGL":this.renderType==d.HEADLESS&&(b="Headless"),this.device.webAudio&&(c="WebAudio"),this.device.chrome){var e=["%c %c %c Phaser v"+a+" - Renderer: "+b+" - Audio: "+c+" %c %c ","background: #00bff3","background: #0072bc","color: #ffffff; background: #003471","background: #0072bc","background: #00bff3"];console.log.apply(console,e)}else console.log("Phaser v"+a+" - Renderer: "+b+" - Audio: "+c)},setUpRenderer:function(){if(this.renderType===d.HEADLESS||this.renderType===d.CANVAS||this.renderType===d.AUTO&&this.device.webGL===!1){if(!this.device.canvas)throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting.");this.renderType===d.AUTO&&(this.renderType=d.CANVAS),this.renderer=new c.CanvasRenderer(this.width,this.height,this.stage.canvas,this.transparent),d.Canvas.setSmoothingEnabled(this.renderer.context,this.antialias),this.canvas=this.renderer.view,this.context=this.renderer.context}else this.renderType=d.WEBGL,this.renderer=new c.WebGLRenderer(this.width,this.height,this.stage.canvas,this.transparent,this.antialias),this.canvas=this.renderer.view,this.context=null;d.Canvas.addToDOM(this.renderer.view,this.parent,!0),d.Canvas.setTouchAction(this.renderer.view)},loadComplete:function(){this._loadComplete=!0,this.state.loadComplete()},update:function(a){this.time.update(a),this._paused?(this.renderer.render(this.stage._stage),this.plugins.render(),this.state.render()):(this.plugins.preUpdate(),this.physics.preUpdate(),this.stage.update(),this.input.update(),this.tweens.update(),this.sound.update(),this.world.update(),this.particles.update(),this.state.update(),this.plugins.update(),this.world.postUpdate(),this.plugins.postUpdate(),this.renderType!==d.HEADLESS&&(this.renderer.render(this.stage._stage),this.plugins.render(),this.state.render(),this.plugins.postRender()))},destroy:function(){this.raf.stop(),this.input.destroy(),this.state.destroy(),this.state=null,this.cache=null,this.input=null,this.load=null,this.sound=null,this.stage=null,this.time=null,this.world=null,this.isBooted=!1}},Object.defineProperty(d.Game.prototype,"paused",{get:function(){return this._paused},set:function(a){a===!0?this._paused===!1&&(this._paused=!0,this.onPause.dispatch(this)):this._paused&&(this._paused=!1,this.onResume.dispatch(this))}}),d.Input=function(a){this.game=a,this.hitCanvas=null,this.hitContext=null},d.Input.MOUSE_OVERRIDES_TOUCH=0,d.Input.TOUCH_OVERRIDES_MOUSE=1,d.Input.MOUSE_TOUCH_COMBINE=2,d.Input.prototype={pollRate:0,_pollCounter:0,_oldPosition:null,_x:0,_y:0,disabled:!1,multiInputOverride:d.Input.MOUSE_TOUCH_COMBINE,position:null,speed:null,circle:null,scale:null,maxPointers:10,currentPointers:0,tapRate:200,doubleTapRate:300,holdRate:2e3,justPressedRate:200,justReleasedRate:200,recordPointerHistory:!1,recordRate:100,recordLimit:100,pointer1:null,pointer2:null,pointer3:null,pointer4:null,pointer5:null,pointer6:null,pointer7:null,pointer8:null,pointer9:null,pointer10:null,activePointer:null,mousePointer:null,mouse:null,keyboard:null,touch:null,mspointer:null,onDown:null,onUp:null,onTap:null,onHold:null,interactiveItems:new d.LinkedList,boot:function(){this.mousePointer=new d.Pointer(this.game,0),this.pointer1=new d.Pointer(this.game,1),this.pointer2=new d.Pointer(this.game,2),this.mouse=new d.Mouse(this.game),this.keyboard=new d.Keyboard(this.game),this.touch=new d.Touch(this.game),this.mspointer=new d.MSPointer(this.game),this.onDown=new d.Signal,this.onUp=new d.Signal,this.onTap=new d.Signal,this.onHold=new d.Signal,this.scale=new d.Point(1,1),this.speed=new d.Point,this.position=new d.Point,this._oldPosition=new d.Point,this.circle=new d.Circle(0,0,44),this.activePointer=this.mousePointer,this.currentPointers=0,this.hitCanvas=document.createElement("canvas"),this.hitCanvas.width=1,this.hitCanvas.height=1,this.hitContext=this.hitCanvas.getContext("2d"),this.mouse.start(),this.keyboard.start(),this.touch.start(),this.mspointer.start(),this.mousePointer.active=!0},destroy:function(){this.mouse.stop(),this.keyboard.stop(),this.touch.stop(),this.mspointer.stop()},addPointer:function(){for(var a=0,b=10;b>0;b--)null===this["pointer"+b]&&(a=b);return 0===a?(console.warn("You can only have 10 Pointer objects"),null):(this["pointer"+a]=new d.Pointer(this.game,a),this["pointer"+a])},update:function(){return this.pollRate>0&&this._pollCounter=b;b++)this["pointer"+b]&&this["pointer"+b].reset();this.currentPointers=0,this.game.stage.canvas.style.cursor="default",a===!0&&(this.onDown.dispose(),this.onUp.dispose(),this.onTap.dispose(),this.onHold.dispose(),this.onDown=new d.Signal,this.onUp=new d.Signal,this.onTap=new d.Signal,this.onHold=new d.Signal,this.interactiveItems.callAll("reset")),this._pollCounter=0}},resetSpeed:function(a,b){this._oldPosition.setTo(a,b),this.speed.setTo(0,0)},startPointer:function(a){if(this.maxPointers<10&&this.totalActivePointers==this.maxPointers)return null;if(this.pointer1.active===!1)return this.pointer1.start(a);if(this.pointer2.active===!1)return this.pointer2.start(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active===!1)return this["pointer"+b].start(a);return null},updatePointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.move(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.move(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].move(a);return null},stopPointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.stop(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.stop(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].stop(a);return null},getPointer:function(a){if(a=a||!1,this.pointer1.active==a)return this.pointer1;if(this.pointer2.active==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active==a)return this["pointer"+b];return null},getPointerFromIdentifier:function(a){if(this.pointer1.identifier==a)return this.pointer1;if(this.pointer2.identifier==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].identifier==a)return this["pointer"+b];return null}},Object.defineProperty(d.Input.prototype,"x",{get:function(){return this._x},set:function(a){this._x=Math.floor(a)}}),Object.defineProperty(d.Input.prototype,"y",{get:function(){return this._y},set:function(a){this._y=Math.floor(a)}}),Object.defineProperty(d.Input.prototype,"pollLocked",{get:function(){return this.pollRate>0&&this._pollCounter=a;a++)this["pointer"+a]&&this["pointer"+a].active&&this.currentPointers++;return this.currentPointers}}),Object.defineProperty(d.Input.prototype,"worldX",{get:function(){return this.game.camera.view.x+this.x}}),Object.defineProperty(d.Input.prototype,"worldY",{get:function(){return this.game.camera.view.y+this.y}}),d.Key=function(a,b){this.game=a,this.isDown=!1,this.isUp=!1,this.altKey=!1,this.ctrlKey=!1,this.shiftKey=!1,this.timeDown=0,this.duration=0,this.timeUp=0,this.repeats=0,this.keyCode=b,this.onDown=new d.Signal,this.onUp=new d.Signal},d.Key.prototype={processKeyDown:function(a){this.altKey=a.altKey,this.ctrlKey=a.ctrlKey,this.shiftKey=a.shiftKey,this.isDown?(this.duration=a.timeStamp-this.timeDown,this.repeats++):(this.isDown=!0,this.isUp=!1,this.timeDown=a.timeStamp,this.duration=0,this.repeats=0,this.onDown.dispatch(this))},processKeyUp:function(a){this.isDown=!1,this.isUp=!0,this.timeUp=a.timeStamp,this.onUp.dispatch(this)},justPressed:function(a){return"undefined"==typeof a&&(a=250),this.isDown&&this.duration=this.game.input.holdRate&&((this.game.input.multiInputOverride==d.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==d.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==d.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&this.game.input.onHold.dispatch(this),this._holdSent=!0),this.game.input.recordPointerHistory&&this.game.time.now>=this._nextDrop&&(this._nextDrop=this.game.time.now+this.game.input.recordRate,this._history.push({x:this.position.x,y:this.position.y}),this._history.length>this.game.input.recordLimit&&this._history.shift()))},move:function(a){if(!this.game.input.pollLocked){if("undefined"!=typeof a.button&&(this.button=a.button),this.clientX=a.clientX,this.clientY=a.clientY,this.pageX=a.pageX,this.pageY=a.pageY,this.screenX=a.screenX,this.screenY=a.screenY,this.x=(this.pageX-this.game.stage.offset.x)*this.game.input.scale.x,this.y=(this.pageY-this.game.stage.offset.y)*this.game.input.scale.y,this.position.setTo(this.x,this.y),this.circle.x=this.x,this.circle.y=this.y,(this.game.input.multiInputOverride==d.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==d.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==d.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.activePointer=this,this.game.input.x=this.x,this.game.input.y=this.y,this.game.input.position.setTo(this.game.input.x,this.game.input.y),this.game.input.circle.x=this.game.input.x,this.game.input.circle.y=this.game.input.y),this.game.paused)return this;if(null!==this.targetObject&&this.targetObject.isDragged===!0)return this.targetObject.update(this)===!1&&(this.targetObject=null),this;if(this._highestRenderOrderID=-1,this._highestRenderObject=null,this._highestInputPriorityID=-1,this.game.input.interactiveItems.total>0){var b=this.game.input.interactiveItems.next;do(b.pixelPerfect||b.priorityID>this._highestInputPriorityID||b.priorityID==this._highestInputPriorityID&&b.sprite.renderOrderID>this._highestRenderOrderID)&&b.checkPointerOver(this)&&(this._highestRenderOrderID=b.sprite.renderOrderID,this._highestInputPriorityID=b.priorityID,this._highestRenderObject=b),b=b.next;while(null!=b)}return null==this._highestRenderObject?this.targetObject&&(this.targetObject._pointerOutHandler(this),this.targetObject=null):null==this.targetObject?(this.targetObject=this._highestRenderObject,this._highestRenderObject._pointerOverHandler(this)):this.targetObject==this._highestRenderObject?this._highestRenderObject.update(this)===!1&&(this.targetObject=null):(this.targetObject._pointerOutHandler(this),this.targetObject=this._highestRenderObject,this.targetObject._pointerOverHandler(this)),this}},leave:function(a){this.withinGame=!1,this.move(a)},stop:function(a){if(this._stateReset)return a.preventDefault(),void 0;if(this.timeUp=this.game.time.now,(this.game.input.multiInputOverride==d.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==d.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==d.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.onUp.dispatch(this,a),this.duration>=0&&this.duration<=this.game.input.tapRate&&(this.timeUp-this.previousTapTime0&&(this.active=!1),this.withinGame=!1,this.isDown=!1,this.isUp=!0,this.isMouse===!1&&this.game.input.currentPointers--,this.game.input.interactiveItems.total>0){var b=this.game.input.interactiveItems.next;do b&&b._releasedHandler(this),b=b.next;while(null!=b)}return this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null,this},justPressed:function(a){return a=a||this.game.input.justPressedRate,this.isDown===!0&&this.timeDown+a>this.game.time.now},justReleased:function(a){return a=a||this.game.input.justReleasedRate,this.isUp===!0&&this.timeUp+a>this.game.time.now},reset:function(){this.isMouse===!1&&(this.active=!1),this.identifier=null,this.isDown=!1,this.isUp=!0,this.totalTouches=0,this._holdSent=!1,this._history.length=0,this._stateReset=!0,this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null}},Object.defineProperty(d.Pointer.prototype,"duration",{get:function(){return this.isUp?-1:this.game.time.now-this.timeDown}}),Object.defineProperty(d.Pointer.prototype,"worldX",{get:function(){return this.game.world.camera.x+this.x}}),Object.defineProperty(d.Pointer.prototype,"worldY",{get:function(){return this.game.world.camera.y+this.y}}),d.Touch=function(a){this.game=a,this.disabled=!1,this.callbackContext=this.game,this.touchStartCallback=null,this.touchMoveCallback=null,this.touchEndCallback=null,this.touchEnterCallback=null,this.touchLeaveCallback=null,this.touchCancelCallback=null,this.preventDefault=!0,this.event=null,this._onTouchStart=null,this._onTouchMove=null,this._onTouchEnd=null,this._onTouchEnter=null,this._onTouchLeave=null,this._onTouchCancel=null,this._onTouchMove=null},d.Touch.prototype={start:function(){var a=this;this.game.device.touch&&(this._onTouchStart=function(b){return a.onTouchStart(b)},this._onTouchMove=function(b){return a.onTouchMove(b)},this._onTouchEnd=function(b){return a.onTouchEnd(b)},this._onTouchEnter=function(b){return a.onTouchEnter(b)},this._onTouchLeave=function(b){return a.onTouchLeave(b)},this._onTouchCancel=function(b){return a.onTouchCancel(b)},this.game.renderer.view.addEventListener("touchstart",this._onTouchStart,!1),this.game.renderer.view.addEventListener("touchmove",this._onTouchMove,!1),this.game.renderer.view.addEventListener("touchend",this._onTouchEnd,!1),this.game.renderer.view.addEventListener("touchenter",this._onTouchEnter,!1),this.game.renderer.view.addEventListener("touchleave",this._onTouchLeave,!1),this.game.renderer.view.addEventListener("touchcancel",this._onTouchCancel,!1))},consumeDocumentTouches:function(){this._documentTouchMove=function(a){a.preventDefault()},document.addEventListener("touchmove",this._documentTouchMove,!1)},onTouchStart:function(a){if(this.event=a,this.touchStartCallback&&this.touchStartCallback.call(this.callbackContext,a),!this.game.input.disabled&&!this.disabled){this.preventDefault&&a.preventDefault();for(var b=0;bc;c++)this._pointerData[c]={id:c,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1};this.snapOffset=new d.Point,this.enabled=!0,this.sprite.events&&null==this.sprite.events.onInputOver&&(this.sprite.events.onInputOver=new d.Signal,this.sprite.events.onInputOut=new d.Signal,this.sprite.events.onInputDown=new d.Signal,this.sprite.events.onInputUp=new d.Signal,this.sprite.events.onDragStart=new d.Signal,this.sprite.events.onDragStop=new d.Signal)}return this.sprite},reset:function(){this.enabled=!1;for(var a=0;10>a;a++)this._pointerData[a]={id:a,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1}},stop:function(){this.enabled!==!1&&(this.enabled=!1,this.game.input.interactiveItems.remove(this))},destroy:function(){this.enabled&&(this.enabled=!1,this.game.input.interactiveItems.remove(this),this.stop(),this.sprite=null)},pointerX:function(a){return a=a||0,this._pointerData[a].x},pointerY:function(a){return a=a||0,this._pointerData[a].y},pointerDown:function(a){return a=a||0,this._pointerData[a].isDown},pointerUp:function(a){return a=a||0,this._pointerData[a].isUp},pointerTimeDown:function(a){return a=a||0,this._pointerData[a].timeDown},pointerTimeUp:function(a){return a=a||0,this._pointerData[a].timeUp},pointerOver:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOver;for(var b=0;10>b;b++)if(this._pointerData[b].isOver)return!0}return!1},pointerOut:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOut;for(var b=0;10>b;b++)if(this._pointerData[b].isOut)return!0}return!1},pointerTimeOver:function(a){return a=a||0,this._pointerData[a].timeOver},pointerTimeOut:function(a){return a=a||0,this._pointerData[a].timeOut},pointerDragged:function(a){return a=a||0,this._pointerData[a].isDragged},checkPointerOver:function(a){return this.enabled===!1||this.sprite.visible===!1||this.sprite.group&&this.sprite.group.visible===!1?!1:(this.sprite.getLocalUnmodifiedPosition(this._tempPoint,a.x,a.y),this._tempPoint.x>=0&&this._tempPoint.x<=this.sprite.currentFrame.width&&this._tempPoint.y>=0&&this._tempPoint.y<=this.sprite.currentFrame.height?this.pixelPerfect?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:void 0)},checkPixel:function(a,b){if(this.sprite.texture.baseTexture.source){this.game.input.hitContext.clearRect(0,0,1,1),a+=this.sprite.texture.frame.x,b+=this.sprite.texture.frame.y,this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source,a,b,1,1,0,0,1,1);var c=this.game.input.hitContext.getImageData(0,0,1,1);if(c.data[3]>=this.pixelPerfectAlpha)return!0}return!1},update:function(a){return this.enabled===!1||this.sprite.visible===!1||this.sprite.group&&this.sprite.group.visible===!1?(this._pointerOutHandler(a),!1):this.draggable&&this._draggedPointerID==a.id?this.updateDrag(a):this._pointerData[a.id].isOver===!0?this.checkPointerOver(a)?(this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,!0):(this._pointerOutHandler(a),!1):void 0},_pointerOverHandler:function(a){this._pointerData[a.id].isOver===!1&&(this._pointerData[a.id].isOver=!0,this._pointerData[a.id].isOut=!1,this._pointerData[a.id].timeOver=this.game.time.now,this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.stage.canvas.style.cursor="pointer"),this.sprite.events.onInputOver.dispatch(this.sprite,a))},_pointerOutHandler:function(a){this._pointerData[a.id].isOver=!1,this._pointerData[a.id].isOut=!0,this._pointerData[a.id].timeOut=this.game.time.now,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.stage.canvas.style.cursor="default"),this.sprite&&this.sprite.events&&this.sprite.events.onInputOut.dispatch(this.sprite,a)},_touchedHandler:function(a){return this._pointerData[a.id].isDown===!1&&this._pointerData[a.id].isOver===!0&&(this._pointerData[a.id].isDown=!0,this._pointerData[a.id].isUp=!1,this._pointerData[a.id].timeDown=this.game.time.now,this.sprite.events.onInputDown.dispatch(this.sprite,a),this.draggable&&this.isDragged===!1&&this.startDrag(a),this.bringToTop&&this.sprite.bringToTop()),this.consumePointerEvent},_releasedHandler:function(a){this._pointerData[a.id].isDown&&a.isUp&&(this._pointerData[a.id].isDown=!1,this._pointerData[a.id].isUp=!0,this._pointerData[a.id].timeUp=this.game.time.now,this._pointerData[a.id].downDuration=this._pointerData[a.id].timeUp-this._pointerData[a.id].timeDown,this.checkPointerOver(a)?this.sprite.events.onInputUp.dispatch(this.sprite,a):this.useHandCursor&&(this.game.stage.canvas.style.cursor="default"),this.draggable&&this.isDragged&&this._draggedPointerID==a.id&&this.stopDrag(a))},updateDrag:function(a){return a.isUp?(this.stopDrag(a),!1):(this.allowHorizontalDrag&&(this.sprite.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.x=Math.round(this.sprite.x/this.snapX)*this.snapX,this.sprite.y=Math.round(this.sprite.y/this.snapY)*this.snapY),!0)},justOver:function(a,b){return a=a||0,b=b||500,this._pointerData[a].isOver&&this.overDuration(a)a;a++)this._pointerData[a].isDragged=!1;this.draggable=!1,this.isDragged=!1,this._draggedPointerID=-1},startDrag:function(a){this.isDragged=!0,this._draggedPointerID=a.id,this._pointerData[a.id].isDragged=!0,this.dragFromCenter?(this.sprite.centerOn(a.x,a.y),this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y)):this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y),this.updateDrag(a),this.bringToTop&&this.sprite.bringToTop(),this.sprite.events.onDragStart.dispatch(this.sprite,a)},stopDrag:function(a){this.isDragged=!1,this._draggedPointerID=-1,this._pointerData[a.id].isDragged=!1,this.snapOnRelease&&(this.sprite.x=Math.round(this.sprite.x/this.snapX)*this.snapX,this.sprite.y=Math.round(this.sprite.y/this.snapY)*this.snapY),this.sprite.events.onDragStop.dispatch(this.sprite,a),this.sprite.events.onInputUp.dispatch(this.sprite,a),this.checkPointerOver(a)===!1&&this._pointerOutHandler(a)},setDragLock:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!0),this.allowHorizontalDrag=a,this.allowVerticalDrag=b},enableSnap:function(a,b,c,d){"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!1),this.snapX=a,this.snapY=b,this.snapOnDrag=c,this.snapOnRelease=d},disableSnap:function(){this.snapOnDrag=!1,this.snapOnRelease=!1},checkBoundsRect:function(){this.sprite.xthis.boundsRect.right&&(this.sprite.x=this.boundsRect.right-this.sprite.width),this.sprite.ythis.boundsRect.bottom&&(this.sprite.y=this.boundsRect.bottom-this.sprite.height)},checkBoundsSprite:function(){this.sprite.xthis.boundsSprite.x+this.boundsSprite.width&&(this.sprite.x=this.boundsSprite.x+this.boundsSprite.width-this.sprite.width),this.sprite.ythis.boundsSprite.y+this.boundsSprite.height&&(this.sprite.y=this.boundsSprite.y+this.boundsSprite.height-this.sprite.height)}},d.Events=function(a){this.parent=a,this.onAddedToGroup=new d.Signal,this.onRemovedFromGroup=new d.Signal,this.onKilled=new d.Signal,this.onRevived=new d.Signal,this.onOutOfBounds=new d.Signal,this.onInputOver=null,this.onInputOut=null,this.onInputDown=null,this.onInputUp=null,this.onDragStart=null,this.onDragStop=null,this.onAnimationStart=null,this.onAnimationComplete=null,this.onAnimationLoop=null},d.Events.prototype={destroy:function(){this.parent=null,this.onAddedToGroup.dispose(),this.onRemovedFromGroup.dispose(),this.onKilled.dispose(),this.onRevived.dispose(),this.onOutOfBounds.dispose(),this.onInputOver&&(this.onInputOver.dispose(),this.onInputOut.dispose(),this.onInputDown.dispose(),this.onInputUp.dispose(),this.onDragStart.dispose(),this.onDragStop.dispose()),this.onAnimationStart&&(this.onAnimationStart.dispose(),this.onAnimationComplete.dispose(),this.onAnimationLoop.dispose())}},d.GameObjectFactory=function(a){this.game=a,this.world=this.game.world},d.GameObjectFactory.prototype={existing:function(a){return this.world.add(a)},sprite:function(a,b,c,d){return this.world.create(a,b,c,d)},child:function(a,b,c,d,e){return a.create(b,c,d,e)},tween:function(a){return this.game.tweens.create(a)},group:function(a,b){return new d.Group(this.game,a,b)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,b,c,e,f,g){return this.world.add(new d.TileSprite(this.game,a,b,c,e,f,g))},text:function(a,b,c,e){return this.world.add(new d.Text(this.game,a,b,c,e))},button:function(a,b,c,e,f,g,h,i){return this.world.add(new d.Button(this.game,a,b,c,e,f,g,h,i))},graphics:function(a,b){return this.world.add(new d.Graphics(this.game,a,b))},emitter:function(a,b,c){return this.game.particles.add(new d.Particles.Arcade.Emitter(this.game,a,b,c))},bitmapText:function(a,b,c,e){return this.world.add(new d.BitmapText(this.game,a,b,c,e))},tilemap:function(a){return new d.Tilemap(this.game,a)},tileset:function(a){return this.game.cache.getTileset(a)},tilemapLayer:function(a,b,c,e,f,g,h){return this.world.add(new d.TilemapLayer(this.game,a,b,c,e,f,g,h))},renderTexture:function(a,b,c){var e=new d.RenderTexture(this.game,a,b,c);return this.game.cache.addRenderTexture(a,e),e},bitmapData:function(a,b){return new d.BitmapData(this.game,a,b)},filter:function(a){var b=Array.prototype.splice.call(arguments,1),a=new d.Filter[a](this.game);return a.init.apply(a,b),a}},d.BitmapData=function(a,b,e){"undefined"==typeof b&&(b=256),"undefined"==typeof e&&(e=256),this.game=a,this.name="",this.width=b,this.height=e,this.canvas=d.Canvas.create(b,e),this.context=this.canvas.getContext("2d"),this.imageData=this.context.getImageData(0,0,b,e),this.pixels=this.imageData.data.buffer?this.imageData.data.buffer:this.imageData.data,this.baseTexture=new c.BaseTexture(this.canvas),this.texture=new c.Texture(this.baseTexture),this.textureFrame=new d.Frame(0,0,0,b,e,"bitmapData",a.rnd.uuid()),this.type=d.BITMAPDATA,this._dirty=!1},d.BitmapData.prototype={add:function(a){a.loadTexture(this)},addTo:function(a){for(var b=0;b=0&&a<=this.width&&b>=0&&b<=this.height&&(this.pixels[b*this.width+a]=f<<24|e<<16|d<<8|c,this.context.putImageData(this.imageData,0,0),this._dirty=!0)},setPixel:function(a,b,c,d,e){this.setPixel32(a,b,c,d,e,255)},getPixel:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixel32:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixels:function(a){return this.context.getImageData(a.x,a.y,a.width,a.height)},arc:function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=!1),this._dirty=!0,this.context.arc(a,b,c,d,e,f),this},arcTo:function(a,b,c,d,e){return this._dirty=!0,this.context.arcTo(a,b,c,d,e),this},beginFill:function(a){return this.fillStyle(a),this},beginLinearGradientFill:function(a,b,c,d,e,f){for(var g=this.createLinearGradient(c,d,e,f),h=0,i=a.length;i>h;h++)g.addColorStop(b[h],a[h]);return this.fillStyle(g),this},beginLinearGradientStroke:function(a,b,c,d,e,f){for(var g=this.createLinearGradient(c,d,e,f),h=0,i=a.length;i>h;h++)g.addColorStop(b[h],a[h]);return this.strokeStyle(g),this},beginRadialGradientStroke:function(a,b,c,d,e,f,g,h){for(var i=this.createRadialGradient(c,d,e,f,g,h),j=0,k=a.length;k>j;j++)i.addColorStop(b[j],a[j]);return this.strokeStyle(i),this},beginPath:function(){return this.context.beginPath(),this},beginStroke:function(a){return this.strokeStyle(a),this},bezierCurveTo:function(a,b,c,d,e,f){return this._dirty=!0,this.context.bezierCurveTo(a,b,c,d,e,f),this},circle:function(a,b,c){return this.arc(a,b,c,0,2*Math.PI),this},clearRect:function(a,b,c,d){return this._dirty=!0,this.context.clearRect(a,b,c,d),this},clip:function(){return this._dirty=!0,this.context.clip(),this},closePath:function(){return this._dirty=!0,this.context.closePath(),this},createLinearGradient:function(a,b,c,d){return this.context.createLinearGradient(a,b,c,d)},createRadialGradient:function(a,b,c,d,e,f){return this.context.createRadialGradient(a,b,c,d,e,f)},ellipse:function(a,b,c,d){var e=.5522848,f=c/2*e,g=d/2*e,h=a+c,i=b+d,j=a+c/2,k=b+d/2;return this.moveTo(a,k),this.bezierCurveTo(a,k-g,j-f,b,j,b),this.bezierCurveTo(j+f,b,h,k-g,h,k),this.bezierCurveTo(h,k+g,j+f,i,j,i),this.bezierCurveTo(j-f,i,a,k+g,a,k),this},fill:function(){return this._dirty=!0,this.context.fill(),this},fillRect:function(a,b,c,d){return this._dirty=!0,this.context.fillRect(a,b,c,d),this},fillStyle:function(a){return this.context.fillStyle=a,this},font:function(a){return this.context.font=a,this},globalAlpha:function(a){return this.context.globalAlpha=a,this},globalCompositeOperation:function(a){return this.context.globalCompositeOperation=a,this},lineCap:function(a){return this.context.lineCap=a,this},lineDashOffset:function(a){return this.context.lineDashOffset=a,this},lineJoin:function(a){return this.context.lineJoin=a,this},lineWidth:function(a){return this.context.lineWidth=a,this},miterLimit:function(a){return this.context.miterLimit=a,this},lineTo:function(a,b){return this._dirty=!0,this.context.lineTo(a,b),this},moveTo:function(a,b){return this.context.moveTo(a,b),this},quadraticCurveTo:function(a,b,c,d){return this._dirty=!0,this.context.quadraticCurveTo(a,b,c,d),this},rect:function(a,b,c,d){return this._dirty=!0,this.context.rect(a,b,c,d),this},restore:function(){return this._dirty=!0,this.context.restore(),this},rotate:function(a){return this._dirty=!0,this.context.rotate(a),this},setStrokeStyle:function(a,b,c,d,e){return"undefined"==typeof a&&(a=1),"undefined"==typeof b&&(b="butt"),"undefined"==typeof c&&(c="miter"),"undefined"==typeof d&&(d=10),e=!1,this.lineWidth(a),this.lineCap(b),this.lineJoin(c),this.miterLimit(d),this},save:function(){return this._dirty=!0,this.context.save(),this},scale:function(a,b){return this._dirty=!0,this.context.scale(a,b),this},scrollPathIntoView:function(){return this._dirty=!0,this.context.scrollPathIntoView(),this},stroke:function(){return this._dirty=!0,this.context.stroke(),this},strokeRect:function(a,b,c,d){return this._dirty=!0,this.context.strokeRect(a,b,c,d),this},strokeStyle:function(a){return this.context.strokeStyle=a,this},render:function(){this._dirty&&(this.game.renderType==d.WEBGL&&c.texturesToUpdate.push(this.baseTexture),this._dirty=!1)}},d.BitmapData.prototype.mt=d.BitmapData.prototype.moveTo,d.BitmapData.prototype.lt=d.BitmapData.prototype.lineTo,d.BitmapData.prototype.at=d.BitmapData.prototype.arcTo,d.BitmapData.prototype.bt=d.BitmapData.prototype.bezierCurveTo,d.BitmapData.prototype.qt=d.BitmapData.prototype.quadraticCurveTo,d.BitmapData.prototype.a=d.BitmapData.prototype.arc,d.BitmapData.prototype.r=d.BitmapData.prototype.rect,d.BitmapData.prototype.cp=d.BitmapData.prototype.closePath,d.BitmapData.prototype.c=d.BitmapData.prototype.clear,d.BitmapData.prototype.f=d.BitmapData.prototype.beginFill,d.BitmapData.prototype.lf=d.BitmapData.prototype.beginLinearGradientFill,d.BitmapData.prototype.rf=d.BitmapData.prototype.beginRadialGradientFill,d.BitmapData.prototype.ef=d.BitmapData.prototype.endFill,d.BitmapData.prototype.ss=d.BitmapData.prototype.setStrokeStyle,d.BitmapData.prototype.s=d.BitmapData.prototype.beginStroke,d.BitmapData.prototype.ls=d.BitmapData.prototype.beginLinearGradientStroke,d.BitmapData.prototype.rs=d.BitmapData.prototype.beginRadialGradientStroke,d.BitmapData.prototype.dr=d.BitmapData.prototype.rect,d.BitmapData.prototype.dc=d.BitmapData.prototype.circle,d.BitmapData.prototype.de=d.BitmapData.prototype.ellipse,d.Sprite=function(a,b,e,f,g){b=b||0,e=e||0,f=f||null,g=g||null,this.game=a,this.exists=!0,this.alive=!0,this.group=null,this.name="",this.type=d.SPRITE,this.renderOrderID=-1,this.lifespan=0,this.events=new d.Events(this),this.animations=new d.AnimationManager(this),this.input=new d.InputHandler(this),this.key=f,this.currentFrame=null,f instanceof d.RenderTexture?(c.Sprite.call(this,f),this.currentFrame=this.game.cache.getTextureFrame(f.name)):f instanceof d.BitmapData?(c.Sprite.call(this,f.texture,f.textureFrame),this.currentFrame=f.textureFrame):f instanceof c.Texture?(c.Sprite.call(this,f),this.currentFrame=g):(null===f||"undefined"==typeof f?(f="__default",this.key=f):"string"==typeof f&&this.game.cache.checkImageKey(f)===!1&&(f="__missing",this.key=f),c.Sprite.call(this,c.TextureCache[f]),this.game.cache.isSpriteSheet(f)?(this.animations.loadFrameData(this.game.cache.getFrameData(f)),null!==g&&("string"==typeof g?this.frameName=g:this.frame=g)):this.currentFrame=this.game.cache.getFrame(f)),this.textureRegion=new d.Rectangle(this.texture.frame.x,this.texture.frame.y,this.texture.frame.width,this.texture.frame.height),this.anchor=new d.Point,this.x=b,this.y=e,this.position.x=b,this.position.y=e,this.world=new d.Point(b,e),this.autoCull=!1,this.scale=new d.Point(1,1),this._cache={dirty:!1,a00:-1,a01:-1,a02:-1,a10:-1,a11:-1,a12:-1,id:-1,i01:-1,i10:-1,idi:-1,left:null,right:null,top:null,bottom:null,prevX:b,prevY:e,x:-1,y:-1,scaleX:1,scaleY:1,width:this.currentFrame.sourceSizeW,height:this.currentFrame.sourceSizeH,halfWidth:Math.floor(this.currentFrame.sourceSizeW/2),halfHeight:Math.floor(this.currentFrame.sourceSizeH/2),calcWidth:-1,calcHeight:-1,frameID:-1,frameWidth:this.currentFrame.width,frameHeight:this.currentFrame.height,cameraVisible:!0,cropX:0,cropY:0,cropWidth:this.currentFrame.sourceSizeW,cropHeight:this.currentFrame.sourceSizeH},this.offset=new d.Point,this.center=new d.Point(b+Math.floor(this._cache.width/2),e+Math.floor(this._cache.height/2)),this.topLeft=new d.Point(b,e),this.topRight=new d.Point(b+this._cache.width,e),this.bottomRight=new d.Point(b+this._cache.width,e+this._cache.height),this.bottomLeft=new d.Point(b,e+this._cache.height),this.bounds=new d.Rectangle(b,e,this._cache.width,this._cache.height),this.body=new d.Physics.Arcade.Body(this),this.health=1,this.inWorld=d.Rectangle.intersects(this.bounds,this.game.world.bounds),this.inWorldThreshold=0,this.outOfBoundsKill=!1,this._outOfBoundsFired=!1,this.fixedToCamera=!1,this.cameraOffset=new d.Point,this.crop=new d.Rectangle(0,0,this._cache.width,this._cache.height),this.cropEnabled=!1,this.updateCache(),this.updateBounds() +},d.Sprite.prototype=Object.create(c.Sprite.prototype),d.Sprite.prototype.constructor=d.Sprite,d.Sprite.prototype.preUpdate=function(){return!this.exists||this.group&&!this.group.exists?(this.renderOrderID=-1,!1):this.lifespan>0&&(this.lifespan-=this.game.time.elapsed,this.lifespan<=0)?(this.kill(),!1):(this._cache.dirty=!1,this.visible&&(this.renderOrderID=this.game.world.currentRenderOrderID++),this.updateCache(),this.updateAnimation(),this.updateCrop(),(this._cache.dirty||this.world.x!==this._cache.prevX||this.world.y!==this._cache.prevY)&&this.updateBounds(),this.body&&this.body.preUpdate(),!0)},d.Sprite.prototype.updateCache=function(){this._cache.prevX=this.world.x,this._cache.prevY=this.world.y,this.fixedToCamera&&(this.x=this.game.camera.view.x+this.cameraOffset.x,this.y=this.game.camera.view.y+this.cameraOffset.y),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),(this.worldTransform[1]!=this._cache.i01||this.worldTransform[3]!=this._cache.i10||this.worldTransform[0]!=this._cache.a00||this.worldTransform[41]!=this._cache.a11)&&(this._cache.a00=this.worldTransform[0],this._cache.a01=this.worldTransform[1],this._cache.a10=this.worldTransform[3],this._cache.a11=this.worldTransform[4],this._cache.i01=this.worldTransform[1],this._cache.i10=this.worldTransform[3],this._cache.scaleX=Math.sqrt(this._cache.a00*this._cache.a00+this._cache.a01*this._cache.a01),this._cache.scaleY=Math.sqrt(this._cache.a10*this._cache.a10+this._cache.a11*this._cache.a11),this._cache.a01*=-1,this._cache.a10*=-1,this._cache.id=1/(this._cache.a00*this._cache.a11+this._cache.a01*-this._cache.a10),this._cache.idi=1/(this._cache.a00*this._cache.a11+this._cache.i01*-this._cache.i10),this._cache.dirty=!0),this._cache.a02=this.worldTransform[2],this._cache.a12=this.worldTransform[5]},d.Sprite.prototype.updateAnimation=function(){(this.animations.update()||this.currentFrame&&this.currentFrame.uuid!=this._cache.frameID)&&(this._cache.frameID=this.currentFrame.uuid,this._cache.frameWidth=this.texture.frame.width,this._cache.frameHeight=this.texture.frame.height,this._cache.width=this.currentFrame.width,this._cache.height=this.currentFrame.height,this._cache.halfWidth=Math.floor(this._cache.width/2),this._cache.halfHeight=Math.floor(this._cache.height/2),this._cache.dirty=!0)},d.Sprite.prototype.updateCrop=function(){!this.cropEnabled||this.crop.width==this._cache.cropWidth&&this.crop.height==this._cache.cropHeight&&this.crop.x==this._cache.cropX&&this.crop.y==this._cache.cropY||(this.crop.floorAll(),this._cache.cropX=this.crop.x,this._cache.cropY=this.crop.y,this._cache.cropWidth=this.crop.width,this._cache.cropHeight=this.crop.height,this.texture.frame=this.crop,this.texture.width=this.crop.width,this.texture.height=this.crop.height,this.texture.updateFrame=!0,c.Texture.frameUpdates.push(this.texture))},d.Sprite.prototype.updateBounds=function(){this.offset.setTo(this._cache.a02-this.anchor.x*this.width,this._cache.a12-this.anchor.y*this.height),this.getLocalPosition(this.center,this.offset.x+this.width/2,this.offset.y+this.height/2),this.getLocalPosition(this.topLeft,this.offset.x,this.offset.y),this.getLocalPosition(this.topRight,this.offset.x+this.width,this.offset.y),this.getLocalPosition(this.bottomLeft,this.offset.x,this.offset.y+this.height),this.getLocalPosition(this.bottomRight,this.offset.x+this.width,this.offset.y+this.height),this._cache.left=d.Math.min(this.topLeft.x,this.topRight.x,this.bottomLeft.x,this.bottomRight.x),this._cache.right=d.Math.max(this.topLeft.x,this.topRight.x,this.bottomLeft.x,this.bottomRight.x),this._cache.top=d.Math.min(this.topLeft.y,this.topRight.y,this.bottomLeft.y,this.bottomRight.y),this._cache.bottom=d.Math.max(this.topLeft.y,this.topRight.y,this.bottomLeft.y,this.bottomRight.y),this.bounds.setTo(this._cache.left,this._cache.top,this._cache.right-this._cache.left,this._cache.bottom-this._cache.top),this.updateFrame=!0,this.inWorld===!1?(this.inWorld=d.Rectangle.intersects(this.bounds,this.game.world.bounds,this.inWorldThreshold),this.inWorld&&(this._outOfBoundsFired=!1)):(this.inWorld=d.Rectangle.intersects(this.bounds,this.game.world.bounds,this.inWorldThreshold),this.inWorld===!1&&(this.events.onOutOfBounds.dispatch(this),this._outOfBoundsFired=!0,this.outOfBoundsKill&&this.kill())),this._cache.cameraVisible=d.Rectangle.intersects(this.game.world.camera.screenView,this.bounds,0),this.autoCull&&(this.renderable=this._cache.cameraVisible),this.body&&this.body.updateBounds(this.center.x,this.center.y,this._cache.scaleX,this._cache.scaleY)},d.Sprite.prototype.getLocalPosition=function(a,b,c){return a.x=(this._cache.a11*this._cache.id*b+-this._cache.a01*this._cache.id*c+(this._cache.a12*this._cache.a01-this._cache.a02*this._cache.a11)*this._cache.id)*this.scale.x+this._cache.a02,a.y=(this._cache.a00*this._cache.id*c+-this._cache.a10*this._cache.id*b+(-this._cache.a12*this._cache.a00+this._cache.a02*this._cache.a10)*this._cache.id)*this.scale.y+this._cache.a12,a},d.Sprite.prototype.getLocalUnmodifiedPosition=function(a,b,c){return a.x=this._cache.a11*this._cache.idi*b+-this._cache.i01*this._cache.idi*c+(this._cache.a12*this._cache.i01-this._cache.a02*this._cache.a11)*this._cache.idi+this.anchor.x*this._cache.width,a.y=this._cache.a00*this._cache.idi*c+-this._cache.i10*this._cache.idi*b+(-this._cache.a12*this._cache.a00+this._cache.a02*this._cache.i10)*this._cache.idi+this.anchor.y*this._cache.height,a},d.Sprite.prototype.resetCrop=function(){this.crop=new d.Rectangle(0,0,this._cache.width,this._cache.height),this.texture.setFrame(this.crop),this.cropEnabled=!1},d.Sprite.prototype.postUpdate=function(){this.key instanceof d.BitmapData&&this.key._dirty&&this.key.render(),this.exists&&(this.body&&this.body.postUpdate(),this.fixedToCamera?(this._cache.x=this.game.camera.view.x+this.cameraOffset.x,this._cache.y=this.game.camera.view.y+this.cameraOffset.y):(this._cache.x=this.x,this._cache.y=this.y),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.position.x=this._cache.x,this.position.y=this._cache.y)},d.Sprite.prototype.loadTexture=function(a,b){this.key=a,a instanceof d.RenderTexture?this.currentFrame=this.game.cache.getTextureFrame(a.name):a instanceof d.BitmapData?(this.setTexture(a.texture),this.currentFrame=a.textureFrame):a instanceof c.Texture?this.currentFrame=b:(("undefined"==typeof a||this.game.cache.checkImageKey(a)===!1)&&(a="__default",this.key=a),this.game.cache.isSpriteSheet(a)?(this.animations.loadFrameData(this.game.cache.getFrameData(a)),"undefined"!=typeof b&&("string"==typeof b?this.frameName=b:this.frame=b)):(this.currentFrame=this.game.cache.getFrame(a),this.setTexture(c.TextureCache[a])))},d.Sprite.prototype.centerOn=function(a,b){return this.x=a+(this.x-this.center.x),this.y=b+(this.y-this.center.y),this},d.Sprite.prototype.revive=function(a){return"undefined"==typeof a&&(a=1),this.alive=!0,this.exists=!0,this.visible=!0,this.health=a,this.events&&this.events.onRevived.dispatch(this),this},d.Sprite.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},d.Sprite.prototype.destroy=function(){this.group&&this.group.remove(this),this.input&&this.input.destroy(),this.events&&this.events.destroy(),this.animations&&this.animations.destroy(),this.alive=!1,this.exists=!1,this.visible=!1,this.game=null},d.Sprite.prototype.damage=function(a){return this.alive&&(this.health-=a,this.health<0&&this.kill()),this},d.Sprite.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.x=a,this.y=b,this.position.x=this.x,this.position.y=this.y,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(),this},d.Sprite.prototype.bringToTop=function(){return this.group?this.group.bringToTop(this):this.game.world.bringToTop(this),this},d.Sprite.prototype.play=function(a,b,c,d){return this.animations?this.animations.play(a,b,c,d):void 0},Object.defineProperty(d.Sprite.prototype,"angle",{get:function(){return d.Math.wrapAngle(d.Math.radToDeg(this.rotation))},set:function(a){this.rotation=d.Math.degToRad(d.Math.wrapAngle(a))}}),Object.defineProperty(d.Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){this.animations.frame=a}}),Object.defineProperty(d.Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){this.animations.frameName=a}}),Object.defineProperty(d.Sprite.prototype,"inCamera",{get:function(){return this._cache.cameraVisible}}),Object.defineProperty(d.Sprite.prototype,"width",{get:function(){return this.scale.x*this.currentFrame.width},set:function(a){this.scale.x=a/this.currentFrame.width,this._cache.scaleX=a/this.currentFrame.width,this._width=a}}),Object.defineProperty(d.Sprite.prototype,"height",{get:function(){return this.scale.y*this.currentFrame.height},set:function(a){this.scale.y=a/this.currentFrame.height,this._cache.scaleY=a/this.currentFrame.height,this._height=a}}),Object.defineProperty(d.Sprite.prototype,"inputEnabled",{get:function(){return this.input.enabled},set:function(a){console.log("inputEnabled",a,this.input),a?this.input.enabled===!1&&this.input.start():this.input.enabled&&this.input.stop()}}),d.TileSprite=function(a,b,e,f,g,h,i){b=b||0,e=e||0,f=f||256,g=g||256,h=h||null,i=i||null,d.Sprite.call(this,a,b,e,h,i),this.texture=c.TextureCache[h],c.TilingSprite.call(this,this.texture,f,g),this.type=d.TILESPRITE,this.tileScale=new d.Point(1,1),this.tilePosition=new d.Point(0,0)},d.TileSprite.prototype=d.Utils.extend(!0,c.TilingSprite.prototype,d.Sprite.prototype),d.TileSprite.prototype.constructor=d.TileSprite,d.Text=function(a,b,e,f,g){b=b||0,e=e||0,f=f||"",g=g||"",this.game=a,this.exists=!0,this.alive=!0,this.group=null,this.name="",this.type=d.TEXT,this._text=f,this._style=g,c.Text.call(this,f,g),this.position.x=this.x=b,this.position.y=this.y=e,this.anchor=new d.Point,this.scale=new d.Point(1,1),this._cache={dirty:!1,a00:1,a01:0,a02:b,a10:0,a11:1,a12:e,id:1,x:-1,y:-1,scaleX:1,scaleY:1},this._cache.x=this.x,this._cache.y=this.y,this.renderable=!0},d.Text.prototype=Object.create(c.Text.prototype),d.Text.prototype.constructor=d.Text,d.Text.prototype.update=function(){this.exists&&(this._cache.dirty=!1,this._cache.x=this.x,this._cache.y=this.y,(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=!0))},d.Text.prototype.destroy=function(){this.group&&this.group.remove(this),this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null),this.exists=!1,this.group=null},Object.defineProperty(d.Text.prototype,"angle",{get:function(){return d.Math.radToDeg(this.rotation)},set:function(a){this.rotation=d.Math.degToRad(a)}}),Object.defineProperty(d.Text.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(d.Text.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),Object.defineProperty(d.Text.prototype,"content",{get:function(){return this._text},set:function(a){a!==this._text&&(this._text=a,this.setText(a))}}),Object.defineProperty(d.Text.prototype,"font",{get:function(){return this._style},set:function(a){a!==this._style&&(this._style=a,this.setStyle(a))}}),d.BitmapText=function(a,b,e,f,g){b=b||0,e=e||0,f=f||"",g=g||"",this.game=a,this.exists=!0,this.alive=!0,this.group=null,this.name="",this.type=d.BITMAPTEXT,c.BitmapText.call(this,f,g),this.position.x=b,this.position.y=e,this.anchor=new d.Point,this.scale=new d.Point(1,1),this._cache={dirty:!1,a00:1,a01:0,a02:b,a10:0,a11:1,a12:e,id:1,x:-1,y:-1,scaleX:1,scaleY:1},this._cache.x=this.x,this._cache.y=this.y,this.renderable=!0},d.BitmapText.prototype=Object.create(c.BitmapText.prototype),d.BitmapText.prototype.constructor=d.BitmapText,d.BitmapText.prototype.update=function(){this.exists&&(this._cache.dirty=!1,this._cache.x=this.x,this._cache.y=this.y,(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=!0),this.pivot.x=this.anchor.x*this.width,this.pivot.y=this.anchor.y*this.height)},d.BitmapText.prototype.destroy=function(){this.group&&this.group.remove(this),this.canvas&&this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null),this.exists=!1,this.group=null},Object.defineProperty(d.BitmapText.prototype,"angle",{get:function(){return d.Math.radToDeg(this.rotation)},set:function(a){this.rotation=d.Math.degToRad(a)}}),Object.defineProperty(d.BitmapText.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(d.BitmapText.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),d.Button=function(a,b,c,e,f,g,h,i,j){b=b||0,c=c||0,e=e||null,f=f||null,g=g||this,d.Sprite.call(this,a,b,c,e,i),this.type=d.BUTTON,this._onOverFrameName=null,this._onOutFrameName=null,this._onDownFrameName=null,this._onUpFrameName=null,this._onOverFrameID=null,this._onOutFrameID=null,this._onDownFrameID=null,this._onUpFrameID=null,this.onOverSound=null,this.onOutSound=null,this.onDownSound=null,this.onUpSound=null,this.onOverSoundMarker="",this.onOutSoundMarker="",this.onDownSoundMarker="",this.onUpSoundMarker="",this.onInputOver=new d.Signal,this.onInputOut=new d.Signal,this.onInputDown=new d.Signal,this.onInputUp=new d.Signal,this.freezeFrames=!1,this.forceOut=!0,this.setFrames(h,i,j),null!==f&&this.onInputUp.add(f,g),this.input.start(0,!0),this.events.onInputOver.add(this.onInputOverHandler,this),this.events.onInputOut.add(this.onInputOutHandler,this),this.events.onInputDown.add(this.onInputDownHandler,this),this.events.onInputUp.add(this.onInputUpHandler,this)},d.Button.prototype=Object.create(d.Sprite.prototype),d.Button.prototype=d.Utils.extend(!0,d.Button.prototype,d.Sprite.prototype,c.Sprite.prototype),d.Button.prototype.constructor=d.Button,d.Button.prototype.setFrames=function(a,b,c){null!==a&&("string"==typeof a?(this._onOverFrameName=a,this.input.pointerOver()&&(this.frameName=a)):(this._onOverFrameID=a,this.input.pointerOver()&&(this.frame=a))),null!==b&&("string"==typeof b?(this._onOutFrameName=b,this._onUpFrameName=b,this.input.pointerOver()===!1&&(this.frameName=b)):(this._onOutFrameID=b,this._onUpFrameID=b,this.input.pointerOver()===!1&&(this.frame=b))),null!==c&&("string"==typeof c?(this._onDownFrameName=c,this.input.pointerDown()&&(this.frameName=c)):(this._onDownFrameID=c,this.input.pointerDown()&&(this.frame=c)))},d.Button.prototype.setSounds=function(a,b,c,d,e,f,g,h){this.setOverSound(a,b),this.setOutSound(e,f),this.setUpSound(g,h),this.setDownSound(c,d)},d.Button.prototype.setOverSound=function(a,b){this.onOverSound=null,this.onOverSoundMarker="",a instanceof d.Sound&&(this.onOverSound=a),"string"==typeof b&&(this.onOverSoundMarker=b)},d.Button.prototype.setOutSound=function(a,b){this.onOutSound=null,this.onOutSoundMarker="",a instanceof d.Sound&&(this.onOutSound=a),"string"==typeof b&&(this.onOutSoundMarker=b)},d.Button.prototype.setUpSound=function(a,b){this.onUpSound=null,this.onUpSoundMarker="",a instanceof d.Sound&&(this.onUpSound=a),"string"==typeof b&&(this.onUpSoundMarker=b)},d.Button.prototype.setDownSound=function(a,b){this.onDownSound=null,this.onDownSoundMarker="",a instanceof d.Sound&&(this.onDownSound=a),"string"==typeof b&&(this.onDownSoundMarker=b)},d.Button.prototype.onInputOverHandler=function(a){this.freezeFrames===!1&&(null!=this._onOverFrameName?this.frameName=this._onOverFrameName:null!=this._onOverFrameID&&(this.frame=this._onOverFrameID)),this.onOverSound&&this.onOverSound.play(this.onOverSoundMarker),this.onInputOver&&this.onInputOver.dispatch(this,a)},d.Button.prototype.onInputOutHandler=function(a){this.freezeFrames===!1&&(null!=this._onOutFrameName?this.frameName=this._onOutFrameName:null!=this._onOutFrameID&&(this.frame=this._onOutFrameID)),this.onOutSound&&this.onOutSound.play(this.onOutSoundMarker),this.onInputOut&&this.onInputOut.dispatch(this,a)},d.Button.prototype.onInputDownHandler=function(a){this.freezeFrames===!1&&(null!=this._onDownFrameName?this.frameName=this._onDownFrameName:null!=this._onDownFrameID&&(this.frame=this._onDownFrameID)),this.onDownSound&&this.onDownSound.play(this.onDownSoundMarker),this.onInputDown&&this.onInputDown.dispatch(this,a)},d.Button.prototype.onInputUpHandler=function(a){this.freezeFrames===!1&&(null!=this._onUpFrameName?this.frameName=this._onUpFrameName:null!=this._onUpFrameID&&(this.frame=this._onUpFrameID)),this.onUpSound&&this.onUpSound.play(this.onUpSoundMarker),this.forceOut&&this.freezeFrames===!1&&(null!=this._onOutFrameName?this.frameName=this._onOutFrameName:null!=this._onOutFrameID&&(this.frame=this._onOutFrameID)),this.onInputUp&&this.onInputUp.dispatch(this,a)},d.Graphics=function(a,b,e){this.game=a,c.Graphics.call(this),this.type=d.GRAPHICS,this.position.x=b,this.position.y=e},d.Graphics.prototype=Object.create(c.Graphics.prototype),d.Graphics.prototype.constructor=d.Graphics,d.Graphics.prototype.destroy=function(){this.clear(),this.group&&this.group.remove(this),this.game=null},d.Graphics.prototype.drawPolygon=function(a){this.moveTo(a.points[0].x,a.points[0].y);for(var b=1;bh;h++)f[h].updateTransform();var j=a.__renderGroup;j?a==j.root?j.render(this.projection,this.glFramebuffer):j.renderSpecific(a,this.projection,this.glFramebuffer):(this.renderGroup||(this.renderGroup=new c.WebGLRenderGroup(e)),this.renderGroup.setRenderable(a),this.renderGroup.render(this.projection,this.glFramebuffer)),a.worldTransform=g},d.RenderTexture.prototype.renderCanvas=function(a,b,d){var e=a.children;a.worldTransform=c.mat3.create(),b&&(a.worldTransform[2]=b.x,a.worldTransform[5]=b.y);for(var f=0,g=e.length;g>f;f++)e[f].updateTransform();d&&this.renderer.context.clearRect(0,0,this.width,this.height),this.renderer.renderDisplayObject(a),this.renderer.context.setTransform(1,0,0,1,0,0)},d.Canvas={create:function(a,b){a=a||256,b=b||256;var c=document.createElement("canvas");return c.width=a,c.height=b,c.style.display="block",c},getOffset:function(a,b){b=b||new d.Point;var c=a.getBoundingClientRect(),e=a.clientTop||document.body.clientTop||0,f=a.clientLeft||document.body.clientLeft||0,g=window.pageYOffset||a.scrollTop||document.body.scrollTop,h=window.pageXOffset||a.scrollLeft||document.body.scrollLeft;return b.x=c.left+h-f,b.y=c.top+g-e,b},getAspectRatio:function(a){return a.width/a.height},setBackgroundColor:function(a,b){return b=b||"rgb(0,0,0)",a.style.backgroundColor=b,a},setTouchAction:function(a,b){return b=b||"none",a.style.msTouchAction=b,a.style["ms-touch-action"]=b,a.style["touch-action"]=b,a},setUserSelect:function(a,b){return b=b||"none",a.style["-webkit-touch-callout"]=b,a.style["-webkit-user-select"]=b,a.style["-khtml-user-select"]=b,a.style["-moz-user-select"]=b,a.style["-ms-user-select"]=b,a.style["user-select"]=b,a.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",a},addToDOM:function(a,b,c){var d;return"undefined"==typeof c&&(c=!0),b&&("string"==typeof b?d=document.getElementById(b):"object"==typeof b&&1===b.nodeType&&(d=b),c&&(d.style.overflow="hidden")),d||(d=document.body),d.appendChild(a),a},setTransform:function(a,b,c,d,e,f,g){return a.setTransform(d,f,g,e,b,c),a},setSmoothingEnabled:function(a,b){return a.imageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.oImageSmoothingEnabled=b,a.webkitImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b,a},setImageRenderingCrisp:function(a){return a.style["image-rendering"]="crisp-edges",a.style["image-rendering"]="-moz-crisp-edges",a.style["image-rendering"]="-webkit-optimize-contrast",a.style.msInterpolationMode="nearest-neighbor",a},setImageRenderingBicubic:function(a){return a.style["image-rendering"]="auto",a.style.msInterpolationMode="bicubic",a}},d.StageScaleMode=function(a,b,c){this.game=a,this.width=b,this.height=c,this.minWidth=null,this.maxWidth=null,this.minHeight=null,this.maxHeight=null,this._startHeight=0,this.forceLandscape=!1,this.forcePortrait=!1,this.incorrectOrientation=!1,this.pageAlignHorizontally=!1,this.pageAlignVertically=!1,this._width=0,this._height=0,this.maxIterations=5,this.orientationSprite=null,this.enterLandscape=new d.Signal,this.enterPortrait=new d.Signal,this.enterIncorrectOrientation=new d.Signal,this.leaveIncorrectOrientation=new d.Signal,this.hasResized=new d.Signal,this.orientation=window.orientation?window.orientation:window.outerWidth>window.outerHeight?90:0,this.scaleFactor=new d.Point(1,1),this.scaleFactorInversed=new d.Point(1,1),this.margin=new d.Point(0,0),this.aspectRatio=0,this.event=null;var e=this;window.addEventListener("orientationchange",function(a){return e.checkOrientation(a)},!1),window.addEventListener("resize",function(a){return e.checkResize(a)},!1),document.addEventListener("webkitfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("mozfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("fullscreenchange",function(a){return e.fullScreenChange(a)},!1)},d.StageScaleMode.EXACT_FIT=0,d.StageScaleMode.NO_SCALE=1,d.StageScaleMode.SHOW_ALL=2,d.StageScaleMode.prototype={startFullScreen:function(a){if(!this.isFullScreen){"undefined"!=typeof a&&d.Canvas.setSmoothingEnabled(this.game.context,a);var b=this.game.canvas;this._width=this.width,this._height=this.height,console.log("startFullScreen",this._width,this._height),b.requestFullScreen?b.requestFullScreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.webkitRequestFullScreen&&b.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}},stopFullScreen:function(){document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()},fullScreenChange:function(a){this.event=a,this.isFullScreen?(this.game.stage.canvas.style.width="100%",this.game.stage.canvas.style.height="100%",this.setMaximum(),this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height):(this.game.stage.canvas.style.width=this.game.width+"px",this.game.stage.canvas.style.height=this.game.height+"px",this.width=this._width,this.height=this._height,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height)},forceOrientation:function(a,b,d){"undefined"==typeof b&&(b=!1),this.forceLandscape=a,this.forcePortrait=b,"undefined"!=typeof d&&((null==d||this.game.cache.checkImageKey(d)===!1)&&(d="__default"),this.orientationSprite=new c.Sprite(c.TextureCache[d]),this.orientationSprite.anchor.x=.5,this.orientationSprite.anchor.y=.5,this.orientationSprite.position.x=this.game.width/2,this.orientationSprite.position.y=this.game.height/2,this.checkOrientationState(),this.incorrectOrientation?(this.orientationSprite.visible=!0,this.game.world.visible=!1):(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.game.stage._stage.addChild(this.orientationSprite))},checkOrientationState:function(){this.incorrectOrientation?(this.forceLandscape&&window.innerWidth>window.innerHeight||this.forcePortrait&&window.innerHeight>window.innerWidth)&&(this.game.paused=!1,this.incorrectOrientation=!1,this.leaveIncorrectOrientation.dispatch(),this.orientationSprite&&(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.refresh()):(this.forceLandscape&&window.innerWidthwindow.outerHeight?90:0,this.isLandscape?this.enterLandscape.dispatch(this.orientation,!0,!1):this.enterPortrait.dispatch(this.orientation,!1,!0),this.game.stage.scaleMode!==d.StageScaleMode.NO_SCALE&&this.refresh(),this.checkOrientationState()},refresh:function(){if(this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),null==this._check&&this.maxIterations>0){this._iterations=this.maxIterations;var a=this;this._check=window.setInterval(function(){return a.setScreenSize()},10),this.setScreenSize()}},setScreenSize:function(a){"undefined"==typeof a&&(a=!1),this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),this._iterations--,(a||window.innerHeight>this._startHeight||this._iterations<0)&&(document.documentElement.style.minHeight=window.innerHeight+"px",this.incorrectOrientation===!0?this.setMaximum():this.game.stage.scaleMode==d.StageScaleMode.EXACT_FIT?this.setExactFit():this.game.stage.scaleMode==d.StageScaleMode.SHOW_ALL&&this.setShowAll(),this.setSize(),clearInterval(this._check),this._check=null)},setSize:function(){this.incorrectOrientation===!1&&(this.maxWidth&&this.width>this.maxWidth&&(this.width=this.maxWidth),this.maxHeight&&this.height>this.maxHeight&&(this.height=this.maxHeight),this.minWidth&&this.widththis.maxWidth?this.maxWidth:a,this.height=this.maxHeight&&b>this.maxHeight?this.maxHeight:b}},Object.defineProperty(d.StageScaleMode.prototype,"isFullScreen",{get:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement}}),Object.defineProperty(d.StageScaleMode.prototype,"isPortrait",{get:function(){return 0===this.orientation||180==this.orientation}}),Object.defineProperty(d.StageScaleMode.prototype,"isLandscape",{get:function(){return 90===this.orientation||-90===this.orientation}}),d.Device=function(){this.patchAndroidClearRectBug=!1,this.desktop=!1,this.iOS=!1,this.cocoonJS=!1,this.android=!1,this.chromeOS=!1,this.linux=!1,this.macOS=!1,this.windows=!1,this.canvas=!1,this.file=!1,this.fileSystem=!1,this.localStorage=!1,this.webGL=!1,this.worker=!1,this.touch=!1,this.mspointer=!1,this.css3D=!1,this.pointerLock=!1,this.typedArray=!1,this.arora=!1,this.chrome=!1,this.epiphany=!1,this.firefox=!1,this.ie=!1,this.ieVersion=0,this.mobileSafari=!1,this.midori=!1,this.opera=!1,this.safari=!1,this.webApp=!1,this.audioData=!1,this.webAudio=!1,this.ogg=!1,this.opus=!1,this.mp3=!1,this.wav=!1,this.m4a=!1,this.webm=!1,this.iPhone=!1,this.iPhone4=!1,this.iPad=!1,this.pixelRatio=0,this.littleEndian=!1,this._checkAudio(),this._checkBrowser(),this._checkCSS3D(),this._checkDevice(),this._checkFeatures(),this._checkOS() +},d.Device.prototype={_checkOS:function(){var a=navigator.userAgent;/Android/.test(a)?this.android=!0:/CrOS/.test(a)?this.chromeOS=!0:/iP[ao]d|iPhone/i.test(a)?this.iOS=!0:/Linux/.test(a)?this.linux=!0:/Mac OS/.test(a)?this.macOS=!0:/Windows/.test(a)&&(this.windows=!0),(this.windows||this.macOS||this.linux)&&(this.desktop=!0)},_checkFeatures:function(){this.canvas=!!window.CanvasRenderingContext2D;try{this.localStorage=!!localStorage.getItem}catch(a){this.localStorage=!1}this.file=!!(window.File&&window.FileReader&&window.FileList&&window.Blob),this.fileSystem=!!window.requestFileSystem,this.webGL=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}(),this.webGL=null===this.webGL||this.webGL===!1?!1:!0,this.worker=!!window.Worker,("ontouchstart"in document.documentElement||window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>1)&&(this.touch=!0),(window.navigator.msPointerEnabled||window.navigator.pointerEnabled)&&(this.mspointer=!0),this.pointerLock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document},_checkBrowser:function(){var a=navigator.userAgent;/Arora/.test(a)?this.arora=!0:/Chrome/.test(a)?this.chrome=!0:/Epiphany/.test(a)?this.epiphany=!0:/Firefox/.test(a)?this.firefox=!0:/Mobile Safari/.test(a)?this.mobileSafari=!0:/MSIE (\d+\.\d+);/.test(a)?(this.ie=!0,this.ieVersion=parseInt(RegExp.$1,10)):/Midori/.test(a)?this.midori=!0:/Opera/.test(a)?this.opera=!0:/Safari/.test(a)&&(this.safari=!0),navigator.standalone&&(this.webApp=!0),navigator.isCocoonJS&&(this.cocoonJS=!0)},_checkAudio:function(){this.audioData=!!window.Audio,this.webAudio=!(!window.webkitAudioContext&&!window.AudioContext);var a=document.createElement("audio"),b=!1;try{(b=!!a.canPlayType)&&(a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,"")&&(this.ogg=!0),a.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,"")&&(this.opus=!0),a.canPlayType("audio/mpeg;").replace(/^no$/,"")&&(this.mp3=!0),a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,"")&&(this.wav=!0),(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;").replace(/^no$/,""))&&(this.m4a=!0),a.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")&&(this.webm=!0))}catch(c){}},_checkDevice:function(){this.pixelRatio=window.devicePixelRatio||1,this.iPhone=-1!=navigator.userAgent.toLowerCase().indexOf("iphone"),this.iPhone4=2==this.pixelRatio&&this.iPhone,this.iPad=-1!=navigator.userAgent.toLowerCase().indexOf("ipad"),"undefined"!=typeof Int8Array?(this.littleEndian=new Int8Array(new Int16Array([1]).buffer)[0]>0,this.typedArray=!0):(this.littleEndian=!1,this.typedArray=!1)},_checkCSS3D:function(){var a,b=document.createElement("p"),c={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.insertBefore(b,null);for(var d in c)void 0!==b.style[d]&&(b.style[d]="translate3d(1px,1px,1px)",a=window.getComputedStyle(b).getPropertyValue(c[d]));document.body.removeChild(b),this.css3D=void 0!==a&&a.length>0&&"none"!==a},canPlayAudio:function(a){return"mp3"==a&&this.mp3?!0:"ogg"==a&&(this.ogg||this.opus)?!0:"m4a"==a&&this.m4a?!0:"wav"==a&&this.wav?!0:"webm"==a&&this.webm?!0:!1},isConsoleOpen:function(){return window.console&&window.console.firebug?!0:window.console?(console.profile(),console.profileEnd(),console.clear&&console.clear(),console.profiles.length>0):!1}},d.RequestAnimationFrame=function(a){this.game=a,this.isRunning=!1;for(var b=["ms","moz","webkit","o"],c=0;c>>0,b-=d,b*=d,d=b>>>0,b-=d,d+=4294967296*b;return 2.3283064365386963e-10*(d>>>0)},integer:function(){return 4294967296*this.rnd.apply(this)},frac:function(){return this.rnd.apply(this)+1.1102230246251565e-16*(0|2097152*this.rnd.apply(this))},real:function(){return this.integer()+this.frac()},integerInRange:function(a,b){return Math.floor(this.realInRange(a,b))},realInRange:function(a,b){return this.frac()*(b-a)+a},normal:function(){return 1-2*this.frac()},uuid:function(){var a="",b="";for(b=a="";a++<36;b+=~a%5|4&3*a?(15^a?8^this.frac()*(20^a?16:4):4).toString(16):"-");return b},pick:function(a){return a[this.integerInRange(0,a.length)]},weightedPick:function(a){return a[~~(Math.pow(this.frac(),2)*a.length)]},timestamp:function(a,b){return this.realInRange(a||9466848e5,b||1577862e6)},angle:function(){return this.integerInRange(-180,180)}},d.Math={PI2:2*Math.PI,fuzzyEqual:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),Math.abs(a-b)a},fuzzyGreaterThan:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),a>b-c},fuzzyCeil:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.ceil(a-b)},fuzzyFloor:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.floor(a+b)},average:function(){for(var a=[],b=0;b0?Math.floor(a):Math.ceil(a)},shear:function(a){return a%1},snapTo:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.round(a/b),c+a)},snapToFloor:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.floor(a/b),c+a)},snapToCeil:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.ceil(a/b),c+a)},snapToInArray:function(a,b,c){if("undefined"==typeof c&&(c=!0),c&&b.sort(),a=f-a?f:e},roundTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.round(a*d)/d},floorTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.floor(a*d)/d},ceilTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.ceil(a*d)/d},interpolateFloat:function(a,b,c){return(b-a)*c+a},angleBetween:function(a,b,c,d){return Math.atan2(d-b,c-a)},normalizeAngle:function(a,b){"undefined"==typeof b&&(b=!0);var c=b?Math.PI:180;return this.wrap(a,-c,c)},nearestAngleBetween:function(a,b,c){"undefined"==typeof c&&(c=!0);var d=c?Math.PI:180;return a=this.normalizeAngle(a,c),b=this.normalizeAngle(b,c),-d/2>a&&b>d/2&&(a+=2*d),-d/2>b&&a>d/2&&(b+=2*d),b-a},interpolateAngles:function(a,b,c,d,e){return"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=null),a=this.normalizeAngle(a,d),b=this.normalizeAngleToAnother(b,a,d),"function"==typeof e?e(c,a,b-a,1):this.interpolateFloat(a,b,c)},chanceRoll:function(a){return"undefined"==typeof a&&(a=50),0>=a?!1:a>=100?!0:100*Math.random()>=a?!1:!0},numberArray:function(a,b){for(var c=[],d=a;b>=d;d++)c.push(d);return c},maxAdd:function(a,b,c){return a+=b,a>c&&(a=c),a},minSub:function(a,b,c){return a-=b,c>a&&(a=c),a},wrap:function(a,b,c){var d=c-b;if(0>=d)return 0;var e=(a-b)%d;return 0>e&&(e+=d),e+b},wrapValue:function(a,b,c){var d;return a=Math.abs(a),b=Math.abs(b),c=Math.abs(c),d=(a+b)%c},randomSign:function(){return Math.random()>.5?1:-1},isOdd:function(a){return 1&a},isEven:function(a){return 1&a?!1:!0},max:function(){for(var a=1,b=0,c=arguments.length;c>a;a++)arguments[b]a;a++)arguments[a]c?d=c:b>a&&(d=b),d},linearInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return 0>b?this.linear(a[0],a[1],d):b>1?this.linear(a[c],a[c-1],c-d):this.linear(a[e],a[e+1>c?c:e+1],d-e)},bezierInterpolation:function(a,b){for(var c=0,d=a.length-1,e=0;d>=e;e++)c+=Math.pow(1-b,d-e)*Math.pow(b,e)*a[e]*this.bernstein(d,e);return c},catmullRomInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return a[0]===a[c]?(0>b&&(e=Math.floor(d=c*(1+b))),this.catmullRom(a[(e-1+c)%c],a[e],a[(e+1)%c],a[(e+2)%c],d-e)):0>b?a[0]-(this.catmullRom(a[0],a[0],a[1],a[1],-d)-a[0]):b>1?a[c]-(this.catmullRom(a[c],a[c],a[c-1],a[c-1],d-c)-a[c]):this.catmullRom(a[e?e-1:0],a[e],a[e+1>c?c:e+1],a[e+2>c?c:e+2],d-e)},linear:function(a,b,c){return(b-a)*c+a},bernstein:function(a,b){return this.factorial(a)/this.factorial(b)/this.factorial(a-b)},catmullRom:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b},difference:function(a,b){return Math.abs(a-b)},getRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0)return a[b+Math.floor(Math.random()*d)]}return null},floor:function(a){var b=0|a;return a>0?b:b!=a?b-1:b},ceil:function(a){var b=0|a;return a>0?b!=a?b+1:b:b},sinCosGenerator:function(a,b,c,d){"undefined"==typeof b&&(b=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1);for(var e=b,f=c,g=d*Math.PI/a,h=[],i=[],j=0;a>j;j++)f-=e*g,e+=f*g,h[j]=f,i[j]=e;return{sin:i,cos:h,length:a}},shift:function(a){var b=a.shift();return a.push(b),b},shuffleArray:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},distance:function(a,b,c,d){var e=a-c,f=b-d;return Math.sqrt(e*e+f*f)},distanceRounded:function(a,b,c,e){return Math.round(d.Math.distance(a,b,c,e))},clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},within:function(a,b,c){return Math.abs(a-b)<=c},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*(3-2*a))},smootherstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*a*(a*(6*a-15)+10))},sign:function(a){return 0>a?-1:a>0?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}()},d.QuadTree=function(a,b,c,d,e,f,g,h){this.physicsManager=a,this.ID=a.quadTreeID,a.quadTreeID++,this.maxObjects=f||10,this.maxLevels=g||4,this.level=h||0,this.bounds={x:Math.round(b),y:Math.round(c),width:d,height:e,subWidth:Math.floor(d/2),subHeight:Math.floor(e/2),right:Math.round(b)+Math.floor(d/2),bottom:Math.round(c)+Math.floor(e/2)},this.objects=[],this.nodes=[]},d.QuadTree.prototype={split:function(){this.level++,this.nodes[0]=new d.QuadTree(this.physicsManager,this.bounds.right,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[1]=new d.QuadTree(this.physicsManager,this.bounds.x,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[2]=new d.QuadTree(this.physicsManager,this.bounds.x,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[3]=new d.QuadTree(this.physicsManager,this.bounds.right,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level)},insert:function(a){var b,c=0;if(null!=this.nodes[0]&&(b=this.getIndex(a),-1!==b))return this.nodes[b].insert(a),void 0;if(this.objects.push(a),this.objects.length>this.maxObjects&&this.levelthis.bounds.bottom&&(b=2):a.x>this.bounds.right&&(a.ythis.bounds.bottom&&(b=3)),b},retrieve:function(a){var b=this.objects;return a.body.quadTreeIndex=this.getIndex(a.body),a.body.quadTreeIDs.push(this.ID),this.nodes[0]&&(-1!==a.body.quadTreeIndex?b=b.concat(this.nodes[a.body.quadTreeIndex].retrieve(a)):(b=b.concat(this.nodes[0].retrieve(a)),b=b.concat(this.nodes[1].retrieve(a)),b=b.concat(this.nodes[2].retrieve(a)),b=b.concat(this.nodes[3].retrieve(a)))),b},clear:function(){this.objects=[];for(var a=0,b=this.nodes.length;b>a;a++)this.nodes[a]&&(this.nodes[a].clear(),delete this.nodes[a])}},d.Circle=function(a,b,c){a=a||0,b=b||0,c=c||0,this.x=a,this.y=b,this._diameter=c,this._radius=c>0?.5*c:0},d.Circle.prototype={circumference:function(){return 2*Math.PI*this._radius},setTo:function(a,b,c){return this.x=a,this.y=b,this._diameter=c,this._radius=.5*c,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.diameter)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.diameter=this._diameter,a},distance:function(a,b){return"undefined"==typeof b&&(b=!1),b?d.Math.distanceRound(this.x,this.y,a.x,a.y):d.Math.distance(this.x,this.y,a.x,a.y)},clone:function(a){return"undefined"==typeof a&&(a=new d.Circle),a.setTo(this.x,this.y,this.diameter)},contains:function(a,b){return d.Circle.contains(this,a,b)},circumferencePoint:function(a,b,c){return d.Circle.circumferencePoint(this,a,b,c)},offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},toString:function(){return"[{Phaser.Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter+" radius="+this.radius+")}]"}},Object.defineProperty(d.Circle.prototype,"diameter",{get:function(){return this._diameter},set:function(a){a>0&&(this._diameter=a,this._radius=.5*a)}}),Object.defineProperty(d.Circle.prototype,"radius",{get:function(){return this._radius},set:function(a){a>0&&(this._radius=a,this._diameter=2*a)}}),Object.defineProperty(d.Circle.prototype,"left",{get:function(){return this.x-this._radius},set:function(a){a>this.x?(this._radius=0,this._diameter=0):this.radius=this.x-a}}),Object.defineProperty(d.Circle.prototype,"right",{get:function(){return this.x+this._radius},set:function(a){athis.y?(this._radius=0,this._diameter=0):this.radius=this.y-a}}),Object.defineProperty(d.Circle.prototype,"bottom",{get:function(){return this.y+this._radius},set:function(a){a0?Math.PI*this._radius*this._radius:0}}),Object.defineProperty(d.Circle.prototype,"empty",{get:function(){return 0===this._diameter},set:function(a){a===!0&&this.setTo(0,0,0)}}),d.Circle.contains=function(a,b,c){if(b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom){var d=(a.x-b)*(a.x-b),e=(a.y-c)*(a.y-c);return d+e<=a.radius*a.radius}return!1},d.Circle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.diameter==b.diameter},d.Circle.intersects=function(a,b){return d.Math.distance(a.x,a.y,b.x,b.y)<=a.radius+b.radius},d.Circle.circumferencePoint=function(a,b,c,e){return"undefined"==typeof c&&(c=!1),"undefined"==typeof e&&(e=new d.Point),c===!0&&(b=d.Math.radToDeg(b)),e.x=a.x+a.radius*Math.cos(b),e.y=a.y+a.radius*Math.sin(b),e},d.Circle.intersectsRectangle=function(a,b){var c=Math.abs(a.x-b.x-b.halfWidth),d=b.halfWidth+a.radius;if(c>d)return!1;var e=Math.abs(a.y-b.y-b.halfHeight),f=b.halfHeight+a.radius;if(e>f)return!1;if(c<=b.halfWidth||e<=b.halfHeight)return!0;var g=c-b.halfWidth,h=e-b.halfHeight,i=g*g,j=h*h,k=a.radius*a.radius;return k>=i+j},d.Point=function(a,b){a=a||0,b=b||0,this.x=a,this.y=b},d.Point.prototype={copyFrom:function(a){return this.setTo(a.x,a.y)},invert:function(){return this.setTo(this.y,this.x)},setTo:function(a,b){return this.x=a,this.y=b,this},add:function(a,b){return this.x+=a,this.y+=b,this},subtract:function(a,b){return this.x-=a,this.y-=b,this},multiply:function(a,b){return this.x*=a,this.y*=b,this},divide:function(a,b){return this.x/=a,this.y/=b,this},clampX:function(a,b){return this.x=d.Math.clamp(this.x,a,b),this},clampY:function(a,b){return this.y=d.Math.clamp(this.y,a,b),this},clamp:function(a,b){return this.x=d.Math.clamp(this.x,a,b),this.y=d.Math.clamp(this.y,a,b),this},clone:function(a){return"undefined"==typeof a&&(a=new d.Point),a.setTo(this.x,this.y)},copyTo:function(a){return a.x=this.x,a.y=this.y,a},distance:function(a,b){return d.Point.distance(this,a,b)},equals:function(a){return a.x==this.x&&a.y==this.y},rotate:function(a,b,c,e,f){return d.Point.rotate(this,a,b,c,e,f)},getMagnitude:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setMagnitude:function(a){return this.normalize().multiply(a,a)},normalize:function(){if(!this.isZero()){var a=this.getMagnitude();this.x/=a,this.y/=a}return this},isZero:function(){return 0===this.x&&0===this.y},toString:function(){return"[{Point (x="+this.x+" y="+this.y+")}]"}},d.Point.add=function(a,b,c){return"undefined"==typeof c&&(c=new d.Point),c.x=a.x+b.x,c.y=a.y+b.y,c},d.Point.subtract=function(a,b,c){return"undefined"==typeof c&&(c=new d.Point),c.x=a.x-b.x,c.y=a.y-b.y,c},d.Point.multiply=function(a,b,c){return"undefined"==typeof c&&(c=new d.Point),c.x=a.x*b.x,c.y=a.y*b.y,c},d.Point.divide=function(a,b,c){return"undefined"==typeof c&&(c=new d.Point),c.x=a.x/b.x,c.y=a.y/b.y,c},d.Point.equals=function(a,b){return a.x==b.x&&a.y==b.y},d.Point.distance=function(a,b,c){return"undefined"==typeof c&&(c=!1),c?d.Math.distanceRound(a.x,a.y,b.x,b.y):d.Math.distance(a.x,a.y,b.x,b.y)},d.Point.rotate=function(a,b,c,e,f,g){return f=f||!1,g=g||null,f&&(e=d.Math.degToRad(e)),null===g&&(g=Math.sqrt((b-a.x)*(b-a.x)+(c-a.y)*(c-a.y))),a.setTo(b+g*Math.cos(e),c+g*Math.sin(e))},d.Rectangle=function(a,b,c,d){a=a||0,b=b||0,c=c||0,d=d||0,this.x=a,this.y=b,this.width=c,this.height=d},d.Rectangle.prototype={offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},floor:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},floorAll:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.width=Math.floor(this.width),this.height=Math.floor(this.height)},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},inflate:function(a,b){return d.Rectangle.inflate(this,a,b)},size:function(a){return d.Rectangle.size(this,a)},clone:function(a){return d.Rectangle.clone(this,a)},contains:function(a,b){return d.Rectangle.contains(this,a,b)},containsRect:function(a){return d.Rectangle.containsRect(this,a)},equals:function(a){return d.Rectangle.equals(this,a)},intersection:function(a,b){return d.Rectangle.intersection(this,a,b)},intersects:function(a,b){return d.Rectangle.intersects(this,a,b)},intersectsRaw:function(a,b,c,e,f){return d.Rectangle.intersectsRaw(this,a,b,c,e,f)},union:function(a,b){return d.Rectangle.union(this,a,b)},toString:function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.empty+")}]"}},Object.defineProperty(d.Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)}}),Object.defineProperty(d.Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)}}),Object.defineProperty(d.Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(d.Rectangle.prototype,"bottomRight",{get:function(){return new d.Point(this.right,this.bottom)},set:function(a){this.right=a.x,this.bottom=a.y}}),Object.defineProperty(d.Rectangle.prototype,"left",{get:function(){return this.x},set:function(a){this.width=a>=this.right?0:this.right-a,this.x=a}}),Object.defineProperty(d.Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),Object.defineProperty(d.Rectangle.prototype,"volume",{get:function(){return this.width*this.height}}),Object.defineProperty(d.Rectangle.prototype,"perimeter",{get:function(){return 2*this.width+2*this.height}}),Object.defineProperty(d.Rectangle.prototype,"centerX",{get:function(){return this.x+this.halfWidth},set:function(a){this.x=a-this.halfWidth}}),Object.defineProperty(d.Rectangle.prototype,"centerY",{get:function(){return this.y+this.halfHeight},set:function(a){this.y=a-this.halfHeight}}),Object.defineProperty(d.Rectangle.prototype,"top",{get:function(){return this.y},set:function(a){a>=this.bottom?(this.height=0,this.y=a):this.height=this.bottom-a}}),Object.defineProperty(d.Rectangle.prototype,"topLeft",{get:function(){return new d.Point(this.x,this.y)},set:function(a){this.x=a.x,this.y=a.y}}),Object.defineProperty(d.Rectangle.prototype,"empty",{get:function(){return!this.width||!this.height},set:function(a){a===!0&&this.setTo(0,0,0,0)}}),d.Rectangle.inflate=function(a,b,c){return a.x-=b,a.width+=2*b,a.y-=c,a.height+=2*c,a},d.Rectangle.inflatePoint=function(a,b){return d.Rectangle.inflate(a,b.x,b.y)},d.Rectangle.size=function(a,b){return"undefined"==typeof b&&(b=new d.Point),b.setTo(a.width,a.height)},d.Rectangle.clone=function(a,b){return"undefined"==typeof b&&(b=new d.Rectangle),b.setTo(a.x,a.y,a.width,a.height)},d.Rectangle.contains=function(a,b,c){return b>=a.x&&b<=a.right&&c>=a.y&&c<=a.bottom},d.Rectangle.containsRaw=function(a,b,c,d,e,f){return e>=a&&a+c>=e&&f>=b&&b+d>=f},d.Rectangle.containsPoint=function(a,b){return d.Rectangle.contains(a,b.x,b.y)},d.Rectangle.containsRect=function(a,b){return a.volume>b.volume?!1:a.x>=b.x&&a.y>=b.y&&a.right<=b.right&&a.bottom<=b.bottom},d.Rectangle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.width==b.width&&a.height==b.height},d.Rectangle.intersection=function(a,b,c){return c=c||new d.Rectangle,d.Rectangle.intersects(a,b)&&(c.x=Math.max(a.x,b.x),c.y=Math.max(a.y,b.y),c.width=Math.min(a.right,b.right)-c.x,c.height=Math.min(a.bottom,b.bottom)-c.y),c},d.Rectangle.intersects=function(a,b){return a.xa.right+f||ca.bottom+f||e1){if(a&&a==this.decodeURI(e[0]))return this.decodeURI(e[1]);b[this.decodeURI(e[0])]=this.decodeURI(e[1])}}return b},decodeURI:function(a){return decodeURIComponent(a.replace(/\+/g," "))}},d.TweenManager=function(a){this.game=a,this._tweens=[],this._add=[],this.game.onPause.add(this.pauseAll,this),this.game.onResume.add(this.resumeAll,this)},d.TweenManager.prototype={REVISION:"11dev",getAll:function(){return this._tweens},removeAll:function(){this._tweens=[]},add:function(a){this._add.push(a)},create:function(a){return new d.Tween(a,this.game)},remove:function(a){var b=this._tweens.indexOf(a);-1!==b&&(this._tweens[b].pendingDelete=!0)},update:function(){if(0===this._tweens.length&&0===this._add.length)return!1;for(var a=0,b=this._tweens.length;b>a;)this._tweens[a].update(this.game.time.now)?a++:(this._tweens.splice(a,1),b--);return this._add.length>0&&(this._tweens=this._tweens.concat(this._add),this._add.length=0),!0},isTweening:function(a){return this._tweens.some(function(b){return b._object===a})},pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].pause()},resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].resume()}},d.Tween=function(a,b){this._object=a,this.game=b,this._manager=this.game.tweens,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._repeat=0,this._yoyo=!1,this._reversed=!1,this._delayTime=0,this._startTime=null,this._easingFunction=d.Easing.Linear.None,this._interpolationFunction=d.Math.linearInterpolation,this._chainedTweens=[],this._onStartCallback=null,this._onStartCallbackFired=!1,this._onUpdateCallback=null,this._onCompleteCallback=null,this._pausedTime=0,this.pendingDelete=!1;for(var c in a)this._valuesStart[c]=parseFloat(a[c],10);this.onStart=new d.Signal,this.onComplete=new d.Signal,this.isRunning=!1},d.Tween.prototype={to:function(a,b,c,d,e,f,g){b=b||1e3,c=c||null,d=d||!1,e=e||0,f=f||0,g=g||!1;var h;return this._parent?(h=this._manager.create(this._object),this._lastChild.chain(h),this._lastChild=h):(h=this,this._parent=this,this._lastChild=this),h._repeat=f,h._duration=b,h._valuesEnd=a,null!==c&&(h._easingFunction=c),e>0&&(h._delayTime=e),h._yoyo=g,d?this.start():this},start:function(){if(null!==this.game&&null!==this._object){this._manager.add(this),this.onStart.dispatch(this._object),this.isRunning=!0,this._onStartCallbackFired=!1,this._startTime=this.game.time.now+this._delayTime;for(var a in this._valuesEnd){if(this._valuesEnd[a]instanceof Array){if(0===this._valuesEnd[a].length)continue;this._valuesEnd[a]=[this._object[a]].concat(this._valuesEnd[a])}this._valuesStart[a]=this._object[a],this._valuesStart[a]instanceof Array==!1&&(this._valuesStart[a]*=1),this._valuesStartRepeat[a]=this._valuesStart[a]||0}return this}},stop:function(){return this.isRunning=!1,this._manager.remove(this),this},delay:function(a){return this._delayTime=a,this},repeat:function(a){return this._repeat=a,this},yoyo:function(a){return this._yoyo=a,this},easing:function(a){return this._easingFunction=a,this},interpolation:function(a){return this._interpolationFunction=a,this},chain:function(){return this._chainedTweens=arguments,this},loop:function(){return this._lastChild.chain(this),this},onStartCallback:function(a){return this._onStartCallback=a,this},onUpdateCallback:function(a){return this._onUpdateCallback=a,this},onCompleteCallback:function(a){return this._onCompleteCallback=a,this},pause:function(){this._paused=!0,this._pausedTime=this.game.time.now},resume:function(){this._paused=!1,this._startTime+=this.game.time.now-this._pausedTime},update:function(a){if(this.pendingDelete)return!1;if(this._paused||a1?1:c;var d=this._easingFunction(c);for(b in this._valuesEnd){var e=this._valuesStart[b]||0,f=this._valuesEnd[b];f instanceof Array?this._object[b]=this._interpolationFunction(f,d):("string"==typeof f&&(f=e+parseFloat(f,10)),"number"==typeof f&&(this._object[b]=e+(f-e)*d))}if(null!==this._onUpdateCallback&&this._onUpdateCallback.call(this._object,d),1==c){if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(b in this._valuesStartRepeat){if("string"==typeof this._valuesEnd[b]&&(this._valuesStartRepeat[b]=this._valuesStartRepeat[b]+parseFloat(this._valuesEnd[b],10)),this._yoyo){var g=this._valuesStartRepeat[b];this._valuesStartRepeat[b]=this._valuesEnd[b],this._valuesEnd[b]=g,this._reversed=!this._reversed}this._valuesStart[b]=this._valuesStartRepeat[b]}return this._startTime=a+this._delayTime,this.onComplete.dispatch(this._object),null!==this._onCompleteCallback&&this._onCompleteCallback.call(this._object),!0}this.isRunning=!1,this.onComplete.dispatch(this._object),null!==this._onCompleteCallback&&this._onCompleteCallback.call(this._object);for(var h=0,i=this._chainedTweens.length;i>h;h++)this._chainedTweens[h].start(a);return!1}return!0}},d.Easing={Linear:{None:function(a){return a}},Quadratic:{In:function(a){return a*a},Out:function(a){return a*(2-a)},InOut:function(a){return(a*=2)<1?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return(a*=2)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:(a*=2)<1?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),-(c*Math.pow(2,10*(a-=1))*Math.sin((a-b)*2*Math.PI/d)))},Out:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),c*Math.pow(2,-10*a)*Math.sin((a-b)*2*Math.PI/d)+1)},InOut:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),(a*=2)<1?-.5*c*Math.pow(2,10*(a-=1))*Math.sin((a-b)*2*Math.PI/d):.5*c*Math.pow(2,-10*(a-=1))*Math.sin((a-b)*2*Math.PI/d)+1)}},Back:{In:function(a){var b=1.70158;return a*a*((b+1)*a-b) +},Out:function(a){var b=1.70158;return--a*a*((b+1)*a+b)+1},InOut:function(a){var b=2.5949095;return(a*=2)<1?.5*a*a*((b+1)*a-b):.5*((a-=2)*a*((b+1)*a+b)+2)}},Bounce:{In:function(a){return 1-d.Easing.Bounce.Out(1-a)},Out:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*d.Easing.Bounce.In(2*a):.5*d.Easing.Bounce.Out(2*a-1)+.5}}},d.Time=function(a){this.game=a,this._started=0,this._timeLastSecond=0,this._pauseStarted=0,this.physicsElapsed=0,this.time=0,this.pausedTime=0,this.now=0,this.elapsed=0,this.fps=0,this.fpsMin=1e3,this.fpsMax=0,this.msMin=1e3,this.msMax=0,this.frames=0,this.pauseDuration=0,this.timeToCall=0,this.lastTime=0,this.game.onPause.add(this.gamePaused,this),this.game.onResume.add(this.gameResumed,this),this._justResumed=!1},d.Time.prototype={update:function(a){this.now=a,this._justResumed&&(this.time=this.now,this._justResumed=!1),this.timeToCall=this.game.math.max(0,16-(a-this.lastTime)),this.elapsed=this.now-this.time,this.msMin=this.game.math.min(this.msMin,this.elapsed),this.msMax=this.game.math.max(this.msMax,this.elapsed),this.frames++,this.now>this._timeLastSecond+1e3&&(this.fps=Math.round(1e3*this.frames/(this.now-this._timeLastSecond)),this.fpsMin=this.game.math.min(this.fpsMin,this.fps),this.fpsMax=this.game.math.max(this.fpsMax,this.fps),this._timeLastSecond=this.now,this.frames=0),this.time=this.now,this.lastTime=a+this.timeToCall,this.physicsElapsed=1*(this.elapsed/1e3),this.physicsElapsed>1&&(this.physicsElapsed=1),this.game.paused&&(this.pausedTime=this.now-this._pauseStarted)},gamePaused:function(){this._pauseStarted=this.now},gameResumed:function(){this.time=Date.now(),this.pauseDuration=this.pausedTime,this._justResumed=!0},totalElapsedSeconds:function(){return.001*(this.now-this._started)},elapsedSince:function(a){return this.now-a},elapsedSecondsSince:function(a){return.001*(this.now-a)},reset:function(){this._started=this.now}},d.Timer=function(a){this.game=a,this._started=0,this._timeLastSecond=0,this.running=!1,this.events=[],this.onEvent=new d.Signal},d.Timer.prototype={add:function(a){this.events.push({delay:a,dispatched:!1,args:Array.prototype.splice.call(arguments,1)})},start:function(){this._started=this.game.time.now,this.running=!0},stop:function(){this.running=!1,this.events.length=0},update:function(){if(this.running)for(var a=this.seconds(),b=0,c=this.events.length;c>b;b++)this.events[b].dispatched===!1&&a>=this.events[b].delay&&(this.events[b].dispatched=!0,this.onEvent.dispatch.apply(this,this.events[b].args))},seconds:function(){return.001*(this.game.time.now-this._started)}},d.AnimationManager=function(a){this.sprite=a,this.game=a.game,this.currentFrame=null,this.updateIfVisible=!0,this.isLoaded=!1,this._frameData=null,this._anims={},this._outputFrames=[]},d.AnimationManager.prototype={loadFrameData:function(a){this._frameData=a,this.frame=0,this.isLoaded=!0},add:function(a,b,e,f,g){return null==this._frameData?(console.warn("No FrameData available for Phaser.Animation "+a),void 0):(e=e||60,"undefined"==typeof f&&(f=!1),"undefined"==typeof g&&(g=b&&"number"==typeof b[0]?!0:!1),null==this.sprite.events.onAnimationStart&&(this.sprite.events.onAnimationStart=new d.Signal,this.sprite.events.onAnimationComplete=new d.Signal,this.sprite.events.onAnimationLoop=new d.Signal),this._outputFrames.length=0,this._frameData.getFrameIndexes(b,g,this._outputFrames),this._anims[a]=new d.Animation(this.game,this.sprite,a,this._frameData,this._outputFrames,e,f),this.currentAnim=this._anims[a],this.currentFrame=this.currentAnim.currentFrame,this.sprite.setTexture(c.TextureCache[this.currentFrame.uuid]),this._anims[a])},validateFrames:function(a,b){"undefined"==typeof b&&(b=!0);for(var c=0;cthis._frameData.total)return!1}else if(this._frameData.checkFrameName(a[c])===!1)return!1;return!0},play:function(a,b,c,d){if(this._anims[a]){if(this.currentAnim!=this._anims[a])return this.currentAnim=this._anims[a],this.currentAnim.paused=!1,this.currentAnim.play(b,c,d);if(this.currentAnim.isPlaying===!1)return this.currentAnim.paused=!1,this.currentAnim.play(b,c,d)}},stop:function(a,b){"undefined"==typeof b&&(b=!1),"string"==typeof a?this._anims[a]&&(this.currentAnim=this._anims[a],this.currentAnim.stop(b)):this.currentAnim&&this.currentAnim.stop(b)},update:function(){return this.updateIfVisible&&this.sprite.visible===!1?!1:this.currentAnim&&this.currentAnim.update()===!0?(this.currentFrame=this.currentAnim.currentFrame,this.sprite.currentFrame=this.currentFrame,!0):!1},getAnimation:function(a){return"string"==typeof a&&this._anims[a]?this._anims[a]:!1},refreshFrame:function(){this.sprite.currentFrame=this.currentFrame,this.sprite.setTexture(c.TextureCache[this.currentFrame.uuid])},destroy:function(){this._anims={},this._frameData=null,this._frameIndex=0,this.currentAnim=null,this.currentFrame=null}},Object.defineProperty(d.AnimationManager.prototype,"frameData",{get:function(){return this._frameData}}),Object.defineProperty(d.AnimationManager.prototype,"frameTotal",{get:function(){return this._frameData?this._frameData.total:-1}}),Object.defineProperty(d.AnimationManager.prototype,"paused",{get:function(){return this.currentAnim.isPaused},set:function(a){this.currentAnim.paused=a}}),Object.defineProperty(d.AnimationManager.prototype,"frame",{get:function(){return this.currentFrame?this._frameIndex:void 0},set:function(a){"number"==typeof a&&this._frameData&&null!==this._frameData.getFrame(a)&&(this.currentFrame=this._frameData.getFrame(a),this._frameIndex=a,this.sprite.currentFrame=this.currentFrame,this.sprite.setTexture(c.TextureCache[this.currentFrame.uuid]))}}),Object.defineProperty(d.AnimationManager.prototype,"frameName",{get:function(){return this.currentFrame?this.currentFrame.name:void 0},set:function(a){"string"==typeof a&&this._frameData&&null!==this._frameData.getFrameByName(a)?(this.currentFrame=this._frameData.getFrameByName(a),this._frameIndex=this.currentFrame.index,this.sprite.currentFrame=this.currentFrame,this.sprite.setTexture(c.TextureCache[this.currentFrame.uuid])):console.warn("Cannot set frameName: "+a)}}),d.Animation=function(a,b,c,d,e,f,g){this.game=a,this._parent=b,this._frameData=d,this.name=c,this._frames=[],this._frames=this._frames.concat(e),this.delay=1e3/f,this.looped=g,this.killOnComplete=!1,this.isFinished=!1,this.isPlaying=!1,this.isPaused=!1,this._pauseStartTime=0,this._frameIndex=0,this._frameDiff=0,this._frameSkip=1,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex])},d.Animation.prototype={play:function(a,b,d){return"number"==typeof a&&(this.delay=1e3/a),"boolean"==typeof b&&(this.looped=b),"undefined"!=typeof d&&(this.killOnComplete=d),this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this._timeLastFrame=this.game.time.now,this._timeNextFrame=this.game.time.now+this.delay,this._frameIndex=0,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this._parent.setTexture(c.TextureCache[this.currentFrame.uuid]),this._parent.events&&this._parent.events.onAnimationStart.dispatch(this._parent,this),this},restart:function(){this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this._timeLastFrame=this.game.time.now,this._timeNextFrame=this.game.time.now+this.delay,this._frameIndex=0,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex])},stop:function(a){"undefined"==typeof a&&(a=!1),this.isPlaying=!1,this.isFinished=!0,this.paused=!1,a&&(this.currentFrame=this._frameData.getFrame(this._frames[0]))},update:function(){return this.isPaused?!1:this.isPlaying===!0&&this.game.time.now>=this._timeNextFrame?(this._frameSkip=1,this._frameDiff=this.game.time.now-this._timeNextFrame,this._timeLastFrame=this.game.time.now,this._frameDiff>this.delay&&(this._frameSkip=Math.floor(this._frameDiff/this.delay),this._frameDiff-=this._frameSkip*this.delay),this._timeNextFrame=this.game.time.now+(this.delay-this._frameDiff),this._frameIndex+=this._frameSkip,this._frameIndex>=this._frames.length?this.looped?(this._frameIndex%=this._frames.length,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&this._parent.setTexture(c.TextureCache[this.currentFrame.uuid]),this._parent.events.onAnimationLoop.dispatch(this._parent,this)):this.onComplete():(this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&this._parent.setTexture(c.TextureCache[this.currentFrame.uuid])),!0):!1},destroy:function(){this.game=null,this._parent=null,this._frames=null,this._frameData=null,this.currentFrame=null,this.isPlaying=!1},onComplete:function(){this.isPlaying=!1,this.isFinished=!0,this.paused=!1,this._parent.events&&this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.killOnComplete&&this._parent.kill()}},Object.defineProperty(d.Animation.prototype,"paused",{get:function(){return this.isPaused},set:function(a){this.isPaused=a,a?this._pauseStartTime=this.game.time.now:this.isPlaying&&(this._timeNextFrame=this.game.time.now+this.delay)}}),Object.defineProperty(d.Animation.prototype,"frameTotal",{get:function(){return this._frames.length}}),Object.defineProperty(d.Animation.prototype,"frame",{get:function(){return null!==this.currentFrame?this.currentFrame.index:this._frameIndex},set:function(a){this.currentFrame=this._frameData.getFrame(a),null!==this.currentFrame&&(this._frameIndex=a,this._parent.setTexture(c.TextureCache[this.currentFrame.uuid]))}}),d.Animation.generateFrameNames=function(a,b,c,e,f){"undefined"==typeof e&&(e="");var g=[],h="";if(c>b)for(var i=b;c>=i;i++)h="number"==typeof f?d.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);else for(var i=b;i>=c;i--)h="number"==typeof f?d.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);return g},d.Frame=function(a,b,c,e,f,g,h){this.index=a,this.x=b,this.y=c,this.width=e,this.height=f,this.name=g,this.uuid=h,this.centerX=Math.floor(e/2),this.centerY=Math.floor(f/2),this.distance=d.Math.distance(0,0,e,f),this.rotated=!1,this.rotationDirection="cw",this.trimmed=!1,this.sourceSizeW=e,this.sourceSizeH=f,this.spriteSourceSizeX=0,this.spriteSourceSizeY=0,this.spriteSourceSizeW=0,this.spriteSourceSizeH=0},d.Frame.prototype={setTrim:function(a,b,c,d,e,f,g){this.trimmed=a,a&&(this.width=b,this.height=c,this.sourceSizeW=b,this.sourceSizeH=c,this.centerX=Math.floor(b/2),this.centerY=Math.floor(c/2),this.spriteSourceSizeX=d,this.spriteSourceSizeY=e,this.spriteSourceSizeW=f,this.spriteSourceSizeH=g)}},d.FrameData=function(){this._frames=[],this._frameNames=[]},d.FrameData.prototype={addFrame:function(a){return a.index=this._frames.length,this._frames.push(a),""!==a.name&&(this._frameNames[a.name]=a.index),a},getFrame:function(a){return this._frames.length>a?this._frames[a]:null},getFrameByName:function(a){return"number"==typeof this._frameNames[a]?this._frames[this._frameNames[a]]:null},checkFrameName:function(a){return null==this._frameNames[a]?!1:!0},getFrameRange:function(a,b,c){"undefined"==typeof c&&(c=[]);for(var d=a;b>=d;d++)c.push(this._frames[d]);return c},getFrames:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0;dd;d++)b?c.push(this.getFrame(a[d])):c.push(this.getFrameByName(a[d]));return c},getFrameIndexes:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0,e=this._frames.length;e>d;d++)c.push(this._frames[d].index);else for(var d=0,e=a.length;e>d;d++)b?c.push(a[d]):this.getFrameByName(a[d])&&c.push(this.getFrameByName(a[d]).index);return c}},Object.defineProperty(d.FrameData.prototype,"total",{get:function(){return this._frames.length}}),d.AnimationParser={spriteSheet:function(a,b,e,f,g){var h=a.cache.getImage(b);if(null==h)return null;var i=h.width,j=h.height;0>=e&&(e=Math.floor(-i/Math.min(-1,e))),0>=f&&(f=Math.floor(-j/Math.min(-1,f)));var k=Math.round(i/e),l=Math.round(j/f),m=k*l;if(-1!==g&&(m=g),0===i||0===j||e>i||f>j||0===m)return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"),null;for(var n=new d.FrameData,o=0,p=0,q=0;m>q;q++){var r=a.rnd.uuid();n.addFrame(new d.Frame(q,o,p,e,f,"",r)),c.TextureCache[r]=new c.Texture(c.BaseTextureCache[b],{x:o,y:p,width:e,height:f}),o+=e,o===i&&(o=0,p+=f)}return n},JSONData:function(a,b,e){if(!b.frames)return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"),console.log(b),void 0;for(var f,g=new d.FrameData,h=b.frames,i=0;i tag"),void 0;for(var f,g,h,i,j,k,l,m,n,o,p,q,r=new d.FrameData,s=b.getElementsByTagName("SubTexture"),t=0;t0)for(var c=0;c0)for(var c=0;c0?(this._fileIndex=0,this._progressChunk=100/this._fileList.length,this.loadFile()):(this.progress=100,this.hasLoaded=!0,this.onLoadComplete.dispatch()))},loadFile:function(){if(!this._fileList[this._fileIndex])return console.warn("Phaser.Loader loadFile invalid index "+this._fileIndex),void 0;var a=this._fileList[this._fileIndex],b=this;switch(a.type){case"image":case"spritesheet":case"textureatlas":case"bitmapfont":case"tileset":a.data=new Image,a.data.name=a.key,a.data.onload=function(){return b.fileComplete(b._fileIndex)},a.data.onerror=function(){return b.fileError(b._fileIndex)},a.data.crossOrigin=this.crossOrigin,a.data.src=this.baseURL+a.url;break;case"audio":a.url=this.getAudioURL(a.url),null!==a.url?this.game.sound.usingWebAudio?(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return b.fileComplete(b._fileIndex)},this._xhr.onerror=function(){return b.fileError(b._fileIndex)},this._xhr.send()):this.game.sound.usingAudioTag&&(this.game.sound.touchLocked?(a.data=new Audio,a.data.name=a.key,a.data.preload="auto",a.data.src=this.baseURL+a.url,this.fileComplete(this._fileIndex)):(a.data=new Audio,a.data.name=a.key,a.data.onerror=function(){return b.fileError(b._fileIndex)},a.data.preload="auto",a.data.src=this.baseURL+a.url,a.data.addEventListener("canplaythrough",d.GAMES[this.game.id].load.fileComplete(this._fileIndex),!1),a.data.load())):this.fileError(this._fileIndex);break;case"tilemap":if(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",a.format===d.Tilemap.TILED_JSON)this._xhr.onload=function(){return b.jsonLoadComplete(b._fileIndex)};else{if(a.format!==d.Tilemap.CSV)throw new Error("Phaser.Loader. Invalid Tilemap format: "+a.format);this._xhr.onload=function(){return b.csvLoadComplete(b._fileIndex)}}this._xhr.onerror=function(){return b.dataLoadError(b._fileIndex)},this._xhr.send();break;case"text":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return b.fileComplete(b._fileIndex)},this._xhr.onerror=function(){return b.fileError(b._fileIndex)},this._xhr.send();break;case"script":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return b.fileComplete(b._fileIndex)},this._xhr.onerror=function(){return b.fileError(b._fileIndex)},this._xhr.send()}},getAudioURL:function(a){var b;"string"==typeof a&&(a=[a]);for(var c=0;c100&&(this.progress=100),null!==this.preloadSprite&&(0===this.preloadSprite.direction?this.preloadSprite.crop.width=Math.floor(this.preloadSprite.width/100*this.progress):this.preloadSprite.crop.height=Math.floor(this.preloadSprite.height/100*this.progress),this.preloadSprite.sprite.crop=this.preloadSprite.crop),this.onFileComplete.dispatch(this.progress,this._fileList[a].key,b,this.totalLoadedFiles(),this._fileList.length),this.totalQueuedFiles()>0?(this._fileIndex++,this.loadFile()):(this.hasLoaded=!0,this.isLoading=!1,this.removeAll(),this.onLoadComplete.dispatch())},totalLoadedFiles:function(){for(var a=0,b=0;b tag"),void 0;var e=c.TextureCache[d],f={},g=b.getElementsByTagName("info")[0],h=b.getElementsByTagName("common")[0];f.font=g.attributes.getNamedItem("face").nodeValue,f.size=parseInt(g.attributes.getNamedItem("size").nodeValue,10),f.lineHeight=parseInt(h.attributes.getNamedItem("lineHeight").nodeValue,10),f.chars={};for(var i=b.getElementsByTagName("char"),j=0;j=this.durationMS&&(this.usingWebAudio?this.loop?(this.onLoop.dispatch(this),""===this.currentMarker?(this.currentTime=0,this.startTime=this.game.time.now):this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop():this.loop?(this.onLoop.dispatch(this),this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop()))},play:function(a,b,c,d,e){if(a=a||"",b=b||0,"undefined"==typeof c&&(c=this._volume),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!0),this.isPlaying!==!0||e!==!1||this.override!==!1){if(this.isPlaying&&this.override&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.currentMarker=a,""!==a){if(!this.markers[a])return console.warn("Phaser.Sound.play: audio marker "+a+" doesn't exist"),void 0;this.position=this.markers[a].start,this.volume=this.markers[a].volume,this.loop=this.markers[a].loop,this.duration=this.markers[a].duration,this.durationMS=this.markers[a].durationMS,this._tempMarker=a,this._tempPosition=this.position,this._tempVolume=this.volume,this._tempLoop=this.loop}else this.position=b,this.volume=c,this.loop=d,this.duration=0,this.durationMS=0,this._tempMarker=a,this._tempPosition=b,this._tempVolume=c,this._tempLoop=d;this.usingWebAudio?this.game.cache.isSoundDecoded(this.key)?(null==this._buffer&&(this._buffer=this.game.cache.getSoundData(this.key)),this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this.externalNode?this._sound.connect(this.externalNode.input):this._sound.connect(this.gainNode),this.totalDuration=this._sound.buffer.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this.loop&&""===a&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,this.position,this.duration):this._sound.start(0,this.position,this.duration),this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):(this.pendingPlayback=!0,this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).isDecoding===!1&&this.game.sound.decode(this.key,this)):this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).locked?(this.game.cache.reloadSound(this.key),this.pendingPlayback=!0):this._sound&&4==this._sound.readyState?(this._sound.play(),this.totalDuration=this._sound.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this._sound.currentTime=this.position,this._sound.muted=this._muted,this._sound.volume=this._muted?0:this._volume,this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):this.pendingPlayback=!0}},restart:function(a,b,c,d){a=a||"",b=b||0,c=c||1,"undefined"==typeof d&&(d=!1),this.play(a,b,c,d,!0)},pause:function(){this.isPlaying&&this._sound&&(this.stop(),this.isPlaying=!1,this.paused=!0,this.pausedPosition=this.currentTime,this.pausedTime=this.game.time.now,this.onPause.dispatch(this))},resume:function(){if(this.paused&&this._sound){if(this.usingWebAudio){var a=this.position+this.pausedPosition/1e3;this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.gainNode),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,a,this.duration):this._sound.start(0,a,this.duration)}else this._sound.play();this.isPlaying=!0,this.paused=!1,this.startTime+=this.game.time.now-this.pausedTime,this.onResume.dispatch(this)}},stop:function(){this.isPlaying&&this._sound&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.isPlaying=!1;var a=this.currentMarker;this.currentMarker="",this.onStop.dispatch(this,a)}},Object.defineProperty(d.Sound.prototype,"isDecoding",{get:function(){return this.game.cache.getSound(this.key).isDecoding}}),Object.defineProperty(d.Sound.prototype,"isDecoded",{get:function(){return this.game.cache.isSoundDecoded(this.key)}}),Object.defineProperty(d.Sound.prototype,"mute",{get:function(){return this._muted},set:function(a){a=a||null,a?(this._muted=!0,this.usingWebAudio?(this._muteVolume=this.gainNode.gain.value,this.gainNode.gain.value=0):this.usingAudioTag&&this._sound&&(this._muteVolume=this._sound.volume,this._sound.volume=0)):(this._muted=!1,this.usingWebAudio?this.gainNode.gain.value=this._muteVolume:this.usingAudioTag&&this._sound&&(this._sound.volume=this._muteVolume)),this.onMute.dispatch(this)}}),Object.defineProperty(d.Sound.prototype,"volume",{get:function(){return this._volume},set:function(a){this.usingWebAudio?(this._volume=a,this.gainNode.gain.value=a):this.usingAudioTag&&this._sound&&a>=0&&1>=a&&(this._volume=a,this._sound.volume=a)}}),d.SoundManager=function(a){this.game=a,this.onSoundDecode=new d.Signal,this._muted=!1,this._unlockSource=null,this._volume=1,this._sounds=[],this.context=null,this.usingWebAudio=!0,this.usingAudioTag=!1,this.noAudio=!1,this.connectToMaster=!0,this.touchLocked=!1,this.channels=32},d.SoundManager.prototype={boot:function(){if(this.game.device.iOS&&this.game.device.webAudio===!1&&(this.channels=1),this.game.device.iOS||window.PhaserGlobal&&window.PhaserGlobal.fakeiOSTouchLock?(this.game.input.touch.callbackContext=this,this.game.input.touch.touchStartCallback=this.unlock,this.game.input.mouse.callbackContext=this,this.game.input.mouse.mouseDownCallback=this.unlock,this.touchLocked=!0):this.touchLocked=!1,window.PhaserGlobal){if(window.PhaserGlobal.disableAudio===!0)return this.usingWebAudio=!1,this.noAudio=!0,void 0;if(window.PhaserGlobal.disableWebAudio===!0)return this.usingWebAudio=!1,this.usingAudioTag=!0,this.noAudio=!1,void 0}window.AudioContext?this.context=new window.AudioContext:window.webkitAudioContext?this.context=new window.webkitAudioContext:window.Audio?(this.usingWebAudio=!1,this.usingAudioTag=!0):(this.usingWebAudio=!1,this.noAudio=!0),null!==this.context&&(this.masterGain="undefined"==typeof this.context.createGain?this.context.createGainNode():this.context.createGain(),this.masterGain.gain.value=1,this.masterGain.connect(this.context.destination))},unlock:function(){if(this.touchLocked!==!1)if(this.game.device.webAudio===!1||window.PhaserGlobal&&window.PhaserGlobal.disableWebAudio===!0)this.touchLocked=!1,this._unlockSource=null,this.game.input.touch.callbackContext=null,this.game.input.touch.touchStartCallback=null,this.game.input.mouse.callbackContext=null,this.game.input.mouse.mouseDownCallback=null;else{var a=this.context.createBuffer(1,1,22050);this._unlockSource=this.context.createBufferSource(),this._unlockSource.buffer=a,this._unlockSource.connect(this.context.destination),this._unlockSource.noteOn(0)}},stopAll:function(){for(var a=0;a255)return d.Color.getColor(255,255,255);if(a>b)return d.Color.getColor(255,255,255);var e=a+Math.round(Math.random()*(b-a)),f=a+Math.round(Math.random()*(b-a)),g=a+Math.round(Math.random()*(b-a));return d.Color.getColor32(c,e,f,g)},getRGB:function(a){return{alpha:a>>>24,red:255&a>>16,green:255&a>>8,blue:255&a}},getWebRGB:function(a){var b=(a>>>24)/255,c=255&a>>16,d=255&a>>8,e=255&a;return"rgba("+c.toString()+","+d.toString()+","+e.toString()+","+b.toString()+")"},getAlpha:function(a){return a>>>24},getAlphaFloat:function(a){return(a>>>24)/255},getRed:function(a){return 255&a>>16},getGreen:function(a){return 255&a>>8},getBlue:function(a){return 255&a}},d.Physics={},d.Physics.Arcade=function(a){this.game=a,this.gravity=new d.Point,this.bounds=new d.Rectangle(0,0,a.world.width,a.world.height),this.maxObjects=10,this.maxLevels=4,this.OVERLAP_BIAS=4,this.quadTree=new d.QuadTree(this,this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this.quadTreeID=0,this._bounds1=new d.Rectangle,this._bounds2=new d.Rectangle,this._overlap=0,this._maxOverlap=0,this._velocity1=0,this._velocity2=0,this._newVelocity1=0,this._newVelocity2=0,this._average=0,this._mapData=[],this._mapTiles=0,this._result=!1,this._total=0,this._angle=0,this._dx=0,this._dy=0},d.Physics.Arcade.prototype={updateMotion:function(a){this._velocityDelta=60*.5*(this.computeVelocity(0,a,a.angularVelocity,a.angularAcceleration,a.angularDrag,a.maxAngular)-a.angularVelocity)*this.game.time.physicsElapsed,a.angularVelocity+=this._velocityDelta,a.rotation+=a.angularVelocity*this.game.time.physicsElapsed,a.angularVelocity+=this._velocityDelta,this._velocityDelta=60*.5*(this.computeVelocity(1,a,a.velocity.x,a.acceleration.x,a.drag.x,a.maxVelocity.x)-a.velocity.x)*this.game.time.physicsElapsed,a.velocity.x+=this._velocityDelta,a.x+=a.velocity.x*this.game.time.physicsElapsed,a.velocity.x+=this._velocityDelta,this._velocityDelta=60*.5*(this.computeVelocity(2,a,a.velocity.y,a.acceleration.y,a.drag.y,a.maxVelocity.y)-a.velocity.y)*this.game.time.physicsElapsed,a.velocity.y+=this._velocityDelta,a.y+=a.velocity.y*this.game.time.physicsElapsed,a.velocity.y+=this._velocityDelta},computeVelocity:function(a,b,c,d,e,f){return f=f||1e4,1==a&&b.allowGravity?c+=this.gravity.x+b.gravity.x:2==a&&b.allowGravity&&(c+=this.gravity.y+b.gravity.y),0!==d?c+=d*this.game.time.physicsElapsed:0!==e&&(this._drag=e*this.game.time.physicsElapsed,c-this._drag>0?c-=this._drag:c+this._drag<0?c+=this._drag:c=0),c>f?c=f:-f>c&&(c=-f),c},preUpdate:function(){this.quadTree.clear(),this.quadTreeID=0,this.quadTree=new d.QuadTree(this,this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels)},postUpdate:function(){this.quadTree.clear()},overlap:function(a,b,c,e,f){return c=c||null,e=e||null,f=f||c,this._result=!1,this._total=0,a&&b&&a.exists&&b.exists&&(a.type==d.SPRITE?b.type==d.SPRITE?this.overlapSpriteVsSprite(a,b,c,e,f):(b.type==d.GROUP||b.type==d.EMITTER)&&this.overlapSpriteVsGroup(a,b,c,e,f):a.type==d.GROUP?b.type==d.SPRITE?this.overlapSpriteVsGroup(b,a,c,e,f):(b.type==d.GROUP||b.type==d.EMITTER)&&this.overlapGroupVsGroup(a,b,c,e,f):a.type==d.EMITTER&&(b.type==d.SPRITE?this.overlapSpriteVsGroup(b,a,c,e,f):(b.type==d.GROUP||b.type==d.EMITTER)&&this.overlapGroupVsGroup(a,b,c,e,f))),this._total>0},overlapSpriteVsSprite:function(a,b,c,e,f){this._result=d.Rectangle.intersects(a.body,b.body),this._result&&(e?e.call(f,a,b)&&(this._total++,c&&c.call(f,a,b)):(this._total++,c&&c.call(f,a,b)))},overlapSpriteVsGroup:function(a,b,c,e,f){if(0!==b.length){this._potentials=this.quadTree.retrieve(a);for(var g=0,h=this._potentials.length;h>g;g++)this._potentials[g].sprite.group==b&&(this._result=d.Rectangle.intersects(a.body,this._potentials[g]),this._result&&e&&(this._result=e.call(f,a,this._potentials[g].sprite)),this._result&&(this._total++,c&&c.call(f,a,this._potentials[g].sprite)))}},overlapGroupVsGroup:function(a,b,c,d,e){if(0!==a.length&&0!==b.length&&a._container.first._iNext){var f=a._container.first._iNext;do f.exists&&this.overlapSpriteVsGroup(f,b,c,d,e),f=f._iNext;while(f!=a._container.last._iNext)}},collide:function(a,b,c,e,f){return c=c||null,e=e||null,f=f||c,this._result=!1,this._total=0,a&&b&&a.exists&&b.exists&&(a.type==d.SPRITE?b.type==d.SPRITE?this.collideSpriteVsSprite(a,b,c,e,f):b.type==d.GROUP||b.type==d.EMITTER?this.collideSpriteVsGroup(a,b,c,e,f):b.type==d.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,b,c,e,f):a.type==d.GROUP?b.type==d.SPRITE?this.collideSpriteVsGroup(b,a,c,e,f):b.type==d.GROUP||b.type==d.EMITTER?this.collideGroupVsGroup(a,b,c,e,f):b.type==d.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,b,c,e,f):a.type==d.TILEMAPLAYER?b.type==d.SPRITE?this.collideSpriteVsTilemapLayer(b,a,c,e,f):(b.type==d.GROUP||b.type==d.EMITTER)&&this.collideGroupVsTilemapLayer(b,a,c,e,f):a.type==d.EMITTER&&(b.type==d.SPRITE?this.collideSpriteVsGroup(b,a,c,e,f):b.type==d.GROUP||b.type==d.EMITTER?this.collideGroupVsGroup(a,b,c,e,f):b.type==d.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,b,c,e,f))),this._total>0},collideSpriteVsTilemapLayer:function(a,b,c,d,e){if(this._mapData=b.getTiles(a.body.x,a.body.y,a.body.width,a.body.height,!0),0!==this._mapData.length)for(var f=0;ff;f++)this._potentials[f].sprite.group==b&&(this.separate(a.body,this._potentials[f]),this._result&&d&&(this._result=d.call(e,a,this._potentials[f].sprite)),this._result&&(this._total++,c&&c.call(e,a,this._potentials[f].sprite)))}},collideGroupVsGroup:function(a,b,c,d,e){if(0!==a.length&&0!==b.length&&a._container.first._iNext){var f=a._container.first._iNext;do f.exists&&this.collideSpriteVsGroup(f,b,c,d,e),f=f._iNext;while(f!=a._container.last._iNext)}},separate:function(a,b){this._result=this.separateX(a,b)||this.separateY(a,b)},separateX:function(a,b){return a.immovable&&b.immovable?!1:(this._overlap=0,d.Rectangle.intersects(a,b)&&(this._maxOverlap=a.deltaAbsX()+b.deltaAbsX()+this.OVERLAP_BIAS,0===a.deltaX()&&0===b.deltaX()?(a.embedded=!0,b.embedded=!0):a.deltaX()>b.deltaX()?(this._overlap=a.x+a.width-b.x,this._overlap>this._maxOverlap||a.allowCollision.right===!1||b.allowCollision.left===!1?this._overlap=0:(a.touching.right=!0,b.touching.left=!0)):a.deltaX()this._maxOverlap||a.allowCollision.left===!1||b.allowCollision.right===!1?this._overlap=0:(a.touching.left=!0,b.touching.right=!0)),0!==this._overlap)?(a.overlapX=this._overlap,b.overlapX=this._overlap,a.customSeparateX||b.customSeparateX?!0:(this._velocity1=a.velocity.x,this._velocity2=b.velocity.x,a.immovable||b.immovable?a.immovable?b.immovable||(b.x+=this._overlap,b.velocity.x=this._velocity1-this._velocity2*b.bounce.x):(a.x=a.x-this._overlap,a.velocity.x=this._velocity2-this._velocity1*a.bounce.x):(this._overlap*=.5,a.x=a.x-this._overlap,b.x+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.x=this._average+this._newVelocity1*a.bounce.x,b.velocity.x=this._average+this._newVelocity2*b.bounce.x),a.updateHulls(),b.updateHulls(),!0)):!1)},separateY:function(a,b){return a.immovable&&b.immovable?!1:(this._overlap=0,d.Rectangle.intersects(a,b)&&(this._maxOverlap=a.deltaAbsY()+b.deltaAbsY()+this.OVERLAP_BIAS,0===a.deltaY()&&0===b.deltaY()?(a.embedded=!0,b.embedded=!0):a.deltaY()>b.deltaY()?(this._overlap=a.y+a.height-b.y,this._overlap>this._maxOverlap||a.allowCollision.down===!1||b.allowCollision.up===!1?this._overlap=0:(a.touching.down=!0,b.touching.up=!0)):a.deltaY()this._maxOverlap||a.allowCollision.up===!1||b.allowCollision.down===!1?this._overlap=0:(a.touching.up=!0,b.touching.down=!0)),0!==this._overlap)?(a.overlapY=this._overlap,b.overlapY=this._overlap,a.customSeparateY||b.customSeparateY?!0:(this._velocity1=a.velocity.y,this._velocity2=b.velocity.y,a.immovable||b.immovable?a.immovable?b.immovable||(b.y+=this._overlap,b.velocity.y=this._velocity1-this._velocity2*b.bounce.y,a.sprite.active&&a.moves&&a.deltaY()b.deltaY()&&(a.x+=b.x-b.lastX)):(this._overlap*=.5,a.y=a.y-this._overlap,b.y+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.y=this._average+this._newVelocity1*a.bounce.y,b.velocity.y=this._average+this._newVelocity2*b.bounce.y),a.updateHulls(),b.updateHulls(),!0)):!1)},separateTile:function(a,b){return this._result=this.separateTileX(a,b,!0)||this.separateTileY(a,b,!0),this._result},separateTileX:function(a,b,c){return a.immovable||0===a.deltaX()||d.Rectangle.intersects(a.hullX,b)===!1?!1:(this._overlap=0,a.deltaX()<0?(this._overlap=b.right-a.hullX.x,a.allowCollision.left===!1||b.tile.collideRight===!1?this._overlap=0:a.touching.left=!0):(this._overlap=a.hullX.right-b.x,a.allowCollision.right===!1||b.tile.collideLeft===!1?this._overlap=0:a.touching.right=!0),0!==this._overlap?(c&&(a.x=a.deltaX()<0?a.x+this._overlap:a.x-this._overlap,a.velocity.x=0===a.bounce.x?0:-a.velocity.x*a.bounce.x,a.updateHulls()),!0):!1)},separateTileY:function(a,b,c){return a.immovable||0===a.deltaY()||d.Rectangle.intersects(a.hullY,b)===!1?!1:(this._overlap=0,a.deltaY()<0?(this._overlap=b.bottom-a.hullY.y,a.allowCollision.up===!1||b.tile.collideDown===!1?this._overlap=0:a.touching.up=!0):(this._overlap=a.hullY.bottom-b.y,a.allowCollision.down===!1||b.tile.collideUp===!1?this._overlap=0:a.touching.down=!0),0!==this._overlap?(c&&(a.y=a.deltaY()<0?a.y+this._overlap:a.y-this._overlap,a.velocity.y=0===a.bounce.y?0:-a.velocity.y*a.bounce.y,a.updateHulls()),!0):!1)},moveToObject:function(a,b,c,d){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=0),this._angle=Math.atan2(b.y-a.y,b.x-a.x),d>0&&(c=this.distanceBetween(a,b)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*c,a.body.velocity.y=Math.sin(this._angle)*c,this._angle},moveToPointer:function(a,b,c,d){return"undefined"==typeof b&&(b=60),c=c||this.game.input.activePointer,"undefined"==typeof d&&(d=0),this._angle=this.angleToPointer(a,c),d>0&&(b=this.distanceToPointer(a,c)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*b,a.body.velocity.y=Math.sin(this._angle)*b,this._angle},moveToXY:function(a,b,c,d,e){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=0),this._angle=Math.atan2(c-a.y,b-a.x),e>0&&(d=this.distanceToXY(a,b,c)/(e/1e3)),a.body.velocity.x=Math.cos(this._angle)*d,a.body.velocity.y=Math.sin(this._angle)*d,this._angle},velocityFromAngle:function(a,b,c){return"undefined"==typeof b&&(b=60),c=c||new d.Point,c.setTo(Math.cos(this.game.math.degToRad(a))*b,Math.sin(this.game.math.degToRad(a))*b)},velocityFromRotation:function(a,b,c){return"undefined"==typeof b&&(b=60),c=c||new d.Point,c.setTo(Math.cos(a)*b,Math.sin(a)*b)},accelerationFromRotation:function(a,b,c){return"undefined"==typeof b&&(b=60),c=c||new d.Point,c.setTo(Math.cos(a)*b,Math.sin(a)*b)},accelerateToObject:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleBetween(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToPointer:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof b&&(b=this.game.input.activePointer),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleToPointer(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToXY:function(a,b,c,d,e,f){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=1e3),"undefined"==typeof f&&(f=1e3),this._angle=this.angleToXY(a,b,c),a.body.acceleration.setTo(Math.cos(this._angle)*d,Math.sin(this._angle)*d),a.body.maxVelocity.setTo(e,f),this._angle},distanceBetween:function(a,b){return this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToXY:function(a,b,c){return this._dx=a.x-b,this._dy=a.y-c,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},angleBetween:function(a,b){return this._dx=b.x-a.x,this._dy=b.y-a.y,Math.atan2(this._dy,this._dx)},angleToXY:function(a,b,c){return this._dx=b-a.x,this._dy=c-a.y,Math.atan2(this._dy,this._dx)},angleToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=b.worldX-a.x,this._dy=b.worldY-a.y,Math.atan2(this._dy,this._dx)}},d.Physics.Arcade.Body=function(a){this.sprite=a,this.game=a.game,this.offset=new d.Point,this.x=a.x,this.y=a.y,this.preX=a.x,this.preY=a.y,this.preRotation=a.angle,this.screenX=a.x,this.screenY=a.y,this.sourceWidth=a.currentFrame.sourceSizeW,this.sourceHeight=a.currentFrame.sourceSizeH,this.width=a.currentFrame.sourceSizeW,this.height=a.currentFrame.sourceSizeH,this.halfWidth=Math.floor(a.currentFrame.sourceSizeW/2),this.halfHeight=Math.floor(a.currentFrame.sourceSizeH/2),this.center=new d.Point(this.x+this.halfWidth,this.y+this.halfHeight),this._sx=a.scale.x,this._sy=a.scale.y,this.velocity=new d.Point,this.acceleration=new d.Point,this.drag=new d.Point,this.gravity=new d.Point,this.bounce=new d.Point,this.maxVelocity=new d.Point(1e4,1e4),this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.skipQuadTree=!1,this.quadTreeIDs=[],this.quadTreeIndex=-1,this.allowCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.facing=d.NONE,this.immovable=!1,this.moves=!0,this.rotation=0,this.allowRotation=!0,this.allowGravity=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.hullX=new d.Rectangle,this.hullY=new d.Rectangle,this.embedded=!1,this.collideWorldBounds=!1},d.Physics.Arcade.Body.prototype={updateBounds:function(a,b,c,d){(c!=this._sx||d!=this._sy)&&(this.width=this.sourceWidth*c,this.height=this.sourceHeight*d,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this._sx=c,this._sy=d,this.center.setTo(this.x+this.halfWidth,this.y+this.halfHeight))},preUpdate:function(){this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.embedded=!1,this.screenX=this.sprite.worldTransform[2]-this.sprite.anchor.x*this.width+this.offset.x,this.screenY=this.sprite.worldTransform[5]-this.sprite.anchor.y*this.height+this.offset.y,this.preX=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.preY=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.preRotation=this.sprite.angle,this.x=this.preX,this.y=this.preY,this.rotation=this.preRotation,this.moves&&(this.game.physics.updateMotion(this),this.collideWorldBounds&&this.checkWorldBounds(),this.updateHulls()),this.skipQuadTree===!1&&this.allowCollision.none===!1&&this.sprite.visible&&this.sprite.alive&&(this.quadTreeIDs=[],this.quadTreeIndex=-1,this.game.physics.quadTree.insert(this))},postUpdate:function(){this.deltaX()<0?this.facing=d.LEFT:this.deltaX()>0&&(this.facing=d.RIGHT),this.deltaY()<0?this.facing=d.UP:this.deltaY()>0&&(this.facing=d.DOWN),(0!==this.deltaX()||0!==this.deltaY())&&(this.sprite.x+=this.deltaX(),this.sprite.y+=this.deltaY(),this.center.setTo(this.x+this.halfWidth,this.y+this.halfHeight)),this.allowRotation&&(this.sprite.angle+=this.deltaZ())},updateHulls:function(){this.hullX.setTo(this.x,this.preY,this.width,this.height),this.hullY.setTo(this.preX,this.y,this.width,this.height)},checkWorldBounds:function(){this.xthis.game.world.bounds.right&&(this.x=this.game.world.bounds.right-this.width,this.velocity.x*=-this.bounce.x),this.ythis.game.world.bounds.bottom&&(this.y=this.game.world.bounds.bottom-this.height,this.velocity.y*=-this.bounce.y)},setSize:function(a,b,c,d){c=c||this.offset.x,d=d||this.offset.y,this.sourceWidth=a,this.sourceHeight=b,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.setTo(c,d),this.center.setTo(this.x+this.halfWidth,this.y+this.halfHeight)},reset:function(){this.velocity.setTo(0,0),this.acceleration.setTo(0,0),this.angularVelocity=0,this.angularAcceleration=0,this.preX=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.preY=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.preRotation=this.sprite.angle,this.x=this.preX,this.y=this.preY,this.rotation=this.preRotation,this.center.setTo(this.x+this.halfWidth,this.y+this.halfHeight)},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.x-this.preX},deltaY:function(){return this.y-this.preY},deltaZ:function(){return this.rotation-this.preRotation}},Object.defineProperty(d.Physics.Arcade.Body.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(d.Physics.Arcade.Body.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),d.Particles=function(a){this.game=a,this.emitters={},this.ID=0},d.Particles.prototype={add:function(a){return this.emitters[a.name]=a,a},remove:function(a){delete this.emitters[a.name]},update:function(){for(var a in this.emitters)this.emitters[a].exists&&this.emitters[a].update()}},d.Particles.Arcade={},d.Particles.Arcade.Emitter=function(a,b,c,e){this.maxParticles=e||50,d.Group.call(this,a),this.name="emitter"+this.game.particles.ID++,this.type=d.EMITTER,this.x=0,this.y=0,this.width=1,this.height=1,this.minParticleSpeed=new d.Point(-100,-100),this.maxParticleSpeed=new d.Point(100,100),this.minParticleScale=1,this.maxParticleScale=1,this.minRotation=-360,this.maxRotation=360,this.gravity=2,this.particleClass=null,this.particleDrag=new d.Point,this.angularDrag=0,this.frequency=100,this.lifespan=2e3,this.bounce=new d.Point,this._quantity=0,this._timer=0,this._counter=0,this._explode=!0,this.on=!1,this.exists=!0,this.emitX=b,this.emitY=c},d.Particles.Arcade.Emitter.prototype=Object.create(d.Group.prototype),d.Particles.Arcade.Emitter.prototype.constructor=d.Particles.Arcade.Emitter,d.Particles.Arcade.Emitter.prototype.update=function(){if(this.on)if(this._explode){this._counter=0;do this.emitParticle(),this._counter++;while(this._counter=this._timer&&(this.emitParticle(),this._counter++,this._quantity>0&&this._counter>=this._quantity&&(this.on=!1),this._timer=this.game.time.now+this.frequency)},d.Particles.Arcade.Emitter.prototype.makeParticles=function(a,b,c,e,f){"undefined"==typeof b&&(b=0),c=c||this.maxParticles,e=e||0,"undefined"==typeof f&&(f=!1);for(var g,h=0,i=a,j=0;c>h;)null==this.particleClass&&("object"==typeof a&&(i=this.game.rnd.pick(a)),"object"==typeof b&&(j=this.game.rnd.pick(b)),g=new d.Sprite(this.game,0,0,i,j)),e>0?(g.body.allowCollision.any=!0,g.body.allowCollision.none=!1):g.body.allowCollision.none=!0,g.body.collideWorldBounds=f,g.exists=!1,g.visible=!1,g.anchor.setTo(.5,.5),this.add(g),h++;return this},d.Particles.Arcade.Emitter.prototype.kill=function(){this.on=!1,this.alive=!1,this.exists=!1},d.Particles.Arcade.Emitter.prototype.revive=function(){this.alive=!0,this.exists=!0},d.Particles.Arcade.Emitter.prototype.start=function(a,b,c,d){"boolean"!=typeof a&&(a=!0),b=b||0,c=c||250,d=d||0,this.revive(),this.visible=!0,this.on=!0,this._explode=a,this.lifespan=b,this.frequency=c,a?this._quantity=d:this._quantity+=d,this._counter=0,this._timer=this.game.time.now+c},d.Particles.Arcade.Emitter.prototype.emitParticle=function(){var a=this.getFirstExists(!1);if(null!=a){if(this.width>1||this.height>1?a.reset(this.game.rnd.integerInRange(this.left,this.right),this.game.rnd.integerInRange(this.top,this.bottom)):a.reset(this.emitX,this.emitY),a.lifespan=this.lifespan,a.body.bounce.setTo(this.bounce.x,this.bounce.y),a.body.velocity.x=this.minParticleSpeed.x!=this.maxParticleSpeed.x?this.game.rnd.integerInRange(this.minParticleSpeed.x,this.maxParticleSpeed.x):this.minParticleSpeed.x,a.body.velocity.y=this.minParticleSpeed.y!=this.maxParticleSpeed.y?this.game.rnd.integerInRange(this.minParticleSpeed.y,this.maxParticleSpeed.y):this.minParticleSpeed.y,a.body.gravity.y=this.gravity,a.body.angularVelocity=this.minRotation!=this.maxRotation?this.game.rnd.integerInRange(this.minRotation,this.maxRotation):this.minRotation,1!==this.minParticleScale||1!==this.maxParticleScale){var b=this.game.rnd.realInRange(this.minParticleScale,this.maxParticleScale);a.scale.setTo(b,b)}a.body.drag.x=this.particleDrag.x,a.body.drag.y=this.particleDrag.y,a.body.angularDrag=this.angularDrag}},d.Particles.Arcade.Emitter.prototype.setSize=function(a,b){this.width=a,this.height=b},d.Particles.Arcade.Emitter.prototype.setXSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.x=a,this.maxParticleSpeed.x=b},d.Particles.Arcade.Emitter.prototype.setYSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.y=a,this.maxParticleSpeed.y=b},d.Particles.Arcade.Emitter.prototype.setRotation=function(a,b){a=a||0,b=b||0,this.minRotation=a,this.maxRotation=b},d.Particles.Arcade.Emitter.prototype.at=function(a){this.emitX=a.center.x,this.emitY=a.center.y},Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"alpha",{get:function(){return this._container.alpha},set:function(a){this._container.alpha=a}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"visible",{get:function(){return this._container.visible},set:function(a){this._container.visible=a}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"x",{get:function(){return this.emitX},set:function(a){this.emitX=a}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"y",{get:function(){return this.emitY},set:function(a){this.emitY=a}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"left",{get:function(){return Math.floor(this.x-this.width/2)}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"right",{get:function(){return Math.floor(this.x+this.width/2)}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"top",{get:function(){return Math.floor(this.y-this.height/2)}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"bottom",{get:function(){return Math.floor(this.y+this.height/2)}}),d.Tile=function(a,b,c,d,e,f){this.tileset=a,this.index=b,this.width=e,this.height=f,this.x=c,this.y=d,this.mass=1,this.collideNone=!0,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.separateX=!0,this.separateY=!0,this.collisionCallback=null,this.collisionCallbackContext=this},d.Tile.prototype={setCollisionCallback:function(a,b){this.collisionCallbackContext=b,this.collisionCallback=a},destroy:function(){this.tileset=null},setCollision:function(a,b,c,d){this.collideLeft=a,this.collideRight=b,this.collideUp=c,this.collideDown=d,this.collideNone=a||b||c||d?!1:!0},resetCollision:function(){this.collideNone=!0,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1}},Object.defineProperty(d.Tile.prototype,"bottom",{get:function(){return this.y+this.height}}),Object.defineProperty(d.Tile.prototype,"right",{get:function(){return this.x+this.width}}),d.Tilemap=function(a,b){this.game=a,this.layers=null,"string"==typeof b?(this.key=b,this.layers=a.cache.getTilemapData(b).layers,this.calculateIndexes()):this.layers=[],this.currentLayer=0,this.debugMap=[],this.dirty=!1,this._results=[],this._tempA=0,this._tempB=0},d.Tilemap.CSV=0,d.Tilemap.TILED_JSON=1,d.Tilemap.prototype={create:function(a,b,c){for(var e=[],f=0;c>f;f++){e[f]=[];for(var g=0;b>g;g++)e[f][g]=0}this.layers.push({name:a,width:b,height:c,alpha:1,visible:!0,tileMargin:0,tileSpacing:0,format:d.Tilemap.CSV,data:e,indexes:[]}),this.currentLayer=this.layers.length-1,this.dirty=!0},calculateIndexes:function(){for(var a=0;a=0&&b=0&&c=0&&a=0&&b=0&&a=0&&b=0&&b=0&&ca&&(a=0),0>b&&(b=0),c>this.layers[e].width&&(c=this.layers[e].width),d>this.layers[e].height&&(d=this.layers[e].height),this._results.length=0,this._results.push({x:a,y:b,width:c,height:d,layer:e});for(var f=b;b+d>f;f++)for(var g=a;a+c>g;g++)this._results.push({x:g,y:f,index:this.layers[e].data[f][g]});return this._results},paste:function(a,b,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),"undefined"==typeof d&&(d=this.currentLayer),c&&!(c.length<2)){for(var e=c[1].x-a,f=c[1].y-b,g=1;g1?this.debugMap[this.layers[this.currentLayer].data[c][d]]?b.push("background: "+this.debugMap[this.layers[this.currentLayer].data[c][d]]):b.push("background: #ffffff"):b.push("background: rgb(0, 0, 0)");a+="\n"}b[0]=a,console.log.apply(console,b)},destroy:function(){this.removeAllLayers(),this.game=null}},d.TilemapLayer=function(a,b,e,f,g,h,i,j){this.game=a,this.canvas=d.Canvas.create(f,g),this.context=this.canvas.getContext("2d"),this.baseTexture=new c.BaseTexture(this.canvas),this.texture=new c.Texture(this.baseTexture),this.textureFrame=new d.Frame(0,0,0,f,g,"tilemaplayer",a.rnd.uuid()),d.Sprite.call(this,this.game,b,e,this.texture,this.textureFrame),this.type=d.TILEMAPLAYER,this.fixedToCamera=!0,this.tileset=null,this.tileWidth=0,this.tileHeight=0,this.tileMargin=0,this.tileSpacing=0,this.widthInPixels=0,this.heightInPixels=0,this.renderWidth=f,this.renderHeight=g,this._ga=1,this._dx=0,this._dy=0,this._dw=0,this._dh=0,this._tx=0,this._ty=0,this._tw=0,this._th=0,this._tl=0,this._maxX=0,this._maxY=0,this._startX=0,this._startY=0,this._results=[],this._x=0,this._y=0,this._prevX=0,this._prevY=0,this.scrollFactorX=1,this.scrollFactorY=1,this.tilemap=null,this.layer=null,this.index=0,this.dirty=!0,(h instanceof d.Tileset||"string"==typeof h)&&this.updateTileset(h),i instanceof d.Tilemap&&this.updateMapData(i,j)},d.TilemapLayer.prototype=Object.create(d.Sprite.prototype),d.TilemapLayer.prototype=d.Utils.extend(!0,d.TilemapLayer.prototype,d.Sprite.prototype,c.Sprite.prototype),d.TilemapLayer.prototype.constructor=d.TilemapLayer,d.TilemapLayer.prototype.update=function(){this.scrollX=this.game.camera.x*this.scrollFactorX,this.scrollY=this.game.camera.y*this.scrollFactorY,this.render()},d.TilemapLayer.prototype.resizeWorld=function(){this.game.world.setBounds(0,0,this.widthInPixels,this.heightInPixels)},d.TilemapLayer.prototype.updateTileset=function(a){if(a instanceof d.Tileset)this.tileset=a;else{if("string"!=typeof a)return;this.tileset=this.game.cache.getTileset("tiles")}this.tileWidth=this.tileset.tileWidth,this.tileHeight=this.tileset.tileHeight,this.tileMargin=this.tileset.tileMargin,this.tileSpacing=this.tileset.tileSpacing,this.updateMax()},d.TilemapLayer.prototype.updateMapData=function(a,b){"undefined"==typeof b&&(b=0),a instanceof d.Tilemap&&(this.tilemap=a,this.layer=this.tilemap.layers[b],this.index=b,this.updateMax(),this.tilemap.dirty=!0)},d.TilemapLayer.prototype._fixX=function(a){if(1===this.scrollFactorX)return a;var b=a-this._x/this.scrollFactorX;return this._x+b},d.TilemapLayer.prototype._unfixX=function(a){if(1===this.scrollFactorX)return a;var b=a-this._x;return this._x/this.scrollFactorX+b},d.TilemapLayer.prototype._fixY=function(a){if(1===this.scrollFactorY)return a;var b=a-this._y/this.scrollFactorY;return this._y+b},d.TilemapLayer.prototype._unfixY=function(a){if(1===this.scrollFactorY)return a;var b=a-this._y;return this._y/this.scrollFactorY+b},d.TilemapLayer.prototype.getTileX=function(a){var b=this.tileWidth*this.scale.x;return this.game.math.snapToFloor(this._fixX(a),b)/b},d.TilemapLayer.prototype.getTileY=function(a){var b=this.tileHeight*this.scale.y;return this.game.math.snapToFloor(this._fixY(a),b)/b},d.TilemapLayer.prototype.getTileXY=function(a,b,c){return c.x=this.getTileX(a),c.y=this.getTileY(b),c},d.TilemapLayer.prototype.getTiles=function(a,b,c,d,e){if(null!==this.tilemap){"undefined"==typeof e&&(e=!1),0>a&&(a=0),0>b&&(b=0),a=this._fixX(a),b=this._fixY(b),c>this.widthInPixels&&(c=this.widthInPixels),d>this.heightInPixels&&(d=this.heightInPixels);var f=this.tileWidth*this.scale.x,g=this.tileHeight*this.scale.y;this._tx=this.game.math.snapToFloor(a,f)/f,this._ty=this.game.math.snapToFloor(b,g)/g,this._tw=(this.game.math.snapToCeil(c,f)+f)/f,this._th=(this.game.math.snapToCeil(d,g)+g)/g,this._results=[];for(var h=0,i=null,j=0,k=0,l=this._ty;lthis.layer.width&&(this._maxX=this.layer.width),this._maxY>this.layer.height&&(this._maxY=this.layer.height),this.widthInPixels=this.layer.width*this.tileWidth,this.heightInPixels=this.layer.height*this.tileHeight),this.dirty=!0},d.TilemapLayer.prototype.render=function(){if(this.tilemap&&this.tilemap.dirty&&(this.dirty=!0),this.dirty&&this.tileset&&this.tilemap&&this.visible){this._prevX=this._dx,this._prevY=this._dy,this._dx=-(this._x-this._startX*this.tileWidth),this._dy=-(this._y-this._startY*this.tileHeight),this._tx=this._dx,this._ty=this._dy,this.context.clearRect(0,0,this.canvas.width,this.canvas.height);for(var a=this._startY;a0?this.deltaX():-this.deltaX()},d.TilemapLayer.prototype.deltaAbsY=function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},d.TilemapLayer.prototype.deltaX=function(){return this._dx-this._prevX},d.TilemapLayer.prototype.deltaY=function(){return this._dy-this._prevY},Object.defineProperty(d.TilemapLayer.prototype,"scrollX",{get:function(){return this._x},set:function(a){a!==this._x&&a>=0&&this.layer&&(this._x=a,this._x>this.widthInPixels-this.renderWidth&&(this._x=this.widthInPixels-this.renderWidth),this._startX=this.game.math.floor(this._x/this.tileWidth),this._startX<0&&(this._startX=0),this._startX+this._maxX>this.layer.width&&(this._startX=this.layer.width-this._maxX),this.dirty=!0)}}),Object.defineProperty(d.TilemapLayer.prototype,"scrollY",{get:function(){return this._y},set:function(a){a!==this._y&&a>=0&&this.layer&&(this._y=a,this._y>this.heightInPixels-this.renderHeight&&(this._y=this.heightInPixels-this.renderHeight),this._startY=this.game.math.floor(this._y/this.tileHeight),this._startY<0&&(this._startY=0),this._startY+this._maxY>this.layer.height&&(this._startY=this.layer.height-this._maxY),this.dirty=!0)}}),d.TilemapParser={tileset:function(a,b,c,e,f,g,h){var i=a.cache.getTilesetImage(b);if(null==i)return null;var j=i.width,k=i.height;0>=c&&(c=Math.floor(-j/Math.min(-1,c))),0>=e&&(e=Math.floor(-k/Math.min(-1,e)));var l=Math.round(j/c),m=Math.round(k/e),n=l*m;if(-1!==f&&(n=f),0===j||0===k||c>j||e>k||0===n)return console.warn("Phaser.TilemapParser.tileSet: width/height zero or width/height < given tileWidth/tileHeight"),null;for(var o=g,p=g,q=new d.Tileset(i,b,c,e,g,h),r=0;n>r;r++)q.addTile(new d.Tile(q,r,o,p,c,e)),o+=c+h,o===j&&(o=g,p+=e+h);return q},parse:function(a,b,c){return c===d.Tilemap.CSV?this.parseCSV(b):c===d.Tilemap.TILED_JSON?this.parseTiledJSON(b):void 0},parseCSV:function(a){a=a.trim();for(var b=[],c=a.split("\n"),d=c.length,e=0,f=0;fa)for(var g=a;b>=g;g++)this.tiles[g].setCollision(c,d,e,f)},setCollision:function(a,b,c,d,e){this.tiles[a]&&this.tiles[a].setCollision(b,c,d,e)}},Object.defineProperty(d.Tileset.prototype,"total",{get:function(){return this.tiles.length}}),c.CanvasRenderer.prototype.render=function(a){c.texturesToUpdate.length=0,c.texturesToDestroy.length=0,c.visibleCount++,a.updateTransform(),this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.width,this.height),this.renderDisplayObject(a),c.Texture.frameUpdates.length>0&&(c.Texture.frameUpdates.length=0)},c.CanvasRenderer.prototype.renderDisplayObject=function(a){var b=a.last._iNext;a=a.first;do if(a.visible)if(a.renderable&&0!==a.alpha){if(a instanceof c.Sprite)a.texture.frame&&(this.context.globalAlpha=a.worldAlpha,a.texture.trimmed?this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2]+a.texture.trim.x,a.worldTransform[5]+a.texture.trim.y):this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2],a.worldTransform[5]),this.context.drawImage(a.texture.baseTexture.source,a.texture.frame.x,a.texture.frame.y,a.texture.frame.width,a.texture.frame.height,a.anchor.x*-a.texture.frame.width,a.anchor.y*-a.texture.frame.height,a.texture.frame.width,a.texture.frame.height));else if(a instanceof c.Strip)this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2],a.worldTransform[5]),this.renderStrip(a);else if(a instanceof c.TilingSprite)this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2],a.worldTransform[5]),this.renderTilingSprite(a);else if(a instanceof c.CustomRenderable)a.renderCanvas(this);else if(a instanceof c.Graphics)this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2],a.worldTransform[5]),c.CanvasGraphics.renderGraphics(a,this.context);else if(a instanceof c.FilterBlock)if(a.open){this.context.save();var d=a.mask.alpha,e=a.mask.worldTransform;this.context.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),a.mask.worldAlpha=.5,this.context.worldAlpha=0,c.CanvasGraphics.renderGraphicsMask(a.mask,this.context),this.context.clip(),a.mask.worldAlpha=d}else this.context.restore();a=a._iNext}else a=a._iNext;else a=a.last._iNext;while(a!=b)},c.WebGLBatch.prototype.update=function(){for(var a,b,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r=0,s=this.head;s;){if(s.vcount===c.visibleCount){if(b=s.texture.frame.width,d=s.texture.frame.height,e=s.anchor.x,f=s.anchor.y,g=b*(1-e),h=b*-e,i=d*(1-f),j=d*-f,k=8*r,a=s.worldTransform,l=a[0],m=a[3],n=a[1],o=a[4],p=a[2],q=a[5],s.texture.trimmed&&(p+=s.texture.trim.x,q+=s.texture.trim.y),this.verticies[k+0]=l*h+n*j+p,this.verticies[k+1]=o*j+m*h+q,this.verticies[k+2]=l*g+n*j+p,this.verticies[k+3]=o*j+m*g+q,this.verticies[k+4]=l*g+n*i+p,this.verticies[k+5]=o*i+m*g+q,this.verticies[k+6]=l*h+n*i+p,this.verticies[k+7]=o*i+m*h+q,s.updateFrame||s.texture.updateFrame){this.dirtyUVS=!0;var t=s.texture,u=t.frame,v=t.baseTexture.width,w=t.baseTexture.height;this.uvs[k+0]=u.x/v,this.uvs[k+1]=u.y/w,this.uvs[k+2]=(u.x+u.width)/v,this.uvs[k+3]=u.y/w,this.uvs[k+4]=(u.x+u.width)/v,this.uvs[k+5]=(u.y+u.height)/w,this.uvs[k+6]=u.x/v,this.uvs[k+7]=(u.y+u.height)/w,s.updateFrame=!1}if(s.cacheAlpha!=s.worldAlpha){s.cacheAlpha=s.worldAlpha;var x=4*r;this.colors[x]=this.colors[x+1]=this.colors[x+2]=this.colors[x+3]=s.worldAlpha,this.dirtyColors=!0}}else k=8*r,this.verticies[k+0]=0,this.verticies[k+1]=0,this.verticies[k+2]=0,this.verticies[k+3]=0,this.verticies[k+4]=0,this.verticies[k+5]=0,this.verticies[k+6]=0,this.verticies[k+7]=0;r++,s=s.__next}},d}); \ No newline at end of file diff --git a/tutorials/02 Making your first game/part1.html b/tutorials/02 Making your first game/part1.html new file mode 100644 index 00000000..eccbb3e2 --- /dev/null +++ b/tutorials/02 Making your first game/part1.html @@ -0,0 +1,31 @@ + + + + + Phaser - Making your first game, part 1 + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/part2.html b/tutorials/02 Making your first game/part2.html new file mode 100644 index 00000000..441a4d26 --- /dev/null +++ b/tutorials/02 Making your first game/part2.html @@ -0,0 +1,37 @@ + + + + + Phaser - Making your first game, part 1 + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/part3.html b/tutorials/02 Making your first game/part3.html new file mode 100644 index 00000000..6c6242e6 --- /dev/null +++ b/tutorials/02 Making your first game/part3.html @@ -0,0 +1,40 @@ + + + + + Phaser - Making your first game, part 1 + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/part4.html b/tutorials/02 Making your first game/part4.html new file mode 100644 index 00000000..ca5cc25b --- /dev/null +++ b/tutorials/02 Making your first game/part4.html @@ -0,0 +1,62 @@ + + + + + Phaser - Getting started + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/part5.html b/tutorials/02 Making your first game/part5.html new file mode 100644 index 00000000..0af5f916 --- /dev/null +++ b/tutorials/02 Making your first game/part5.html @@ -0,0 +1,74 @@ + + + + + Phaser - Getting started + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/part6.html b/tutorials/02 Making your first game/part6.html new file mode 100644 index 00000000..4c8a4746 --- /dev/null +++ b/tutorials/02 Making your first game/part6.html @@ -0,0 +1,79 @@ + + + + + Phaser - Getting started + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/part7.html b/tutorials/02 Making your first game/part7.html new file mode 100644 index 00000000..dd6062c9 --- /dev/null +++ b/tutorials/02 Making your first game/part7.html @@ -0,0 +1,113 @@ + + + + + Phaser - Getting started + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/part8.html b/tutorials/02 Making your first game/part8.html new file mode 100644 index 00000000..e850acc6 --- /dev/null +++ b/tutorials/02 Making your first game/part8.html @@ -0,0 +1,143 @@ + + + + + Phaser - Getting started + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/part9.html b/tutorials/02 Making your first game/part9.html new file mode 100644 index 00000000..adde79d4 --- /dev/null +++ b/tutorials/02 Making your first game/part9.html @@ -0,0 +1,152 @@ + + + + + Phaser - Getting started + + + + + + + + + \ No newline at end of file diff --git a/tutorials/02 Making your first game/phaser_tutorial_02.zip b/tutorials/02 Making your first game/phaser_tutorial_02.zip new file mode 100644 index 0000000000000000000000000000000000000000..d28335e99c6acad7b03b3bc7cbe5139cedb0205d GIT binary patch literal 103613 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 literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/screen shots/part3.png b/tutorials/02 Making your first game/screen shots/part3.png new file mode 100644 index 0000000000000000000000000000000000000000..455744d1dfbf50a3871c9b0837353329fea7e2dc GIT binary patch literal 4520 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 OV4!Dmy+X(F!T$lNhz?o+ literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/screen shots/part4.png b/tutorials/02 Making your first game/screen shots/part4.png new file mode 100644 index 0000000000000000000000000000000000000000..113a205ed780d93ecc685e76e621caad8b6796dd GIT binary patch literal 5116 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 CO1P5% literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/screen shots/part5.png b/tutorials/02 Making your first game/screen shots/part5.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0ff1414d38954d7671ddfa8de43a0ff121a794 GIT binary patch literal 5983 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 CV3+Rz literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/screen shots/part6.png b/tutorials/02 Making your first game/screen shots/part6.png new file mode 100644 index 0000000000000000000000000000000000000000..39de7fb21870867b18fa2d1ff54dd7e7aacd2e5a GIT binary patch literal 5975 zcmd5=XINC(vfZSSAVH#lWI-ef3L-g(G}w}98WBm7qvR$Ff(%NMBvF!*nj|Pl&N(AZ z79@&*O-7=xnHlHtyx!}~_rCYO`PcjO+EuHn)~?#;{Hm&~KukzS2ml~fgj`n#0EZa> zY&bqP<_Q%g)dc_uk(r|@G?odlk?wF9mWQSLaVyzzl zRyHJlE16Cj*;8Qnkc?cqDIkatMoD!h5u(-TH%JIc3Yt#gEHje{4!ZqV>yF50rt!?z zUhe3XmHnap%7w&*gKk6*sqYzbj)?g*OK?p+KwNZ~DNF^@*jD9>O$C|4WhR^Ns5irF z0$>#f;pXjBD0P5UU!gr&SOhg00XTD>O9!B^&kZ) z&B}*cn~&wI^F~ks+qVi2xP-#PNu>>dZ=5VoCtw!A26BuPT{z58oRmxbHB;I8_5o!O zEKu7K-4%PY|1xD+bT6Ij`s&m)%XGbUk*p!jMKV)@S=PkZ1U3rD0uHqMGyrtFeRW47 zQsE2pvmfS77p&2nO=(9~t9GoCENhcTl~1s70hw|SdQ^XI4uxaif>r2TW0kE7Mq$8w za#!#27(vQy!d~~?#|V)FX~yJK)mCwabA&`hE9^$8RhMQSOMbol!EWlY_crF=qcQhY za6eu;F0VG-|M0${txLXo=t2jstbpy#0^3nbfX`v*#lGn)MR$0pg4f``mZ`GdYC*hJ zkGRg#7ClYA=p(qs6mv)r=}HWcfhx7iZ%)1Lu&(v~jD`J}1m5ogq`fzIpU@FS05Y>H zf`}aeB5QWTq`9#`S8T=%0F@ul-pPuhfi~jm zD+38|Wm@qm3|T~j&KQLbvv%Xt#D(Ir8bYo-_03>j45CzHZEAJMz|NMnjL?Iyt@Aoi zUJJP+y%#>#$}AXs5L~Gs5cS}d8qPaxXX&?DOmxA`DUN+kS4j1IW74ep=t>wReBY#H z_TBvG>;$}mLydj=1V~Juj2PZ|@<`s`S2!I<3$^haTnH8>WXu4+>Ow_dn{0^2Kac&` zmtqzrxq6${Wo1t z69*Few?K?IX{~5IXfw~2((=baU*ZkK#=iodA+=$RjfLbP4JF7cQBhlt0G%Czgyi^JxsMnO+UR_ z|IlyGnD|v-z>SnZNV=wRX)|pI3w5)g$r@Z14 z=a^%PG>tG#n!n$LMbca}wR&wNQK_4yo4DJ97l&7hw+LmKXPW1ocXiZ#w0hKN#bJed zWoZ=cY@Z~Z#FMloY9qSiOi(Udu2vpUKIYu>Npiq=39(49)xJftIMJuDWwV*SMe_-b zLiaIUy>ta%IGom6K*V^pGu-&2)iaB-zSV~xvd(mvmq#?3r}rtQUnt}F{K#xZ$c;wQ z6lr(P2zlkb$+(rcp^=5)SVm(;(`@y{t|+T`)AGKO0jJK+R-SR>FtTkq^x9yeRkC6A zNaff;NWcsE#3rT3!jD^GMq@lX@M3Po>>!`PBw+~H7HkNqh`O`Hvt)zPwpOLrPB@() zn$YnkD=#6h(IvrVl5(0d>|+1LEe+dIf#ri`!sYnoUskSd8*a02+idqRbeX@`4MDy}ycn5i`ODv6sO=fVW?Q{2z=sCL2 z<^8V*w$c+S62|jJY~D?DN;G-p?%(1|pl{P_kU-09uI|96?|055WhP|SZ-g)K-*vgG zb9cXrQKdMMBN=tcrgf}QcdDwx!$4G0!ep;|5l6CF68pLP^GDS$t63){s@c3z-f`Zi z4wCo9_Bsy3zSMj`tW&Qk;~8MpVa;JxJ)nC~jAMnvgd2zZ;*=0x2wuf6{HGo7S)+SSsm)9)Hz9yjBO@1ttRPola_zjvvV1Imax6B^iqKS}0o_i`7y*!c!OXiC94 zsEo;iHjZZ3i}E6uU=H6WwGs`d`%XJNDCDfpzFAf1T3Ggzw_;T zWxi!OWe?mQeUV>_C3m7YPq6aqY~ygF#IG}s*bCP2mlJ2>HDjEN^XJCX-qOr3c6TJZ zit7mJgnNnvJR^^NB{k>IEUU_YR%I^J_7(%h`on|(75VD4kTkWT(lRCSr}Ig$=xvb+ zF)z72^FWmw&drwzRMfc<5wuU=vTfXgT}Qn~_Ke&g;k_1>7?qf=PHYiV!aa1Ul(SUD zl$$$}cos2l(@r1xsC{RaZP#&QjLJFy+LvCUp07$m4du_`cGEqp>sAJ-g4}+0dD8Ug z(=Hp4AGK#yc%f=pVexR8o6g!4YmIybHQQqi8dp96J@xW?ZWgQkULEEguVM~Wr{U^a z>z0V|^-y*H{ueLgxc#)RL}y2}b=c-_-hOLLWf*-=3vC%Ys0;JqqKVc=+9R{_zZBjm zo1fNJ)*tlTLfDLszE>)3Us-}IWh~hucXVnBl&UOc273cniSy{!Lgwi8ZIs?SrMg>g zg?5#6wRhnN849iFcD_N5t)~j7Z@VY?=ykvj^Kwh8M>s}NH50BL8zlY=RATSZQOlLD zx!ts_s^q=4Z2Ld^O@z@I(U;fEdry=pxT-WIhk3m4IJGU0Ub1wuvmP&~sd+_Uqb?l6 z2obfPOYpTDO<0L{eQkf6i=?5NqQ2)T?U2f(y!iVff-}x7NIchV;>Hm> z(1SQDJvF^5Gr68*DH^BG&{F-KwvG1-VS1~T_M5CbMq})yH}fR&B^12v4?jQ(bnTW* zb~;wH#q*suZ!L-Sp$B~SENcfHhrSH)={-kOp_`ZKOKmwO&Xuv3Z+&suUZHU%{0tq} za}RSXIH(>y{B&xM^pj7?QIScl&D0lzT7#Yj9a1z2!K37(sILQ$KJ+VeDh#sSU<(OL zVq&5vrmI@N*B$vG^HnBAPrEnlD`LqpcVY5ydjDn*{9t&MX!mhXO+F%f!vUR}T_D=R z*1}ZTjgVM-d63sV=7lapmru4-F~xBnNFS+g^z9k9WcI4;NG^CD9q{iw+}QWM#(oBK ztE6?3hdXK5nL4=|I+y^Ndv-=9%!)RKW+v(;hW8Nn+f2j(IGv+-T}IPwba}$g{GIc; z+O>)ayPLUq!7Rnw()UyXZH<-jV#mnc!?~YGH=f#VJXOxfNy`dbevo3I`b5`!D}N5%d@)N;7lasdcurudtp z`1cz8v2wl>>W@Ju(#k2PruCv38$h0x|Ed3DX`F!kSSf!AbfP@pso}>pJfS&XK}szx zQzS<6e$d~~;gF5XL3DT9;ASuZuyS>u`vJD?suRQi8vwVl+)K^ zeAfjE+NIn8VI3|JU^ZO5bvUW>j}qeQ^PqVxlfRbD@1p)+q~<$IC-V2LmY8#%a$0^P zR}hAgoD9eB{r4O0MA!LoZH}M*6m&w#e>W7>z_bg35n4d0zKxAv7dPenv;Y6bB5t&J zHPE{d^TCEdu6fyl*?@q}H`LFsy$;p<=JTNVv2e zqeko{rv4n8mg(~57|&!WNzufWDvsh~tF`6rQhBDL_r-TSwsSBBgY`A1%Hww}>P9A< z2kbR+5S88{W1e?0BT_!!-p(P+OnY}|@PpUec$CutMR!9q#^CBzw*@hvI!h>8*S^th zV4h8;rCpv|>Z&>U7Ns`ezVWH|9@n5?e@w!qmSe(@w9HYe|_ z`i!A#ie=_wz}E;?ru*=e51_L{w*zZlDl~CPG6T?!CtT$ zNNJ_olk!NmMT!dzPUcuy(=su1Z!1?RJL7>UX@e@)wNmV_?N_yVl)CoxPVb0D>CuJ; z_+$g%xQbtGe&ut9NUJUs^WAwUzT(S-HcMXfBfh}r_D9nwCgLKD!h{r3)8d7{ zo>87Ip*x!}?3Kci*hqtg$?Kgbp454ESxH9+1|p0j_u1~0NC4@JT){yjBNbE8uZ_nl zgdc7kp{UR`6F%$Ka@$M#uEck3i{+0!`S+@4iSp&Eyth^dH3+7}WNrU<6~I zQtM#VKQvU&-~SUK;8c?rsIwIF%J*tY8<6N}A|0!EM+H>tk1xs6uYx~Dx(}4%W8%H- zzBqs5w>!=8^8d08pBT1(_JrTN+)o)olq70)2L$nYr zdhcVD=Yf>E=+6xIv+KtcqNR<*_Po-S1u$F!M`f-r9;hk0Hk?c?2 z9vC$GVBny7K4Jc_6WT@LcY%r{d@juv5Y-5f5F2C;Ra0tgMf%~=Dox zz#1OZ-3L-AeTY-w0N?_SeYdVrp(amWAk;Z@0hVxJf|Y9i98Q=9&~i(wg$8K32o!3T zSdaoA000E_l4AvO$bgj}_oWDcL0H5HJusMd8Ac2Q;{dVO6|dpSQ~@U1{u%-AuY zLJ0?`Ym4lNR_?h?QxW-P>#70C>1LUcSEwbDGEO6Pe1VA$)f zKfWU!Ha|BrIcGHw!u)7TJGNVMV3oSMK7L&N4i_JwRPDkH8PCr4<2j;m3SDaLUV=DjA3xBmG!p}WLW=**LRq5o^)&E0@`U;;)phi^ zri2PI=daaCP|6X`_+2JVy%;5XNvlq55dTvl9z)87xJk;=dj30P^Al8t{>zT^geDi0 z8ZK79BEgq!A*MFHD)#z$G>=%DTAVU)VRE+NMoMfO zJWe#C!G<#XVZ$vf0&frBRx9#<@GpLZ*Nf{SQ~8mZ;cat@b2mhg!pJWw&90lFlu6RB zEG@fRdBFt&c)txX_v_{-w|e*8)bL&4U6VI@3>+vr^I1J1olqh3D|#ZXw2XC0rWoRD zxIuo@E5uJ;QZ|5|hlMHXsp!dnWM5$`r9u$vlDv4y-@wTl@lmam-Ggec(cMg}C`|7j zoMZJW)72#QC!FNe#t}-_$XnmfsFGe~4->e5?!KMUuo6#(W`kg$8s3Bb!>*X z*bmMU9bO(r5vKP3p!M@iIgMD;>nRnIv}+m}AE+J(SxV31XC@2C#iryu>VPHn66d@Y zOMZMGoZ_m^s~HHR7IcYY?}(?9Z_D6G@B12OV{NnZly?z=AQ^qZbT|5IbdTKv(c=8# ziyv<1$zGAYKq;ABzhrmG^HTQ3@=Lt2Dp>^IqGMaM_yzoK|F1HVMMY{?noZqS8rV*;% z^~gBA#`x&@zByU(tAKkcuawfY%*&fE1z)9W7O-5`lk0cV!CU6Gi+N~fP`tOI;!1G9 z=*sJ09(mn0`z*vk0Fcv2fTW5dR(Xwe~Rc1-lrVite?SlOHd%Jw=2!K27hwpUzpqu^MPS zE#yuwWd(P*Yz7w`vmCLLFg3Fg7|v+SXqu_H(ec49&I-|8`VG?F-oiZsAB4BAgoySf z*d>|Pe6Jop3=YV=o6z(iNH_=;H5BF5MiBKdY6l*pBc%h?+0q$+-|shE=3WN(>w?r7 zb>q*+i^aED8v)^XhCwsI- z&N8ebdOm&IN{_FKAIbX;?j3EHZ1T=Mcz7$GvDN6aBu4hf+K%4Tv-au4?D*`4&9Hgi zC$3NQpBx~W)JhUKlKT0;EyIll6Ua7C6EP`C%l*zpJgH_W++>gBz?!TY)^W)iHlKc< zSRbOpqyzE&wxiJ9+DYgJ-MT7)2~IuEEDqA2!M_C04v!f>7C)0nh#;7tijeob6s_EO z5;A>erwE5S`VGcC^V=iV+;QEsUx*WFA2aUrwR5O2^En>Kr?S{yM*Mn0 z5%ju(+2&F#{hl|?jhg~Fx0W82YC@htcDVcDGx`VC$dL6=*t<&cVcRk%S8KQ}NCRZP z5?|q0kyGLC9=LmVJ(>zaeT@YDW~OnlQS!~SGwwVn?smdVoK_UXJb!j1t&)Cjv9m47 zO+sHtKg{b+KnzuMvGnW<7CCj^i)ypk_7AU6Z@i2TP`g``7M%8|sJ!BV#QV8KoyhGw zqvGE3`%hn~-E(QaO`@j31r5LSzLIV8p^ifT7`*HIv+q2j9}+$!q-&7bM3r(4@ReUL zSF_^ciXfYT&Vj!$Mg)G@nPJ;=-W;X{1*mkVmulpzlhdj2e&ljDxM<*Bp@dX=+Ue37?c8%ZFJxGudPQN$V1>K>`UGq3-6}e^AWeF=Tl_{E2n%* z2Qw*&InKuWISj?4+uKE6rbAUj*nIiBU^Ijz2s+WC3pbH{kBZ}}GSvJ#Z5N37Nb z&XW#KkxWHm7T%>NUU_mwv8MdQ2g5&Y?t&5u)lEuCye_%EH}gDVI@=;UDN$8gvNv`F zx}$O!YiIPx2x%?fl_X6MSyd@F-f7(&n-4Wwt9Jasx??uXUap)cnJ=m6<9IZwRAAt+ zY`N2h)|JSI{CK!5-i`U@yKh_9=RB}GaLXteio`UpFqYeMj9#u_M{Mo7ZlmelNLN)x zj66c!3l3|Bj+Th_DVBUokBcnpz!SSBbtYY(^(ipqB!NlCA5OjnPWC9aEB3M7V+#&V zWM*b0V?b_LbVf{O7iUvq;7)UY(QfIe%rlmGxq^nC?cE%%|7Q3FSDaNJHu=$hZ(FOS(g=yNZ?W&Q zB}#9%4)Vxz+O+n@-oNfD5ptVy_zt0*3J%G&s}|Q}$|Fl3-ydeDtRfS>W-gnvu)|2^ zTq;)W^*Ld06Rn@vlEzz00|0!UY4-qtr4Rt{=>WevTtLPI2O#DK0DppCmXvx}x_s`J z!_QyuvYwi^*3m=+s@#*STS};6b`))cT z-hy#Uu>xdRM7443w}_6Q;!J;qqbbCzO@DSetlqJL!?A`y=|Z!~_i^B=A&i8@8vVnu1gx1;P_ECE%0Yx|EsC=zPT-`@DG^I8yq_wE9nyF(`wOiSfgYdLnZd<=HJWys2 zhbd^!_@ZaIP-J;zll2XmlX83#LXmI2oN64ome-Hw%|Cc%b|AmJWMKO?T~?6pL-q^U z)Te^fu@u1zrKKWT$j2W~j@R5FVgdqeC4R#!P6N8e`~)VQeSNRyIT%nHT$lobVjq2N z0he#J0**EFjX_67Cz6nj`h@^+>jSGxY>vw>?*Z+Vr_MRHWzEHBX{YUfQC-gQdRW7s z>^r?y85b=c+Q{L7>C-#4-^K{+Za*b2E-bQylOj5O(muvY0&AAx;CEpd6P60 zilI;5dvMapJ5s*k9NEm!agy?EyuGDoM9H(k1jnDC-FOcf5QR`l+vcFpAIh3AuH8V7 zSLN>7?eHjPjDL6WzA<|6qr}*-y2RVvq<*rq*5Rg)0I^dRDKWQ6O_dXoc3+2@XVGSx z_$sqB`=yZ$#Z*n{E|=Q4Jj(Hnx`*i#a%-~KT#_)IG?0T zME0F|Tak>Z@42YtlkCpWldaGY*AVRxdhRxF(16?V-Z^dW$;<(!kdXN!PU;HwUv^G- zsm*pN2t>kFQ4MajuO%U<z_AM7S-OfblLBe`b zF%-8v#QFlRbMqRav7Y`!SiIUxR!rnJ^_!;W3!Wp29+eL6TV+|_P#B5b(fa)Qp3K(S zg3Ix%%trmvL#}JVQ+6n8LeDslq4IYFeQ`Hg3jOx%(=Z^9!pppK_Y@-{>vAk~o^6cQ z?j!C+!R>C6<+t10>X)D=owem_w@}HR6WvBA!m52j+k;oqJ>yC7Ia{*K6H&x=Q)BG- zbMHQdp6tOStJo5|#>4l5H|dK-q@Z3?hRab=tDOs*CqjlUYWad;KDl}qrS(1cdN;~l zZ;=^H3lWlzFoYAG%(`d-b5S9ZRk|)^y^-{@wqtuP=P{X;MI%G~@0GGV0z%rJExBpdzAU4A|88~ zbk*hXka1E-7qOSvPRA*@6d!>OSBkpd$caWgfFxj;42o|K`AP|h8H)NMzz;wO01O+_1esW}|)D44|V&~Y#t z?{|$9MKg$x#k}U=V04mYHHBb(s#u+JnX`b;w>N~OD+_dkE-qq_dgGKTQP~3D^;j=} zjTqIe=+7I!eRBC?y!%n#r|*Nv+8TTGE6e#E=8GV3vi{&xzdD{-9yt@${=ObO&m7)F zhx;gA2zhi?mf8*(`%ag{Iz8Fqk56qwaUJrqVPwxUt+$yaMIoZ2-;8hTT^HoxvaY^M zj6J}Ywa}hc&UT>nIH4=3s*nx~#R!<*ib7eYSCPZbxa)!11FE^I6ums1+e8r#gf2!$ zMMKK7Q*2dP&dOw``I5HF0&gvTD==JGkPHV^@3u;R6x7_3KJNHhd5)7js#!VHqReZn zbW<@6Pcl8Y`{~MhcAA}V$fe7tcS>6$Th-X16(t&dQ)**(m=Ok2h8~#10)ob&gq{1r zvh#}#H4)!t^QprRosyaH?HNTX@tk{l8X<>~E(=QXFfHBq*E$_EoY^Q; z_GkBNbV0qmN~Ir`pR-9<3&zG6#_a6LPHY#}DHRLEFCAp=7NJ5YS%~n&AXMCnM+Zp_hg5+nXbIHOQm`Y1N_qdP^#9B zV@ITJEwe;*wGB!VxdVPX6P+Q9zRq-9u1jPfqI&L^YiV$HajF(0J@6GWYg;z22cAmz ztz6IUY8GY0PaZEhm{uhBHF54+#ar*$=IoJ@BOak++CJY7zT)W`>Y9x3sK)k1fp7k1 zANAOl;^}>EV*i=}=T9iyZ}Q-k}i=*t5W!q`;*BRYt^ z8h)jNr@o#pf4cFj>%R}<8IT{8MG$u`)S^M!9k3_D@-#nvy1n-DF+nWV*0*@^e>C&V zmj40`uj9GELCvoT05Nxk|6x*21MyEXcbfG7TmwJZ>mMS4Ww|hgcI?z*6;Af=Y2|0x zoZ;wyQboT{%AbJF*z!A8{5QO6mp2uoi^JvPJVdPqlHtTqgMJ&S{+6463v{O1P9yZw z`(I1arFp+AS{?DdY`|qAHe<+=w zgY>R1SI_o$@rVD5bL}76>`Y4jq_O_=ao}uYVL^4=`^-3mfMzQ3EOS9dH1>4_xPMnw KAz#kq`M&^sTML3-a?UHLr1!F2!YUB zfY3sR-1xok%s8{|-1%nBnzimbaHXDw6?PV06bx7>K?$D6AE#}i3N$)tLeRp z1iOy_rpG0Be%{l`y7vuW^6B0K$*!Q!1X^U|_fzFGI|C*NGh|9~ZWEz1TVq!uJ9Jk1!TBG=j5{NX0K+`_Gg z_tyH`t#G>lfIS>9Pd~SEiOU;hj)0p0rwQ&S4|*0cfeorG+JJ}AfCZ)p>x4JHssVm- zYy2bw{G z5n!zOQH}FvYdavbM3Ra7R%_{v4>~n3WN&_G#s#=X0>6?-8UsEgz2Y1IJQTbMkY*qq z#CfQQllg2Ex=?836jUd71JK$ZH<<8tl$We7?iY>6!QR5sqosDcidQC-Z1*hjSC~>0 zQXZ4at>Y*T-30(>&PLj<1tq?&udOVuS+3imj=Hk0ZTB3R#2@V=uA9Exyal+YJdA=F zt*%buIQ85p2SIHM^#Cv}z(1|Gl2|-UB!%OC~{DvjeZ3O&r`y)gssXZ@qf%aI*gRx+lp0Dw1tv z>1BmJCwbUDFtkpUNvX%HUM>3dqu#is2b=yc_8H@^@MAoP042dHt;#ic)%|v@e!Dkr zh7$uv-2sw*hg@H12%`b_tX{tGIspJ;pl4B%95(=i2|3FEK+^`5enBjyV)q>Y;C1Fl z_Hrq_yKQ78t;DHq^i8dlH%)H8mc09%B09!OeS(KzkSGg zxcQmv9aGm&mzfCM$pB?FPsV;2Rcc_F?2XvE`Q;6a6nCGRC1m8kQak zvsECURurEZJy5`%oVGRH1a;@h&F~MT+jk5<-D|fC`1(~As0frUVBUUQ^`PO7Hh$oz z=k2UaF$F4B%-#>qIz3H=E4~8Xl(6hRVtAC!Y{*JXY7`^)gt+(HiZa0?=C3d03FU3& zX63kY)N{l~?^&lRvLL_O_s*}}`SGFTVM286SCX$P-!6JPR%*$FyFM=|;%7Zk%ZYuU zz-J+`dMh{M#jB*uqIZLZ>Em~bJ_~2)%G+nUtMaIa6q3FKB{L7EP)PUZaAi;YO18GL zK6%fx>DGWh7sw!!@GD`|b^~v7eKYXL<1SG!QDBdp=~HT3Y9H!+s#58{O5wBr2Y){8VWT{R^pyov}liZw}!4Yhpp-e^{; zE*IjDQxs1W(rY#r@|O;&d8kFH4!<+XZZWzFI5#8u5gha;GgvNL!>qQOI^q#U_X~@C z;Hya&EgU4LZK9H?-jB0wMR(i_T6Z2FMRjS{BFhrXXv?%U=fNAq-4zRaLNlofLyv}t zhJ3hixFonLCT$>=5I=|j%p2AMGu?67q1ZvfP#~u?$u!P1w6MMK2?)P|zu{d&P{S-} zcuRcD4C%FrkM2VgZ_bU#qV12e(Ue=LNz@3Vz_XWk_`g!yJr^|F8~AFrVVh`OH?sF> zvEY9H`-bSw_t_)z*{pReyCGJ~e4dozmL-mKrX?@uE#S7ICZ^UeW^+1ox>j1)24iiL zEgMFv#@q%5esaP~rb~LaBZVeXZPQI!W}0R%BZ6{eQo9tw`NMnSVe#O8+<2wjT6KOxGZKq1BopLutIHkX)0FnafbWgEIkS&o#v5m5!)g55Zw=cH| zwv)GS?+6{695Wx=9}m+H&^@4^6mb&)ySRY{-0hs2kU5JlI|@4sJ2thgXsy1xrXBK8 z=Dq#e{~*CVfl}Q*KP=xN!@ECjm1ehLw0aDkozj>Bhs@ZI&kcxm`4(R&ai`Gs8gz)E zq>lDZfJ@E;%W3&3`R#{a*Le)x4Rs7Jni*6oQ(4j{pV|MM?bKUn?)Nbk78kQPAKJtb z?-swA;hhoElGnn75NmntH|dw;hj*ENA#&b-6?F<-^g5u}SH?BI(RO3?M)OCSkCiyK zIE=TFZsp?f;YQ##-sZV0PX6jHK9LTiON?VHw({2cSn6gLNI?tEU5wfkJhXic3&dFD&T#{Qy+d+S}5x|_4x3Fl)&?i34McD=c7 zm&}{GlB^N$W>&fi&#I?f+Z^go_Yl?L)A}9x9d9dP z^9+|zY-((3wi=Ojd=&h#q>pXS#7nq$>8f*(Yx1&-$CN^=Bgzl>I@4GvV9O8>lInJ^0R_ee9j)Z_uxG1u3p= znPGuVLgzeu4v7Ql$wlT-vD;169G=>?%`(1dhtb`DxhNV_+6L&F-&~!nhe}s^luxb? z-mwe{Y2)T-2QPy{f8g7z@kcPo2|KN(d~k%N>?C_sJL$3$w@aT&}=0=oGwA>wyRicbkch`zaC|<*W`4>bYeQo zT>BOxRw^dz=XA9wSElEPv^eSC(H1RrJ5oZ5jG)H+&uv;KT>_xD7JAno-@`w6zW_ zb98mg4d_$%;~h#5f?Y+pfp?T=*<}mtY76h2WXr$my27H>e&N)()p)o=hXh58ACi6@ zix~@99F-lAop}7_aYR%aBO@&lP4j{IP|RZfk9^YMK0hst7t*zO9dWgE@pc$^IlV`C z7CsCu^(s7cK@}I43HLniVQd=m65G$agbdC4qUul$h@NJ~q^FmX*Q$pj=Vm?mzf?}d z*TL79JSU$HFFpt{-^X^9)NV3BH+4r#HxCmR3xJflqp8J1d3zHp3pEQ9b1&y!3sC@o zO;P@}l!hm4dkzn*x!QKRPx?dd)k70pbCQ|2tv8n5yyIk2u5v7fWP>g>x8B?D{HU%D zlkwH7w$XF`J{f^ard#sxEt&bxuaA5_(SN&lrx)`?8z28wz^4{!1Zw?dhU>7egLpH^ z{=srR>-rnMQ-u5t0AMvgm<<592gJ6&gaAq78-R!90KhE@z=zhG|M+=_69D*#`;VXh z9iiXP{FiU~L+D?$W7U1wVr3C$fnoK=KIZs0yM7z;w_U#t`P;7FI{vWhpA!1RuK)Z^ ze+d2d%HQf#iMpP2+hA=x$SM6N%=zOb|6NW0;luuT(;w#i4$|LWpGgx|NKb1|0RZ$x zlm8X7zn}TTwf~6&v2OjZh5iR#E(kXLW@a{kO(>xs0spX#67gd;#oP{Gr<~IE zkPt+thFT<8l2p=S+_G)JiI+rbrS=X~$E=Ve^4qwDE413lt}aN#5-0P=`xma4LA@gF zT=3_#Mt&N~Qf70YGh`cltYx;E6GdLc5ou_UCSra1YoxOMDpjf{f^c^l)=+GHqu>+- zY72|DLP)T}ha0kHXQj&XPG%;&UWJtglI!&7UT%&45ap!HD;1;>h8}M$I5JY2`#o@2 zRQ4Q81!#aFEG;f;Cp?5Tk;Ju5tW7$DtU1#`Z#s<6hx2=xxo7tHmh^%;#>rQ?K{Iem zB9HvLS9;~=wf~4+^Se8$ZG1^WEw;$*l}Z#o|FsyrJ#EjD&p*2yXv}O6^qRqK4Cod} zILPc42tZH^=?CnexV08#<%fTE!Uk3zK?Vlf<4VgaB{3KK2%UX|j!DHl0 z4m8oWhcWPCAOX->VG{9DzchH(A%c*iqFZUYd^BX`GGl6@%V&PqcN5idMZfHahJ7-& z#&EE|#U_=@Zq8y?d>In~WkmpGa1`P0)89D-=H;VYUFn(nX-%zHjoixG7Eo^bv4CKw zCKZN?KL@&ZTU>9jm8G&fuLO`k4(BrRJ)qzcPyl4zY1L@ELF6C_nMpYw$7L zr98WAD;u?${G{p2kRre%>SC6_eU+lb6|b`o@$)%b>Gcp_&ELVOp5`BCOCVyWIkAD& zCCBunTS4#-LGx{2)EVGDHN)@_01Z;H*n!C1qOgqhosZRZJm8(v`< zH;8LXz01OeBKtC?SPI%BH23=UHqfCEg8A&9y6Go9dg({HO7+0~A=jvy(dczpoE+c4gc_AFWy3UZt>m z*gAYcHZQ_)hoKR9K&w3gPtcJHN0s$^m%R{QXF#=3`K5_1^z~hbOj))Uv>3Rv9A7(> zZ)ELRnxdvI+|N21@Uz*knI>7GP_Lhzl}k|)3lilx$f7;tzD%EBii=^PpJ(rP$*thq zILU(g@?(`gXuAe8>7j4+dPO$I)#;}Sr<8_Ep;O?qKBpxlE9iO|7Fq`ET>8mHCv>?| zd%=8ct9}sqj~BY2P-%0G(-kGXjg<2uP2RYZhe`F6SC*1>ydcXMys_|6n+$Q1Cc54d z5i5u7F(0LScRj^<>s2g#+S4%4m(Cflp25!!8D$5cZou5@4qH(qg7xaGr!Bbb+N5Ez zFvj6@KNcINeVk&cVRgfc*{1No#wFS*?lGLO5bdD``o#_|Bj-9B?mla+Y%Mj@9U8Pt z)J$wOGF(jaM@1yIlu+3cFpOPdi^ShhQsm?9Nl<~7`1K$N+g3)WmPx~uqlUTrl&Ai@{V7v#oKBOaHj zN{yC^LMqmWtE~_L3HnMucotv3atYkZl>U@9fYJgwa)KwpE_h*s;f++s zv)~#|IY^LbNq?5p>DjLf#vzm?hFYQ|9HHOUb*3tcj0`l(TEjSv(B9@ID@~s=uaJxg z*kTvjm;IVHi16AQV~c>%y=-#F1g7a)B$O0i(I6{VyChKWm&Yif>SfD(5{2Utxut^b z4Z_*3hs604Q9Po{{60R?aP>=iXxNWrm*X_^rad&i4@9O=yZCYjP8oOq0az!gP2i*<)tk)B@ggk zu!w73ghjEhWq_uEX3F!^7kSFLk*R0v!?*pWRSle1K;-XcXp0x(7FS8XsbEZcMgH0q zS2#K@RK{Dt!A2B|v;vc3MB=-cc=bZ1efafn_k z-(E)adGS6Q&e*(ve$Us+05K#nA9vyU>AD00TxrC&zBkIgxNNW^9wkz5aTqU#oKhst zIzbj(Ha)CxhvXd5P``cQGHEW`^?FAswDk2bH%rCjy4k!4WQ1}bG>O|tL1~ZYYXNM+ z#6S04N{ixzd97jIT2IYI5g;V574&c#*e8euTc0>rrJv$JaS2oj~g-ZqI5f-!}pA5 zT&K9BAsM#Xy|%9P%ZN+SfdAw;opDn1I?}iYFN7w+U8x^ldtF_#Q#$^#%r^EpB-y{A zajdUyxuHfhPx=a;`q0s_t%miYpUc(tYbCFowSMvOF->S?&ANSG@7!0t&=(wcvu9Gw z2xvIK7Vq5>%kE~B;v=`N%*t$a#QZYCv%mKa>dvO-V$~aZkH?Fx67Oic7KJ8-WUP!NWkUgz7S7Jfad3D%km(py4BGiyY zZPNyWyf!sENuyP+x~7oPWwZ5T2*-L(nNibfc$HYOib~0A6qO%#N6PoV9uKUoQQ4h; zZLp7U>#)V}o<^H6&wm@zO=a-o@-o%h%B*#u-#_gd)-FB^E%a8gKFn8FuXTGXwmdSWSjaD!N#LL5A!)2%uSS6?~ekkVpeMwwdMxw;*EYof7lkMTUL z$T@ZBUqOTm)0E}y=k0B?g*G!3hk+Ct$#2brqK~dc+R~yvMUcnlR$yDGEUf>n3={8l zP9h{AYus-=QFFuXSFX2@wqU}IPb*E4A%Tc=p_XK@obqdOaQL%o->50f!O}t%5q{4$ zx2Lod!u{Dr)J&xx5-Lu2(7I0KaH(#ZZArdUC^OGthu#c`v>N9E?IrdIMA{wigz0O4 zpI1S+4ylCPN->JenV{@HU~RhGoIUgrD}P3nVCd-K-EZ&8!a8pKH8w-jslJ4saeUiz zvfW6m_F#pusloa4KNcg)Idw|M#OwV7XTm9PY;=VPbG;N;-_Fp1jU=i#=~t#q^K`Y2 z2!+F-LTITzio7PRw!C9A7y9ChkLmIl5s$hy-S=G{xc{+=Kb04ncx)>s>LA14dMKxf z(5P1~MKjyL(jnh#xo7h3*3{svA=Zq6nSFYw*onvE;)!Apa{acVspjD|*~?cVs&IBfuZ*IuGyN^?Jdd@ zABi6}=>2p@v06{7;YP<$u-xM1L(kolaA@UvqG1Kd-DlsswA zt#>H1we3>g?Ku{lTkX8}(h85fN}1Yp-T;++wlqN6d%7Ox)i<(_&<2@2V~(IEec2>D zeLC>Ho3BZjZE-gqXM$YTrtciB(|;HkVN|LMu?KZbZ@i%&swEfawcVr?R6gWkv>qcFVO|5#Y7b*RJj{4pL3>7k{WG_+dEuL1+Syt7W)e8gJhpnW*O=q88$OZIjvjG z4WU%i@(S3E@NBW=7-L9t+-=YkpIgB$V-U1U+s4zV5`)E|3h5S9ZbVsBh*kb^R57K2?JJ~iS(?B1 z*r(VPUk?ih*zu8`y)C0iiQ|d7dtSmdB%V`W>>}fBJUU`d{AsZ|V7LIUI5_2SHl#$JOBugUlc51cGz(gq<@-d>d~D2|HC zUW-hr5faaK(4EiAQg1gK8{GnnyTXqN{1iN!BYT2o&qqr~$caCHIm+s8v+FagGCNN_ zq=g7tNooMK)x~F@d&Aae#BG*i%lzIReIHwUF;&}d$42DOb>E4hch)2Xb2N`KyLy$mhZ)VZ3y`9Z02Q8BTiH!ul?>$6;|3E_I= z&_fIF)33pr=TTJ0lm^)wj1gifZ!jvTY2^rl$Zc5kO#QA9ocNMO3b5_YLurUZ=jfbry2p(YxJ>vsrHb7Z&r`5k`Fj%`%S?l#x? zL$JrHyK3vfB!%m7HzI9}HFxp_UfL_@mn8&DoKO@OlEmL;R`wfCrJq8!eYckOr`OnM z?Q2>{p7rBnf?LNSOx~QN=%K}nHTQ2ohM+EHi8{3WRmsmDah5*>#(K34`t=p2-_8J9 zNnUJpo>#XwBufYhNtAh+4mK$j3#^&b9X+}jW#{GiIZv*slfHR;*y6fg#&Fjod95Y` zes(^|O8njcEQxH>hLG^uUY+MHUz1V*?}^r3H6f8__djN{+5Ad5EZTClmDu`z;h;}G zbsp=RKt(iWvt1>u;`fXf4!s_qUr(!Qep>m>d)ttI(<+Lucp)4}Ye|`^;rYt$C~PR? zyw)@PjB#+fQUETGbpDp%QWUj@@m@VjLsi?TZ?A+vjGj17d%kOSz{xUosVPOgJBOP8 z2#87;nyagQGu}ERH1~kLi}a)qK(3@|*j7{t_R}wezK$hbzyo@&;vD=gO;H@~K* zG%-E87JbBhbrF|aNFq}OTRz6ZpJJ*MPp*o54dvaG0r z%@?_@j9!_TuU-y6zOd5z`jQDOCo4gwYQ6J*%+FB)xyzbf2;)CgBq`07pjT8 zkHn_S4|_z#O#0!O&+3W!?-r1Ks|EWhSnlL-C8exQ+r$B8C-XM8 z{fH~nBjhfh!Pa+hHH<#1xIOI|q=tWfq)x>jgiBY?-V%VTVTH_#M7*@}t{XE}pOdqu zFUTxbBUJWF(85kI1)D~7FZ+y4wS3>P3UfECHNySr(=r6BK9rE|vBP-t2`jEH~GK9!`)uY2555189zY z3wpfjZ`>GUFD6m&FaKxmE6_h9(J7Xv%7JVF!QLv zMigW>I_f2q)L7%Ot!bvM)v*oYqs=q7baYe|sFiP=7LGVv#-vg6IVEz+RWwABjfFD=PD*kQ{mN>E(fkzHq4#7mv!Y8 z!tPwajc+=VLZQk#qdz%Sm0oUpSI8G|e~gPst33$cu10E^Zv!iBtsu$HZ20(%Kis?W z*S32H^{Smzeh&?hJ@)#IR)_I(?~qzDgJ*&g5a(Z$6SE%=OmGPc0uFr8b5yrzDF<|F zMR~hN$2YB4}LHDAj=W>2~?ruEi z7ZoEf)7h#=>wI>I$KSOeWrjyET&~77&RMGFOyvyY)}S@~r$$3W+}+&Nyp{+Ot9JVQDzgw zSAg7#H!yY2SszSI+b`SP*@P1mbM)~-h3zOW!T=S6^{?TQH z>s6*r7_5a^!V=lNUGimkSwb)RImB}7{LKz_h-wHlVk{vDIO4tF6LgfjLKmNK4)Xq1 z_f*NRtc5h+k~{Ul<|+b7v29NQny+o#Jt-8#rnLWgp!PbKUh+2@5zy{2J-v%f%8TFG zP~@CZIfdH>-`_UHSG9kBMdMIQ*iDuEJ}D zsO*Zh`n6{S!(PnzB)wuD7R@3Mox)6ujSWX^UcdgASqv7Tz@DmnmIVFPwcpG$-TIKt zR1FG|A0850ZIt*@81vV-5WX|>d+eyGrtE_EA$v(rC9=iS&V@?egq?oZ>@kR3T=bH~ zQtkI=z<^r{*z4-dUsntJl3^nQ-T1b}XCO`7&L^ERDYyW^B5q&HfleQuO)5mz3VFH0 zXUFHxlVNW&ye7VAx@(mK77D`kY7Y(w-EkuvIV|*-XR&RZF)s_&nQCs}Em`#KG}nb7 zDs1zQ?kaZz3Qm8)$A(3fSigm!(Pp_wEG9jT77I>P4E*@4$^6;?)Aphg0FYIw6bYU` zbV2-_(KdN&KXacKGpIwVeR6i#ePy*WNa$)H{9zMGKnB*Jljwm-jw=K5P< zag%;8Js`3at)o*PDshLOm_xC+9=rE~dl8IvIeYU&Qck@mx96)G)>;M#bgzwlCvP2U z6=G}WLpE{(MFd8}zc{UTL?wTjZd(2ZjS`wJH$mHEfG?AsFyEYe@o0m8hX#DvZq#0e zL%JlO?}o;1u+7&4iQB18`BSz2#-qP6M43y9NB@cx$Gz*@wqC?K1kfi7kvAKLH}hj* zlMde!B-Zy}B?ENIVdsa0wNDp1(v3>Q0crWE+Q%V!*lK>thK596K|P$y(HZ{$U`UXQ zSZq2oQ8%XB-61YbbRnUw8yft(e-+>^$VddYdYr;y5WX7309B}q6va=?Mq9HL+M-lPART4fTIdTfH446Q(aBSuz4H+Zv| zs3P?IoEMt4%0F~qX8@FMIG@|I=wB9(seEz4 z1rfnB`hwTzgI-K$Fg=o{d(x-X)4eEKOfq;4eKij@hff)_8W`UQIoK>#?$;8?#sFnYU~*ZX>vyAG#jw=>|$1 z5#VSL4DM2S4{snJXGolC>iT{gSzPlk1>R>6g35%i1o;bFNe*WXD2QQd1Jm{SE^`BY zr8$7DQyYF=XcE!mErYhboMWQ?qYq1qarN()aiX}&!MGX}WBhhMb?=kfow`gEJ%l_+ zKB5O}BHDdwZ%YAnsX2797H2SFM<=?9r(ap{Fu~ZcmkC_$U*I`pvPiDjirFgj2M6b9cV8lX4;}^Mb7sP6-WuF^T}Mpe^wfkssO{xyguMkd z9kIGLmMZX6-OOVBH7*D*;YI20f>UC{&3iz}&2I=s-|nwD4;z%(ma~wbut+F9cDKzH z0kx_3<|CZ2%V9fYy6(uT6~=igofcSvmX8no+M$_$F}j&HIl|}Ud)5HEey0NU zHE>=>I2>xbcsYr7GM2XEVvhS4t>-TSOKc^q?3xQcfP-yo`U*=K zn%9$yx$o9G_1Iw9hr8pD|94;u>)q z$&hiI2H_3f#cFN|#V#J(Wnt_-Ql7k`RPz>ofTHq(jA5WHMW((BwykK3$aAMTer0z} zEAx?DVWW=K=BL%;maEBgaprCx#64_Q$)wj`x09gk@4bXNVge(!cG+~aFZd?UxhlGd zOD|`7p>ojkUI8T*NzGI3TDA|5Yi*9dg}3DX9_+>b;o+{4=@~(0pVK#y*g#7$<&C4t zgmyUs^-U*6+QQG4u%)vF+gz>WyO}DH%%wg83FU&A!{| zL0K+!1=!hnb`quU7FU?;#9v-IvF5%bjk&GbH0qLVt7P{sX-Xd-uN<`kOiS zPuKe&JSz?9=lc~S|D$6LdkOX&<{|L^<>&neZ~oz^KYZ}Vf$sO+e@ZAe8^hBIpjQZJ V)+rO@z>+Tk@-oV=OJ5lW{2v;GxnTeR literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/screen shots/part9.png b/tutorials/02 Making your first game/screen shots/part9.png new file mode 100644 index 0000000000000000000000000000000000000000..9e0e5df5d4a996ec4940433c2a692cfdabd6750c GIT binary patch literal 12780 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 S1kC^KfLAigFEEwc!2bn--iV?A literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/screen shots/tutorial_header.png b/tutorials/02 Making your first game/screen shots/tutorial_header.png new file mode 100644 index 0000000000000000000000000000000000000000..19a668c1658eb85fe87f31e500bb226e627e8466 GIT binary patch literal 61622 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 V(z+-G_9Ka)C@HAPSH3X|`#(z$APoQj literal 0 HcmV?d00001 diff --git a/tutorials/02 Making your first game/tutorial.html b/tutorials/02 Making your first game/tutorial.html new file mode 100644 index 00000000..b2e7506a --- /dev/null +++ b/tutorials/02 Making your first game/tutorial.html @@ -0,0 +1,301 @@ +This article was written by Alvin Ourrad and Richard Davey. + +Welcome to the our first tutorial on Making a Game with Phaser. Here we will learn how to create a small game involving a player running and jumping around platforms collecting stars. While going through this process we'll explain some of the core features of the framework. + +

What is Phaser?

+ +Phaser is an HTML5 game framework which aims to help developers make powerful, cross-browser HTML5 games really quickly and, unlike some others, has solely been built to work with the mobile browsers. The only browser requirement is the support of the canvas tag. It also borrows a lot from Flixel. + +

Requirements

+ +
    +
  • You need to have a very, very basic knowledge of JavaScript.
  • +
  • Also make sure you go through the Getting Started Guide, it will show you how to download the framework, set up a local development environment, and give you a glimpse of the structure of a Phaser project and its core functions.
  • +
+ +If you've gone through the Getting Started Guide you will have downloaded Phaser and got everything set-up and ready to code. Download the resources for this tutorial from here and unzip it into your web root. + +Open the part1.html page in your editor of choice and let's have a closer look at the code. After a little boilerplate HTML that includes Phaser the code structure looks like this: + +
+var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
+
+function preload() {
+}
+
+function create() {
+}
+
+function update() {
+}
+
+ +Line 1 is where you bring Phaser to life by creating an instance of a Phaser.Game object and assigning it to a local variable called 'game'. Calling it 'game' is a common practice, but not a requirement, and this is what you will find in the Phaser examples. + +The first two parameters are the width and the height of the canvas element that Phaser will create. In this case 800 x 600 pixels. Your game world can be any size you like, but this is the resolution the game will display in. The third parameter can be either Phaser.CANVAS, Phaser.WEBGL, or Phaser.AUTO. This is the rendering context that you want to use. The recommended parameter is Phaser.AUTO which automatically tries to use WebGL, but if the browser or device doesn't support it it'll fall back to Canvas. + +The fourth parameter is an empty string, this is the id of the DOM element in which you would like to insert the canvas element that Phaser creates. As we've left it blank it will simply be appended to the body. The final parameter is an object containing four references to Phasers essential functions. Their use is thoroughly explained here. Note that this object isn't required - Phaser supports a full State system allowing you to break your code into much cleaner single objects. But for a simple Getting Started guide such as this we'll use this approach as it allows for faster prototyping. + +

Load Assets

+ +Let's load the assets we need for our game. You do this by putting calls to game.load inside of a function called preload. Phaser will automatically look for this function when it starts and load anything defined within it. + +Currently the preload function is empty. Change it to: + +
function preload() {
+
+    game.load.image('sky', 'assets/sky.png');
+    game.load.image('ground', 'assets/platform.png');
+    game.load.image('star', 'assets/star.png');
+    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);
+
+}
+
+ +This will load in 4 assets: 3 images and a sprite sheet. It may appear obvious to some of you, but I would like to point out the first parameter, also known as the asset key. This string is a link to the loaded asset and is what you'll use in your code when creating sprites. You're free to use any valid JavaScript string as the key. + +

Create a Sprite

+ +In order to add a sprite to our game place the following code in the create function: + +
game.add.sprite(0, 0, 'star');
+ +If you bring up the page in a browser you should now see a black game screen with a single star sprite in the top left corner: + +part3 + +The order in which items are rendered in the display matches the order in which you create them. So if you wish to place a background behind the star sprite you would need to ensure that it was added as a sprite first, before the star. + +

World Building

+ +Under the hood game.add.sprite is creating a new Phaser.Sprite object and adding the sprite to the “game world”. This world is where all your objects live, it can be compared to the Stage in Actionscript3. + +Note: The game world has no fixed size and extends infinitely in all directions, with 0,0 being the center of it. For convenience Phaser places 0,0 at the top left of your game for you, but by using the built-in Camera you can move around as needed. + +The world class can be accessed via game.world and comes with a lot of handy methods and properties to help you distribute your objects inside the world. It includes some simple properties like game.world.height, but also some more advanced ones that we will use in another tutorial. + +For now let's build up the scene by adding a background and platforms. Here is the updated create function: + +
var platforms;
+
+function create() {
+
+    //  A simple background for our game
+    game.add.sprite(0, 0, 'sky');
+
+    //  The platforms group contains the ground and the 2 ledges we can jump on
+    platforms = game.add.group();
+
+    // Here we create the ground.
+    var ground = platforms.create(0, game.world.height - 64, 'ground');
+
+    //  Scale it to fit the width of the game (the original sprite is 400x32 in size)
+    ground.scale.setTo(2, 2);
+
+    //  This stops it from falling away when you jump on it
+    ground.body.immovable = true;
+
+    //  Now let's create two ledges
+    var ledge = platforms.create(400, 400, 'ground');
+    ledge.body.immovable = true;
+
+    ledge = platforms.create(-150, 250, 'ground');
+    ledge.body.immovable = true;
+    
+}
+
+ +If you run this, which you'll find as part4.html in the tutorial zip file, you should see a much more game-like scene: + +part4 + +The first part is the same as the star sprite we had before, only instead we changed the key to 'sky' and it has displayed our sky background instead. This is an 800x600 PNG that fills the game screen. + +

Groups

+ +Groups are really powerful. As their name implies they allow you to group together similar objects and control them all as one single unit. You can also check for collision between Groups, and for this game we'll be using two different Groups, one of which is created in the code above for the platforms. + +
platforms = game.add.group();
+ +As with sprites game.add creates our Group object. We assign it to a new local variable called platforms. Now created we can add objects to it. First up is the ground. This is positioned at the bottom of the game and uses the 'ground' image loaded earlier. The ground is scaled to fill the width of the game. Finally we set its 'immovable' property to true. Had we not done this the ground would move when the player collides with it (more on this in the Physics section). + +With the ground in place we create two smaller ledges to jump on to using the exact same technique as for the ground. + +

Ready Player One

+ +Create a new local variable called 'player' and add the following code to the create function. You can see this in part5.html: + +
    // The player and its settings
+    player = game.add.sprite(32, game.world.height - 150, 'dude');
+
+    //  Player physics properties. Give the little guy a slight bounce.
+    player.body.bounce.y = 0.2;
+    player.body.gravity.y = 6;
+    player.body.collideWorldBounds = true;
+
+    //  Our two animations, walking left and right.
+    player.animations.add('left', [0, 1, 2, 3], 10, true);
+    player.animations.add('right', [5, 6, 7, 8], 10, true);
+
+ +This creates a new sprite called 'player', positioned at 32 pixels by 150 pixels from the bottom of the game. We're telling it to use the 'dude' asset previously loaded. If you glance back to the preload function you'll see that 'dude' was loaded as a sprite sheet, not an image. That is because it contains animation frames. This is what the full sprite sheet looks like: + +dude + +You can see 9 frames in total, 4 for running left, 1 for facing the camera and 4 for running right. Note: Phaser supports flipping sprites to save on animation frames, but for the sake of this tutorial we'll keep it old school. We define two animations called 'left' and 'right'. The 'left' animation uses frames 0, 1, 2 and 3 and runs at 10 frames per second. The 'true' parameter tells the animation to loop. This is our standard run-cycle and we repeat it for running in the opposite direction. With the animations set we create a few physics properties. + +

The Body and Velocity: A world of physics

+ +In Phaser all sprites have a body property, which is an instance of ArcadePhysics.Body. This represents the sprite as a physical body in Phasers built-in physics engine. The body object has itself a lot of properties that we can play with. To simulate the effects of gravity on a sprite, it's as simple as writing this: + +
player.body.gravity.y = 6;
+ +This is an arbitrary value, but logically, the higher the value, the heavier your object feels and the quicker it falls. If you add this to your code or run part5.html you will see that the player falls down without stopping, completely ignoring the ground we created earlier: + +part5 + +The reason for this is that we're not yet testing for collision between the ground and the player. We already told Phaser that our ground and ledges would be immovable. Had we not done that when the player collided with them it would stop for a moment and then everything would have collapsed. This is because unless told otherwise, the ground sprite is a moving physical object (also known as a dynamic body) and when the player hits it, the resulting force of the collision is applied to the ground, therefore, the two bodies exchange their velocities and ground starts falling as well. + +So to allow the player to collide and take advantage of the physics properties we need to introduce a collision check in the update function: + +
function update() {
+
+    //  Collide the player and the stars with the platforms
+    game.physics.collide(player, platforms);
+
+}
+
+ +The update function is called by the core game loop every frame. The Physics.collide function is the one that performs the magic. It takes two objects and tests for collision and performs separation against them. In this case we're giving it the player sprite and the platforms Group. It's clever enough to run collision against all Group members, so this one call will collide against the ground and both ledges. The result is a firm platform: + +part6 + +

Controlling the player with the keyboard

+ +Colliding is all good and well, but we really need the player to move. You would probably think of heading to the documentation and searching about how to add an event listener, but that is not necessary here. Phaser has a built-in Keyboard manager and one of the benefits of using that is this handy little function: + +
cursors = game.input.keyboard.createCursorKeys();
+ +This populates the cursors object with four properties: up, down, left, right, that are all instances of Phaser.Key objects. Then all we need to do is poll these in our update loop: + +
    //  Reset the players velocity (movement)
+    player.body.velocity.x = 0;
+
+    if (cursors.left.isDown)
+    {
+        //  Move to the left
+        player.body.velocity.x = -150;
+
+        player.animations.play('left');
+    }
+    else if (cursors.right.isDown)
+    {
+        //  Move to the right
+        player.body.velocity.x = 150;
+
+        player.animations.play('right');
+    }
+    else
+    {
+        //  Stand still
+        player.animations.stop();
+
+        player.frame = 4;
+    }
+    
+    //  Allow the player to jump if they are touching the ground.
+    if (cursors.up.isDown && player.body.touching.down)
+    {
+        player.body.velocity.y = -350;
+    }
+
+ +Although we've added a lot of code it should all be pretty readable. The first thing we do is reset the horizontal velocity on the sprite. Then we check to see if the left cursor key is held down. If it is we apply a negative horizontal velocity and start the 'left' running animation. If they are holding down 'right' instead we literally do the opposite. By clearing the velocity and setting it in this manner, every frame, it creates a 'stop-start' style of movement. + +The player sprite will move only when a key is held down and stop immediately they are not. Phaser also allows you to create more complex motions, with momentum and acceleration, but this gives us the effect we need for this game. The final part of the key check sets the frame to 4 if no keyis held down. Frame 4 in the sprite sheet is the one of the player looking at you, idle. + +

Jump to it

+ +The final part of the code adds the ability to jump. The up cursor is our jump key and we test if that is down. However we also test if the player is touching the floor, otherwise they could jump while in mid-air. If both of these conditions are met we apply a vertical velocity of 350 px/sec sq. The player will fall to the ground automatically because of the gravity value we applied to it. With the controls in place we now have a game world we can explore. Load up part7.html and have a play. Try tweaking values like the 350 for the jump to lower and higher values to see the effect it will have. + +part7 + +

Starshine

+ +It's time to give our little game a purpose. Let's drop a sprinkling of stars into the scene and allow the player to collect them. To achieve this we'll create a new Group called 'stars' and populate it. In our create function we add the following code (this can be seen in part8.html): + +
    stars = game.add.group();
+
+    //  Here we'll create 12 of them evenly spaced apart
+    for (var i = 0; i < 12; i++)
+    {
+        //  Create a star inside of the 'stars' group
+        var star = stars.create(i * 70, 0, 'star');
+
+        //  Let gravity do its thing
+        star.body.gravity.y = 6;
+
+        //  This just gives each star a slightly random bounce value
+        star.body.bounce.y = 0.7 + Math.random() * 0.2;
+    }
+
+ +The process is similar to when we created the platforms Group. Using a JavaScript 'for' loop we tell it to create 12 stars in our game. They have an x coordinate of i * 70, which means they will be evenly spaced out in the scene 70 pixels apart. As with the player we give them a gravity value so they'll fall down, and a bounce value so they'll bounce a little when they hit the platforms. Bounce is a value between 0 (no bounce at all) and 1 (a full bounce). Ours will bounce somewhere between 0.7 and 0.9. If we were to run the code like this the stars would fall through the bottom of the game. To stop that we need to check for their collision against the platforms in our update loop: + +
game.physics.collide(stars, platforms);
+ +As well as doing this we will also check to see if the player overlaps with a star or not: + +
game.physics.overlap(player, stars, collectStar, null, this);
+ +This tells Phaser to check for an overlap between the player and any star in the stars Group. If found then pass them to the 'collectStar' function: + +
function collectStar (player, star) {
+    
+    // Removes the star from the screen
+    star.kill();
+
+}
+
+ +Quite simply the star is killed, which removes it from display. Running the game now gives us a player that can dash about, jumping, bouncing off the platforms and collecting the stars that fall from above. Not bad for a few lines of hopefully mostly quite readable code :) + +part8 + +

Finishing touches

+ +The final tweak we'll make is to add a score. To do this we'll make use of a Phaser.Text object. Here we create two new variables, one to hold the actual score and the text object itself: + +
var score = 0;
+var scoreText;
+ +The scoreText is set-up in the create function: + +
scoreText = game.add.text(16, 16, 'score: 0', { fontSize: '32px', fill: '#000' });
+ +16x16 is the coordinate to display the text at. 'score: 0' is the default string to display and the object that follows contains a font size and fill colour. By not specifying which font we'll actually use the browser will default, so on Windows it will be Arial. Next we need to modify the collectStar function so that when the player picks-up a star their score increases and the text is updated to reflect this: + +
function collectStar (player, star) {
+    
+    // Removes the star from the screen
+    star.kill();
+
+    //  Add and update the score
+    score += 10;
+    scoreText.content = 'Score: ' + score;
+
+}
+
+ +So 10 points are added for every star and the scoreText is updated to show this new total. If you run part9.html you will see the final game. + +part9 + +

Conclusion

+ +You have now learnt how to create a sprite with physics properties, to control its motion and to make it interact with other objects in a small game world. There are lots more things you can do to enhance this, for example there is no sense of completion or jeopardy yet. Why not add some spikes you must avoid? You could create a new 'spikes' group and check for collision vs. the player, only instead of killing the spike sprite you kill the player instead. Or for a non-violent style game you could make it a speed-run and simply challenge them to collect the stars as quickly as possible. We've included a few +extra graphics in the zip file to help inspire you. + +With the help of what you have learnt in this tutorial and the 160+ examples available to you, you should now have a solid foundation for a future project. But as always if you have questions, need advice or want to share what you've been working on then feel free to ask for help in the Phaser forum. + +More tutorials will follow, stay tuned :) From 8ade29d9822209c785d28dbf0efb9663279d5ef0 Mon Sep 17 00:00:00 2001 From: "Josh Shepard (jcs)" Date: Sun, 8 Dec 2013 09:50:21 -0800 Subject: [PATCH 021/154] fix Pixi bug (#425) - fix incorrect width property for multi-line BitmapText (Pixi has already merged the fix) --- src/pixi/text/BitmapText.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pixi/text/BitmapText.js b/src/pixi/text/BitmapText.js index db4ec3b5..7dd15ee3 100644 --- a/src/pixi/text/BitmapText.js +++ b/src/pixi/text/BitmapText.js @@ -135,7 +135,7 @@ PIXI.BitmapText.prototype.updateText = function() this.addChild(c); } - this.width = pos.x * scale; + this.width = maxLineWidth * scale; this.height = (pos.y + data.lineHeight) * scale; }; From 3e1207e1a3d15cb91aca55ac71d8bc5ba2c94c35 Mon Sep 17 00:00:00 2001 From: Cameron Foale Date: Mon, 9 Dec 2013 15:46:02 +1100 Subject: [PATCH 022/154] Split world update into preUpdate and update. This allows moving the state.update() call to before world.update(), meaning results of collisions checked in the state are available to objects in their own update(). --- src/core/Game.js | 5 +++-- src/core/World.js | 47 ++++++++++++++++++++++++++++++----------------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/core/Game.js b/src/core/Game.js index d077209e..692f6387 100644 --- a/src/core/Game.js +++ b/src/core/Game.js @@ -440,14 +440,15 @@ Phaser.Game.prototype = { { this.plugins.preUpdate(); this.physics.preUpdate(); + this.world.preUpdate(); this.stage.update(); this.input.update(); this.tweens.update(); this.sound.update(); - this.world.update(); - this.particles.update(); this.state.update(); + this.world.update(); + this.particles.update(); this.plugins.update(); this.world.postUpdate(); diff --git a/src/core/World.js b/src/core/World.js index 8ad6e8c7..9492b956 100644 --- a/src/core/World.js +++ b/src/core/World.js @@ -60,6 +60,33 @@ Phaser.World.prototype.boot = function () { } +/** +* This is called automatically every frame, and is where main logic happens. +* +* @method Phaser.World#update +*/ +Phaser.World.prototype.preUpdate = function () { + + if (this.game.stage._stage.first._iNext) + { + var currentNode = this.game.stage._stage.first._iNext; + + do + { + // If preUpdate exists, and it returns false, skip PIXI child objects + if (currentNode['preUpdate'] && !currentNode.preUpdate()) + { + currentNode = currentNode.last._iNext; + } else { + currentNode = currentNode._iNext; + } + + } + while (currentNode != this.game.stage._stage.last._iNext) + } + +} + /** * This is called automatically every frame, and is where main logic happens. * @@ -72,28 +99,14 @@ Phaser.World.prototype.update = function () { if (this.game.stage._stage.first._iNext) { var currentNode = this.game.stage._stage.first._iNext; - var skipChildren; do { - skipChildren = false; - - if (currentNode['preUpdate']) - { - skipChildren = (currentNode.preUpdate() === false); - } - - if (currentNode['update']) - { - skipChildren = (currentNode.update() === false) || skipChildren; - } - - if (skipChildren) + // If update exists, and it returns false, skip PIXI child objects + if (currentNode['update'] && !currentNode.update()) { currentNode = currentNode.last._iNext; - } - else - { + } else { currentNode = currentNode._iNext; } From af5847e8e49cdd0230128e9b91867793bc35e65f Mon Sep 17 00:00:00 2001 From: photonstorm Date: Mon, 9 Dec 2013 16:40:48 +0000 Subject: [PATCH 023/154] Tilemap and game core loop updates. --- README.md | 1 + src/tilemap/TilemapLayer.js | 85 ++++++++++++++++--------------------- 2 files changed, 37 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index fd5681c8..f00c2651 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Bug Fixes: * Group.length now returns the number of children in the Group regardless of their exists/alive state, or 0 if the Group is has no children. * Switch Camera.setBoundsToWorld to match world.bounds instead of world (thanks cocoademon) * Fixed an issue where passing null as the Group parent wouldn't set it to game.world as it should have (thanks tito100) +* Fixed Pixi bug (#425) incorrect width property for multi-line Bitmap (thanks jcd-as) You can view the Change Log for all previous versions at https://github.com/photonstorm/phaser/changelog.md diff --git a/src/tilemap/TilemapLayer.js b/src/tilemap/TilemapLayer.js index 87dacc31..8fb940b3 100644 --- a/src/tilemap/TilemapLayer.js +++ b/src/tilemap/TilemapLayer.js @@ -368,7 +368,7 @@ Phaser.TilemapLayer.prototype.updateMapData = function (tilemap, layer) { } /** -* Take an x coordinate that doesn't account for scrollFactorY and 'fix' it +* Take an x coordinate that doesn't account for scrollFactorX and 'fix' it * into a scrolled local space. Used primarily internally * @method Phaser.TilemapLayer#_fixX * @memberof Phaser.TilemapLayer @@ -378,19 +378,22 @@ Phaser.TilemapLayer.prototype.updateMapData = function (tilemap, layer) { */ Phaser.TilemapLayer.prototype._fixX = function(x) { + if (x < 0) + { + x = 0; + } + if (this.scrollFactorX === 1) { return x; } - var leftEdge = x - (this._x / this.scrollFactorX); - - return this._x + leftEdge; + return this._x + (x - (this._x / this.scrollFactorX)); } /** -* Take an x coordinate that _does_ account for scrollFactorY and 'unfix' it +* Take an x coordinate that _does_ account for scrollFactorX and 'unfix' it * back to camera space. Used primarily internally * @method Phaser.TilemapLayer#_unfixX * @memberof Phaser.TilemapLayer @@ -405,9 +408,7 @@ Phaser.TilemapLayer.prototype._unfixX = function(x) { return x; } - var leftEdge = x - this._x; - - return (this._x / this.scrollFactorX) + leftEdge; + return (this._x / this.scrollFactorX) + (x - this._x); } @@ -422,14 +423,17 @@ Phaser.TilemapLayer.prototype._unfixX = function(x) { */ Phaser.TilemapLayer.prototype._fixY = function(y) { + if (y < 0) + { + y = 0; + } + if (this.scrollFactorY === 1) { return y; } - var topEdge = y - (this._y / this.scrollFactorY); - - return this._y + topEdge; + return this._y + (y - (this._y / this.scrollFactorY)); } @@ -449,9 +453,7 @@ Phaser.TilemapLayer.prototype._unfixY = function(y) { return y; } - var topEdge = y - this._y; - - return (this._y / this.scrollFactorY) + topEdge; + return (this._y / this.scrollFactorY) + (y - this._y); } @@ -524,18 +526,6 @@ Phaser.TilemapLayer.prototype.getTiles = function (x, y, width, height, collides if (typeof collides === 'undefined') { collides = false; } if (typeof debug === 'undefined') { debug = false; } - // Cap the values - - if (x < 0) - { - x = 0; - } - - if (y < 0) - { - y = 0; - } - // adjust the x,y coordinates for scrollFactor x = this._fixX(x); y = this._fixY(y); @@ -702,7 +692,7 @@ Phaser.TilemapLayer.prototype.render = function () { if (!this.dirty || !this.tileset || !this.tilemap || !this.visible) { - // return; + return; } this._prevX = this._dx; @@ -720,8 +710,8 @@ Phaser.TilemapLayer.prototype.render = function () { this._ty = this._dy; this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); - this.context.fillStyle = '#000000'; - this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); + // this.context.fillStyle = '#000000'; + // this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); this.context.strokeStyle = '#00ff00'; @@ -733,6 +723,23 @@ Phaser.TilemapLayer.prototype.render = function () { { var tile = this._column[x]; + // var tile = this.tileset.tiles[this._column[x] - 1]; + + if (tile) + { + // this.context.drawImage( + // this.tileset.image, + // tile.x, + // tile.y, + // this.tileWidth, + // this.tileHeight, + // Math.floor(this._tx), + // Math.floor(this._ty), + // this.tileWidth, + // this.tileHeight + // ); + } + if (tile && (tile.faceTop || tile.faceBottom || tile.faceLeft || tile.faceRight)) { this._tx = Math.floor(this._tx); @@ -769,26 +776,6 @@ Phaser.TilemapLayer.prototype.render = function () { // this.context.strokeRect(this._tx, this._ty, this.tileWidth, this.tileHeight); } - // only -1 on TILED maps, not CSV - /* - var tile = this.tileset.tiles[this._column[x]-1]; - - if (tile) - { - this.context.drawImage( - this.tileset.image, - tile.x, - tile.y, - this.tileWidth, - this.tileHeight, - Math.floor(this._tx), - Math.floor(this._ty), - this.tileWidth, - this.tileHeight - ); - } - */ - this._tx += this.tileWidth; } From 669570c701ee606ffefb72282bf5bf42bbbc1dae Mon Sep 17 00:00:00 2001 From: photonstorm Date: Tue, 10 Dec 2013 12:23:42 +0000 Subject: [PATCH 024/154] Tidying up the examples and more Tilemap work. --- README.md | 14 +- bower.json | 37 + build/phaser.d.ts | 226 ++- examples/assets/tiles/tiles_spritesheet.png | Bin 0 -> 128835 bytes examples/display/bitmapdata wobble.js | 4 +- examples/wip/bmd.js | 2 +- examples/wip/tilemap.js | 16 +- src/core/Game.js | 4 +- src/core/Group.js | 4 +- src/gameobjects/DOMSprite.js | 88 + src/gameobjects/Text.js | 2 +- src/loader/Cache.js | 59 +- src/tilemap/Tilemap.js | 40 +- src/tilemap/TilemapLayer.js | 59 +- wip/examples/a_template.php | 39 - wip/examples/anchor1.php | 57 - wip/examples/bitmapFont1.php | 39 - wip/examples/body1.php | 62 - wip/examples/body2.php | 63 - wip/examples/body3.php | 69 - wip/examples/bring to top.php | 54 - wip/examples/bring to top2.php | 55 - wip/examples/bringToTop.php | 341 ---- wip/examples/bringToTop2.php | 41 - wip/examples/bringToTop3.php | 94 - wip/examples/button1.php | 67 - wip/examples/camera1.php | 72 - wip/examples/camera2.php | 175 -- wip/examples/camera3.php | 74 - wip/examples/camera4.php | 56 - wip/examples/camera5.php | 70 - wip/examples/camera_cull1.php | 68 - wip/examples/camerafollow.php | 79 - wip/examples/circle.html | 45 - wip/examples/collision_group_vs_group.php | 117 -- wip/examples/collision_sprite_vs_group.php | 100 - wip/examples/collision_sprite_vs_sprite.php | 65 - ...lision_sprite_vs_sprite_custom_process.php | 96 - wip/examples/crop.php | 46 - wip/examples/crop2.php | 46 - wip/examples/crop3.php | 48 - wip/examples/drag.php | 43 - wip/examples/fullscreen.php | 63 - wip/examples/get_bounds.php | 47 - wip/examples/graphics.php | 80 - wip/examples/group1.php | 84 - wip/examples/inherit.php | 167 -- wip/examples/input1.php | 48 - wip/examples/input2.php | 60 - wip/examples/invaders.php | 63 - wip/examples/js-physics.php | 26 - wip/examples/js.php | 109 -- wip/examples/js_full.php | 120 -- wip/examples/linkedlist1.php | 74 - wip/examples/loader 2.html | 59 - wip/examples/loader atlas json.html | 57 - wip/examples/loader atlas xml.html | 57 - wip/examples/loader audio.html | 57 - wip/examples/loader spritesheet.html | 57 - wip/examples/loader.html | 48 - wip/examples/mapcollide.php | 85 - wip/examples/mario.php | 60 - wip/examples/mariocombo.php | 48 - wip/examples/mariotogether.php | 45 - wip/examples/math sincos.html | 48 - wip/examples/motion1.php | 98 - wip/examples/pixi 1.html | 139 -- wip/examples/point.html | 44 - wip/examples/quadtree.php | 110 -- wip/examples/quadtree2.php | 90 - wip/examples/raf.html | 45 - wip/examples/rect1.php | 22 - wip/examples/rendertexture.php | 42 - wip/examples/rnd.html | 25 - wip/examples/signals.html | 35 - wip/examples/snap.php | 54 - wip/examples/sound1.php | 71 - wip/examples/sprite1.php | 43 - wip/examples/sprite2.php | 55 - wip/examples/sprite3.php | 65 - wip/examples/sprite4.php | 70 - wip/examples/sprite_extend.php | 56 - wip/examples/stage 1.php | 55 - wip/examples/stage 2.php | 66 - wip/examples/stage 3.php | 68 - wip/examples/stagecolor.php | 31 - wip/examples/statetest.php | 85 - wip/examples/test.php | 79 - wip/examples/text1.php | 31 - wip/examples/text2.php | 41 - wip/examples/text3.php | 82 - wip/examples/tilemap.php | 62 - wip/examples/tilesprite1.php | 63 - wip/examples/tilesprite2.php | 54 - wip/examples/touch1.php | 62 - wip/examples/tween.html | 47 - wip/examples/tween2.php | 42 - wip/examples/wip1.html | 141 -- wip/examples/world.php | 106 - wip/phaser clean up/ArcadePhysics.ts | 1121 ----------- wip/phaser clean up/Collision.ts | 1702 ----------------- wip/phaser clean up/CollisionMask.ts | 501 ----- wip/phaser clean up/Debug.ts | 90 - wip/phaser clean up/DebugPhysics.ts | 78 - wip/phaser clean up/Emitter.ts | 454 ----- wip/phaser clean up/Input.ts | 29 - wip/phaser clean up/Motion.ts | 409 ---- wip/phaser clean up/OldSprite.ts | 355 ---- wip/phaser clean up/PixelUtils.ts | 49 - wip/phaser clean up/Properties.ts | 36 - wip/phaser clean up/Tilemap.ts | 434 ----- wip/phaser clean up/aabb 1.ts | 64 - wip/phaser clean up/aabb vs aabb 1.ts | 81 - wip/phaser clean up/body1.ts | 206 -- wip/phaser clean up/obb vs obb.ts | 54 - 115 files changed, 372 insertions(+), 11768 deletions(-) create mode 100644 bower.json create mode 100644 examples/assets/tiles/tiles_spritesheet.png create mode 100644 src/gameobjects/DOMSprite.js delete mode 100644 wip/examples/a_template.php delete mode 100644 wip/examples/anchor1.php delete mode 100644 wip/examples/bitmapFont1.php delete mode 100644 wip/examples/body1.php delete mode 100644 wip/examples/body2.php delete mode 100644 wip/examples/body3.php delete mode 100644 wip/examples/bring to top.php delete mode 100644 wip/examples/bring to top2.php delete mode 100644 wip/examples/bringToTop.php delete mode 100644 wip/examples/bringToTop2.php delete mode 100644 wip/examples/bringToTop3.php delete mode 100644 wip/examples/button1.php delete mode 100644 wip/examples/camera1.php delete mode 100644 wip/examples/camera2.php delete mode 100644 wip/examples/camera3.php delete mode 100644 wip/examples/camera4.php delete mode 100644 wip/examples/camera5.php delete mode 100644 wip/examples/camera_cull1.php delete mode 100644 wip/examples/camerafollow.php delete mode 100644 wip/examples/circle.html delete mode 100644 wip/examples/collision_group_vs_group.php delete mode 100644 wip/examples/collision_sprite_vs_group.php delete mode 100644 wip/examples/collision_sprite_vs_sprite.php delete mode 100644 wip/examples/collision_sprite_vs_sprite_custom_process.php delete mode 100644 wip/examples/crop.php delete mode 100644 wip/examples/crop2.php delete mode 100644 wip/examples/crop3.php delete mode 100644 wip/examples/drag.php delete mode 100644 wip/examples/fullscreen.php delete mode 100644 wip/examples/get_bounds.php delete mode 100644 wip/examples/graphics.php delete mode 100644 wip/examples/group1.php delete mode 100644 wip/examples/inherit.php delete mode 100644 wip/examples/input1.php delete mode 100644 wip/examples/input2.php delete mode 100644 wip/examples/invaders.php delete mode 100644 wip/examples/js-physics.php delete mode 100644 wip/examples/js.php delete mode 100644 wip/examples/js_full.php delete mode 100644 wip/examples/linkedlist1.php delete mode 100644 wip/examples/loader 2.html delete mode 100644 wip/examples/loader atlas json.html delete mode 100644 wip/examples/loader atlas xml.html delete mode 100644 wip/examples/loader audio.html delete mode 100644 wip/examples/loader spritesheet.html delete mode 100644 wip/examples/loader.html delete mode 100644 wip/examples/mapcollide.php delete mode 100644 wip/examples/mario.php delete mode 100644 wip/examples/mariocombo.php delete mode 100644 wip/examples/mariotogether.php delete mode 100644 wip/examples/math sincos.html delete mode 100644 wip/examples/motion1.php delete mode 100644 wip/examples/pixi 1.html delete mode 100644 wip/examples/point.html delete mode 100644 wip/examples/quadtree.php delete mode 100644 wip/examples/quadtree2.php delete mode 100644 wip/examples/raf.html delete mode 100644 wip/examples/rect1.php delete mode 100644 wip/examples/rendertexture.php delete mode 100644 wip/examples/rnd.html delete mode 100644 wip/examples/signals.html delete mode 100644 wip/examples/snap.php delete mode 100644 wip/examples/sound1.php delete mode 100644 wip/examples/sprite1.php delete mode 100644 wip/examples/sprite2.php delete mode 100644 wip/examples/sprite3.php delete mode 100644 wip/examples/sprite4.php delete mode 100644 wip/examples/sprite_extend.php delete mode 100644 wip/examples/stage 1.php delete mode 100644 wip/examples/stage 2.php delete mode 100644 wip/examples/stage 3.php delete mode 100644 wip/examples/stagecolor.php delete mode 100644 wip/examples/statetest.php delete mode 100644 wip/examples/test.php delete mode 100644 wip/examples/text1.php delete mode 100644 wip/examples/text2.php delete mode 100644 wip/examples/text3.php delete mode 100644 wip/examples/tilemap.php delete mode 100644 wip/examples/tilesprite1.php delete mode 100644 wip/examples/tilesprite2.php delete mode 100644 wip/examples/touch1.php delete mode 100644 wip/examples/tween.html delete mode 100644 wip/examples/tween2.php delete mode 100644 wip/examples/wip1.html delete mode 100644 wip/examples/world.php delete mode 100644 wip/phaser clean up/ArcadePhysics.ts delete mode 100644 wip/phaser clean up/Collision.ts delete mode 100644 wip/phaser clean up/CollisionMask.ts delete mode 100644 wip/phaser clean up/Debug.ts delete mode 100644 wip/phaser clean up/DebugPhysics.ts delete mode 100644 wip/phaser clean up/Emitter.ts delete mode 100644 wip/phaser clean up/Input.ts delete mode 100644 wip/phaser clean up/Motion.ts delete mode 100644 wip/phaser clean up/OldSprite.ts delete mode 100644 wip/phaser clean up/PixelUtils.ts delete mode 100644 wip/phaser clean up/Properties.ts delete mode 100644 wip/phaser clean up/Tilemap.ts delete mode 100644 wip/phaser clean up/aabb 1.ts delete mode 100644 wip/phaser clean up/aabb vs aabb 1.ts delete mode 100644 wip/phaser clean up/body1.ts delete mode 100644 wip/phaser clean up/obb vs obb.ts diff --git a/README.md b/README.md index f00c2651..88db2db8 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,8 @@ Updates: * Updated Pixi.js so that removing filters now works correctly without breaking the display list. * Phaser.Canvas.create updated to it can be given an ID as the 3rd parameter. * Updated display/fullscreen example to reflect new full screen change. +* Loads of updates to the TypeScript definitions files - games fully compile now and lots of missing classes added :) +* Removed 'null parent' check from Group constructor. Will parent to game.world only if parent value is undefined. Bug Fixes: @@ -66,7 +68,7 @@ Bug Fixes: * Group.length now returns the number of children in the Group regardless of their exists/alive state, or 0 if the Group is has no children. * Switch Camera.setBoundsToWorld to match world.bounds instead of world (thanks cocoademon) * Fixed an issue where passing null as the Group parent wouldn't set it to game.world as it should have (thanks tito100) -* Fixed Pixi bug (#425) incorrect width property for multi-line Bitmap (thanks jcd-as) +* Fixed Pixi bug (#425) incorrect width property for multi-line BitmapText (thanks jcd-as) You can view the Change Log for all previous versions at https://github.com/photonstorm/phaser/changelog.md @@ -81,6 +83,16 @@ We also provide a Grunt script that will build Phaser from source along with all Run `grunt` in the phaser folder for a list of command-line options. + +Bower +----- + +If you use bowser you can install phaser with: + +`bower install phaser` + +Nice and easy :) + ![Tanks](http://www.photonstorm.com/wp-content/uploads/2013/10/phaser_tanks-640x480.png) diff --git a/bower.json b/bower.json new file mode 100644 index 00000000..74bd4116 --- /dev/null +++ b/bower.json @@ -0,0 +1,37 @@ +{ + "name": "phaser", + "version": "1.1.3", + "homepage": "http://phaser.io", + "authors": [ + "photonstorm " + ], + "description": "A fun, free and fast 2D game framework for making HTML5 games for desktop and mobile, supporting Canvas and WebGL.", + "main": "build/phaser.min.js", + "keywords": [ + "html5", + "game", + "games", + "framework", + "canvas", + "WebGL", + "tilemaps", + "physics", + "sprites", + "fonts", + "images", + "audio", + "Web", + "Audio", + "touch", + "input", + "mobile" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} diff --git a/build/phaser.d.ts b/build/phaser.d.ts index 4d4654ac..4148ead4 100644 --- a/build/phaser.d.ts +++ b/build/phaser.d.ts @@ -260,7 +260,7 @@ declare module Phaser { } class Game { - constructor(width: number, height: number, renderer: number, parent: string, state: Object, transparent: boolean, antialias: boolean); + constructor(width: number, height: number, renderer: number, parent: string, state: Object, transparent?: boolean, antialias?: boolean); id: number; width: number; height: number; @@ -655,7 +655,7 @@ declare module Phaser { onAnimationStart: Phaser.Signal; onAnimationComplete: Phaser.Signal; onAnimationLoop: Phaser.Signal; - } + } class GameObjectFactory { constructor(game: Phaser.Game); @@ -687,7 +687,7 @@ declare module Phaser { type: number; renderOrderID: number; lifespan: number; - events: Phaser.Event[]; + events: Phaser.Events; animations: Phaser.AnimationManager; input: Phaser.InputHandler; key: string; @@ -707,8 +707,6 @@ declare module Phaser { bottomLeft: Phaser.Point; bounds: Phaser.Rectangle; body: Phaser.Physics.Arcade.Body; - velocity: number; - acceleration: number; inWorld: boolean; inWorldThreshold: number; angle: number; @@ -731,6 +729,24 @@ declare module Phaser { getBounds(rect: Phaser.Rectangle): Phaser.Rectangle; } + class Events { + parent: Phaser.Sprite; + onAddedToGroup: Phaser.Signal; + onRemovedFromGroup: Phaser.Signal; + onKilled: Phaser.Signal; + onRevived: Phaser.Signal; + onOutOfBounds: Phaser.Signal; + onInputOver: Phaser.Signal; + onInputOut: Phaser.Signal; + onInputDown: Phaser.Signal; + onInputUp: Phaser.Signal; + onDragStart: Phaser.Signal; + onDragStop: Phaser.Signal; + onAnimationStart: Phaser.Signal; + onAnimationComplete: Phaser.Signal; + onAnimationLoop: Phaser.Signal; + } + class TileSprite { constructor(game: Phaser.Game, x: number, y: number, width: number, height: number, key?: string, frame?: number); texture: Phaser.RenderTexture; @@ -1166,60 +1182,68 @@ declare module Phaser { update(time: number): boolean; } - class Easing { - Linear: { - None: (k: number) => number; - }; - Quadratic: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Cubic: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Quartic: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Quintic: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Sinusoidal: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Exponential: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Circular: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Elastic: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Back: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; - Bounce: { - In: (k: number) => number; - Out: (k: number) => number; - InOut: (k: number) => number; - }; + class Easing.Linear { + static None(k: number); + } + + class Easing.Quadratic { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Cubic { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Quartic { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Quintic { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Sinusoidal { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Exponential { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Circular { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Elastic { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Back { + static In(k: number); + static Out(k: number); + static InOut(k: number); + } + + class Easing.Bounce { + static In(k: number); + static Out(k: number); + static InOut(k: number); } class Time { @@ -1286,48 +1310,46 @@ declare module Phaser { onComplete(): void; } - module Animation { - class Frame { - constructor(index: number, x: number, y: number, width: number, height: number, name: string, uuid: string); - index: number; - x: number; - y: number; - width: number; - height: number; - centerX: number; - centerY: number; - distance: number; - name: string; - uuid: string; - rotated: boolean; - rotationDirection: string; - trimmed: boolean; - sourceSizeW: number; - sourceSizeH: number; - spriteSourceSizeX: number; - spriteSourceSizeY: number; - spriteSourceSizeW: number; - spriteSourcesizeH: number; - setTrim(trimmed: boolean, actualWidth: number, actualHeight: number, destX: number, destY: number, destWidth: number, destHeight: number): void; - } + class Frame { + constructor(index: number, x: number, y: number, width: number, height: number, name: string, uuid: string); + index: number; + x: number; + y: number; + width: number; + height: number; + centerX: number; + centerY: number; + distance: number; + name: string; + uuid: string; + rotated: boolean; + rotationDirection: string; + trimmed: boolean; + sourceSizeW: number; + sourceSizeH: number; + spriteSourceSizeX: number; + spriteSourceSizeY: number; + spriteSourceSizeW: number; + spriteSourcesizeH: number; + setTrim(trimmed: boolean, actualWidth: number, actualHeight: number, destX: number, destY: number, destWidth: number, destHeight: number): void; + } - class FrameData { - addFrame(frame: Frame): Frame; - getFrame(index: number): Frame; - getFrameByName(name: string): Frame; - checkFrame(name: string): boolean; - getFrameRange(start: number, end: number, output: Array): Array; - getFrames(frames: Array, useNumericIndex?: boolean, output?: Array): Array; - getFrameIndexes(frames: Array, useNumericIndex?: boolean, output?: Array): Array; - total: number; - } + class FrameData { + addFrame(frame: Frame): Frame; + getFrame(index: number): Frame; + getFrameByName(name: string): Frame; + checkFrame(name: string): boolean; + getFrameRange(start: number, end: number, output: Array): Array; + getFrames(frames: Array, useNumericIndex?: boolean, output?: Array): Array; + getFrameIndexes(frames: Array, useNumericIndex?: boolean, output?: Array): Array; + total: number; + } - class Parser { - spriteSheet(game: Phaser.Game, key: string, frameWidth: number, frameHeight: number, frameMax?: number): Phaser.Animation.FrameData; - JSONData(game: Phaser.Game, json: Object, cacheKey: string): Phaser.Animation.FrameData; - JSONDataHash(game: Phaser.Game, json: Object, cacheKey: string): Phaser.Animation.FrameData; - XMLData(game: Phaser.Game, xml: Object, cacheKey: string): Phaser.Animation.FrameData; - } + class AnimationParser { + spriteSheet(game: Phaser.Game, key: string, frameWidth: number, frameHeight: number, frameMax?: number): Phaser.Animation.FrameData; + JSONData(game: Phaser.Game, json: Object, cacheKey: string): Phaser.Animation.FrameData; + JSONDataHash(game: Phaser.Game, json: Object, cacheKey: string): Phaser.Animation.FrameData; + XMLData(game: Phaser.Game, xml: Object, cacheKey: string): Phaser.Animation.FrameData; } class Cache { @@ -1420,10 +1442,8 @@ declare module Phaser { nextFile(previousKey: string, success: boolean): void; } - module Loader { - class Parser { - bitmapFont(game: Phaser.Game, xml: Object, cacheKey: Phaser.Animation.FrameData): void; - } + class LoaderParser { + bitmapFont(game: Phaser.Game, xml: Object, cacheKey: Phaser.Animation.FrameData): void; } class Sound { diff --git a/examples/assets/tiles/tiles_spritesheet.png b/examples/assets/tiles/tiles_spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..57ee83b63cbacf9b18da9001ea83ff8b0f831889 GIT binary patch literal 128835 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 Cosk9r literal 0 HcmV?d00001 diff --git a/examples/display/bitmapdata wobble.js b/examples/display/bitmapdata wobble.js index 53190772..07224ba6 100644 --- a/examples/display/bitmapdata wobble.js +++ b/examples/display/bitmapdata wobble.js @@ -17,7 +17,7 @@ var waveDataCounter; function create() { // Create our BitmapData object at a size of 32x64 - bmd = game.add.bitmapData('ball', 32, 64); + bmd = game.add.bitmapData(32, 64); // And apply it to 100 randomly positioned sprites for (var i = 0; i < 100; i++) @@ -62,7 +62,7 @@ function updateWobblyBall() // Now all the pixel data has been redrawn we render it to the BitmapData object. // In CANVAS mode this doesn't do anything, but on WebGL it pushes the new texture to the GPU. - // If your game is exclusively running under Canvas you ca safely ignore this step. + // If your game is exclusively running under Canvas you can safely ignore this step. bmd.render(); // Cycle through the wave data - this is what causes the image to "undulate" diff --git a/examples/wip/bmd.js b/examples/wip/bmd.js index dda21b51..36d4e42a 100644 --- a/examples/wip/bmd.js +++ b/examples/wip/bmd.js @@ -14,7 +14,7 @@ var bmd; function create() { - bmd = game.add.bitmapData('ball', 32, 64); + bmd = game.add.bitmapData(32, 64); console.log(bmd); diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js index 93633159..4df1e197 100644 --- a/examples/wip/tilemap.js +++ b/examples/wip/tilemap.js @@ -3,6 +3,9 @@ var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: function preload() { + // game.load.tilemap('map', 'assets/maps/mario1.json', null, Phaser.Tilemap.TILED_JSON); + // game.load.tileset('marioTiles', 'assets/maps/mario1.png', 16, 16); + game.load.tilemap('map', 'assets/maps/newtest.json', null, Phaser.Tilemap.TILED_JSON); game.load.tileset('tiles', 'assets/maps/ground_1x1.png', 32, 32); // game.load.image('phaser', 'assets/sprites/phaser-ship.png'); @@ -21,25 +24,20 @@ var sprite; function create() { - game.stage.backgroundColor = '#5c94fc'; + // game.stage.backgroundColor = '#5c94fc'; map = game.add.tilemap('map'); + // map.setCollisionByIndexRange(80, 97); // mario map.setCollisionByIndex(1); // Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, tileset, tilemap, layer) { - - // layer = game.add.tilemapLayer(0, 0, 800, 600, null, map, 0); layer = game.add.tilemapLayer(0, 0, 800, 600, null, map, 0); // layer2 = game.add.tilemapLayer(0, 0, 400, 600, null, map, 0); // layer.cameraOffset.x = 400; // layer.alpha = 0.5; - // tileset = game.add.tileset('tilesNes'); - // layer = game.add.tilemapLayer(0, 0, map.layers[0].width*tilesetNes.tileWidth, 600, tileset, map, 0); - // disable this and you can place anywhere, but will almost certainly screw collision - layer.resizeWorld(); sprite = game.add.sprite(260, 100, 'phaser'); @@ -51,10 +49,6 @@ function create() { // In this case the box is 50px in and 25px down. sprite.body.setSize(16, 16, 8, 8); - - - - // We'll set a lower max angular velocity here to keep it from going totally nuts sprite.body.maxAngular = 500; diff --git a/src/core/Game.js b/src/core/Game.js index 692f6387..b195f6c7 100644 --- a/src/core/Game.js +++ b/src/core/Game.js @@ -17,8 +17,8 @@ * @param {number} [width=800] - The width of your game in game pixels. * @param {number} [height=600] - The height of your game in game pixels. * @param {number} [renderer=Phaser.AUTO] - Which renderer to use: Phaser.AUTO will auto-detect, Phaser.WEBGL, Phaser.CANVAS or Phaser.HEADLESS (no rendering at all). -* @param {HTMLElement} [parent=''] - The Games DOM parent. -* @param {any} [state=null] - Description. +* @param {string|HTMLElement} [parent=''] - The DOM element into which this games canvas will be injected. Either a DOM ID (string) or the element itself. +* @param {object} [state=null] - The default state object. A object consisting of Phaser.State functions (preload, create, update, render) or null. * @param {boolean} [transparent=false] - Use a transparent canvas background or not. * @param {boolean} [antialias=true] - Anti-alias graphics. */ diff --git a/src/core/Group.js b/src/core/Group.js index 0fe18896..6e23200f 100644 --- a/src/core/Group.js +++ b/src/core/Group.js @@ -10,7 +10,7 @@ * @classdesc A Group is a container for display objects that allows for fast pooling, recycling and collision checks. * @constructor * @param {Phaser.Game} game - A reference to the currently running game. -* @param {*} parent - The parent Group or DisplayObjectContainer that will hold this group, if any. If not set, or set to null, it will use game.world. +* @param {*} parent - The parent Group or DisplayObjectContainer that will hold this group, if any. If undefined it will use game.world. * @param {string} [name=group] - A name for this Group. Not used internally but useful for debugging. * @param {boolean} [useStage=false] - Should the DisplayObjectContainer this Group creates be added to the World (default, false) or direct to the Stage (true). */ @@ -21,7 +21,7 @@ Phaser.Group = function (game, parent, name, useStage) { */ this.game = game; - if (typeof parent === 'undefined' || parent === null) + if (typeof parent === 'undefined') { parent = game.world; } diff --git a/src/gameobjects/DOMSprite.js b/src/gameobjects/DOMSprite.js new file mode 100644 index 00000000..d990bc5b --- /dev/null +++ b/src/gameobjects/DOMSprite.js @@ -0,0 +1,88 @@ +/** +* @author Richard Davey +* @copyright 2013 Photon Storm Ltd. +* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} +*/ + +/** +* Create a new DOMSprite. +* @class Phaser.DOMSprite +* @constructor +* @param {Phaser.Game} game - Current game instance. +* @param {string} id - DOM ID. +* @param {number} x - X position of the new text object. +* @param {number} y - Y position of the new text object. +* @param {string} text - The actual text that will be written. +* @param {object} style - The style object containing style attributes like font, font size , +*/ +Phaser.DOMSprite = function (game, element, x, y, style) { + + x = x || 0; + y = y || 0; + style = style || ''; + + /** + * @property {Phaser.Game} game - A reference to the currently running Game. + */ + this.game = game; + + /** + * @property {boolean} exists - If exists = false then the Text isn't updated by the core game loop. + * @default + */ + this.exists = true; + + /** + * @property {boolean} alive - This is a handy little var your game can use to determine if an object is alive or not, it doesn't effect rendering. + * @default + */ + this.alive = true; + + /** + * @property {Phaser.Group} group - The parent Group of this Text object. + */ + this.group = null; + + /** + * @property {string} name - The user defined name given to this object. + * @default + */ + this.name = ''; + + /** + * @property {number} type - The const type of this object. + * @default + */ + this.type = Phaser.DOMSPRITE; + + /** + * @property {boolean} visible - Sets the visible state of this DOMSprite. + * @default + */ + this.visible = true; + + /* + if (parent) + { + if (typeof parent === 'string') + { + // hopefully an element ID + target = document.getElementById(parent); + } + else if (typeof parent === 'object' && parent.nodeType === 1) + { + // quick test for a HTMLelement + target = parent; + } + + if (overflowHidden) + { + target.style.overflow = 'hidden'; + } + } + */ + +}; + +// Phaser.DOMSprite.prototype = Object.create(PIXI.DOMSprite.prototype); +// Phaser.DOMSprite.prototype.constructor = Phaser.DOMSprite; diff --git a/src/gameobjects/Text.js b/src/gameobjects/Text.js index b5be0621..aa20c490 100644 --- a/src/gameobjects/Text.js +++ b/src/gameobjects/Text.js @@ -5,7 +5,7 @@ */ /** -* Create a new Text. +* Create a new `Text` object. * @class Phaser.Text * @constructor * @param {Phaser.Game} game - Current game instance. diff --git a/src/loader/Cache.js b/src/loader/Cache.js index 40ce6d0a..7d0bad59 100644 --- a/src/loader/Cache.js +++ b/src/loader/Cache.js @@ -415,8 +415,10 @@ Phaser.Cache.prototype = { { return this._canvases[key].canvas; } - - return null; + else + { + console.warn('Phaser.Cache.getCanvas: Invalid key: "' + key + '"'); + } }, @@ -433,8 +435,10 @@ Phaser.Cache.prototype = { { return this._bitmapDatas[key]; } - - return null; + else + { + console.warn('Phaser.Cache.getBitmapData: Invalid key: "' + key + '"'); + } }, @@ -469,8 +473,10 @@ Phaser.Cache.prototype = { { return this._images[key].data; } - - return null; + else + { + console.warn('Phaser.Cache.getImage: Invalid key: "' + key + '"'); + } }, @@ -487,8 +493,10 @@ Phaser.Cache.prototype = { { return this._tilesets[key].data; } - - return null; + else + { + console.warn('Phaser.Cache.getTilesetImage: Invalid key: "' + key + '"'); + } }, @@ -505,8 +513,10 @@ Phaser.Cache.prototype = { { return this._tilesets[key].tileData; } - - return null; + else + { + console.warn('Phaser.Cache.getTileset: Invalid key: "' + key + '"'); + } }, @@ -523,8 +533,11 @@ Phaser.Cache.prototype = { { return this._tilemaps[key]; } + else + { + console.warn('Phaser.Cache.getTilemapData: Invalid key: "' + key + '"'); + } - return null; }, /** @@ -625,8 +638,10 @@ Phaser.Cache.prototype = { { return this._textures[key]; } - - return null; + else + { + console.warn('Phaser.Cache.getTexture: Invalid key: "' + key + '"'); + } }, @@ -643,8 +658,10 @@ Phaser.Cache.prototype = { { return this._sounds[key]; } - - return null; + else + { + console.warn('Phaser.Cache.getSound: Invalid key: "' + key + '"'); + } }, @@ -661,8 +678,10 @@ Phaser.Cache.prototype = { { return this._sounds[key].data; } - - return null; + else + { + console.warn('Phaser.Cache.getSoundData: Invalid key: "' + key + '"'); + } }, @@ -726,8 +745,10 @@ Phaser.Cache.prototype = { { return this._text[key].data; } - - return null; + else + { + console.warn('Phaser.Cache.getText: Invalid key: "' + key + '"'); + } }, diff --git a/src/tilemap/Tilemap.js b/src/tilemap/Tilemap.js index 58dcbbb4..1078fe14 100644 --- a/src/tilemap/Tilemap.js +++ b/src/tilemap/Tilemap.js @@ -21,7 +21,7 @@ Phaser.Tilemap = function (game, key) { this.game = game; /** - * @property {array} layers - An array of Tilemap layers. + * @property {array} layers - An array of Tilemap layer data. */ this.layers = null; @@ -30,7 +30,6 @@ Phaser.Tilemap = function (game, key) { this.key = key; this.layers = game.cache.getTilemapData(key).layers; - this.calculateIndexes(); } else { @@ -45,7 +44,6 @@ Phaser.Tilemap = function (game, key) { /** * @property {array} debugMap - Map data used for debug values only. */ - this.debugMap = []; /** @@ -117,25 +115,40 @@ Phaser.Tilemap.prototype = { data: data, indexes: [], dirty: true + }); this.currentLayer = this.layers.length - 1; }, + createTilemapLayer: function (x, y, renderWidth, renderHeight, tileset, layer) { + + return this.game.world.add(new Phaser.TilemapLayer(this.game, x, y, renderWidth, renderHeight, tileset, this, layer)); + + }, + + setCollisionByIndexRange: function (start, stop, layer) { + + if (start > stop) + { + return; + } + + for (var i = start; i <= stop; i++) + { + this.setCollisionByIndex(i, layer); + } + + }, + /** * Sets collision values on a tile in the set. * * @method Phaser.Tileset#setCollision - * @param {number} index - The index of the tile within the set. - * @param {boolean} left - Should the tile collide on the left? - * @param {boolean} right - Should the tile collide on the right? - * @param {boolean} up - Should the tile collide on the top? - * @param {boolean} down - Should the tile collide on the bottom? + * @param {number} index - The index of the tile on the layer. + * @param {number} layer - The layer to operate on. */ - - // Sets all tiles matching the given index to collide on the given faces - // Recalculates the collision map setCollisionByIndex: function (index, layer) { if (typeof layer === "undefined") { layer = this.currentLayer; } @@ -157,6 +170,9 @@ Phaser.Tilemap.prototype = { } } + // Sets all tiles matching the given index to collide on the given faces + // Recalculates the collision map + // Now re-calculate interesting faces this.calculateFaces(layer); @@ -169,7 +185,7 @@ Phaser.Tilemap.prototype = { var left = null; var right = null; -console.log(this.layers[layer].width, 'x', this.layers[layer].height); + // console.log(this.layers[layer].width, 'x', this.layers[layer].height); for (var y = 0; y < this.layers[layer].height ; y++) { diff --git a/src/tilemap/TilemapLayer.js b/src/tilemap/TilemapLayer.js index 8fb940b3..28da86e7 100644 --- a/src/tilemap/TilemapLayer.js +++ b/src/tilemap/TilemapLayer.js @@ -16,7 +16,7 @@ * @param {number} renderHeight - Height of the layer. * @param {Phaser.Tileset|string} tileset - The tile set used for rendering. * @param {Phaser.Tilemap} tilemap - The tilemap to which this layer belongs. -* @param {number} layer - The layer index within the map. +* @param {number|string} [layer=0] - The layer within the tilemap this TilemapLayer represents. */ Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, tileset, tilemap, layer) { @@ -48,7 +48,7 @@ Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, tileset, /** * @property {Phaser.Frame} textureFrame - Dimensions of the renderable area. */ - this.textureFrame = new Phaser.Frame(0, 0, 0, renderWidth, renderHeight, 'tilemaplayer', game.rnd.uuid()); + this.textureFrame = new Phaser.Frame(0, 0, 0, renderWidth, renderHeight, 'tilemapLayer', game.rnd.uuid()); Phaser.Sprite.call(this, this.game, x, y, this.texture, this.textureFrame); @@ -248,12 +248,12 @@ Phaser.TilemapLayer = function (game, x, y, renderWidth, renderHeight, tileset, this.tilemap = null; /** - * @property {number} layer - Tilemap layer index. + * @property {object} layer - The layer object within the Tilemap that this layer represents. */ this.layer = null; /** - * @property {number} index + * @property {number} index - The index of this layer within the Tilemap. */ this.index = 0; @@ -349,13 +349,13 @@ Phaser.TilemapLayer.prototype.updateTileset = function (tileset) { */ Phaser.TilemapLayer.prototype.updateMapData = function (tilemap, layer) { - if (typeof layer === 'undefined') - { - layer = 0; - } - if (tilemap instanceof Phaser.Tilemap) { + if (typeof layer === 'undefined') + { + layer = 0; + } + this.tilemap = tilemap; this.layer = this.tilemap.layers[layer]; this.tileWidth = this.layer.tileWidth; @@ -690,7 +690,8 @@ Phaser.TilemapLayer.prototype.render = function () { this.dirty = true; } - if (!this.dirty || !this.tileset || !this.tilemap || !this.visible) + // if (!this.dirty || !this.tileset || !this.tilemap || !this.visible) + if (!this.dirty || !this.tilemap || !this.visible) { return; } @@ -710,10 +711,8 @@ Phaser.TilemapLayer.prototype.render = function () { this._ty = this._dy; this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); - // this.context.fillStyle = '#000000'; - // this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); - - this.context.strokeStyle = '#00ff00'; + this.context.fillStyle = 'rgba(0,255,0,0.3)'; + this.context.strokeStyle = 'rgba(0,255,0,0.9)'; for (var y = this._startY, lenY = this._startY + this._maxY; y < lenY; y++) { @@ -725,25 +724,27 @@ Phaser.TilemapLayer.prototype.render = function () { // var tile = this.tileset.tiles[this._column[x] - 1]; - if (tile) - { - // this.context.drawImage( - // this.tileset.image, - // tile.x, - // tile.y, - // this.tileWidth, - // this.tileHeight, - // Math.floor(this._tx), - // Math.floor(this._ty), - // this.tileWidth, - // this.tileHeight - // ); - } + // if (tile && this.tileset) + // { + // this.context.drawImage( + // this.tileset.image, + // tile.x, + // tile.y, + // this.tileWidth, + // this.tileHeight, + // Math.floor(this._tx), + // Math.floor(this._ty), + // this.tileWidth, + // this.tileHeight + // ); + // } if (tile && (tile.faceTop || tile.faceBottom || tile.faceLeft || tile.faceRight)) { this._tx = Math.floor(this._tx); + this.context.fillRect(this._tx, this._ty, this.tileWidth, this.tileHeight); + this.context.beginPath(); if (tile.faceTop) @@ -770,9 +771,9 @@ Phaser.TilemapLayer.prototype.render = function () { this.context.lineTo(this._tx + this.tileWidth, this._ty + this.tileHeight); } + // this.context.closePath(); this.context.stroke(); - // this.context.fillRect(this._tx, this._ty, this.tileWidth, this.tileHeight); // this.context.strokeRect(this._tx, this._ty, this.tileWidth, this.tileHeight); } diff --git a/wip/examples/a_template.php b/wip/examples/a_template.php deleted file mode 100644 index 69811ff7..00000000 --- a/wip/examples/a_template.php +++ /dev/null @@ -1,39 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/anchor1.php b/wip/examples/anchor1.php deleted file mode 100644 index f0407a48..00000000 --- a/wip/examples/anchor1.php +++ /dev/null @@ -1,57 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/bitmapFont1.php b/wip/examples/bitmapFont1.php deleted file mode 100644 index b76db46a..00000000 --- a/wip/examples/bitmapFont1.php +++ /dev/null @@ -1,39 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/body1.php b/wip/examples/body1.php deleted file mode 100644 index 07cf8781..00000000 --- a/wip/examples/body1.php +++ /dev/null @@ -1,62 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/body2.php b/wip/examples/body2.php deleted file mode 100644 index c6272e94..00000000 --- a/wip/examples/body2.php +++ /dev/null @@ -1,63 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/body3.php b/wip/examples/body3.php deleted file mode 100644 index d07f9c3b..00000000 --- a/wip/examples/body3.php +++ /dev/null @@ -1,69 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/bring to top.php b/wip/examples/bring to top.php deleted file mode 100644 index c405cf91..00000000 --- a/wip/examples/bring to top.php +++ /dev/null @@ -1,54 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/bring to top2.php b/wip/examples/bring to top2.php deleted file mode 100644 index f693a7a8..00000000 --- a/wip/examples/bring to top2.php +++ /dev/null @@ -1,55 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/bringToTop.php b/wip/examples/bringToTop.php deleted file mode 100644 index 26c663be..00000000 --- a/wip/examples/bringToTop.php +++ /dev/null @@ -1,341 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/bringToTop2.php b/wip/examples/bringToTop2.php deleted file mode 100644 index 8fba2e33..00000000 --- a/wip/examples/bringToTop2.php +++ /dev/null @@ -1,41 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/bringToTop3.php b/wip/examples/bringToTop3.php deleted file mode 100644 index 34796a8b..00000000 --- a/wip/examples/bringToTop3.php +++ /dev/null @@ -1,94 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/button1.php b/wip/examples/button1.php deleted file mode 100644 index 08d7b7d2..00000000 --- a/wip/examples/button1.php +++ /dev/null @@ -1,67 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/camera1.php b/wip/examples/camera1.php deleted file mode 100644 index 254a027a..00000000 --- a/wip/examples/camera1.php +++ /dev/null @@ -1,72 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/camera2.php b/wip/examples/camera2.php deleted file mode 100644 index 87295cec..00000000 --- a/wip/examples/camera2.php +++ /dev/null @@ -1,175 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/camera3.php b/wip/examples/camera3.php deleted file mode 100644 index 8b3b46ac..00000000 --- a/wip/examples/camera3.php +++ /dev/null @@ -1,74 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/camera4.php b/wip/examples/camera4.php deleted file mode 100644 index 81df4f6a..00000000 --- a/wip/examples/camera4.php +++ /dev/null @@ -1,56 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/camera5.php b/wip/examples/camera5.php deleted file mode 100644 index 123dbe0d..00000000 --- a/wip/examples/camera5.php +++ /dev/null @@ -1,70 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/camera_cull1.php b/wip/examples/camera_cull1.php deleted file mode 100644 index d332703b..00000000 --- a/wip/examples/camera_cull1.php +++ /dev/null @@ -1,68 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/camerafollow.php b/wip/examples/camerafollow.php deleted file mode 100644 index 97e4dcc5..00000000 --- a/wip/examples/camerafollow.php +++ /dev/null @@ -1,79 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/circle.html b/wip/examples/circle.html deleted file mode 100644 index 8175a630..00000000 --- a/wip/examples/circle.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/collision_group_vs_group.php b/wip/examples/collision_group_vs_group.php deleted file mode 100644 index 0d921cf9..00000000 --- a/wip/examples/collision_group_vs_group.php +++ /dev/null @@ -1,117 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/collision_sprite_vs_group.php b/wip/examples/collision_sprite_vs_group.php deleted file mode 100644 index 4f2fac73..00000000 --- a/wip/examples/collision_sprite_vs_group.php +++ /dev/null @@ -1,100 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/collision_sprite_vs_sprite.php b/wip/examples/collision_sprite_vs_sprite.php deleted file mode 100644 index 24c4d55a..00000000 --- a/wip/examples/collision_sprite_vs_sprite.php +++ /dev/null @@ -1,65 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/collision_sprite_vs_sprite_custom_process.php b/wip/examples/collision_sprite_vs_sprite_custom_process.php deleted file mode 100644 index f691580c..00000000 --- a/wip/examples/collision_sprite_vs_sprite_custom_process.php +++ /dev/null @@ -1,96 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/crop.php b/wip/examples/crop.php deleted file mode 100644 index 598fb4ac..00000000 --- a/wip/examples/crop.php +++ /dev/null @@ -1,46 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/crop2.php b/wip/examples/crop2.php deleted file mode 100644 index 7df1b996..00000000 --- a/wip/examples/crop2.php +++ /dev/null @@ -1,46 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/crop3.php b/wip/examples/crop3.php deleted file mode 100644 index 45551cd3..00000000 --- a/wip/examples/crop3.php +++ /dev/null @@ -1,48 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/drag.php b/wip/examples/drag.php deleted file mode 100644 index 8ee651eb..00000000 --- a/wip/examples/drag.php +++ /dev/null @@ -1,43 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/fullscreen.php b/wip/examples/fullscreen.php deleted file mode 100644 index a65cd53a..00000000 --- a/wip/examples/fullscreen.php +++ /dev/null @@ -1,63 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/get_bounds.php b/wip/examples/get_bounds.php deleted file mode 100644 index 415eb9d9..00000000 --- a/wip/examples/get_bounds.php +++ /dev/null @@ -1,47 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/graphics.php b/wip/examples/graphics.php deleted file mode 100644 index efac7411..00000000 --- a/wip/examples/graphics.php +++ /dev/null @@ -1,80 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/group1.php b/wip/examples/group1.php deleted file mode 100644 index ef2febcf..00000000 --- a/wip/examples/group1.php +++ /dev/null @@ -1,84 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/inherit.php b/wip/examples/inherit.php deleted file mode 100644 index 89dc7e2c..00000000 --- a/wip/examples/inherit.php +++ /dev/null @@ -1,167 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/input1.php b/wip/examples/input1.php deleted file mode 100644 index fc892ea6..00000000 --- a/wip/examples/input1.php +++ /dev/null @@ -1,48 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - -
- - - - - \ No newline at end of file diff --git a/wip/examples/input2.php b/wip/examples/input2.php deleted file mode 100644 index 4f8c94f1..00000000 --- a/wip/examples/input2.php +++ /dev/null @@ -1,60 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/invaders.php b/wip/examples/invaders.php deleted file mode 100644 index ae429829..00000000 --- a/wip/examples/invaders.php +++ /dev/null @@ -1,63 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/js-physics.php b/wip/examples/js-physics.php deleted file mode 100644 index da3f186b..00000000 --- a/wip/examples/js-physics.php +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wip/examples/js.php b/wip/examples/js.php deleted file mode 100644 index f49d52a6..00000000 --- a/wip/examples/js.php +++ /dev/null @@ -1,109 +0,0 @@ - -?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wip/examples/js_full.php b/wip/examples/js_full.php deleted file mode 100644 index faf156c2..00000000 --- a/wip/examples/js_full.php +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wip/examples/linkedlist1.php b/wip/examples/linkedlist1.php deleted file mode 100644 index c877264f..00000000 --- a/wip/examples/linkedlist1.php +++ /dev/null @@ -1,74 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/loader 2.html b/wip/examples/loader 2.html deleted file mode 100644 index 048ac00e..00000000 --- a/wip/examples/loader 2.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/loader atlas json.html b/wip/examples/loader atlas json.html deleted file mode 100644 index df0a42f5..00000000 --- a/wip/examples/loader atlas json.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/loader atlas xml.html b/wip/examples/loader atlas xml.html deleted file mode 100644 index e89d70e6..00000000 --- a/wip/examples/loader atlas xml.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/loader audio.html b/wip/examples/loader audio.html deleted file mode 100644 index 137ade9b..00000000 --- a/wip/examples/loader audio.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/loader spritesheet.html b/wip/examples/loader spritesheet.html deleted file mode 100644 index 12cf925f..00000000 --- a/wip/examples/loader spritesheet.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/loader.html b/wip/examples/loader.html deleted file mode 100644 index 955593f6..00000000 --- a/wip/examples/loader.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/mapcollide.php b/wip/examples/mapcollide.php deleted file mode 100644 index 9d8f888b..00000000 --- a/wip/examples/mapcollide.php +++ /dev/null @@ -1,85 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/mario.php b/wip/examples/mario.php deleted file mode 100644 index c05900fd..00000000 --- a/wip/examples/mario.php +++ /dev/null @@ -1,60 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/mariocombo.php b/wip/examples/mariocombo.php deleted file mode 100644 index 551db25b..00000000 --- a/wip/examples/mariocombo.php +++ /dev/null @@ -1,48 +0,0 @@ - - - - phaser.js - Super Mario Combo - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/mariotogether.php b/wip/examples/mariotogether.php deleted file mode 100644 index 908a2361..00000000 --- a/wip/examples/mariotogether.php +++ /dev/null @@ -1,45 +0,0 @@ - - - - phaser.js - Super Mario Combo - - - - - - - - \ No newline at end of file diff --git a/wip/examples/math sincos.html b/wip/examples/math sincos.html deleted file mode 100644 index 061282ff..00000000 --- a/wip/examples/math sincos.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/motion1.php b/wip/examples/motion1.php deleted file mode 100644 index b3171080..00000000 --- a/wip/examples/motion1.php +++ /dev/null @@ -1,98 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/pixi 1.html b/wip/examples/pixi 1.html deleted file mode 100644 index 4bd70188..00000000 --- a/wip/examples/pixi 1.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/point.html b/wip/examples/point.html deleted file mode 100644 index 716778e9..00000000 --- a/wip/examples/point.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/quadtree.php b/wip/examples/quadtree.php deleted file mode 100644 index afee3f4c..00000000 --- a/wip/examples/quadtree.php +++ /dev/null @@ -1,110 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/quadtree2.php b/wip/examples/quadtree2.php deleted file mode 100644 index e7746bd0..00000000 --- a/wip/examples/quadtree2.php +++ /dev/null @@ -1,90 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/raf.html b/wip/examples/raf.html deleted file mode 100644 index 939844a7..00000000 --- a/wip/examples/raf.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - - - - - - -
?
-
Game Time: 
- - - - - \ No newline at end of file diff --git a/wip/examples/rect1.php b/wip/examples/rect1.php deleted file mode 100644 index f88d102d..00000000 --- a/wip/examples/rect1.php +++ /dev/null @@ -1,22 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/rendertexture.php b/wip/examples/rendertexture.php deleted file mode 100644 index 1746e071..00000000 --- a/wip/examples/rendertexture.php +++ /dev/null @@ -1,42 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/rnd.html b/wip/examples/rnd.html deleted file mode 100644 index a6bd1f57..00000000 --- a/wip/examples/rnd.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/signals.html b/wip/examples/signals.html deleted file mode 100644 index 0871cc32..00000000 --- a/wip/examples/signals.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/snap.php b/wip/examples/snap.php deleted file mode 100644 index bbc78ef4..00000000 --- a/wip/examples/snap.php +++ /dev/null @@ -1,54 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/sound1.php b/wip/examples/sound1.php deleted file mode 100644 index 4def5f6e..00000000 --- a/wip/examples/sound1.php +++ /dev/null @@ -1,71 +0,0 @@ - - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/sprite1.php b/wip/examples/sprite1.php deleted file mode 100644 index 18b58c5f..00000000 --- a/wip/examples/sprite1.php +++ /dev/null @@ -1,43 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/sprite2.php b/wip/examples/sprite2.php deleted file mode 100644 index 79244eb2..00000000 --- a/wip/examples/sprite2.php +++ /dev/null @@ -1,55 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/sprite3.php b/wip/examples/sprite3.php deleted file mode 100644 index ccaba885..00000000 --- a/wip/examples/sprite3.php +++ /dev/null @@ -1,65 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/sprite4.php b/wip/examples/sprite4.php deleted file mode 100644 index 295eed61..00000000 --- a/wip/examples/sprite4.php +++ /dev/null @@ -1,70 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/sprite_extend.php b/wip/examples/sprite_extend.php deleted file mode 100644 index 77853a9b..00000000 --- a/wip/examples/sprite_extend.php +++ /dev/null @@ -1,56 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/stage 1.php b/wip/examples/stage 1.php deleted file mode 100644 index b90f8c86..00000000 --- a/wip/examples/stage 1.php +++ /dev/null @@ -1,55 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/stage 2.php b/wip/examples/stage 2.php deleted file mode 100644 index f30ed092..00000000 --- a/wip/examples/stage 2.php +++ /dev/null @@ -1,66 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/stage 3.php b/wip/examples/stage 3.php deleted file mode 100644 index 859fae54..00000000 --- a/wip/examples/stage 3.php +++ /dev/null @@ -1,68 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/stagecolor.php b/wip/examples/stagecolor.php deleted file mode 100644 index 2e744126..00000000 --- a/wip/examples/stagecolor.php +++ /dev/null @@ -1,31 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/statetest.php b/wip/examples/statetest.php deleted file mode 100644 index 9d8f888b..00000000 --- a/wip/examples/statetest.php +++ /dev/null @@ -1,85 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/test.php b/wip/examples/test.php deleted file mode 100644 index d85c2305..00000000 --- a/wip/examples/test.php +++ /dev/null @@ -1,79 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - \ No newline at end of file diff --git a/wip/examples/text1.php b/wip/examples/text1.php deleted file mode 100644 index 4ccbb80d..00000000 --- a/wip/examples/text1.php +++ /dev/null @@ -1,31 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/text2.php b/wip/examples/text2.php deleted file mode 100644 index 64226d1c..00000000 --- a/wip/examples/text2.php +++ /dev/null @@ -1,41 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/text3.php b/wip/examples/text3.php deleted file mode 100644 index aec89013..00000000 --- a/wip/examples/text3.php +++ /dev/null @@ -1,82 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/tilemap.php b/wip/examples/tilemap.php deleted file mode 100644 index b37e1945..00000000 --- a/wip/examples/tilemap.php +++ /dev/null @@ -1,62 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/tilesprite1.php b/wip/examples/tilesprite1.php deleted file mode 100644 index fb522309..00000000 --- a/wip/examples/tilesprite1.php +++ /dev/null @@ -1,63 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/tilesprite2.php b/wip/examples/tilesprite2.php deleted file mode 100644 index 5ad09c6f..00000000 --- a/wip/examples/tilesprite2.php +++ /dev/null @@ -1,54 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/touch1.php b/wip/examples/touch1.php deleted file mode 100644 index 120b6e4d..00000000 --- a/wip/examples/touch1.php +++ /dev/null @@ -1,62 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/tween.html b/wip/examples/tween.html deleted file mode 100644 index 609e4b0b..00000000 --- a/wip/examples/tween.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/tween2.php b/wip/examples/tween2.php deleted file mode 100644 index 8df04a3e..00000000 --- a/wip/examples/tween2.php +++ /dev/null @@ -1,42 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/examples/wip1.html b/wip/examples/wip1.html deleted file mode 100644 index aa95919c..00000000 --- a/wip/examples/wip1.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - phaser.js - a(nother) new beginning - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wip/examples/world.php b/wip/examples/world.php deleted file mode 100644 index 1061a3a8..00000000 --- a/wip/examples/world.php +++ /dev/null @@ -1,106 +0,0 @@ - - - - phaser.js - a new beginning - - - - - - - - \ No newline at end of file diff --git a/wip/phaser clean up/ArcadePhysics.ts b/wip/phaser clean up/ArcadePhysics.ts deleted file mode 100644 index 00ae9b18..00000000 --- a/wip/phaser clean up/ArcadePhysics.ts +++ /dev/null @@ -1,1121 +0,0 @@ -/// -/// -/// -/// -/// - -/** -* Phaser - PhysicsManager -* -* Your game only has one PhysicsManager instance and it's responsible for looking after, creating and colliding -* all of the physics objects in the world. -*/ - - -module Phaser.Physics { - - export class ArcadePhysics { - - constructor(game: Game, width: number, height: number) { - - this.game = game; - - this.gravity = new Vec2; - this.drag = new Vec2; - this.bounce = new Vec2; - this.angularDrag = 0; - - this.bounds = new Rectangle(0, 0, width, height); - - this._distance = new Vec2; - this._tangent = new Vec2; - - this.members = new Group(game); - - } - - /** - * Local private reference to Game. - */ - public game: Game; - - /** - * Physics object pool - */ - public members: Group; - - // Temp calculation vars - private _drag: number; - private _delta: number; - private _velocityDelta: number; - private _length: number = 0; - private _distance: Vec2; - private _tangent: Vec2; - private _separatedX: bool; - private _separatedY: bool; - private _overlap: number; - private _maxOverlap: number; - private _obj1Velocity: number; - private _obj2Velocity: number; - private _obj1NewVelocity: number; - private _obj2NewVelocity: number; - private _average: number; - private _quadTree: QuadTree; - private _quadTreeResult: bool; - - public bounds: Rectangle; - - public gravity: Vec2; - public drag: Vec2; - public bounce: Vec2; - public angularDrag: number; - - /** - * The overlap bias is used when calculating hull overlap before separation - change it if you have especially small or large GameObjects - * @type {number} - */ - static OVERLAP_BIAS: number = 4; - - /** - * The overlap bias is used when calculating hull overlap before separation - change it if you have especially small or large GameObjects - * @type {number} - */ - static TILE_OVERLAP: bool = false; - - /** - * @type {number} - */ - public worldDivisions: number = 6; - - - /* - public update() { - - this._length = this._objects.length; - - for (var i = 0; i < this._length; i++) - { - if (this._objects[i]) - { - this._objects[i].preUpdate(); - this.updateMotion(this._objects[i]); - this.collideWorld(this._objects[i]); - - for (var x = 0; x < this._length; x++) - { - if (this._objects[x] && this._objects[x] !== this._objects[i]) - { - //this.collideShapes(this._objects[i], this._objects[x]); - var r = this.NEWseparate(this._objects[i], this._objects[x]); - //console.log('sep', r); - } - } - - } - } - - } - - public render() { - - // iterate through the objects here, updating and colliding - for (var i = 0; i < this._length; i++) - { - if (this._objects[i]) - { - this._objects[i].render(this.game.stage.context); - } - } - - } -*/ - - public updateMotion(body: Phaser.Physics.Body) { - - if (body.type == Types.BODY_DISABLED) - { - return; - } - - this._velocityDelta = (this.computeVelocity(body.angularVelocity, body.gravity.x, body.angularAcceleration, body.angularDrag, body.maxAngular) - body.angularVelocity) / 2; - body.angularVelocity += this._velocityDelta; - body.sprite.transform.rotation += body.angularVelocity * this.game.time.elapsed; - body.angularVelocity += this._velocityDelta; - - this._velocityDelta = (this.computeVelocity(body.velocity.x, body.gravity.x, body.acceleration.x, body.drag.x) - body.velocity.x) / 2; - body.velocity.x += this._velocityDelta; - this._delta = body.velocity.x * this.game.time.elapsed; - body.velocity.x += this._velocityDelta; - //body.position.x += this._delta; - body.sprite.x += this._delta; - - this._velocityDelta = (this.computeVelocity(body.velocity.y, body.gravity.y, body.acceleration.y, body.drag.y) - body.velocity.y) / 2; - body.velocity.y += this._velocityDelta; - this._delta = body.velocity.y * this.game.time.elapsed; - body.velocity.y += this._velocityDelta; - //body.position.y += this._delta; - body.sprite.y += this._delta; - - } - - /** - * A tween-like function that takes a starting velocity and some other factors and returns an altered velocity. - * - * @param {number} Velocity Any component of velocity (e.g. 20). - * @param {number} Acceleration Rate at which the velocity is changing. - * @param {number} Drag Really kind of a deceleration, this is how much the velocity changes if Acceleration is not set. - * @param {number} Max An absolute value cap for the velocity. - * - * @return {number} The altered Velocity value. - */ - public computeVelocity(velocity: number, gravity: number = 0, acceleration: number = 0, drag: number = 0, max: number = 10000): number { - - if (acceleration !== 0) - { - velocity += (acceleration + gravity) * this.game.time.elapsed; - } - else if (drag !== 0) - { - this._drag = drag * this.game.time.elapsed; - - if (velocity - this._drag > 0) - { - velocity = velocity - this._drag; - } - else if (velocity + this._drag < 0) - { - velocity += this._drag; - } - else - { - velocity = 0; - } - - velocity += gravity; - } - - if ((velocity != 0) && (max != 10000)) - { - if (velocity > max) - { - velocity = max; - } - else if (velocity < -max) - { - velocity = -max; - } - } - - return velocity; - - } - - /** - * The core Collision separation method. - * @param body1 The first Physics.Body to separate - * @param body2 The second Physics.Body to separate - * @returns {boolean} Returns true if the bodies were separated, otherwise false. - */ - public separate(body1: Body, body2: Body): bool { - - this._separatedX = this.separateBodyX(body1, body2); - this._separatedY = this.separateBodyY(body1, body2); - - return this._separatedX || this._separatedY; - - } - - public checkHullIntersection(body1: Body, body2:Body): bool { - return ((body1.hullX + body1.hullWidth > body2.hullX) && (body1.hullX < body2.hullX + body2.hullWidth) && (body1.hullY + body1.hullHeight > body2.hullY) && (body1.hullY < body2.hullY + body2.hullHeight)); - } - - /** - * Separates the two objects on their x axis - * @param object1 The first GameObject to separate - * @param object2 The second GameObject to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the X axis. - */ - public separateBodyX(body1: Body, body2: Body): bool { - - // Can't separate two disabled or static objects - if ((body1.type == Types.BODY_DISABLED || body1.type == Types.BODY_STATIC) && (body2.type == Types.BODY_DISABLED || body2.type == Types.BODY_STATIC)) - { - return false; - } - - // First, get the two object deltas - this._overlap = 0; - - if (body1.deltaX != body2.deltaX) - { - if (RectangleUtils.intersects(body1.bounds, body2.bounds)) - { - this._maxOverlap = body1.deltaXAbs + body2.deltaXAbs + PhysicsManager.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (body1.deltaX > body2.deltaX) - { - this._overlap = body1.bounds.right - body2.bounds.x; - - if ((this._overlap > this._maxOverlap) || !(body1.allowCollisions & Types.RIGHT) || !(body2.allowCollisions & Types.LEFT)) - { - this._overlap = 0; - } - else - { - body1.touching |= Types.RIGHT; - body2.touching |= Types.LEFT; - } - } - else if (body1.deltaX < body2.deltaX) - { - this._overlap = body1.bounds.x - body2.bounds.width - body2.bounds.x; - - if ((-this._overlap > this._maxOverlap) || !(body1.allowCollisions & Types.LEFT) || !(body2.allowCollisions & Types.RIGHT)) - { - this._overlap = 0; - } - else - { - body1.touching |= Types.LEFT; - body2.touching |= Types.RIGHT; - } - } - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (this._overlap != 0) - { - this._obj1Velocity = body1.velocity.x; - this._obj2Velocity = body2.velocity.x; - - /** - * Dynamic = gives and receives impacts - * Static = gives but doesn't receive impacts, cannot be moved by physics - * Kinematic = gives impacts, but never receives, can be moved by physics - */ - - // 2 dynamic bodies will exchange velocities - if (body1.type == Types.BODY_DYNAMIC && body2.type == Types.BODY_DYNAMIC) - { - this._overlap *= 0.5; - body1.position.x = body1.position.x - this._overlap; - body2.position.x += this._overlap; - - this._obj1NewVelocity = Math.sqrt((this._obj2Velocity * this._obj2Velocity * body2.mass) / body1.mass) * ((this._obj2Velocity > 0) ? 1 : -1); - this._obj2NewVelocity = Math.sqrt((this._obj1Velocity * this._obj1Velocity * body1.mass) / body2.mass) * ((this._obj1Velocity > 0) ? 1 : -1); - this._average = (this._obj1NewVelocity + this._obj2NewVelocity) * 0.5; - this._obj1NewVelocity -= this._average; - this._obj2NewVelocity -= this._average; - body1.velocity.x = this._average + this._obj1NewVelocity * body1.bounce.x; - body2.velocity.x = this._average + this._obj2NewVelocity * body2.bounce.x; - } - else if (body2.type != Types.BODY_DYNAMIC) - { - // Body 2 is Static or Kinematic - this._overlap *= 2; - body1.position.x -= this._overlap; - body1.velocity.x = this._obj2Velocity - this._obj1Velocity * body1.bounce.x; - } - else if (body1.type != Types.BODY_DYNAMIC) - { - // Body 1 is Static or Kinematic - this._overlap *= 2; - body2.position.x += this._overlap; - body2.velocity.x = this._obj1Velocity - this._obj2Velocity * body2.bounce.x; - } - - return true; - } - else - { - return false; - } - - } - - /** - * Separates the two objects on their y axis - * @param object1 The first GameObject to separate - * @param object2 The second GameObject to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the Y axis. - */ - public separateBodyY(body1: Body, body2: Body): bool { - - // Can't separate two immovable objects - if ((body1.type == Types.BODY_DISABLED || body1.type == Types.BODY_STATIC) && (body2.type == Types.BODY_DISABLED || body2.type == Types.BODY_STATIC)) - { - return false; - } - - // First, get the two object deltas - this._overlap = 0; - - if (body1.deltaY != body2.deltaY) - { - if (RectangleUtils.intersects(body1.bounds, body2.bounds)) - { - // This is the only place to use the DeltaAbs values - this._maxOverlap = body1.deltaYAbs + body2.deltaYAbs + PhysicsManager.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (body1.deltaY > body2.deltaY) - { - this._overlap = body1.bounds.bottom - body2.bounds.y; - - if ((this._overlap > this._maxOverlap) || !(body1.allowCollisions & Types.DOWN) || !(body2.allowCollisions & Types.UP)) - { - this._overlap = 0; - } - else - { - body1.touching |= Types.DOWN; - body2.touching |= Types.UP; - } - } - else if (body1.deltaY < body2.deltaY) - { - this._overlap = body1.bounds.y - body2.bounds.height - body2.bounds.y; - - if ((-this._overlap > this._maxOverlap) || !(body1.allowCollisions & Types.UP) || !(body2.allowCollisions & Types.DOWN)) - { - this._overlap = 0; - } - else - { - body1.touching |= Types.UP; - body2.touching |= Types.DOWN; - } - } - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (this._overlap != 0) - { - this._obj1Velocity = body1.velocity.y; - this._obj2Velocity = body2.velocity.y; - - /** - * Dynamic = gives and receives impacts - * Static = gives but doesn't receive impacts, cannot be moved by physics - * Kinematic = gives impacts, but never receives, can be moved by physics - */ - - if (body1.type == Types.BODY_DYNAMIC && body2.type == Types.BODY_DYNAMIC) - { - this._overlap *= 0.5; - body1.position.y = body1.position.y - this._overlap; - body2.position.y += this._overlap; - - this._obj1NewVelocity = Math.sqrt((this._obj2Velocity * this._obj2Velocity * body2.mass) / body1.mass) * ((this._obj2Velocity > 0) ? 1 : -1); - this._obj2NewVelocity = Math.sqrt((this._obj1Velocity * this._obj1Velocity * body1.mass) / body2.mass) * ((this._obj1Velocity > 0) ? 1 : -1); - var average: number = (this._obj1NewVelocity + this._obj2NewVelocity) * 0.5; - this._obj1NewVelocity -= average; - this._obj2NewVelocity -= average; - body1.velocity.y = average + this._obj1NewVelocity * body1.bounce.y; - body2.velocity.y = average + this._obj2NewVelocity * body2.bounce.y; - } - else if (body2.type != Types.BODY_DYNAMIC) - { - this._overlap *= 2; - body1.position.y -= this._overlap; - body1.velocity.y = this._obj2Velocity - this._obj1Velocity * body1.bounce.y; - // This is special case code that handles things like horizontal moving platforms you can ride - //if (body2.parent.active && body2.moves && (body1.deltaY > body2.deltaY)) - if (body2.sprite.active && (body1.deltaY > body2.deltaY)) - { - body1.position.x += body2.position.x - body2.oldPosition.x; - } - } - else if (body1.type != Types.BODY_DYNAMIC) - { - this._overlap *= 2; - body2.position.y += this._overlap; - body2.velocity.y = this._obj1Velocity - this._obj2Velocity * body2.bounce.y; - // This is special case code that handles things like horizontal moving platforms you can ride - //if (object1.active && body1.moves && (body1.deltaY < body2.deltaY)) - if (body1.sprite.active && (body1.deltaY < body2.deltaY)) - { - body2.position.x += body1.position.x - body1.oldPosition.x; - } - } - - return true; - } - else - { - return false; - } - } - - - - - - - - /* - private TILEseparate(shapeA: IPhysicsShape, shapeB: IPhysicsShape, distance: Vec2, tangent: Vec2) { - - if (tangent.x == 1) - { - console.log('1 The left side of ShapeA hit the right side of ShapeB', Math.floor(distance.x)); - shapeA.physics.touching |= Phaser.Types.LEFT; - shapeB.physics.touching |= Phaser.Types.RIGHT; - } - else if (tangent.x == -1) - { - console.log('2 The right side of ShapeA hit the left side of ShapeB', Math.floor(distance.x)); - shapeA.physics.touching |= Phaser.Types.RIGHT; - shapeB.physics.touching |= Phaser.Types.LEFT; - } - - if (tangent.y == 1) - { - console.log('3 The top of ShapeA hit the bottom of ShapeB', Math.floor(distance.y)); - shapeA.physics.touching |= Phaser.Types.UP; - shapeB.physics.touching |= Phaser.Types.DOWN; - } - else if (tangent.y == -1) - { - console.log('4 The bottom of ShapeA hit the top of ShapeB', Math.floor(distance.y)); - shapeA.physics.touching |= Phaser.Types.DOWN; - shapeB.physics.touching |= Phaser.Types.UP; - } - - - // only apply collision response forces if the object is travelling into, and not out of, the collision - var dot = Vec2Utils.dot(shapeA.physics.velocity, tangent); - - if (dot < 0) - { - console.log('in to', dot); - - // Apply horizontal bounce - if (shapeA.physics.bounce.x > 0) - { - shapeA.physics.velocity.x *= -(shapeA.physics.bounce.x); - } - else - { - shapeA.physics.velocity.x = 0; - } - // Apply horizontal bounce - if (shapeA.physics.bounce.y > 0) - { - shapeA.physics.velocity.y *= -(shapeA.physics.bounce.y); - } - else - { - shapeA.physics.velocity.y = 0; - } - } - else - { - console.log('out of', dot); - } - - shapeA.position.x += Math.floor(distance.x); - //shapeA.bounds.x += Math.floor(distance.x); - - shapeA.position.y += Math.floor(distance.y); - //shapeA.bounds.y += distance.y; - - console.log('------------------------------------------------'); - - } - - private collideWorld(shape:IPhysicsShape) { - - // Collide on the x-axis - this._distance.x = shape.world.bounds.x - (shape.position.x - shape.bounds.halfWidth); - - if (0 < this._distance.x) - { - // Hit Left - this._tangent.setTo(1, 0); - this.separateXWall(shape, this._distance, this._tangent); - } - else - { - this._distance.x = (shape.position.x + shape.bounds.halfWidth) - shape.world.bounds.right; - - if (0 < this._distance.x) - { - // Hit Right - this._tangent.setTo(-1, 0); - this._distance.reverse(); - this.separateXWall(shape, this._distance, this._tangent); - } - } - - // Collide on the y-axis - this._distance.y = shape.world.bounds.y - (shape.position.y - shape.bounds.halfHeight); - - if (0 < this._distance.y) - { - // Hit Top - this._tangent.setTo(0, 1); - this.separateYWall(shape, this._distance, this._tangent); - } - else - { - this._distance.y = (shape.position.y + shape.bounds.halfHeight) - shape.world.bounds.bottom; - - if (0 < this._distance.y) - { - // Hit Bottom - this._tangent.setTo(0, -1); - this._distance.reverse(); - this.separateYWall(shape, this._distance, this._tangent); - } - } - - } - - private separateX(shapeA: IPhysicsShape, shapeB: IPhysicsShape, distance: Vec2, tangent: Vec2) { - - if (tangent.x == 1) - { - console.log('The left side of ShapeA hit the right side of ShapeB', distance.x); - shapeA.physics.touching |= Phaser.Types.LEFT; - shapeB.physics.touching |= Phaser.Types.RIGHT; - } - else - { - console.log('The right side of ShapeA hit the left side of ShapeB', distance.x); - shapeA.physics.touching |= Phaser.Types.RIGHT; - shapeB.physics.touching |= Phaser.Types.LEFT; - } - - // collision edges - //shapeA.oH = tangent.x; - - // only apply collision response forces if the object is travelling into, and not out of, the collision - if (Vec2Utils.dot(shapeA.physics.velocity, tangent) < 0) - { - // Apply horizontal bounce - if (shapeA.physics.bounce.x > 0) - { - shapeA.physics.velocity.x *= -(shapeA.physics.bounce.x); - } - else - { - shapeA.physics.velocity.x = 0; - } - } - - shapeA.position.x += distance.x; - shapeA.bounds.x += distance.x; - - } - - private separateY(shapeA: IPhysicsShape, shapeB: IPhysicsShape, distance: Vec2, tangent: Vec2) { - - if (tangent.y == 1) - { - console.log('The top of ShapeA hit the bottom of ShapeB', distance.y); - shapeA.physics.touching |= Phaser.Types.UP; - shapeB.physics.touching |= Phaser.Types.DOWN; - } - else - { - console.log('The bottom of ShapeA hit the top of ShapeB', distance.y); - shapeA.physics.touching |= Phaser.Types.DOWN; - shapeB.physics.touching |= Phaser.Types.UP; - } - - // collision edges - //shapeA.oV = tangent.y; - - // only apply collision response forces if the object is travelling into, and not out of, the collision - if (Vec2Utils.dot(shapeA.physics.velocity, tangent) < 0) - { - // Apply horizontal bounce - if (shapeA.physics.bounce.y > 0) - { - shapeA.physics.velocity.y *= -(shapeA.physics.bounce.y); - } - else - { - shapeA.physics.velocity.y = 0; - } - } - - shapeA.position.y += distance.y; - shapeA.bounds.y += distance.y; - - } - - private separateXWall(shapeA: IPhysicsShape, distance: Vec2, tangent: Vec2) { - - if (tangent.x == 1) - { - console.log('The left side of ShapeA hit the right side of ShapeB', distance.x); - shapeA.physics.touching |= Phaser.Types.LEFT; - } - else - { - console.log('The right side of ShapeA hit the left side of ShapeB', distance.x); - shapeA.physics.touching |= Phaser.Types.RIGHT; - } - - // collision edges - //shapeA.oH = tangent.x; - - // only apply collision response forces if the object is travelling into, and not out of, the collision - if (Vec2Utils.dot(shapeA.physics.velocity, tangent) < 0) - { - // Apply horizontal bounce - if (shapeA.physics.bounce.x > 0) - { - shapeA.physics.velocity.x *= -(shapeA.physics.bounce.x); - } - else - { - shapeA.physics.velocity.x = 0; - } - } - - shapeA.position.x += distance.x; - - } - - private separateYWall(shapeA: IPhysicsShape, distance: Vec2, tangent: Vec2) { - - if (tangent.y == 1) - { - console.log('The top of ShapeA hit the bottom of ShapeB', distance.y); - shapeA.physics.touching |= Phaser.Types.UP; - } - else - { - console.log('The bottom of ShapeA hit the top of ShapeB', distance.y); - shapeA.physics.touching |= Phaser.Types.DOWN; - } - - // collision edges - //shapeA.oV = tangent.y; - - // only apply collision response forces if the object is travelling into, and not out of, the collision - if (Vec2Utils.dot(shapeA.physics.velocity, tangent) < 0) - { - // Apply horizontal bounce - if (shapeA.physics.bounce.y > 0) - { - shapeA.physics.velocity.y *= -(shapeA.physics.bounce.y); - } - else - { - shapeA.physics.velocity.y = 0; - } - } - - shapeA.position.y += distance.y; - - } - */ - - /** - * Checks for overlaps between two objects using the world QuadTree. Can be Sprite vs. Sprite, Sprite vs. Group or Group vs. Group. - * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. - * @param object1 The first Sprite or Group to check. If null the world.group is used. - * @param object2 The second Sprite or Group to check. - * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. - * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. - * @param context The context in which the callbacks will be called - * @returns {boolean} true if the objects overlap, otherwise false. - */ - public overlap(object1 = null, object2 = null, notifyCallback = null, processCallback = null, context = null): bool { - - /* - if (object1 == null) - { - object1 = this.game.world.group; - } - - if (object2 == object1) - { - object2 = null; - } - - QuadTree.divisions = this.worldDivisions; - - this._quadTree = new Phaser.QuadTree(this, this.bounds.x, this.bounds.y, this.bounds.width, this.bounds.height); - - this._quadTree.load(object1, object2, notifyCallback, processCallback, context); - - this._quadTreeResult = this._quadTree.execute(); - - console.log('over', this._quadTreeResult); - - this._quadTree.destroy(); - - this._quadTree = null; - - return this._quadTreeResult; - */ - - return false; - - } - - - - - - - /** - * Collision resolution specifically for GameObjects vs. Tiles. - * @param object The GameObject to separate - * @param tile The Tile to separate - * @returns {boolean} Whether the objects in fact touched and were separated - */ - public separateTile(object:Sprite, x: number, y: number, width: number, height: number, mass: number, collideLeft: bool, collideRight: bool, collideUp: bool, collideDown: bool, separateX: bool, separateY: bool): bool { - - //var separatedX: bool = this.separateTileX(object, x, y, width, height, mass, collideLeft, collideRight, separateX); - //var separatedY: bool = this.separateTileY(object, x, y, width, height, mass, collideUp, collideDown, separateY); - - //return separatedX || separatedY; - - return false; - - } - - /** - * Separates the two objects on their x axis - * @param object The GameObject to separate - * @param tile The Tile to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the X axis. - */ - /* - public separateTileX(object:Sprite, x: number, y: number, width: number, height: number, mass: number, collideLeft: bool, collideRight: bool, separate: bool): bool { - - // Can't separate two immovable objects (tiles are always immovable) - if (object.immovable) - { - return false; - } - - // First, get the object delta - var overlap: number = 0; - var objDelta: number = object.x - object.last.x; - //var objDelta: number = object.collisionMask.deltaX; - - if (objDelta != 0) - { - // Check if the X hulls actually overlap - var objDeltaAbs: number = (objDelta > 0) ? objDelta : -objDelta; - //var objDeltaAbs: number = object.collisionMask.deltaXAbs; - var objBounds: Rectangle = new Rectangle(object.x - ((objDelta > 0) ? objDelta : 0), object.last.y, object.width + ((objDelta > 0) ? objDelta : -objDelta), object.height); - - if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - { - var maxOverlap: number = objDeltaAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (objDelta > 0) - { - overlap = object.x + object.width - x; - - if ((overlap > maxOverlap) || !(object.allowCollisions & Collision.RIGHT) || collideLeft == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.RIGHT; - } - } - else if (objDelta < 0) - { - overlap = object.x - width - x; - - if ((-overlap > maxOverlap) || !(object.allowCollisions & Collision.LEFT) || collideRight == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.LEFT; - } - - } - - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - if (separate == true) - { - //console.log(' - object.x = object.x - overlap; - object.velocity.x = -(object.velocity.x * object.elasticity); - } - - Collision.TILE_OVERLAP = true; - return true; - } - else - { - return false; - } - - } - */ - - /** - * Separates the two objects on their y axis - * @param object The first GameObject to separate - * @param tile The second GameObject to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the Y axis. - */ - /* - public separateTileY(object: Sprite, x: number, y: number, width: number, height: number, mass: number, collideUp: bool, collideDown: bool, separate: bool): bool { - - // Can't separate two immovable objects (tiles are always immovable) - if (object.immovable) - { - return false; - } - - // First, get the two object deltas - var overlap: number = 0; - var objDelta: number = object.y - object.last.y; - - if (objDelta != 0) - { - // Check if the Y hulls actually overlap - var objDeltaAbs: number = (objDelta > 0) ? objDelta : -objDelta; - var objBounds: Rectangle = new Rectangle(object.x, object.y - ((objDelta > 0) ? objDelta : 0), object.width, object.height + objDeltaAbs); - - if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - { - var maxOverlap: number = objDeltaAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (objDelta > 0) - { - overlap = object.y + object.height - y; - - if ((overlap > maxOverlap) || !(object.allowCollisions & Collision.DOWN) || collideUp == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.DOWN; - } - } - else if (objDelta < 0) - { - overlap = object.y - height - y; - - if ((-overlap > maxOverlap) || !(object.allowCollisions & Collision.UP) || collideDown == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.UP; - } - } - } - } - - // TODO - with super low velocities you get lots of stuttering, set some kind of base minimum here - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - if (separate == true) - { - object.y = object.y - overlap; - object.velocity.y = -(object.velocity.y * object.elasticity); - } - - Collision.TILE_OVERLAP = true; - return true; - } - else - { - return false; - } - } - */ - - - /** - * Separates the two objects on their x axis - * @param object The GameObject to separate - * @param tile The Tile to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the X axis. - */ - /* - public static NEWseparateTileX(object:Sprite, x: number, y: number, width: number, height: number, mass: number, collideLeft: bool, collideRight: bool, separate: bool): bool { - - // Can't separate two immovable objects (tiles are always immovable) - if (object.immovable) - { - return false; - } - - // First, get the object delta - var overlap: number = 0; - - if (object.collisionMask.deltaX != 0) - { - // Check if the X hulls actually overlap - //var objDeltaAbs: number = (objDelta > 0) ? objDelta : -objDelta; - //var objBounds: Rectangle = new Rectangle(object.x - ((objDelta > 0) ? objDelta : 0), object.last.y, object.width + ((objDelta > 0) ? objDelta : -objDelta), object.height); - - //if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - if (object.collisionMask.intersectsRaw(x, x + width, y, y + height)) - { - var maxOverlap: number = object.collisionMask.deltaXAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (object.collisionMask.deltaX > 0) - { - //overlap = object.x + object.width - x; - overlap = object.collisionMask.right - x; - - if ((overlap > maxOverlap) || !(object.allowCollisions & Collision.RIGHT) || collideLeft == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.RIGHT; - } - } - else if (object.collisionMask.deltaX < 0) - { - //overlap = object.x - width - x; - overlap = object.collisionMask.x - width - x; - - if ((-overlap > maxOverlap) || !(object.allowCollisions & Collision.LEFT) || collideRight == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.LEFT; - } - - } - - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - if (separate == true) - { - object.x = object.x - overlap; - object.velocity.x = -(object.velocity.x * object.elasticity); - } - - Collision.TILE_OVERLAP = true; - return true; - } - else - { - return false; - } - - } - */ - - /** - * Separates the two objects on their y axis - * @param object The first GameObject to separate - * @param tile The second GameObject to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the Y axis. - */ - /* - public NEWseparateTileY(object: Sprite, x: number, y: number, width: number, height: number, mass: number, collideUp: bool, collideDown: bool, separate: bool): bool { - - // Can't separate two immovable objects (tiles are always immovable) - if (object.immovable) - { - return false; - } - - // First, get the two object deltas - var overlap: number = 0; - //var objDelta: number = object.y - object.last.y; - - if (object.collisionMask.deltaY != 0) - { - // Check if the Y hulls actually overlap - //var objDeltaAbs: number = (objDelta > 0) ? objDelta : -objDelta; - //var objBounds: Rectangle = new Rectangle(object.x, object.y - ((objDelta > 0) ? objDelta : 0), object.width, object.height + objDeltaAbs); - - //if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - if (object.collisionMask.intersectsRaw(x, x + width, y, y + height)) - { - //var maxOverlap: number = objDeltaAbs + Collision.OVERLAP_BIAS; - var maxOverlap: number = object.collisionMask.deltaYAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (object.collisionMask.deltaY > 0) - { - //overlap = object.y + object.height - y; - overlap = object.collisionMask.bottom - y; - - if ((overlap > maxOverlap) || !(object.allowCollisions & Collision.DOWN) || collideUp == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.DOWN; - } - } - else if (object.collisionMask.deltaY < 0) - { - //overlap = object.y - height - y; - overlap = object.collisionMask.y - height - y; - - if ((-overlap > maxOverlap) || !(object.allowCollisions & Collision.UP) || collideDown == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.UP; - } - } - } - } - - // TODO - with super low velocities you get lots of stuttering, set some kind of base minimum here - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - if (separate == true) - { - object.y = object.y - overlap; - object.velocity.y = -(object.velocity.y * object.elasticity); - } - - Collision.TILE_OVERLAP = true; - return true; - } - else - { - return false; - } - } - */ - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/Collision.ts b/wip/phaser clean up/Collision.ts deleted file mode 100644 index 13684b81..00000000 --- a/wip/phaser clean up/Collision.ts +++ /dev/null @@ -1,1702 +0,0 @@ -/// -/// -/// -/// -/// -/// -/// -/// -/// - -/** -* Phaser - Collision -* -* A set of extremely useful collision and geometry intersection functions. -*/ - -module Phaser { - - export class Collision { - - /** - * Collision constructor - * @param game A reference to the current Game - */ - constructor(game: Game) { - - this._game = game; - - Collision.T_VECTORS = []; - - for (var i = 0; i < 10; i++) - { - Collision.T_VECTORS.push(new Vec2); - } - - Collision.T_ARRAYS = []; - - for (var i = 0; i < 5; i++) - { - Collision.T_ARRAYS.push([]); - } - - } - - /** - * Local private reference to Game - */ - private _game: Game; - - /** - * Flag used to allow GameObjects to collide on their left side - * @type {number} - */ - public static LEFT: number = 0x0001; - - /** - * Flag used to allow GameObjects to collide on their right side - * @type {number} - */ - public static RIGHT: number = 0x0010; - - /** - * Flag used to allow GameObjects to collide on their top side - * @type {number} - */ - public static UP: number = 0x0100; - - /** - * Flag used to allow GameObjects to collide on their bottom side - * @type {number} - */ - public static DOWN: number = 0x1000; - - /** - * Flag used with GameObjects to disable collision - * @type {number} - */ - public static NONE: number = 0; - - /** - * Flag used to allow GameObjects to collide with a ceiling - * @type {number} - */ - public static CEILING: number = Collision.UP; - - /** - * Flag used to allow GameObjects to collide with a floor - * @type {number} - */ - public static FLOOR: number = Collision.DOWN; - - /** - * Flag used to allow GameObjects to collide with a wall (same as LEFT+RIGHT) - * @type {number} - */ - public static WALL: number = Collision.LEFT | Collision.RIGHT; - - /** - * Flag used to allow GameObjects to collide on any face - * @type {number} - */ - public static ANY: number = Collision.LEFT | Collision.RIGHT | Collision.UP | Collision.DOWN; - - /** - * The overlap bias is used when calculating hull overlap before separation - change it if you have especially small or large GameObjects - * @type {number} - */ - public static OVERLAP_BIAS: number = 4; - - /** - * This holds the result of the tile separation check, true if the object was moved, otherwise false - * @type {boolean} - */ - public static TILE_OVERLAP: bool = false; - - /** - * A temporary Rectangle used in the separation process to help avoid gc spikes - * @type {Rectangle} - */ - public static _tempBounds: Rectangle; - - /** - * Checks for Line to Line intersection and returns an IntersectResult object containing the results of the intersection. - * @param line1 The first Line object to check - * @param line2 The second Line object to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineToLine(line1: Line, line2: Line, output?: IntersectResult = new IntersectResult): IntersectResult { - - var denominator = (line1.x1 - line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 - line2.x2); - - if (denominator !== 0) - { - output.result = true; - output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.x1 - line2.x2) - (line1.x1 - line1.x2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denominator; - output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denominator; - } - - return output; - } - - /** - * Checks for Line to Line Segment intersection and returns an IntersectResult object containing the results of the intersection. - * @param line The Line object to check - * @param seg The Line segment object to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineToLineSegment(line: Line, seg: Line, output?: IntersectResult = new IntersectResult): IntersectResult { - - var denominator = (line.x1 - line.x2) * (seg.y1 - seg.y2) - (line.y1 - line.y2) * (seg.x1 - seg.x2); - - if (denominator !== 0) - { - output.x = ((line.x1 * line.y2 - line.y1 * line.x2) * (seg.x1 - seg.x2) - (line.x1 - line.x2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denominator; - output.y = ((line.x1 * line.y2 - line.y1 * line.x2) * (seg.y1 - seg.y2) - (line.y1 - line.y2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denominator; - - var maxX = Math.max(seg.x1, seg.x2); - var minX = Math.min(seg.x1, seg.x2); - var maxY = Math.max(seg.y1, seg.y2); - var minY = Math.min(seg.y1, seg.y2); - - if ((output.x <= maxX && output.x >= minX) === true || (output.y <= maxY && output.y >= minY) === true) - { - output.result = true; - } - - } - - return output; - - } - - /** - * Checks for Line to Raw Line Segment intersection and returns the result in the IntersectResult object. - * @param line The Line object to check - * @param x1 The start x coordinate of the raw segment - * @param y1 The start y coordinate of the raw segment - * @param x2 The end x coordinate of the raw segment - * @param y2 The end y coordinate of the raw segment - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineToRawSegment(line: Line, x1: number, y1: number, x2: number, y2: number, output?: IntersectResult = new IntersectResult): IntersectResult { - - var denominator = (line.x1 - line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 - x2); - - if (denominator !== 0) - { - output.x = ((line.x1 * line.y2 - line.y1 * line.x2) * (x1 - x2) - (line.x1 - line.x2) * (x1 * y2 - y1 * x2)) / denominator; - output.y = ((line.x1 * line.y2 - line.y1 * line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 * y2 - y1 * x2)) / denominator; - - var maxX = Math.max(x1, x2); - var minX = Math.min(x1, x2); - var maxY = Math.max(y1, y2); - var minY = Math.min(y1, y2); - - if ((output.x <= maxX && output.x >= minX) === true || (output.y <= maxY && output.y >= minY) === true) - { - output.result = true; - } - - } - - return output; - - } - - /** - * Checks for Line to Ray intersection and returns the result in an IntersectResult object. - * @param line1 The Line object to check - * @param ray The Ray object to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineToRay(line1: Line, ray: Line, output?: IntersectResult = new IntersectResult): IntersectResult { - - var denominator = (line1.x1 - line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 - ray.x2); - - if (denominator !== 0) - { - output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.x1 - ray.x2) - (line1.x1 - line1.x2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denominator; - output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denominator; - output.result = true; // true unless either of the 2 following conditions are met - - if (!(ray.x1 >= ray.x2) && output.x < ray.x1) - { - output.result = false; - } - - if (!(ray.y1 >= ray.y2) && output.y < ray.y1) - { - output.result = false; - } - } - - return output; - - } - - - /** - * Check if the Line and Circle objects intersect - * @param line The Line object to check - * @param circle The Circle object to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineToCircle(line: Line, circle: Circle, output?: IntersectResult = new IntersectResult): IntersectResult { - - // Get a perpendicular line running to the center of the circle - if (line.perp(circle.x, circle.y).length <= circle.radius) - { - output.result = true; - } - - return output; - - } - - /** - * Check if the Line intersects each side of the Rectangle - * @param line The Line object to check - * @param rect The Rectangle object to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineToRectangle(line: Line, rect: Rectangle, output?: IntersectResult = new IntersectResult): IntersectResult { - - // Top of the Rectangle vs the Line - Collision.lineToRawSegment(line, rect.x, rect.y, rect.right, rect.y, output); - - if (output.result === true) - { - return output; - } - - // Left of the Rectangle vs the Line - Collision.lineToRawSegment(line, rect.x, rect.y, rect.x, rect.bottom, output); - - if (output.result === true) - { - return output; - } - - // Bottom of the Rectangle vs the Line - Collision.lineToRawSegment(line, rect.x, rect.bottom, rect.right, rect.bottom, output); - - if (output.result === true) - { - return output; - } - - // Right of the Rectangle vs the Line - Collision.lineToRawSegment(line, rect.right, rect.y, rect.right, rect.bottom, output); - - return output; - - } - - /** - * Check if the two Line Segments intersect and returns the result in an IntersectResult object. - * @param line1 The first Line Segment to check - * @param line2 The second Line Segment to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineSegmentToLineSegment(line1: Line, line2: Line, output?: IntersectResult = new IntersectResult): IntersectResult { - - Collision.lineToLineSegment(line1, line2); - - if (output.result === true) - { - if (!(output.x >= Math.min(line1.x1, line1.x2) && output.x <= Math.max(line1.x1, line1.x2) - && output.y >= Math.min(line1.y1, line1.y2) && output.y <= Math.max(line1.y1, line1.y2))) - { - output.result = false; - } - } - - return output; - } - - /** - * Check if the Line Segment intersects with the Ray and returns the result in an IntersectResult object. - * @param line The Line Segment to check. - * @param ray The Ray to check. - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineSegmentToRay(line: Line, ray: Line, output?: IntersectResult = new IntersectResult): IntersectResult { - - Collision.lineToRay(line, ray, output); - - if (output.result === true) - { - if (!(output.x >= Math.min(line.x1, line.x2) && output.x <= Math.max(line.x1, line.x2) - && output.y >= Math.min(line.y1, line.y2) && output.y <= Math.max(line.y1, line.y2))) - { - output.result = false; - } - } - - return output; - - } - - /** - * Check if the Line Segment intersects with the Circle and returns the result in an IntersectResult object. - * @param seg The Line Segment to check. - * @param circle The Circle to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineSegmentToCircle(seg: Line, circle: Circle, output?: IntersectResult = new IntersectResult): IntersectResult { - - var perp = seg.perp(circle.x, circle.y); - - if (perp.length <= circle.radius) - { - // Line intersects circle - check if segment does - var maxX = Math.max(seg.x1, seg.x2); - var minX = Math.min(seg.x1, seg.x2); - var maxY = Math.max(seg.y1, seg.y2); - var minY = Math.min(seg.y1, seg.y2); - - if ((perp.x2 <= maxX && perp.x2 >= minX) && (perp.y2 <= maxY && perp.y2 >= minY)) - { - output.result = true; - } - else - { - // Worst case - segment doesn't traverse center, so no perpendicular connection. - if (Collision.circleContainsPoint(circle, { x: seg.x1, y: seg.y1 }) || Collision.circleContainsPoint(circle, { x: seg.x2, y: seg.y2 })) - { - output.result = true; - } - } - - } - - return output; - } - - /** - * Check if the Line Segment intersects with the Rectangle and returns the result in an IntersectResult object. - * @param seg The Line Segment to check. - * @param rect The Rectangle to check. - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static lineSegmentToRectangle(seg: Line, rect: Rectangle, output?: IntersectResult = new IntersectResult): IntersectResult { - - if (rect.contains(seg.x1, seg.y1) && rect.contains(seg.x2, seg.y2)) - { - output.result = true; - } - else - { - // Top of the Rectangle vs the Line - Collision.lineToRawSegment(seg, rect.x, rect.y, rect.right, rect.bottom, output); - - if (output.result === true) - { - return output; - } - - // Left of the Rectangle vs the Line - Collision.lineToRawSegment(seg, rect.x, rect.y, rect.x, rect.bottom, output); - - if (output.result === true) - { - return output; - } - - // Bottom of the Rectangle vs the Line - Collision.lineToRawSegment(seg, rect.x, rect.bottom, rect.right, rect.bottom, output); - - if (output.result === true) - { - return output; - } - - // Right of the Rectangle vs the Line - Collision.lineToRawSegment(seg, rect.right, rect.y, rect.right, rect.bottom, output); - - return output; - - } - - return output; - - } - - /** - * Check for Ray to Rectangle intersection and returns the result in an IntersectResult object. - * @param ray The Ray to check. - * @param rect The Rectangle to check. - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static rayToRectangle(ray: Line, rect: Rectangle, output?: IntersectResult = new IntersectResult): IntersectResult { - - // Currently just finds first intersection - might not be closest to ray pt1 - Collision.lineToRectangle(ray, rect, output); - - return output; - - } - - - /** - * Check whether a Ray intersects a Line segment and returns the parametric value where the intersection occurs in an IntersectResult object. - * @param rayX1 - * @param rayY1 - * @param rayX2 - * @param rayY2 - * @param lineX1 - * @param lineY1 - * @param lineX2 - * @param lineY2 - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static rayToLineSegment(rayX1, rayY1, rayX2, rayY2, lineX1, lineY1, lineX2, lineY2, output?: IntersectResult = new IntersectResult): IntersectResult { - - var r:number; - var s:number; - var d:number; - - // Check lines are not parallel - if ((rayY2 - rayY1) / (rayX2 - rayX1) != (lineY2 - lineY1) / (lineX2 - lineX1)) - { - d = (((rayX2 - rayX1) * (lineY2 - lineY1)) - (rayY2 - rayY1) * (lineX2 - lineX1)); - - if (d != 0) - { - r = (((rayY1 - lineY1) * (lineX2 - lineX1)) - (rayX1 - lineX1) * (lineY2 - lineY1)) / d; - s = (((rayY1 - lineY1) * (rayX2 - rayX1)) - (rayX1 - lineX1) * (rayY2 - rayY1)) / d; - - if (r >= 0) - { - if (s >= 0 && s <= 1) - { - output.result = true; - output.x = rayX1 + r * (rayX2 - rayX1); - output.y = rayY1 + r * (rayY2 - rayY1); - } - } - } - } - - return output; - - } - - /** - * Determines whether the specified point is contained within the rectangular region defined by the Rectangle object and returns the result in an IntersectResult object. - * @param point The Point or Point object to check, or any object with x and y properties. - * @param rect The Rectangle object to check the point against - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static pointToRectangle(point, rect: Rectangle, output?: IntersectResult = new IntersectResult): IntersectResult { - - output.setTo(point.x, point.y); - - //output.result = rect.containsPoint(point); - - - return output; - - } - - /** - * Check whether two axis aligned Rectangles intersect and returns the intersecting rectangle dimensions in an IntersectResult object if they do. - * @param rect1 The first Rectangle object. - * @param rect2 The second Rectangle object. - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static rectangleToRectangle(rect1: Rectangle, rect2: Rectangle, output?: IntersectResult = new IntersectResult): IntersectResult { - - var leftX = Math.max(rect1.x, rect2.x); - var rightX = Math.min(rect1.right, rect2.right); - var topY = Math.max(rect1.y, rect2.y); - var bottomY = Math.min(rect1.bottom, rect2.bottom); - - output.setTo(leftX, topY, rightX - leftX, bottomY - topY, rightX - leftX, bottomY - topY); - - var cx = output.x + output.width * .5; - var cy = output.y + output.height * .5; - - if ((cx > rect1.x && cx < rect1.right) && (cy > rect1.y && cy < rect1.bottom)) - { - output.result = true; - } - - return output; - - } - - /** - * Checks if the Rectangle and Circle objects intersect and returns the result in an IntersectResult object. - * @param rect The Rectangle object to check - * @param circle The Circle object to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static rectangleToCircle(rect: Rectangle, circle: Circle, output?: IntersectResult = new IntersectResult): IntersectResult { - - return Collision.circleToRectangle(circle, rect, output); - - } - - /** - * Checks if the two Circle objects intersect and returns the result in an IntersectResult object. - * @param circle1 The first Circle object to check - * @param circle2 The second Circle object to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static circleToCircle(circle1: Circle, circle2: Circle, output?: IntersectResult = new IntersectResult): IntersectResult { - - output.result = ((circle1.radius + circle2.radius) * (circle1.radius + circle2.radius)) >= Collision.distanceSquared(circle1.x, circle1.y, circle2.x, circle2.y); - - return output; - - } - - /** - * Checks if the Circle object intersects with the Rectangle and returns the result in an IntersectResult object. - * @param circle The Circle object to check - * @param rect The Rectangle object to check - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static circleToRectangle(circle: Circle, rect: Rectangle, output?: IntersectResult = new IntersectResult): IntersectResult { - - var inflatedRect: Rectangle = rect.clone(); - - inflatedRect.inflate(circle.radius, circle.radius); - - output.result = inflatedRect.contains(circle.x, circle.y); - - return output; - - } - - /** - * Checks if the Point object is contained within the Circle and returns the result in an IntersectResult object. - * @param circle The Circle object to check - * @param point A Point or Point object to check, or any object with x and y properties - * @param [output] An optional IntersectResult object to store the intersection values in. One is created if none given. - * @returns {IntersectResult=} An IntersectResult object containing the results of the intersection - */ - public static circleContainsPoint(circle: Circle, point, output?: IntersectResult = new IntersectResult): IntersectResult { - - output.result = circle.radius * circle.radius >= Collision.distanceSquared(circle.x, circle.y, point.x, point.y); - - return output; - - } - - /** - * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. - * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. - * @param object1 The first GameObject or Group to check. If null the world.group is used. - * @param object2 The second GameObject or Group to check. - * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. - * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. - * @param context The context in which the callbacks will be called - * @returns {boolean} true if the objects overlap, otherwise false. - */ - public overlap(object1: Basic = null, object2: Basic = null, notifyCallback = null, processCallback = null, context = null): bool { - - if (object1 == null) - { - object1 = this._game.world.group; - } - - if (object2 == object1) - { - object2 = null; - } - - QuadTree.divisions = this._game.world.worldDivisions; - - var quadTree: QuadTree = new QuadTree(this._game.world.bounds.x, this._game.world.bounds.y, this._game.world.bounds.width, this._game.world.bounds.height); - - quadTree.load(object1, object2, notifyCallback, processCallback, context); - - var result: bool = quadTree.execute(); - - quadTree.destroy(); - - quadTree = null; - - return result; - - } - - /** - * The core Collision separation function used by Collision.overlap. - * @param object1 The first GameObject to separate - * @param object2 The second GameObject to separate - * @returns {boolean} Returns true if the objects were separated, otherwise false. - */ - public static separate(object1, object2): bool { - - object1.collisionMask.update(); - object2.collisionMask.update(); - - var separatedX: bool = Collision.separateX(object1, object2); - var separatedY: bool = Collision.separateY(object1, object2); - - return separatedX || separatedY; - - } - - /** - * Collision resolution specifically for GameObjects vs. Tiles. - * @param object The GameObject to separate - * @param tile The Tile to separate - * @returns {boolean} Whether the objects in fact touched and were separated - */ - public static separateTile(object:GameObject, x: number, y: number, width: number, height: number, mass: number, collideLeft: bool, collideRight: bool, collideUp: bool, collideDown: bool, separateX: bool, separateY: bool): bool { - - object.collisionMask.update(); - - var separatedX: bool = Collision.separateTileX(object, x, y, width, height, mass, collideLeft, collideRight, separateX); - var separatedY: bool = Collision.separateTileY(object, x, y, width, height, mass, collideUp, collideDown, separateY); - - return separatedX || separatedY; - - } - - /** - * Separates the two objects on their x axis - * @param object The GameObject to separate - * @param tile The Tile to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the X axis. - */ - public static separateTileX(object:GameObject, x: number, y: number, width: number, height: number, mass: number, collideLeft: bool, collideRight: bool, separate: bool): bool { - - // Can't separate two immovable objects (tiles are always immovable) - if (object.immovable) - { - return false; - } - - // First, get the object delta - var overlap: number = 0; - var objDelta: number = object.x - object.last.x; - //var objDelta: number = object.collisionMask.deltaX; - - if (objDelta != 0) - { - // Check if the X hulls actually overlap - var objDeltaAbs: number = (objDelta > 0) ? objDelta : -objDelta; - //var objDeltaAbs: number = object.collisionMask.deltaXAbs; - var objBounds: Rectangle = new Rectangle(object.x - ((objDelta > 0) ? objDelta : 0), object.last.y, object.width + ((objDelta > 0) ? objDelta : -objDelta), object.height); - - if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - { - var maxOverlap: number = objDeltaAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (objDelta > 0) - { - overlap = object.x + object.width - x; - - if ((overlap > maxOverlap) || !(object.allowCollisions & Collision.RIGHT) || collideLeft == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.RIGHT; - } - } - else if (objDelta < 0) - { - overlap = object.x - width - x; - - if ((-overlap > maxOverlap) || !(object.allowCollisions & Collision.LEFT) || collideRight == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.LEFT; - } - - } - - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - if (separate == true) - { - //console.log(' - object.x = object.x - overlap; - object.velocity.x = -(object.velocity.x * object.elasticity); - } - - Collision.TILE_OVERLAP = true; - return true; - } - else - { - return false; - } - - } - - /** - * Separates the two objects on their y axis - * @param object The first GameObject to separate - * @param tile The second GameObject to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the Y axis. - */ - public static separateTileY(object: GameObject, x: number, y: number, width: number, height: number, mass: number, collideUp: bool, collideDown: bool, separate: bool): bool { - - // Can't separate two immovable objects (tiles are always immovable) - if (object.immovable) - { - return false; - } - - // First, get the two object deltas - var overlap: number = 0; - var objDelta: number = object.y - object.last.y; - - if (objDelta != 0) - { - // Check if the Y hulls actually overlap - var objDeltaAbs: number = (objDelta > 0) ? objDelta : -objDelta; - var objBounds: Rectangle = new Rectangle(object.x, object.y - ((objDelta > 0) ? objDelta : 0), object.width, object.height + objDeltaAbs); - - if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - { - var maxOverlap: number = objDeltaAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (objDelta > 0) - { - overlap = object.y + object.height - y; - - if ((overlap > maxOverlap) || !(object.allowCollisions & Collision.DOWN) || collideUp == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.DOWN; - } - } - else if (objDelta < 0) - { - overlap = object.y - height - y; - - if ((-overlap > maxOverlap) || !(object.allowCollisions & Collision.UP) || collideDown == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.UP; - } - } - } - } - - // TODO - with super low velocities you get lots of stuttering, set some kind of base minimum here - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - if (separate == true) - { - object.y = object.y - overlap; - object.velocity.y = -(object.velocity.y * object.elasticity); - } - - Collision.TILE_OVERLAP = true; - return true; - } - else - { - return false; - } - } - - - /** - * Separates the two objects on their x axis - * @param object The GameObject to separate - * @param tile The Tile to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the X axis. - */ - public static NEWseparateTileX(object:GameObject, x: number, y: number, width: number, height: number, mass: number, collideLeft: bool, collideRight: bool, separate: bool): bool { - - // Can't separate two immovable objects (tiles are always immovable) - if (object.immovable) - { - return false; - } - - // First, get the object delta - var overlap: number = 0; - - if (object.collisionMask.deltaX != 0) - { - // Check if the X hulls actually overlap - //var objDeltaAbs: number = (objDelta > 0) ? objDelta : -objDelta; - //var objBounds: Rectangle = new Rectangle(object.x - ((objDelta > 0) ? objDelta : 0), object.last.y, object.width + ((objDelta > 0) ? objDelta : -objDelta), object.height); - - //if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - if (object.collisionMask.intersectsRaw(x, x + width, y, y + height)) - { - var maxOverlap: number = object.collisionMask.deltaXAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (object.collisionMask.deltaX > 0) - { - //overlap = object.x + object.width - x; - overlap = object.collisionMask.right - x; - - if ((overlap > maxOverlap) || !(object.allowCollisions & Collision.RIGHT) || collideLeft == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.RIGHT; - } - } - else if (object.collisionMask.deltaX < 0) - { - //overlap = object.x - width - x; - overlap = object.collisionMask.x - width - x; - - if ((-overlap > maxOverlap) || !(object.allowCollisions & Collision.LEFT) || collideRight == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.LEFT; - } - - } - - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - if (separate == true) - { - object.x = object.x - overlap; - object.velocity.x = -(object.velocity.x * object.elasticity); - } - - Collision.TILE_OVERLAP = true; - return true; - } - else - { - return false; - } - - } - - /** - * Separates the two objects on their y axis - * @param object The first GameObject to separate - * @param tile The second GameObject to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the Y axis. - */ - public static NEWseparateTileY(object: GameObject, x: number, y: number, width: number, height: number, mass: number, collideUp: bool, collideDown: bool, separate: bool): bool { - - // Can't separate two immovable objects (tiles are always immovable) - if (object.immovable) - { - return false; - } - - // First, get the two object deltas - var overlap: number = 0; - //var objDelta: number = object.y - object.last.y; - - if (object.collisionMask.deltaY != 0) - { - // Check if the Y hulls actually overlap - //var objDeltaAbs: number = (objDelta > 0) ? objDelta : -objDelta; - //var objBounds: Rectangle = new Rectangle(object.x, object.y - ((objDelta > 0) ? objDelta : 0), object.width, object.height + objDeltaAbs); - - //if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - if (object.collisionMask.intersectsRaw(x, x + width, y, y + height)) - { - //var maxOverlap: number = objDeltaAbs + Collision.OVERLAP_BIAS; - var maxOverlap: number = object.collisionMask.deltaYAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (object.collisionMask.deltaY > 0) - { - //overlap = object.y + object.height - y; - overlap = object.collisionMask.bottom - y; - - if ((overlap > maxOverlap) || !(object.allowCollisions & Collision.DOWN) || collideUp == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.DOWN; - } - } - else if (object.collisionMask.deltaY < 0) - { - //overlap = object.y - height - y; - overlap = object.collisionMask.y - height - y; - - if ((-overlap > maxOverlap) || !(object.allowCollisions & Collision.UP) || collideDown == false) - { - overlap = 0; - } - else - { - object.touching |= Collision.UP; - } - } - } - } - - // TODO - with super low velocities you get lots of stuttering, set some kind of base minimum here - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - if (separate == true) - { - object.y = object.y - overlap; - object.velocity.y = -(object.velocity.y * object.elasticity); - } - - Collision.TILE_OVERLAP = true; - return true; - } - else - { - return false; - } - } - - /** - * Separates the two objects on their x axis - * @param object1 The first GameObject to separate - * @param object2 The second GameObject to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the X axis. - */ - public static separateX(object1, object2): bool { - - // Can't separate two immovable objects - if (object1.immovable && object2.immovable) - { - return false; - } - - // First, get the two object deltas - var overlap: number = 0; - - if (object1.collisionMask.deltaX != object2.collisionMask.deltaX) - { - if (object1.collisionMask.intersects(object2.collisionMask)) - { - var maxOverlap: number = object1.collisionMask.deltaXAbs + object2.collisionMask.deltaXAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (object1.collisionMask.deltaX > object2.collisionMask.deltaX) - { - overlap = object1.collisionMask.right - object2.collisionMask.x; - - if ((overlap > maxOverlap) || !(object1.allowCollisions & Collision.RIGHT) || !(object2.allowCollisions & Collision.LEFT)) - { - overlap = 0; - } - else - { - object1.touching |= Collision.RIGHT; - object2.touching |= Collision.LEFT; - } - } - else if (object1.collisionMask.deltaX < object2.collisionMask.deltaX) - { - overlap = object1.collisionMask.x - object2.collisionMask.width - object2.collisionMask.x; - - if ((-overlap > maxOverlap) || !(object1.allowCollisions & Collision.LEFT) || !(object2.allowCollisions & Collision.RIGHT)) - { - overlap = 0; - } - else - { - object1.touching |= Collision.LEFT; - object2.touching |= Collision.RIGHT; - } - - } - - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - var obj1Velocity: number = object1.velocity.x; - var obj2Velocity: number = object2.velocity.x; - - if (!object1.immovable && !object2.immovable) - { - overlap *= 0.5; - object1.x = object1.x - overlap; - object2.x += overlap; - - var obj1NewVelocity: number = Math.sqrt((obj2Velocity * obj2Velocity * object2.mass) / object1.mass) * ((obj2Velocity > 0) ? 1 : -1); - var obj2NewVelocity: number = Math.sqrt((obj1Velocity * obj1Velocity * object1.mass) / object2.mass) * ((obj1Velocity > 0) ? 1 : -1); - var average: number = (obj1NewVelocity + obj2NewVelocity) * 0.5; - obj1NewVelocity -= average; - obj2NewVelocity -= average; - object1.velocity.x = average + obj1NewVelocity * object1.elasticity; - object2.velocity.x = average + obj2NewVelocity * object2.elasticity; - } - else if (!object1.immovable) - { - object1.x = object1.x - overlap; - object1.velocity.x = obj2Velocity - obj1Velocity * object1.elasticity; - } - else if (!object2.immovable) - { - object2.x += overlap; - object2.velocity.x = obj1Velocity - obj2Velocity * object2.elasticity; - } - - return true; - } - else - { - return false; - } - - } - - /** - * Separates the two objects on their y axis - * @param object1 The first GameObject to separate - * @param object2 The second GameObject to separate - * @returns {boolean} Whether the objects in fact touched and were separated along the Y axis. - */ - public static separateY(object1, object2): bool { - - // Can't separate two immovable objects - if (object1.immovable && object2.immovable) { - return false; - } - - // First, get the two object deltas - var overlap: number = 0; - - if (object1.collisionMask.deltaY != object2.collisionMask.deltaY) - { - if (object1.collisionMask.intersects(object2.collisionMask)) - { - // This is the only place to use the DeltaAbs values - var maxOverlap: number = object1.collisionMask.deltaYAbs + object2.collisionMask.deltaYAbs + Collision.OVERLAP_BIAS; - - // If they did overlap (and can), figure out by how much and flip the corresponding flags - if (object1.collisionMask.deltaY > object2.collisionMask.deltaY) - { - overlap = object1.collisionMask.bottom - object2.collisionMask.y; - - if ((overlap > maxOverlap) || !(object1.allowCollisions & Collision.DOWN) || !(object2.allowCollisions & Collision.UP)) - { - overlap = 0; - } - else - { - object1.touching |= Collision.DOWN; - object2.touching |= Collision.UP; - } - } - else if (object1.collisionMask.deltaY < object2.collisionMask.deltaY) - { - overlap = object1.collisionMask.y - object2.collisionMask.height - object2.collisionMask.y; - - if ((-overlap > maxOverlap) || !(object1.allowCollisions & Collision.UP) || !(object2.allowCollisions & Collision.DOWN)) - { - overlap = 0; - } - else - { - object1.touching |= Collision.UP; - object2.touching |= Collision.DOWN; - } - } - } - } - - // Then adjust their positions and velocities accordingly (if there was any overlap) - if (overlap != 0) - { - var obj1Velocity: number = object1.velocity.y; - var obj2Velocity: number = object2.velocity.y; - - if (!object1.immovable && !object2.immovable) - { - overlap *= 0.5; - object1.y = object1.y - overlap; - object2.y += overlap; - - var obj1NewVelocity: number = Math.sqrt((obj2Velocity * obj2Velocity * object2.mass) / object1.mass) * ((obj2Velocity > 0) ? 1 : -1); - var obj2NewVelocity: number = Math.sqrt((obj1Velocity * obj1Velocity * object1.mass) / object2.mass) * ((obj1Velocity > 0) ? 1 : -1); - var average: number = (obj1NewVelocity + obj2NewVelocity) * 0.5; - obj1NewVelocity -= average; - obj2NewVelocity -= average; - object1.velocity.y = average + obj1NewVelocity * object1.elasticity; - object2.velocity.y = average + obj2NewVelocity * object2.elasticity; - } - else if (!object1.immovable) - { - object1.y = object1.y - overlap; - object1.velocity.y = obj2Velocity - obj1Velocity * object1.elasticity; - // This is special case code that handles things like horizontal moving platforms you can ride - if (object2.active && object2.moves && (object1.collisionMask.deltaY > object2.collisionMask.deltaY)) - { - object1.x += object2.x - object2.last.x; - } - } - else if (!object2.immovable) - { - object2.y += overlap; - object2.velocity.y = obj1Velocity - obj2Velocity * object2.elasticity; - // This is special case code that handles things like horizontal moving platforms you can ride - if (object1.active && object1.moves && (object1.collisionMask.deltaY < object2.collisionMask.deltaY)) - { - object2.x += object1.x - object1.last.x; - } - } - - return true; - } - else - { - return false; - } - } - - /** - * Returns the distance between the two given coordinates. - * @param x1 The X value of the first coordinate - * @param y1 The Y value of the first coordinate - * @param x2 The X value of the second coordinate - * @param y2 The Y value of the second coordinate - * @returns {number} The distance between the two coordinates - */ - public static distance(x1: number, y1: number, x2: number, y2: number) { - return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); - } - - /** - * Returns the distanced squared between the two given coordinates. - * @param x1 The X value of the first coordinate - * @param y1 The Y value of the first coordinate - * @param x2 The X value of the second coordinate - * @param y2 The Y value of the second coordinate - * @returns {number} The distance between the two coordinates - */ - public static distanceSquared(x1: number, y1: number, x2: number, y2: number) { - return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); - } - - - - // SAT - - /** - * Flattens the specified array of points onto a unit vector axis, - * resulting in a one dimensional range of the minimum and - * maximum value on that axis. - * - * @param {Array.} points The points to flatten. - * @param {Vector} normal The unit vector axis to flatten on. - * @param {Array.} result An array. After calling this function, - * result[0] will be the minimum value, - * result[1] will be the maximum value. - */ - public static flattenPointsOn(points, normal, result) { - - var min = Number.MAX_VALUE; - var max = -Number.MAX_VALUE; - var len = points.length; - - for (var i = 0; i < len; i++) - { - // Get the magnitude of the projection of the point onto the normal - var dot = points[i].dot(normal); - if (dot < min) { min = dot; } - if (dot > max) { max = dot; } - } - - result[0] = min; result[1] = max; - - } - - /** - * Pool of Vectors used in calculations. - * - * @type {Array.} - */ - public static T_VECTORS: Vec2[]; - - /** - * Pool of Arrays used in calculations. - * - * @type {Array.>} - */ - public static T_ARRAYS; - - /** - * Check whether two convex clockwise polygons are separated by the specified - * axis (must be a unit vector). - * - * @param {Vector} aPos The position of the first polygon. - * @param {Vector} bPos The position of the second polygon. - * @param {Array.} aPoints The points in the first polygon. - * @param {Array.} bPoints The points in the second polygon. - * @param {Vector} axis The axis (unit sized) to test against. The points of both polygons - * will be projected onto this axis. - * @param {Response=} response A Response object (optional) which will be populated - * if the axis is not a separating axis. - * @return {boolean} true if it is a separating axis, false otherwise. If false, - * and a response is passed in, information about how much overlap and - * the direction of the overlap will be populated. - */ - public static isSeparatingAxis(aPos, bPos, aPoints, bPoints, axis, response?:Response = null): bool { - - var rangeA = Collision.T_ARRAYS.pop(); - var rangeB = Collision.T_ARRAYS.pop(); - - // Get the magnitude of the offset between the two polygons - var offsetV = Collision.T_VECTORS.pop().copyFrom(bPos).sub(aPos); - var projectedOffset = offsetV.dot(axis); - - // Project the polygons onto the axis. - Collision.flattenPointsOn(aPoints, axis, rangeA); - Collision.flattenPointsOn(bPoints, axis, rangeB); - - // Move B's range to its position relative to A. - rangeB[0] += projectedOffset; - rangeB[1] += projectedOffset; - - // Check if there is a gap. If there is, this is a separating axis and we can stop - if (rangeA[0] > rangeB[1] || rangeB[0] > rangeA[1]) - { - Collision.T_VECTORS.push(offsetV); - Collision.T_ARRAYS.push(rangeA); - Collision.T_ARRAYS.push(rangeB); - return true; - } - - // If we're calculating a response, calculate the overlap. - if (response) - { - var overlap = 0; - - // A starts further left than B - if (rangeA[0] < rangeB[0]) - { - response.aInB = false; - - // A ends before B does. We have to pull A out of B - if (rangeA[1] < rangeB[1]) - { - overlap = rangeA[1] - rangeB[0]; - response.bInA = false; - // B is fully inside A. Pick the shortest way out. - } - else - { - var option1 = rangeA[1] - rangeB[0]; - var option2 = rangeB[1] - rangeA[0]; - overlap = option1 < option2 ? option1 : -option2; - } - // B starts further left than A - } - else - { - response.bInA = false; - - // B ends before A ends. We have to push A out of B - if (rangeA[1] > rangeB[1]) - { - overlap = rangeA[0] - rangeB[1]; - response.aInB = false; - // A is fully inside B. Pick the shortest way out. - } - else - { - var option1 = rangeA[1] - rangeB[0]; - var option2 = rangeB[1] - rangeA[0]; - overlap = option1 < option2 ? option1 : -option2; - } - } - - // If this is the smallest amount of overlap we've seen so far, set it as the minimum overlap. - var absOverlap = Math.abs(overlap); - - if (absOverlap < response.overlap) - { - response.overlap = absOverlap; - response.overlapN.copyFrom(axis); - - if (overlap < 0) - { - response.overlapN.reverse(); - } - } - } - - Collision.T_VECTORS.push(offsetV); - Collision.T_ARRAYS.push(rangeA); - Collision.T_ARRAYS.push(rangeB); - - return false; - - } - - public static LEFT_VORNOI_REGION:number = -1; - public static MIDDLE_VORNOI_REGION:number = 0; - public static RIGHT_VORNOI_REGION:number = 1; - - /** - * Calculates which Vornoi region a point is on a line segment. - * It is assumed that both the line and the point are relative to (0, 0) - * - * | (0) | - * (-1) [0]--------------[1] (1) - * | (0) | - * - * @param {Vector} line The line segment. - * @param {Vector} point The point. - * @return {number} LEFT_VORNOI_REGION (-1) if it is the left region, - * MIDDLE_VORNOI_REGION (0) if it is the middle region, - * RIGHT_VORNOI_REGION (1) if it is the right region. - */ - public static vornoiRegion(line: Vec2, point: Vec2): number { - - var len2 = line.length2(); - var dp = point.dot(line); - - if (dp < 0) { return Collision.LEFT_VORNOI_REGION; } - else if (dp > len2) { return Collision.RIGHT_VORNOI_REGION; } - else { return Collision.MIDDLE_VORNOI_REGION; } - - } - - /** - * Check if two circles intersect. - * - * @param {Circle} a The first circle. - * @param {Circle} b The second circle. - * @param {Response=} response Response object (optional) that will be populated if - * the circles intersect. - * @return {boolean} true if the circles intersect, false if they don't. - */ - public static testCircleCircle(a: Circle, b: Circle, response?: Response = null): bool { - - var differenceV = Collision.T_VECTORS.pop().copyFrom(b.pos).sub(a.pos); - var totalRadius = a.radius + b.radius; - var totalRadiusSq = totalRadius * totalRadius; - var distanceSq = differenceV.length2(); - - if (distanceSq > totalRadiusSq) - { - // They do not intersect - Collision.T_VECTORS.push(differenceV); - return false; - } - - // They intersect. If we're calculating a response, calculate the overlap. - if (response) - { - var dist = Math.sqrt(distanceSq); - response.a = a; - response.b = b; - response.overlap = totalRadius - dist; - response.overlapN.copyFrom(differenceV.normalize()); - response.overlapV.copyFrom(differenceV).scale(response.overlap); - response.aInB = a.radius <= b.radius && dist <= b.radius - a.radius; - response.bInA = b.radius <= a.radius && dist <= a.radius - b.radius; - } - - Collision.T_VECTORS.push(differenceV); - return true; - - } - - /** - * Check if a polygon and a circle intersect. - * - * @param {Polygon} polygon The polygon. - * @param {Circle} circle The circle. - * @param {Response=} response Response object (optional) that will be populated if - * they interset. - * @return {boolean} true if they intersect, false if they don't. - */ - public static testPolygonCircle(polygon: Polygon, circle: Circle, response?: Response = null): bool { - - var circlePos = Collision.T_VECTORS.pop().copyFrom(circle.pos).sub(polygon.pos); - var radius = circle.radius; - var radius2 = radius * radius; - var points = polygon.points; - var len = points.length; - var edge = T_VECTORS.pop(); - var point = T_VECTORS.pop(); - - // For each edge in the polygon - for (var i = 0; i < len; i++) - { - var next = i === len - 1 ? 0 : i + 1; - var prev = i === 0 ? len - 1 : i - 1; - var overlap = 0; - var overlapN = null; - - // Get the edge - edge.copyFrom(polygon.edges[i]); - // Calculate the center of the cirble relative to the starting point of the edge - point.copyFrom(circlePos).sub(points[i]); - - // If the distance between the center of the circle and the point - // is bigger than the radius, the polygon is definitely not fully in - // the circle. - if (response && point.length2() > radius2) - { - response.aInB = false; - } - - // Calculate which Vornoi region the center of the circle is in. - var region = vornoiRegion(edge, point); - - if (region === Collision.LEFT_VORNOI_REGION) - { - // Need to make sure we're in the RIGHT_VORNOI_REGION of the previous edge. - edge.copyFrom(polygon.edges[prev]); - - // Calculate the center of the circle relative the starting point of the previous edge - var point2 = Collision.T_VECTORS.pop().copyFrom(circlePos).sub(points[prev]); - region = vornoiRegion(edge, point2); - - if (region === Collision.RIGHT_VORNOI_REGION) - { - // It's in the region we want. Check if the circle intersects the point. - var dist = point.length2(); - - if (dist > radius) - { - // No intersection - Collision.T_VECTORS.push(circlePos); - Collision.T_VECTORS.push(edge); - Collision.T_VECTORS.push(point); - Collision.T_VECTORS.push(point2); - return false; - } - else if (response) - { - // It intersects, calculate the overlap - response.bInA = false; - overlapN = point.normalize(); - overlap = radius - dist; - } - } - - Collision.T_VECTORS.push(point2); - - } - else if (region === Collision.RIGHT_VORNOI_REGION) - { - // Need to make sure we're in the left region on the next edge - edge.copyFrom(polygon.edges[next]); - - // Calculate the center of the circle relative to the starting point of the next edge - point.copyFrom(circlePos).sub(points[next]); - region = vornoiRegion(edge, point); - - if (region === Collision.LEFT_VORNOI_REGION) - { - // It's in the region we want. Check if the circle intersects the point. - var dist = point.length2(); - - if (dist > radius) - { - // No intersection - Collision.T_VECTORS.push(circlePos); - Collision.T_VECTORS.push(edge); - Collision.T_VECTORS.push(point); - return false; - } - else if (response) - { - // It intersects, calculate the overlap - response.bInA = false; - overlapN = point.normalize(); - overlap = radius - dist; - } - } - // MIDDLE_VORNOI_REGION - } - else - { - // Need to check if the circle is intersecting the edge, - // Change the edge into its "edge normal". - var normal = edge.perp().normalize(); - - // Find the perpendicular distance between the center of the - // circle and the edge. - var dist = point.dot(normal); - var distAbs = Math.abs(dist); - - // If the circle is on the outside of the edge, there is no intersection - if (dist > 0 && distAbs > radius) - { - Collision.T_VECTORS.push(circlePos); - Collision.T_VECTORS.push(normal); - Collision.T_VECTORS.push(point); - return false; - } - else if (response) - { - // It intersects, calculate the overlap. - overlapN = normal; - overlap = radius - dist; - // If the center of the circle is on the outside of the edge, or part of the - // circle is on the outside, the circle is not fully inside the polygon. - if (dist >= 0 || overlap < 2 * radius) - { - response.bInA = false; - } - } - } - - // If this is the smallest overlap we've seen, keep it. - // (overlapN may be null if the circle was in the wrong Vornoi region) - if (overlapN && response && Math.abs(overlap) < Math.abs(response.overlap)) - { - response.overlap = overlap; - response.overlapN.copyFrom(overlapN); - } - } - - // Calculate the final overlap vector - based on the smallest overlap. - if (response) - { - response.a = polygon; - response.b = circle; - response.overlapV.copyFrom(response.overlapN).scale(response.overlap); - } - - Collision.T_VECTORS.push(circlePos); - Collision.T_VECTORS.push(edge); - Collision.T_VECTORS.push(point); - - return true; - } - - /** - * Check if a circle and a polygon intersect. - * - * NOTE: This runs slightly slower than polygonCircle as it just - * runs polygonCircle and reverses everything at the end. - * - * @param {Circle} circle The circle. - * @param {Polygon} polygon The polygon. - * @param {Response=} response Response object (optional) that will be populated if - * they interset. - * @return {boolean} true if they intersect, false if they don't. - */ - public static testCirclePolygon(circle: Circle, polygon: Polygon, response?: Response = null): bool { - - var result = Collision.testPolygonCircle(polygon, circle, response); - - if (result && response) - { - // Swap A and B in the response. - var a = response.a; - var aInB = response.aInB; - response.overlapN.reverse(); - response.overlapV.reverse(); - response.a = response.b; - response.b = a; - response.aInB = response.bInA; - response.bInA = aInB; - } - - return result; - } - - /** - * Checks whether two convex, clockwise polygons intersect. - * - * @param {Polygon} a The first polygon. - * @param {Polygon} b The second polygon. - * @param {Response=} response Response object (optional) that will be populated if - * they interset. - * @return {boolean} true if they intersect, false if they don't. - */ - public static testPolygonPolygon(a: Polygon, b: Polygon, response?: Response = null): bool { - - var aPoints = a.points; - var aLen = aPoints.length; - var bPoints = b.points; - var bLen = bPoints.length; - - // If any of the edge normals of A is a separating axis, no intersection. - for (var i = 0; i < aLen; i++) - { - if (Collision.isSeparatingAxis(a.pos, b.pos, aPoints, bPoints, a.normals[i], response)) - { - return false; - } - } - - // If any of the edge normals of B is a separating axis, no intersection. - for (var i = 0; i < bLen; i++) - { - if (Collision.isSeparatingAxis(a.pos, b.pos, aPoints, bPoints, b.normals[i], response)) - { - return false; - } - } - - // Since none of the edge normals of A or B are a separating axis, there is an intersection - // and we've already calculated the smallest overlap (in isSeparatingAxis). Calculate the - // final overlap vector. - if (response) - { - response.a = a; - response.b = b; - response.overlapV.copyFrom(response.overlapN).scale(response.overlap); - } - - return true; - } - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/CollisionMask.ts b/wip/phaser clean up/CollisionMask.ts deleted file mode 100644 index f0186ae0..00000000 --- a/wip/phaser clean up/CollisionMask.ts +++ /dev/null @@ -1,501 +0,0 @@ -/// - -/** -* Phaser - CollisionMask -*/ - -module Phaser { - - export class CollisionMask { - - /** - * CollisionMask constructor. Creates a new CollisionMask for the given GameObject. - * - * @param game {Phaser.Game} Current game instance. - * @param parent {Phaser.GameObject} The GameObject this CollisionMask belongs to. - * @param x {number} The initial x position of the CollisionMask. - * @param y {number} The initial y position of the CollisionMask. - * @param width {number} The width of the CollisionMask. - * @param height {number} The height of the CollisionMask. - */ - constructor(game: Game, parent: GameObject, x: number, y: number, width: number, height: number) { - - this._game = game; - this._parent = parent; - - // By default the CollisionMask is a quad - this.type = CollisionMask.QUAD; - - this.quad = new Phaser.Quad(this._parent.x, this._parent.y, this._parent.width, this._parent.height); - this.offset = new MicroPoint(0, 0); - this.last = new MicroPoint(0, 0); - - this._ref = this.quad; - - return this; - - } - - private _game; - private _parent; - - // An internal reference to the active collision shape - private _ref; - - /** - * Geom type of this sprite. (available: QUAD, POINT, CIRCLE, LINE, RECTANGLE, POLYGON) - * @type {number} - */ - public type: number = 0; - - /** - * Quad (a smaller version of Rectangle). - * @type {number} - */ - public static QUAD: number = 0; - - /** - * Point. - * @type {number} - */ - public static POINT: number = 1; - - /** - * Circle. - * @type {number} - */ - public static CIRCLE: number = 2; - - /** - * Line. - * @type {number} - */ - public static LINE: number = 3; - - /** - * Rectangle. - * @type {number} - */ - public static RECTANGLE: number = 4; - - /** - * Polygon. - * @type {number} - */ - public static POLYGON: number = 5; - - /** - * Rectangle shape container. A Rectangle instance. - * @type {Rectangle} - */ - public quad: Quad; - - /** - * Point shape container. A Point instance. - * @type {Point} - */ - public point: Point; - - /** - * Circle shape container. A Circle instance. - * @type {Circle} - */ - public circle: Circle; - - /** - * Line shape container. A Line instance. - * @type {Line} - */ - public line: Line; - - /** - * Rectangle shape container. A Rectangle instance. - * @type {Rectangle} - */ - public rect: Rectangle; - - /** - * A value from the top-left of the GameObject frame that this collisionMask is offset to. - * If the CollisionMask is a Quad/Rectangle the offset relates to the top-left of that Quad. - * If the CollisionMask is a Circle the offset relates to the center of the circle. - * @type {MicroPoint} - */ - public offset: MicroPoint; - - /** - * The previous x/y coordinates of the CollisionMask, used for hull calculations - * @type {MicroPoint} - */ - public last: MicroPoint; - - /** - * Create a circle shape with specific diameter. - * @param diameter {number} Diameter of the circle. - * @return {CollisionMask} This - */ - createCircle(diameter: number): CollisionMask { - - this.type = CollisionMask.CIRCLE; - this.circle = new Circle(this.last.x, this.last.y, diameter); - this._ref = this.circle; - - return this; - - } - - /** - * Pre-update is called right before update() on each object in the game loop. - */ - public preUpdate() { - - this.last.x = this.x; - this.last.y = this.y; - - } - - public update() { - - this._ref.x = this._parent.x + this.offset.x; - this._ref.y = this._parent.y + this.offset.y; - - } - - /** - * Renders the bounding box around this Sprite and the contact points. Useful for visually debugging. - * @param camera {Camera} Camera the bound will be rendered to. - * @param cameraOffsetX {number} X offset of bound to the camera. - * @param cameraOffsetY {number} Y offset of bound to the camera. - */ - public render(camera:Camera, cameraOffsetX:number, cameraOffsetY:number) { - - var _dx = cameraOffsetX + (this.x - camera.worldView.x); - var _dy = cameraOffsetY + (this.y - camera.worldView.y); - - this._parent.context.fillStyle = this._parent.renderDebugColor; - - if (this.type == CollisionMask.QUAD) - { - this._parent.context.fillRect(_dx, _dy, this.width, this.height); - } - else if (this.type == CollisionMask.CIRCLE) - { - this._parent.context.beginPath(); - this._parent.context.arc(_dx, _dy, this.circle.radius, 0, Math.PI * 2); - this._parent.context.fill(); - this._parent.context.closePath(); - } - - } - - /** - * Destroy all objects and references belonging to this CollisionMask - */ - public destroy() { - - this._game = null; - this._parent = null; - this._ref = null; - this.quad = null; - this.point = null; - this.circle = null; - this.rect = null; - this.line = null; - this.offset = null; - - } - - public intersectsRaw(left: number, right: number, top: number, bottom: number): bool { - -//if ((objBounds.x + objBounds.width > x) && (objBounds.x < x + width) && (objBounds.y + objBounds.height > y) && (objBounds.y < y + height)) - - return true; - - } - - public intersectsVector(vector: Phaser.Vector2): bool { - - if (this.type == CollisionMask.QUAD) - { - return this.quad.contains(vector.x, vector.y); - } - - } - - /** - * Gives a basic boolean response to a geometric collision. - * If you need the details of the collision use the Collision functions instead and inspect the IntersectResult object. - * @param source {GeomSprite} Sprite you want to check. - * @return {boolean} Whether they overlaps or not. - */ - public intersects(source: CollisionMask): bool { - - // Quad vs. Quad - if (this.type == CollisionMask.QUAD && source.type == CollisionMask.QUAD) - { - return this.quad.intersects(source.quad); - } - - // Circle vs. Circle - if (this.type == CollisionMask.CIRCLE && source.type == CollisionMask.CIRCLE) - { - return Collision.circleToCircle(this.circle, source.circle).result; - } - - // Circle vs. Rect - if (this.type == CollisionMask.CIRCLE && source.type == CollisionMask.RECTANGLE) - { - return Collision.circleToRectangle(this.circle, source.rect).result; - } - - // Circle vs. Point - if (this.type == CollisionMask.CIRCLE && source.type == CollisionMask.POINT) - { - return Collision.circleContainsPoint(this.circle, source.point).result; - } - - // Circle vs. Line - if (this.type == CollisionMask.CIRCLE && source.type == CollisionMask.LINE) - { - return Collision.lineToCircle(source.line, this.circle).result; - } - - // Rect vs. Rect - if (this.type == CollisionMask.RECTANGLE && source.type == CollisionMask.RECTANGLE) - { - return Collision.rectangleToRectangle(this.rect, source.rect).result; - } - - // Rect vs. Circle - if (this.type == CollisionMask.RECTANGLE && source.type == CollisionMask.CIRCLE) - { - return Collision.circleToRectangle(source.circle, this.rect).result; - } - - // Rect vs. Point - if (this.type == CollisionMask.RECTANGLE && source.type == CollisionMask.POINT) - { - return Collision.pointToRectangle(source.point, this.rect).result; - } - - // Rect vs. Line - if (this.type == CollisionMask.RECTANGLE && source.type == CollisionMask.LINE) - { - return Collision.lineToRectangle(source.line, this.rect).result; - } - - // Point vs. Point - if (this.type == CollisionMask.POINT && source.type == CollisionMask.POINT) - { - return this.point.equals(source.point); - } - - // Point vs. Circle - if (this.type == CollisionMask.POINT && source.type == CollisionMask.CIRCLE) - { - return Collision.circleContainsPoint(source.circle, this.point).result; - } - - // Point vs. Rect - if (this.type == CollisionMask.POINT && source.type == CollisionMask.RECTANGLE) - { - return Collision.pointToRectangle(this.point, source.rect).result; - } - - // Point vs. Line - if (this.type == CollisionMask.POINT && source.type == CollisionMask.LINE) - { - return source.line.isPointOnLine(this.point.x, this.point.y); - } - - // Line vs. Line - if (this.type == CollisionMask.LINE && source.type == CollisionMask.LINE) - { - return Collision.lineSegmentToLineSegment(this.line, source.line).result; - } - - // Line vs. Circle - if (this.type == CollisionMask.LINE && source.type == CollisionMask.CIRCLE) - { - return Collision.lineToCircle(this.line, source.circle).result; - } - - // Line vs. Rect - if (this.type == CollisionMask.LINE && source.type == CollisionMask.RECTANGLE) - { - return Collision.lineSegmentToRectangle(this.line, source.rect).result; - } - - // Line vs. Point - if (this.type == CollisionMask.LINE && source.type == CollisionMask.POINT) - { - return this.line.isPointOnLine(source.point.x, source.point.y); - } - - return false; - - } - - public checkHullIntersection(mask: CollisionMask): bool { - - if ((this.hullX + this.hullWidth > mask.hullX) && (this.hullX < mask.hullX + mask.width) && (this.hullY + this.hullHeight > mask.hullY) && (this.hullY < mask.hullY + mask.hullHeight)) - { - return true; - } - else - { - return false; - } - - } - - public get hullWidth(): number { - - if (this.deltaX > 0) - { - return this.width + this.deltaX; - } - else - { - return this.width - this.deltaX; - } - - } - - public get hullHeight(): number { - - if (this.deltaY > 0) - { - return this.height + this.deltaY; - } - else - { - return this.height - this.deltaY; - } - - } - - public get hullX(): number { - - if (this.x < this.last.x) - { - return this.x; - } - else - { - return this.last.x; - } - - } - - public get hullY(): number { - - if (this.y < this.last.y) - { - return this.y; - } - else - { - return this.last.y; - } - - } - - public get deltaXAbs(): number { - return (this.deltaX > 0 ? this.deltaX : -this.deltaX); - } - - public get deltaYAbs(): number { - return (this.deltaY > 0 ? this.deltaY : -this.deltaY); - } - - public get deltaX(): number { - return this.x - this.last.x; - } - - public get deltaY(): number { - return this.y - this.last.y; - } - - public get x(): number { - return this._ref.x; - //return this.quad.x; - } - - public set x(value: number) { - this._ref.x = value; - //this.quad.x = value; - } - - public get y(): number { - return this._ref.y; - //return this.quad.y; - } - - public set y(value: number) { - this._ref.y = value; - //this.quad.y = value; - } - - //public get rotation(): number { - // return this._angle; - //} - - //public set rotation(value: number) { - // this._angle = this._game.math.wrap(value, 360, 0); - //} - - //public get angle(): number { - // return this._angle; - //} - - //public set angle(value: number) { - // this._angle = this._game.math.wrap(value, 360, 0); - //} - - public set width(value:number) { - //this.quad.width = value; - this._ref.width = value; - } - - public set height(value:number) { - //this.quad.height = value; - this._ref.height = value; - } - - public get width(): number { - //return this.quad.width; - return this._ref.width; - } - - public get height(): number { - //return this.quad.height; - return this._ref.height; - } - - public get left(): number { - return this.x; - } - - public get right(): number { - return this.x + this.width; - } - - public get top(): number { - return this.y; - } - - public get bottom(): number { - return this.y + this.height; - } - - public get halfWidth(): number { - return this.width / 2; - } - - public get halfHeight(): number { - return this.height / 2; - } - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/Debug.ts b/wip/phaser clean up/Debug.ts deleted file mode 100644 index 5ffa22eb..00000000 --- a/wip/phaser clean up/Debug.ts +++ /dev/null @@ -1,90 +0,0 @@ -/** -* Phaser - Components - Debug -* -* -*/ - -module Phaser.Components { - - export class Debug { - - /** - * Render bound of this sprite for debugging? (default to false) - * @type {boolean} - */ - public renderDebug: bool = false; - - /** - * Color of the Sprite when no image is present. Format is a css color string. - * @type {string} - */ - public fillColor: string = 'rgb(255,255,255)'; - - /** - * Color of bound when render debug. (see renderDebug) Format is a css color string. - * @type {string} - */ - public renderDebugColor: string = 'rgba(0,255,0,0.5)'; - - /** - * Color of points when render debug. (see renderDebug) Format is a css color string. - * @type {string} - */ - public renderDebugPointColor: string = 'rgba(255,255,255,1)'; - - /** - * Renders the bounding box around this Sprite and the contact points. Useful for visually debugging. - * @param camera {Camera} Camera the bound will be rendered to. - * @param cameraOffsetX {number} X offset of bound to the camera. - * @param cameraOffsetY {number} Y offset of bound to the camera. - */ - /* - private renderBounds(camera: Camera, cameraOffsetX: number, cameraOffsetY: number) { - - this._dx = cameraOffsetX + (this.frameBounds.topLeft.x - camera.worldView.x); - this._dy = cameraOffsetY + (this.frameBounds.topLeft.y - camera.worldView.y); - - this.context.fillStyle = this.renderDebugColor; - this.context.fillRect(this._dx, this._dy, this.frameBounds.width, this.frameBounds.height); - - //this.context.fillStyle = this.renderDebugPointColor; - - //var hw = this.frameBounds.halfWidth * this.scale.x; - //var hh = this.frameBounds.halfHeight * this.scale.y; - //var sw = (this.frameBounds.width * this.scale.x) - 1; - //var sh = (this.frameBounds.height * this.scale.y) - 1; - - //this.context.fillRect(this._dx, this._dy, 1, 1); // top left - //this.context.fillRect(this._dx + hw, this._dy, 1, 1); // top center - //this.context.fillRect(this._dx + sw, this._dy, 1, 1); // top right - //this.context.fillRect(this._dx, this._dy + hh, 1, 1); // left center - //this.context.fillRect(this._dx + hw, this._dy + hh, 1, 1); // center - //this.context.fillRect(this._dx + sw, this._dy + hh, 1, 1); // right center - //this.context.fillRect(this._dx, this._dy + sh, 1, 1); // bottom left - //this.context.fillRect(this._dx + hw, this._dy + sh, 1, 1); // bottom center - //this.context.fillRect(this._dx + sw, this._dy + sh, 1, 1); // bottom right - - } - */ - - /** - * Render debug infos. (including name, bounds info, position and some other properties) - * @param x {number} X position of the debug info to be rendered. - * @param y {number} Y position of the debug info to be rendered. - * @param [color] {number} color of the debug info to be rendered. (format is css color string) - */ - /* - public renderDebugInfo(x: number, y: number, color?: string = 'rgb(255,255,255)') { - - this.context.fillStyle = color; - this.context.fillText('Sprite: ' + this.name + ' (' + this.frameBounds.width + ' x ' + this.frameBounds.height + ')', x, y); - this.context.fillText('x: ' + this.frameBounds.x.toFixed(1) + ' y: ' + this.frameBounds.y.toFixed(1) + ' rotation: ' + this.angle.toFixed(1), x, y + 14); - this.context.fillText('dx: ' + this._dx.toFixed(1) + ' dy: ' + this._dy.toFixed(1) + ' dw: ' + this._dw.toFixed(1) + ' dh: ' + this._dh.toFixed(1), x, y + 28); - this.context.fillText('sx: ' + this._sx.toFixed(1) + ' sy: ' + this._sy.toFixed(1) + ' sw: ' + this._sw.toFixed(1) + ' sh: ' + this._sh.toFixed(1), x, y + 42); - - } - */ - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/DebugPhysics.ts b/wip/phaser clean up/DebugPhysics.ts deleted file mode 100644 index 4dee9ba2..00000000 --- a/wip/phaser clean up/DebugPhysics.ts +++ /dev/null @@ -1,78 +0,0 @@ - static renderPhysicsBody(body: Phaser.Physics.Body, lineWidth: number = 1, fillStyle: string = 'rgba(0,255,0,0.2)', sleepStyle: string = 'rgba(100,100,100,0.2)') { - - for (var s = 0; s < body.shapesLength; s++) - { - DebugUtils.context.beginPath(); - - if (body.shapes[s].type == Phaser.Physics.AdvancedPhysics.SHAPE_TYPE_POLY) - { - var verts = body.shapes[s].tverts; - - // DebugUtils.context.moveTo(body.position.x * 50 + verts[0].x, body.position.y * 50 + verts[0].y); - DebugUtils.context.moveTo(verts[0].x * 50, verts[0].y * 50); - - for (var i = 1; i < verts.length; i++) - { - // DebugUtils.context.lineTo(body.position.x * 50 + verts[i].x, body.position.y * 50 + verts[i].y); - DebugUtils.context.lineTo(verts[i].x * 50, verts[i].y * 50); - } - - // DebugUtils.context.lineTo(body.position.x * 50 + verts[0].x, body.position.y * 50 + verts[0].y); - DebugUtils.context.lineTo(verts[0].x * 50, verts[0].y * 50); - } - else if (body.shapes[s].type == Phaser.Physics.AdvancedPhysics.SHAPE_TYPE_CIRCLE) - { - var circle = body.shapes[s]; - DebugUtils.context.arc(circle.tc.x * 50, circle.tc.y * 50, circle.radius * 50, 0, Math.PI * 2, false); - } - - DebugUtils.context.closePath(); - - if (body.isAwake) - { - DebugUtils.context.fillStyle = fillStyle; - } - else - { - DebugUtils.context.fillStyle = sleepStyle; - } - - DebugUtils.context.fill(); - - } - - } - - /** - * Render debug infos. (including name, bounds info, position and some other properties) - * @param x {number} X position of the debug info to be rendered. - * @param y {number} Y position of the debug info to be rendered. - * @param [color] {number} color of the debug info to be rendered. (format is css color string) - */ - /* - static renderPhysicsBodyInfo(body: Phaser.Physics.Body, x: number, y: number, color?: string = 'rgb(255,255,255)') { - - DebugUtils.context.fillStyle = color; - DebugUtils.context.fillText('Body ID: ' + body.name, x, y); - DebugUtils.context.fillText('Position x: ' + body.position.x.toFixed(1) + ' y: ' + body.position.y.toFixed(1) + ' rotation: ' + body.angle.toFixed(1), x, y + 14); - DebugUtils.context.fillText('World x: ' + (body.position.x * 50).toFixed(1) + ' y: ' + (body.position.y * 50).toFixed(1), x, y + 28); - DebugUtils.context.fillText('Velocity x: ' + body.velocity.x.toFixed(1) + ' y: ' + body.velocity.y.toFixed(1), x, y + 42); - - if (body.shapes[0].verts.length > 0) - { - DebugUtils.context.fillText('Vert 1 x: ' + (body.shapes[0].verts[0].x * 50) + ' y: ' + (body.shapes[0].verts[0].y * 50), x, y + 56); - DebugUtils.context.fillText('Vert 2 x: ' + (body.shapes[0].verts[1].x * 50) + ' y: ' + (body.shapes[0].verts[1].y * 50), x, y + 70); - DebugUtils.context.fillText('Vert 3 x: ' + (body.shapes[0].tverts[2].x * 50) + ' y: ' + (body.shapes[0].tverts[2].y * 50), x, y + 84); - DebugUtils.context.fillText('Vert 4 x: ' + (body.shapes[0].tverts[3].x * 50) + ' y: ' + (body.shapes[0].tverts[3].y * 50), x, y + 98); - - // - // DebugUtils.context.fillText('Vert 1 x: ' + body.shapes[0].verts[0].x.toFixed(1) + ' y: ' + body.shapes[0].verts[0].y.toFixed(1), x, y + 56); - // DebugUtils.context.fillText('Vert 2 x: ' + body.shapes[0].verts[1].x.toFixed(1) + ' y: ' + body.shapes[0].verts[1].y.toFixed(1), x, y + 70); - // DebugUtils.context.fillText('Vert 3 x: ' + body.shapes[0].verts[2].x.toFixed(1) + ' y: ' + body.shapes[0].verts[2].y.toFixed(1), x, y + 84); - // DebugUtils.context.fillText('Vert 4 x: ' + body.shapes[0].verts[3].x.toFixed(1) + ' y: ' + body.shapes[0].verts[3].y.toFixed(1), x, y + 98); - // - - } - - } - */ diff --git a/wip/phaser clean up/Emitter.ts b/wip/phaser clean up/Emitter.ts deleted file mode 100644 index 1aa5d2b1..00000000 --- a/wip/phaser clean up/Emitter.ts +++ /dev/null @@ -1,454 +0,0 @@ -/// -/// - -/** -* Phaser - Emitter -* -* Emitter is a lightweight particle emitter. It can be used for one-time explosions or for -* continuous effects like rain and fire. All it really does is launch Particle objects out -* at set intervals, and fixes their positions and velocities accorindgly. -*/ - -module Phaser { - - export class Emitter extends Group { - - /** - * Creates a new Emitter object at a specific position. - * Does NOT automatically generate or attach particles! - * - * @param x {number} The X position of the emitter. - * @param y {number} The Y position of the emitter. - * @param [size] {number} Specifies a maximum capacity for this emitter. - */ - constructor(game: Game, x: number = 0, y: number = 0, size: number = 0) { - - super(game, size); - - this.x = x; - this.y = y; - this.width = 0; - this.height = 0; - this.minParticleSpeed = new MicroPoint(-100, -100); - this.maxParticleSpeed = new MicroPoint(100, 100); - this.minRotation = -360; - this.maxRotation = 360; - this.gravity = 0; - this.particleClass = null; - this.particleDrag = new MicroPoint(); - this.frequency = 0.1; - this.lifespan = 3; - this.bounce = 0; - this._quantity = 0; - this._counter = 0; - this._explode = true; - this.on = false; - this._point = new MicroPoint(); - - } - - /** - * The X position of the top left corner of the emitter in world space. - */ - public x: number; - - /** - * The Y position of the top left corner of emitter in world space. - */ - public y: number; - - /** - * The width of the emitter. Particles can be randomly generated from anywhere within this box. - */ - public width: number; - - /** - * The height of the emitter. Particles can be randomly generated from anywhere within this box. - */ - public height: number; - - /** - * The minimum possible velocity of a particle. - * The default value is (-100,-100). - */ - public minParticleSpeed: MicroPoint; - - /** - * The maximum possible velocity of a particle. - * The default value is (100,100). - */ - public maxParticleSpeed: MicroPoint; - - /** - * The X and Y drag component of particles launched from the emitter. - */ - public particleDrag: MicroPoint; - - /** - * The minimum possible angular velocity of a particle. The default value is -360. - * NOTE: rotating particles are more expensive to draw than non-rotating ones! - */ - public minRotation: number; - - /** - * The maximum possible angular velocity of a particle. The default value is 360. - * NOTE: rotating particles are more expensive to draw than non-rotating ones! - */ - public maxRotation: number; - - /** - * Sets the acceleration.y member of each particle to this value on launch. - */ - public gravity: number; - - /** - * Determines whether the emitter is currently emitting particles. - * It is totally safe to directly toggle this. - */ - public on: bool; - - /** - * How often a particle is emitted (if emitter is started with Explode == false). - */ - public frequency: number; - - /** - * How long each particle lives once it is emitted. - * Set lifespan to 'zero' for particles to live forever. - */ - public lifespan: number; - - /** - * How much each particle should bounce. 1 = full bounce, 0 = no bounce. - */ - public bounce: number; - - /** - * Set your own particle class type here. - * Default is Particle. - */ - public particleClass; - - /** - * Internal helper for deciding how many particles to launch. - */ - private _quantity: number; - - /** - * Internal helper for the style of particle emission (all at once, or one at a time). - */ - private _explode: bool; - - /** - * Internal helper for deciding when to launch particles or kill them. - */ - private _timer: number; - - /** - * Internal counter for figuring out how many particles to launch. - */ - private _counter: number; - - /** - * Internal point object, handy for reusing for memory mgmt purposes. - */ - private _point: MicroPoint; - - /** - * Clean up memory. - */ - public destroy() { - this.minParticleSpeed = null; - this.maxParticleSpeed = null; - this.particleDrag = null; - this.particleClass = null; - this._point = null; - super.destroy(); - } - - /** - * This function generates a new array of particle sprites to attach to the emitter. - * - * @param graphics If you opted to not pre-configure an array of Sprite objects, you can simply pass in a particle image or sprite sheet. - * @param quantity {number} The number of particles to generate when using the "create from image" option. - * @param multiple {boolean} Whether the image in the Graphics param is a single particle or a bunch of particles (if it's a bunch, they need to be square!). - * @param collide {number} Whether the particles should be flagged as not 'dead' (non-colliding particles are higher performance). 0 means no collisions, 0-1 controls scale of particle's bounding box. - * - * @return This Emitter instance (nice for chaining stuff together, if you're into that). - */ - public makeParticles(graphics, quantity: number = 50, multiple: bool = false, collide: number = 0): Emitter { - - this.maxSize = quantity; - - var totalFrames: number = 1; - - /* - if(Multiple) - { - var sprite:Sprite = new Sprite(this._game); - sprite.loadGraphic(Graphics,true); - totalFrames = sprite.frames; - sprite.destroy(); - } - */ - - var randomFrame: number; - var particle: Particle; - var i: number = 0; - - while (i < quantity) - { - if (this.particleClass == null) - { - particle = new Particle(this._game); - } - else - { - particle = new this.particleClass(this._game); - } - - if (multiple) - { - /* - randomFrame = this._game.math.random()*totalFrames; - if(BakedRotations > 0) - particle.loadRotatedGraphic(Graphics,BakedRotations,randomFrame); - else - { - particle.loadGraphic(Graphics,true); - particle.frame = randomFrame; - } - */ - } - else - { - /* - if (BakedRotations > 0) - particle.loadRotatedGraphic(Graphics,BakedRotations); - else - particle.loadGraphic(Graphics); - */ - - if (graphics) - { - particle.loadGraphic(graphics); - } - - } - - if (collide > 0) - { - particle.allowCollisions = Collision.ANY; - particle.width *= collide; - particle.height *= collide; - //particle.centerOffsets(); - } - else - { - particle.allowCollisions = Collision.NONE; - } - - particle.exists = false; - - this.add(particle); - - i++; - } - - return this; - } - - /** - * Called automatically by the game loop, decides when to launch particles and when to "die". - */ - public update() { - - if (this.on) - { - if (this._explode) - { - this.on = false; - - var i: number = 0; - var l: number = this._quantity; - - if ((l <= 0) || (l > this.length)) - { - l = this.length; - } - - while (i < l) - { - this.emitParticle(); - i++; - } - - this._quantity = 0; - } - else - { - this._timer += this._game.time.elapsed; - - while ((this.frequency > 0) && (this._timer > this.frequency) && this.on) - { - this._timer -= this.frequency; - this.emitParticle(); - - if ((this._quantity > 0) && (++this._counter >= this._quantity)) - { - this.on = false; - this._quantity = 0; - } - } - } - } - - super.update(); - - } - - /** - * Call this function to turn off all the particles and the emitter. - */ - public kill() { - - this.on = false; - - super.kill(); - - } - - /** - * Call this function to start emitting particles. - * - * @param explode {boolean} Whether the particles should all burst out at once. - * @param lifespan {number} How long each particle lives once emitted. 0 = forever. - * @param frequency {number} Ignored if Explode is set to true. Frequency is how often to emit a particle. 0 = never emit, 0.1 = 1 particle every 0.1 seconds, 5 = 1 particle every 5 seconds. - * @param quantity {number} How many particles to launch. 0 = "all of the particles". - */ - public start(explode: bool = true, lifespan: number = 0, frequency: number = 0.1, quantity: number = 0) { - - this.revive(); - - this.visible = true; - this.on = true; - - this._explode = explode; - this.lifespan = lifespan; - this.frequency = frequency; - this._quantity += quantity; - - this._counter = 0; - this._timer = 0; - - } - - /** - * This function can be used both internally and externally to emit the next particle. - */ - public emitParticle() { - - var particle: Particle = this.recycle(Particle); - - particle.lifespan = this.lifespan; - particle.elasticity = this.bounce; - particle.reset(this.x - (particle.width >> 1) + this._game.math.random() * this.width, this.y - (particle.height >> 1) + this._game.math.random() * this.height); - particle.visible = true; - - if (this.minParticleSpeed.x != this.maxParticleSpeed.x) - { - particle.velocity.x = this.minParticleSpeed.x + this._game.math.random() * (this.maxParticleSpeed.x - this.minParticleSpeed.x); - } - else - { - particle.velocity.x = this.minParticleSpeed.x; - } - - if (this.minParticleSpeed.y != this.maxParticleSpeed.y) - { - particle.velocity.y = this.minParticleSpeed.y + this._game.math.random() * (this.maxParticleSpeed.y - this.minParticleSpeed.y); - } - else - { - particle.velocity.y = this.minParticleSpeed.y; - } - - particle.acceleration.y = this.gravity; - - if (this.minRotation != this.maxRotation && this.minRotation !== 0 && this.maxRotation !== 0) - { - particle.angularVelocity = this.minRotation + this._game.math.random() * (this.maxRotation - this.minRotation); - } - else - { - particle.angularVelocity = this.minRotation; - } - - if (particle.angularVelocity != 0) - { - particle.angle = this._game.math.random() * 360 - 180; - } - - particle.drag.x = this.particleDrag.x; - particle.drag.y = this.particleDrag.y; - particle.onEmit(); - - } - - /** - * A more compact way of setting the width and height of the emitter. - * - * @param width {number} The desired width of the emitter (particles are spawned randomly within these dimensions). - * @param height {number} The desired height of the emitter. - */ - public setSize(width: number, height: number) { - this.width = width; - this.height = height; - } - - /** - * A more compact way of setting the X velocity range of the emitter. - * - * @param Min {number} The minimum value for this range. - * @param Max {number} The maximum value for this range. - */ - public setXSpeed(min: number = 0, max: number = 0) { - this.minParticleSpeed.x = min; - this.maxParticleSpeed.x = max; - } - - /** - * A more compact way of setting the Y velocity range of the emitter. - * - * @param Min {number} The minimum value for this range. - * @param Max {number} The maximum value for this range. - */ - public setYSpeed(min: number = 0, max: number = 0) { - this.minParticleSpeed.y = min; - this.maxParticleSpeed.y = max; - } - - /** - * A more compact way of setting the angular velocity constraints of the emitter. - * - * @param Min {number} The minimum value for this range. - * @param Max {number} The maximum value for this range. - */ - public setRotation(min: number = 0, max: number = 0) { - this.minRotation = min; - this.maxRotation = max; - } - - /** - * Change the emitter's midpoint to match the midpoint of a Object. - * - * @param Object {object} The Object that you want to sync up with. - */ - public at(object) { - object.getMidpoint(this._point); - this.x = this._point.x - (this.width >> 1); - this.y = this._point.y - (this.height >> 1); - } - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/Input.ts b/wip/phaser clean up/Input.ts deleted file mode 100644 index 75a23b04..00000000 --- a/wip/phaser clean up/Input.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** -* Phaser - Components - Input -* -* -*/ - -module Phaser.Components { - - export class Input { - - // Input - //public inputEnabled: bool = false; - //private _inputOver: bool = false; - - //public onInputOver: Phaser.Signal; - //public onInputOut: Phaser.Signal; - //public onInputDown: Phaser.Signal; - //public onInputUp: Phaser.Signal; - - /** - * Update input. - */ - private updateInput() { - } - - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/Motion.ts b/wip/phaser clean up/Motion.ts deleted file mode 100644 index 6d91c688..00000000 --- a/wip/phaser clean up/Motion.ts +++ /dev/null @@ -1,409 +0,0 @@ -/// -/// - -/** -* Phaser - Motion -* -* The Motion class contains lots of useful functions for moving game objects around in world space. -*/ - -module Phaser { - - export class Motion { - - constructor(game: Game) { - - this._game = game; - - } - - private _game: Game; - - /** - * A tween-like function that takes a starting velocity and some other factors and returns an altered velocity. - * - * @param {number} Velocity Any component of velocity (e.g. 20). - * @param {number} Acceleration Rate at which the velocity is changing. - * @param {number} Drag Really kind of a deceleration, this is how much the velocity changes if Acceleration is not set. - * @param {number} Max An absolute value cap for the velocity. - * - * @return {number} The altered Velocity value. - */ - public computeVelocity(Velocity: number, Acceleration: number = 0, Drag: number = 0, Max: number = 10000): number { - - if (Acceleration !== 0) - { - Velocity += Acceleration * this._game.time.elapsed; - } - else if (Drag !== 0) - { - var drag: number = Drag * this._game.time.elapsed; - - if (Velocity - drag > 0) - { - Velocity = Velocity - drag; - } - else if (Velocity + drag < 0) - { - Velocity += drag; - } - else - { - Velocity = 0; - } - } - - if ((Velocity != 0) && (Max != 10000)) - { - if (Velocity > Max) - { - Velocity = Max; - } - else if (Velocity < -Max) - { - Velocity = -Max; - } - } - - return Velocity; - - } - - /** - * Given the angle and speed calculate the velocity and return it as a Point - * - * @param {number} angle The angle (in degrees) calculated in clockwise positive direction (down = 90 degrees positive, right = 0 degrees positive, up = 90 degrees negative) - * @param {number} speed The speed it will move, in pixels per second sq - * - * @return {Point} A Point where Point.x contains the velocity x value and Point.y contains the velocity y value - */ - public velocityFromAngle(angle: number, speed: number): Point { - - if (isNaN(speed)) - { - speed = 0; - } - - var a: number = this._game.math.degreesToRadians(angle); - - return new Point((Math.cos(a) * speed), (Math.sin(a) * speed)); - - } - - /** - * Sets the source Sprite x/y velocity so it will move directly towards the destination Sprite at the speed given (in pixels per second)
- * If you specify a maxTime then it will adjust the speed (over-writing what you set) so it arrives at the destination in that number of seconds.
- * Timings are approximate due to the way Flash timers work, and irrespective of SWF frame rate. Allow for a variance of +- 50ms.
- * The source object doesn't stop moving automatically should it ever reach the destination coordinates.
- * If you need the object to accelerate, see accelerateTowardsObject() instead - * Note: Doesn't take into account acceleration, maxVelocity or drag (if you set drag or acceleration too high this object may not move at all) - * - * @param {GameObject} source The Sprite on which the velocity will be set - * @param {GameObject} dest The Sprite where the source object will move to - * @param {number} speed The speed it will move, in pixels per second (default is 60 pixels/sec) - * @param {number} maxTime Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the source will arrive at destination in the given number of ms - */ - public moveTowardsObject(source:GameObject, dest:GameObject, speed:number= 60, maxTime:number = 0) - { - var a:number = this.angleBetween(source, dest); - - if (maxTime > 0) - { - var d:number = this.distanceBetween(source, dest); - - // We know how many pixels we need to move, but how fast? - speed = d / (maxTime / 1000); - } - - source.velocity.x = Math.cos(a) * speed; - source.velocity.y = Math.sin(a) * speed; - - } - - /** - * Sets the x/y acceleration on the source Sprite so it will move towards the destination Sprite at the speed given (in pixels per second)
- * You must give a maximum speed value, beyond which the Sprite won't go any faster.
- * If you don't need acceleration look at moveTowardsObject() instead. - * - * @param {GameObject} source The Sprite on which the acceleration will be set - * @param {GameObject} dest The Sprite where the source object will move towards - * @param {number} speed The speed it will accelerate in pixels per second - * @param {number} xSpeedMax The maximum speed in pixels per second in which the sprite can move horizontally - * @param {number} ySpeedMax The maximum speed in pixels per second in which the sprite can move vertically - */ - public accelerateTowardsObject(source:GameObject, dest:GameObject, speed:number, xSpeedMax:number, ySpeedMax:number) - { - var a:number = this.angleBetween(source, dest); - - source.velocity.x = 0; - source.velocity.y = 0; - - source.acceleration.x = Math.cos(a) * speed; - source.acceleration.y = Math.sin(a) * speed; - - source.maxVelocity.x = xSpeedMax; - source.maxVelocity.y = ySpeedMax; - - } - - /** - * Move the given Sprite towards the mouse pointer coordinates at a steady velocity - * If you specify a maxTime then it will adjust the speed (over-writing what you set) so it arrives at the destination in that number of seconds.
- * Timings are approximate due to the way Flash timers work, and irrespective of SWF frame rate. Allow for a variance of +- 50ms.
- * The source object doesn't stop moving automatically should it ever reach the destination coordinates.
- * - * @param {GameObject} source The Sprite to move - * @param {number} speed The speed it will move, in pixels per second (default is 60 pixels/sec) - * @param {number} maxTime Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the source will arrive at destination in the given number of ms - */ - public moveTowardsMouse(source:GameObject, speed:number = 60, maxTime:number = 0) - { - var a:number = this.angleBetweenMouse(source); - - if (maxTime > 0) - { - var d:number = this.distanceToMouse(source); - - // We know how many pixels we need to move, but how fast? - speed = d / (maxTime / 1000); - } - - source.velocity.x = Math.cos(a) * speed; - source.velocity.y = Math.sin(a) * speed; - - } - - /** - * Sets the x/y acceleration on the source Sprite so it will move towards the mouse coordinates at the speed given (in pixels per second)
- * You must give a maximum speed value, beyond which the Sprite won't go any faster.
- * If you don't need acceleration look at moveTowardsMouse() instead. - * - * @param {GameObject} source The Sprite on which the acceleration will be set - * @param {number} speed The speed it will accelerate in pixels per second - * @param {number} xSpeedMax The maximum speed in pixels per second in which the sprite can move horizontally - * @param {number} ySpeedMax The maximum speed in pixels per second in which the sprite can move vertically - */ - public accelerateTowardsMouse(source:GameObject, speed:number, xSpeedMax:number, ySpeedMax:number) - { - var a:number = this.angleBetweenMouse(source); - - source.velocity.x = 0; - source.velocity.y = 0; - - source.acceleration.x = Math.cos(a) * speed; - source.acceleration.y = Math.sin(a) * speed; - - source.maxVelocity.x = xSpeedMax; - source.maxVelocity.y = ySpeedMax; - } - - /** - * Sets the x/y velocity on the source Sprite so it will move towards the target coordinates at the speed given (in pixels per second)
- * If you specify a maxTime then it will adjust the speed (over-writing what you set) so it arrives at the destination in that number of seconds.
- * Timings are approximate due to the way Flash timers work, and irrespective of SWF frame rate. Allow for a variance of +- 50ms.
- * The source object doesn't stop moving automatically should it ever reach the destination coordinates.
- * - * @param {GameObject} source The Sprite to move - * @param {Point} target The Point coordinates to move the source Sprite towards - * @param {number} speed The speed it will move, in pixels per second (default is 60 pixels/sec) - * @param {number} maxTime Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the source will arrive at destination in the given number of ms - */ - public moveTowardsPoint(source:GameObject, target:Point, speed:number = 60, maxTime:number = 0) - { - var a:number = this.angleBetweenPoint(source, target); - - if (maxTime > 0) - { - var d:number = this.distanceToPoint(source, target); - - // We know how many pixels we need to move, but how fast? - speed = d / (maxTime / 1000); - } - - source.velocity.x = Math.cos(a) * speed; - source.velocity.y = Math.sin(a) * speed; - } - - /** - * Sets the x/y acceleration on the source Sprite so it will move towards the target coordinates at the speed given (in pixels per second)
- * You must give a maximum speed value, beyond which the Sprite won't go any faster.
- * If you don't need acceleration look at moveTowardsPoint() instead. - * - * @param {GameObject} source The Sprite on which the acceleration will be set - * @param {Point} target The Point coordinates to move the source Sprite towards - * @param {number} speed The speed it will accelerate in pixels per second - * @param {number} xSpeedMax The maximum speed in pixels per second in which the sprite can move horizontally - * @param {number} ySpeedMax The maximum speed in pixels per second in which the sprite can move vertically - */ - public accelerateTowardsPoint(source:GameObject, target:Point, speed:number, xSpeedMax:number, ySpeedMax:number) - { - var a:number = this.angleBetweenPoint(source, target); - - source.velocity.x = 0; - source.velocity.y = 0; - - source.acceleration.x = Math.cos(a) * speed; - source.acceleration.y = Math.sin(a) * speed; - - source.maxVelocity.x = xSpeedMax; - source.maxVelocity.y = ySpeedMax; - } - - /** - * Find the distance (in pixels, rounded) between two Sprites, taking their origin into account - * - * @param {GameObject} a The first Sprite - * @param {GameObject} b The second Sprite - * @return {number} int Distance (in pixels) - */ - public distanceBetween(a:GameObject, b:GameObject):number - { - var dx:number = (a.x + a.origin.x) - (b.x + b.origin.x); - var dy:number = (a.y + a.origin.y) - (b.y + b.origin.y); - - return this._game.math.vectorLength(dx, dy); - - } - - /** - * Find the distance (in pixels, rounded) from an Sprite to the given Point, taking the source origin into account - * - * @param {GameObject} a The Sprite - * @param {Point} target The Point - * @return {number} Distance (in pixels) - */ - public distanceToPoint(a:GameObject, target:Point):number - { - var dx:number = (a.x + a.origin.x) - (target.x); - var dy:number = (a.y + a.origin.y) - (target.y); - - return this._game.math.vectorLength(dx, dy); - } - - /** - * Find the distance (in pixels, rounded) from the object x/y and the mouse x/y - * - * @param {GameObject} a Sprite to test against - * @return {number} The distance between the given sprite and the mouse coordinates - */ - public distanceToMouse(a:GameObject):number - { - var dx: number = (a.x + a.origin.x) - this._game.input.x; - var dy: number = (a.y + a.origin.y) - this._game.input.y; - - return this._game.math.vectorLength(dx, dy); - } - - /** - * Find the angle (in radians) between an Sprite and an Point. The source sprite takes its x/y and origin into account. - * The angle is calculated in clockwise positive direction (down = 90 degrees positive, right = 0 degrees positive, up = 90 degrees negative) - * - * @param {GameObject} a The Sprite to test from - * @param {Point} target The Point to angle the Sprite towards - * @param {boolean} asDegrees If you need the value in degrees instead of radians, set to true - * - * @return {number} The angle (in radians unless asDegrees is true) - */ - public angleBetweenPoint(a:GameObject, target:Point, asDegrees:bool = false):number - { - var dx:number = (target.x) - (a.x + a.origin.x); - var dy:number = (target.y) - (a.y + a.origin.y); - - if (asDegrees) - { - return this._game.math.radiansToDegrees(Math.atan2(dy, dx)); - } - else - { - return Math.atan2(dy, dx); - } - } - - /** - * Find the angle (in radians) between the two Sprite, taking their x/y and origin into account. - * The angle is calculated in clockwise positive direction (down = 90 degrees positive, right = 0 degrees positive, up = 90 degrees negative) - * - * @param {GameObject} a The Sprite to test from - * @param {GameObject} b The Sprite to test to - * @param {boolean} asDegrees If you need the value in degrees instead of radians, set to true - * - * @return {number} The angle (in radians unless asDegrees is true) - */ - public angleBetween(a:GameObject, b:GameObject, asDegrees:bool = false):number - { - var dx:number = (b.x + b.origin.x) - (a.x + a.origin.x); - var dy:number = (b.y + b.origin.y) - (a.y + a.origin.y); - - if (asDegrees) - { - return this._game.math.radiansToDegrees(Math.atan2(dy, dx)); - } - else - { - return Math.atan2(dy, dx); - } - } - - /** - * Given the GameObject and speed calculate the velocity and return it as an Point based on the direction the sprite is facing - * - * @param {GameObject} parent The Sprite to get the facing value from - * @param {number} speed The speed it will move, in pixels per second sq - * - * @return {Point} An Point where Point.x contains the velocity x value and Point.y contains the velocity y value - */ - public velocityFromFacing(parent:GameObject, speed:number):Point - { - var a:number; - - if (parent.facing == Collision.LEFT) - { - a = this._game.math.degreesToRadians(180); - } - else if (parent.facing == Collision.RIGHT) - { - a = this._game.math.degreesToRadians(0); - } - else if (parent.facing == Collision.UP) - { - a = this._game.math.degreesToRadians(-90); - } - else if (parent.facing == Collision.DOWN) - { - a = this._game.math.degreesToRadians(90); - } - - return new Point(Math.cos(a) * speed, Math.sin(a) * speed); - - } - - /** - * Find the angle (in radians) between an Sprite and the mouse, taking their x/y and origin into account. - * The angle is calculated in clockwise positive direction (down = 90 degrees positive, right = 0 degrees positive, up = 90 degrees negative) - * - * @param {GameObject} a The Object to test from - * @param {boolean} asDegrees If you need the value in degrees instead of radians, set to true - * - * @return {number} The angle (in radians unless asDegrees is true) - */ - public angleBetweenMouse(a:GameObject, asDegrees:bool = false):number - { - // In order to get the angle between the object and mouse, we need the objects screen coordinates (rather than world coordinates) - var p:MicroPoint = a.getScreenXY(); - - var dx:number = a._game.input.x - p.x; - var dy:number = a._game.input.y - p.y; - - if (asDegrees) - { - return this._game.math.radiansToDegrees(Math.atan2(dy, dx)); - } - else - { - return Math.atan2(dy, dx); - } - } - - } - -} diff --git a/wip/phaser clean up/OldSprite.ts b/wip/phaser clean up/OldSprite.ts deleted file mode 100644 index 1e28f513..00000000 --- a/wip/phaser clean up/OldSprite.ts +++ /dev/null @@ -1,355 +0,0 @@ -/// -/// -/// -/// - -/** -* Phaser - Sprite -* -* The Sprite GameObject is an extension of the core GameObject that includes support for animation and dynamic textures. -* It's probably the most used GameObject of all. -*/ - -module Phaser { - - export class OldSprite { - - /** - * Sprite constructor - * Create a new Sprite. - * - * @param game {Phaser.Game} Current game instance. - * @param [x] {number} the initial x position of the sprite. - * @param [y] {number} the initial y position of the sprite. - * @param [key] {string} Key of the graphic you want to load for this sprite. - * @param [width] {number} The width of the object. - * @param [height] {number} The height of the object. - */ - constructor(game: Game, x?: number = 0, y?: number = 0, key?: string = null, width?: number = 16, height?: number = 16) { - - this.canvas = game.stage.canvas; - this.context = game.stage.context; - - this.frameBounds = new Rectangle(x, y, width, height); - this.exists = true; - this.active = true; - this.visible = true; - this.alive = true; - this.isGroup = false; - this.alpha = 1; - this.scale = new MicroPoint(1, 1); - - this.last = new MicroPoint(x, y); - this.align = GameObject.ALIGN_TOP_LEFT; - this.mass = 1; - this.elasticity = 0; - this.health = 1; - this.immovable = false; - this.moves = true; - this.worldBounds = null; - - this.touching = Collision.NONE; - this.wasTouching = Collision.NONE; - this.allowCollisions = Collision.ANY; - - this.velocity = new MicroPoint(); - this.acceleration = new MicroPoint(); - this.drag = new MicroPoint(); - this.maxVelocity = new MicroPoint(10000, 10000); - - this.angle = 0; - this.angularVelocity = 0; - this.angularAcceleration = 0; - this.angularDrag = 0; - this.maxAngular = 10000; - - this.cameraBlacklist = []; - this.scrollFactor = new MicroPoint(1, 1); - this.collisionMask = new CollisionMask(game, this, x, y, width, height); - - - this._texture = null; - - this.animations = new AnimationManager(this._game, this); - - if (key !== null) - { - this.cacheKey = key; - this.loadGraphic(key); - } - else - { - this.frameBounds.width = 16; - this.frameBounds.height = 16; - } - - } - - /** - * The essential reference to the main game object - */ - public _game: Game; - - /** - * Controls whether update() is automatically called by State/Group. - */ - public active: bool; - - /** - * Controls whether draw() is automatically called by State/Group. - */ - public visible: bool; - - /** - * Setting this to true will prevent the object from being updated during the main game loop (you will have to call update on it yourself) - */ - public ignoreGlobalUpdate: bool; - - /** - * Setting this to true will prevent the object from being rendered during the main game loop (you will have to call render on it yourself) - */ - public ignoreGlobalRender: bool; - - /** - * An Array of Cameras to which this GameObject won't render - * @type {Array} - */ - public cameraBlacklist: number[]; - - /** - * Orientation of the object. - * @type {number} - */ - public facing: number; - - /** - * Set alpha to a number between 0 and 1 to change the opacity. - * @type {number} - */ - public alpha: number; - - /** - * Scale factor of the object. - * @type {MicroPoint} - */ - public scale: MicroPoint; - - /** - * Controls if the GameObject is rendered rotated or not. - * If renderRotation is false then the object can still rotate but it will never be rendered rotated. - * @type {boolean} - */ - public renderRotation: bool = true; - - /** - * A point that can store numbers from 0 to 1 (for X and Y independently) - * which governs how much this object is affected by the camera . - * @type {MicroPoint} - */ - public scrollFactor: MicroPoint; - - /** - * Rectangle container of this object. - * @type {Rectangle} - */ - public frameBounds: Rectangle; - - /** - * This objects CollisionMask - * @type {CollisionMask} - */ - public collisionMask: CollisionMask; - - /** - * A rectangular area which is object is allowed to exist within. If it travels outside of this area it will perform the outOfBoundsAction. - * @type {Quad} - */ - public worldBounds: Quad; - - /** - * A reference to the Canvas this GameObject will render to - * @type {HTMLCanvasElement} - */ - public canvas: HTMLCanvasElement; - - /** - * A reference to the Canvas Context2D this GameObject will render to - * @type {CanvasRenderingContext2D} - */ - public context: CanvasRenderingContext2D; - - /** - * Texture of this sprite to be rendered. - */ - private _texture; - - /** - * Texture of this sprite is DynamicTexture? (default to false) - * @type {boolean} - */ - private _dynamicTexture: bool = false; - - - /** - * This manages animations of the sprite. You can modify animations though it. (see AnimationManager) - * @type AnimationManager - */ - public animations: AnimationManager; - - /** - * The cache key that was used for this texture (if any) - */ - public cacheKey: string; - - - /** - * Flip the graphic horizontally? (defaults to false) - * @type {boolean} - */ - public flipped: bool = false; - - - - /** - * Pre-update is called right before update() on each object in the game loop. - */ - public preUpdate() { - - this.last.x = this.frameBounds.x; - this.last.y = this.frameBounds.y; - - this.collisionMask.preUpdate(); - - } - - /** - * Override this function to update your class's position and appearance. - */ - public update() { - } - - /** - * Automatically called after update() by the game loop. - */ - public postUpdate() { - - this.animations.update(); - - if (this.moves) - { - this.updateMotion(); - } - - if (this.worldBounds != null) - { - if (this.outOfBoundsAction == GameObject.OUT_OF_BOUNDS_KILL) - { - if (this.x < this.worldBounds.x || this.x > this.worldBounds.right || this.y < this.worldBounds.y || this.y > this.worldBounds.bottom) - { - this.kill(); - } - } - else - { - if (this.x < this.worldBounds.x) - { - this.x = this.worldBounds.x; - } - else if (this.x > this.worldBounds.right) - { - this.x = this.worldBounds.right; - } - - if (this.y < this.worldBounds.y) - { - this.y = this.worldBounds.y; - } - else if (this.y > this.worldBounds.bottom) - { - this.y = this.worldBounds.bottom; - } - } - } - - this.collisionMask.update(); - - if (this.inputEnabled) - { - this.updateInput(); - } - - this.wasTouching = this.touching; - this.touching = Collision.NONE; - - } - - /** - * Clean up memory. - */ - public destroy() { - } - - public set width(value:number) { - this.frameBounds.width = value; - } - - public set height(value:number) { - this.frameBounds.height = value; - } - - public get width(): number { - return this.frameBounds.width; - } - - public get height(): number { - return this.frameBounds.height; - } - - public set frame(value: number) { - this.animations.frame = value; - } - - public get frame(): number { - return this.animations.frame; - } - - public set frameName(value: string) { - this.animations.frameName = value; - } - - public get frameName(): string { - return this.animations.frameName; - } - - /** - * Handy for "killing" game objects. - * Default behavior is to flag them as nonexistent AND dead. - * However, if you want the "corpse" to remain in the game, - * like to animate an effect or whatever, you should override this, - * setting only alive to false, and leaving exists true. - */ - public kill() { - this.alive = false; - this.exists = false; - } - - /** - * Handy for bringing game objects "back to life". Just sets alive and exists back to true. - * In practice, this is most often called by Object.reset(). - */ - public revive() { - this.alive = true; - this.exists = true; - } - - /** - * Convert object to readable string name. Useful for debugging, save games, etc. - */ - public toString(): string { - return ""; - } - - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/PixelUtils.ts b/wip/phaser clean up/PixelUtils.ts deleted file mode 100644 index dfd1f8d3..00000000 --- a/wip/phaser clean up/PixelUtils.ts +++ /dev/null @@ -1,49 +0,0 @@ -/// -/// -/// -/// - -/** -* Phaser - PixelUtils -* -* A collection of methods useful for manipulating pixels. -*/ - -module Phaser { - - export class PixelUtils { - - static boot() { - - PixelUtils.pixelCanvas = document.createElement('canvas'); - PixelUtils.pixelCanvas.width = 1; - PixelUtils.pixelCanvas.height = 1; - PixelUtils.pixelContext = PixelUtils.pixelCanvas.getContext('2d'); - - } - - /** - * Canvas element used in 1x1 pixel checks. - * @type {HTMLCanvasElement} - */ - static pixelCanvas: HTMLCanvasElement; - - /** - * Render context of pixelCanvas - * @type {CanvasRenderingContext2D} - */ - static pixelContext: CanvasRenderingContext2D; - - static getPixel(key: string, x: number, y: number): number { - - // write out a single pixel (won't help with rotated sprites though.. hmm) - - var imageData = PixelUtils.pixelContext.getImageData(0, 0, 1, 1); - - return ColorUtils.getColor32(imageData.data[3], imageData.data[0], imageData.data[1], imageData.data[2]); - - } - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/Properties.ts b/wip/phaser clean up/Properties.ts deleted file mode 100644 index 3171afe9..00000000 --- a/wip/phaser clean up/Properties.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** -* Phaser - Components - Properties -* -* -*/ - -module Phaser.Components { - - export class Properties { - - /** - * Handy for storing health percentage or armor points or whatever. - * @type {number} - */ - public health: number; - - /** - * Reduces the "health" variable of this sprite by the amount specified in Damage. - * Calls kill() if health drops to or below zero. - * - * @param Damage {number} How much health to take away (use a negative number to give a health bonus). - */ - public hurt(damage: number) { - - this.health = this.health - damage; - - if (this.health <= 0) - { - //this.kill(); - } - - } - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/Tilemap.ts b/wip/phaser clean up/Tilemap.ts deleted file mode 100644 index 746d7df5..00000000 --- a/wip/phaser clean up/Tilemap.ts +++ /dev/null @@ -1,434 +0,0 @@ -/// -/// -/// - -/** -* Phaser - Tilemap -* -* This GameObject allows for the display of a tilemap within the game world. Tile maps consist of an image, tile data and a size. -* Internally it creates a TilemapLayer for each layer in the tilemap. -*/ - -module Phaser { - - export class Tilemap { - - /** - * Tilemap constructor - * Create a new Tilemap. - * - * @param game {Phaser.Game} Current game instance. - * @param key {string} Asset key for this map. - * @param mapData {string} Data of this map. (a big 2d array, normally in csv) - * @param format {number} Format of this map data, available: Tilemap.FORMAT_CSV or Tilemap.FORMAT_TILED_JSON. - * @param resizeWorld {boolean} Resize the world bound automatically based on this tilemap? - * @param tileWidth {number} Width of tiles in this map. - * @param tileHeight {number} Height of tiles in this map. - */ - constructor(game: Game, key: string, mapData: string, format: number, resizeWorld: bool = true, tileWidth?: number = 0, tileHeight?: number = 0) { - - //super(game); - - this.isGroup = false; - - this.tiles = []; - this.layers = []; - - this.mapFormat = format; - - switch (format) - { - case Tilemap.FORMAT_CSV: - this.parseCSV(game.cache.getText(mapData), key, tileWidth, tileHeight); - break; - - case Tilemap.FORMAT_TILED_JSON: - this.parseTiledJSON(game.cache.getText(mapData), key); - break; - } - - if (this.currentLayer && resizeWorld) - { - this._game.world.setSize(this.currentLayer.widthInPixels, this.currentLayer.heightInPixels, true); - } - - } - - private _tempCollisionData; - - /** - * Tilemap data format enum: CSV. - * @type {number} - */ - public static FORMAT_CSV: number = 0; - /** - * Tilemap data format enum: Tiled JSON. - * @type {number} - */ - public static FORMAT_TILED_JSON: number = 1; - - /** - * Array contains tile objects of this map. - * @type {Tile[]} - */ - public tiles : Tile[]; - /** - * Array contains tilemap layer objects of this map. - * @type {TilemapLayer[]} - */ - public layers : TilemapLayer[]; - /** - * Current tilemap layer. - * @type {TilemapLayer} - */ - public currentLayer: TilemapLayer; - /** - * The tilemap layer for collision. - * @type {TilemapLayer} - */ - public collisionLayer: TilemapLayer; - /** - * Tilemap collision callback. - * @type {function} - */ - public collisionCallback = null; - /** - * Context for the collision callback called with. - */ - public collisionCallbackContext; - /** - * Format of this tilemap data. Available values: Tilemap.FORMAT_CSV or Tilemap.FORMAT_TILED_JSON. - * @type {number} - */ - public mapFormat: number; - - /** - * Inherited update method. - */ - public update() { - } - - /** - * Render this tilemap to a specific camera with specific offset. - * @param camera {Camera} The camera this tilemap will be rendered to. - * @param cameraOffsetX {number} X offset of the camera. - * @param cameraOffsetY {number} Y offset of the camera. - */ - public render(camera: Camera, cameraOffsetX: number, cameraOffsetY: number) { - - if (this.cameraBlacklist.indexOf(camera.ID) == -1) - { - // Loop through the layers - for (var i = 0; i < this.layers.length; i++) - { - this.layers[i].render(camera, cameraOffsetX, cameraOffsetY); - } - } - - } - - /** - * Parset csv map data and generate tiles. - * @param data {string} CSV map data. - * @param key {string} Asset key for tileset image. - * @param tileWidth {number} Width of its tile. - * @param tileHeight {number} Height of its tile. - */ - private parseCSV(data: string, key: string, tileWidth: number, tileHeight: number) { - - var layer: TilemapLayer = new TilemapLayer(this._game, this, key, Tilemap.FORMAT_CSV, 'TileLayerCSV' + this.layers.length.toString(), tileWidth, tileHeight); - - // Trim any rogue whitespace from the data - data = data.trim(); - - var rows = data.split("\n"); - - for (var i = 0; i < rows.length; i++) - { - var column = rows[i].split(","); - - if (column.length > 0) - { - layer.addColumn(column); - } - } - - layer.updateBounds(); - var tileQuantity = layer.parseTileOffsets(); - - this.currentLayer = layer; - this.collisionLayer = layer; - - this.layers.push(layer); - - this.generateTiles(tileQuantity); - - } - - /** - * Parset JSON map data and generate tiles. - * @param data {string} JSON map data. - * @param key {string} Asset key for tileset image. - */ - private parseTiledJSON(data: string, key: string) { - - // Trim any rogue whitespace from the data - data = data.trim(); - - var json = JSON.parse(data); - - for (var i = 0; i < json.layers.length; i++) - { - var layer: TilemapLayer = new TilemapLayer(this._game, this, key, Tilemap.FORMAT_TILED_JSON, json.layers[i].name, json.tilewidth, json.tileheight); - - layer.alpha = json.layers[i].opacity; - layer.visible = json.layers[i].visible; - layer.tileMargin = json.tilesets[0].margin; - layer.tileSpacing = json.tilesets[0].spacing; - - var c = 0; - var row; - - for (var t = 0; t < json.layers[i].data.length; t++) - { - if (c == 0) - { - row = []; - } - - row.push(json.layers[i].data[t]); - - c++; - - if (c == json.layers[i].width) - { - layer.addColumn(row); - c = 0; - } - } - - layer.updateBounds(); - - var tileQuantity = layer.parseTileOffsets(); - - this.currentLayer = layer; - this.collisionLayer = layer; - - this.layers.push(layer); - - } - - this.generateTiles(tileQuantity); - - } - - /** - * Create tiles of given quantity. - * @param qty {number} Quentity of tiles to be generated. - */ - private generateTiles(qty:number) { - - for (var i = 0; i < qty; i++) - { - this.tiles.push(new Tile(this._game, this, i, this.currentLayer.tileWidth, this.currentLayer.tileHeight)); - } - - } - - public get widthInPixels(): number { - return this.currentLayer.widthInPixels; - } - - public get heightInPixels(): number { - return this.currentLayer.heightInPixels; - } - - // Tile Collision - - /** - * Set callback to be called when this tilemap collides. - * @param context {object} Callback will be called with this context. - * @param callback {function} Callback function. - */ - public setCollisionCallback(context, callback) { - - this.collisionCallbackContext = context; - this.collisionCallback = callback; - - } - - /** - * Set collision configs of tiles in a range index. - * @param start {number} First index of tiles. - * @param end {number} Last index of tiles. - * @param collision {number} Bit field of flags. (see Tile.allowCollision) - * @param resetCollisions {boolean} Reset collision flags before set. - * @param separateX {boolean} Enable seprate at x-axis. - * @param separateY {boolean} Enable seprate at y-axis. - */ - public setCollisionRange(start: number, end: number, collision?:number = Collision.ANY, resetCollisions?: bool = false, separateX?: bool = true, separateY?: bool = true) { - - for (var i = start; i < end; i++) - { - this.tiles[i].setCollision(collision, resetCollisions, separateX, separateY); - } - - } - - /** - * Set collision configs of tiles with given index. - * @param values {number[]} Index array which contains all tile indexes. The tiles with those indexes will be setup with rest parameters. - * @param collision {number} Bit field of flags. (see Tile.allowCollision) - * @param resetCollisions {boolean} Reset collision flags before set. - * @param separateX {boolean} Enable seprate at x-axis. - * @param separateY {boolean} Enable seprate at y-axis. - */ - public setCollisionByIndex(values:number[], collision?:number = Collision.ANY, resetCollisions?: bool = false, separateX?: bool = true, separateY?: bool = true) { - - for (var i = 0; i < values.length; i++) - { - this.tiles[values[i]].setCollision(collision, resetCollisions, separateX, separateY); - } - - } - - // Tile Management - - /** - * Get the tile by its index. - * @param value {number} Index of the tile you want to get. - * @return {Tile} The tile with given index. - */ - public getTileByIndex(value: number):Tile { - - if (this.tiles[value]) - { - return this.tiles[value]; - } - - return null; - - } - - /** - * Get the tile located at specific position and layer. - * @param x {number} X position of this tile located. - * @param y {number} Y position of this tile located. - * @param [layer] {number} layer of this tile located. - * @return {Tile} The tile with specific properties. - */ - public getTile(x: number, y: number, layer?: number = 0):Tile { - - return this.tiles[this.layers[layer].getTileIndex(x, y)]; - - } - - /** - * Get the tile located at specific position (in world coordinate) and layer. (thus you give a position of a point which is within the tile) - * @param x {number} X position of the point in target tile. - * @param x {number} Y position of the point in target tile. - * @param [layer] {number} layer of this tile located. - * @return {Tile} The tile with specific properties. - */ - public getTileFromWorldXY(x: number, y: number, layer?: number = 0):Tile { - - return this.tiles[this.layers[layer].getTileFromWorldXY(x, y)]; - - } - - public getTileFromInputXY(layer?: number = 0):Tile { - - return this.tiles[this.layers[layer].getTileFromWorldXY(this._game.input.getWorldX(), this._game.input.getWorldY())]; - - } - - /** - * Get tiles overlaps the given object. - * @param object {GameObject} Tiles you want to get that overlaps this. - * @return {array} Array with tiles informations. (Each contains x, y and the tile.) - */ - public getTileOverlaps(object: GameObject) { - - return this.currentLayer.getTileOverlaps(object); - - } - - // COLLIDE - /** - * Check whether this tilemap collides with the given game object or group of objects. - * @param objectOrGroup {function} Target object of group you want to check. - * @param callback {function} This is called if objectOrGroup collides the tilemap. - * @param context {object} Callback will be called with this context. - * @return {boolean} Return true if this collides with given object, otherwise return false. - */ - public collide(objectOrGroup = null, callback = null, context = null) { - - if (callback !== null && context !== null) - { - this.collisionCallback = callback; - this.collisionCallbackContext = context; - } - - if (objectOrGroup == null) - { - objectOrGroup = this._game.world.group; - } - - // Group? - if (objectOrGroup.isGroup == false) - { - this.collideGameObject(objectOrGroup); - } - else - { - objectOrGroup.forEachAlive(this, this.collideGameObject, true); - } - - } - - /** - * Check whether this tilemap collides with the given game object. - * @param object {GameObject} Target object you want to check. - * @return {boolean} Return true if this collides with given object, otherwise return false. - */ - public collideGameObject(object: GameObject): bool { - - if (object !== this && object.immovable == false && object.exists == true && object.allowCollisions != Collision.NONE) - { - this._tempCollisionData = this.collisionLayer.getTileOverlaps(object); - - if (this.collisionCallback !== null && this._tempCollisionData.length > 0) - { - this.collisionCallback.call(this.collisionCallbackContext, object, this._tempCollisionData); - } - - return true; - } - else - { - return false; - } - - } - - /** - * Set a tile to a specific layer. - * @param x {number} X position of this tile. - * @param y {number} Y position of this tile. - * @param index {number} The index of this tile type in the core map data. - * @param [layer] {number} which layer you want to set the tile to. - */ - public putTile(x: number, y: number, index: number, layer?: number = 0) { - - this.layers[layer].putTile(x, y, index); - - } - - // Set current layer - // Set layer order? - // Delete tiles of certain type - // Erase tiles - - } - -} \ No newline at end of file diff --git a/wip/phaser clean up/aabb 1.ts b/wip/phaser clean up/aabb 1.ts deleted file mode 100644 index df5ac64b..00000000 --- a/wip/phaser clean up/aabb 1.ts +++ /dev/null @@ -1,64 +0,0 @@ -/// - -(function () { - - var game = new Phaser.Game(this, 'game', 800, 600, init, create, update, render); - - function init() { - - // Using Phasers asset loader we load up a PNG from the assets folder - game.load.image('atari', 'assets/sprites/atari800xl.png'); - game.load.start(); - - } - - var atari: Phaser.Sprite; - - function create() { - - atari = game.add.sprite(200, 300, 'atari'); - atari.texture.alpha = 0.5; - //atari.scale.setTo(1.5, 1.5); - - //atari.physics.shape.setSize(150, 50); - //atari.physics.shape.offset.setTo(50, 25); - - //atari.physics.gravity.setTo(0, 2); - atari.body.bounce.setTo(0.7, 0.7); - atari.body.drag.setTo(10, 10); - - } - - function update() { - - atari.body.acceleration.x = 0; - atari.body.acceleration.y = 0; - - if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT)) - { - atari.body.acceleration.x = -150; - } - else if (game.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) - { - atari.body.acceleration.x = 150; - } - - if (game.input.keyboard.isDown(Phaser.Keyboard.UP)) - { - atari.body.acceleration.y = -150; - } - else if (game.input.keyboard.isDown(Phaser.Keyboard.DOWN)) - { - atari.body.acceleration.y = 150; - } - - } - - function render() { - - atari.body.renderDebugInfo(16, 16); - Phaser.DebugUtils.renderSpritePhysicsBody(atari); - - } - -})(); diff --git a/wip/phaser clean up/aabb vs aabb 1.ts b/wip/phaser clean up/aabb vs aabb 1.ts deleted file mode 100644 index bbaf3f5e..00000000 --- a/wip/phaser clean up/aabb vs aabb 1.ts +++ /dev/null @@ -1,81 +0,0 @@ -/// - -(function () { - - var game = new Phaser.Game(this, 'game', 800, 600, init, create, update, render); - - function init() { - - // Using Phasers asset loader we load up a PNG from the assets folder - game.load.image('atari', 'assets/sprites/atari800xl.png'); - game.load.image('card', 'assets/sprites/mana_card.png'); - game.load.start(); - - } - - var atari: Phaser.Sprite; - var card: Phaser.Sprite; - - function create() { - - //atari = game.add.sprite(350, 100, 'atari'); - //atari = game.add.sprite(350, 500, 'atari'); - atari = game.add.sprite(0, 310, 'atari'); - card = game.add.sprite(400, 300, 'card'); - - //card.body.immovable = true; - - //atari.texture.alpha = 0.5; - //atari.scale.setTo(1.5, 1.5); - - //atari.body.shape.setSize(150, 50); - //atari.body.shape.offset.setTo(50, 25); - - //atari.body.gravity.setTo(0, 2); - atari.body.bounce.setTo(1, 1); - //atari.body.drag.setTo(10, 10); - - card.body.bounce.setTo(0.7, 0.7); - //card.body.velocity.x = -50; - - } - - function update() { - - atari.body.acceleration.x = 0; - atari.body.acceleration.y = 0; - - if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT)) - { - atari.body.acceleration.x = -150; - } - else if (game.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) - { - atari.body.acceleration.x = 150; - } - - if (game.input.keyboard.isDown(Phaser.Keyboard.UP)) - { - atari.body.acceleration.y = -150; - } - else if (game.input.keyboard.isDown(Phaser.Keyboard.DOWN)) - { - atari.body.acceleration.y = 150; - } - - // collide? - game.collide(atari, card); - - } - - function render() { - - atari.body.renderDebugInfo(16, 16); - card.body.renderDebugInfo(200, 16); - - Phaser.DebugUtils.renderSpritePhysicsBody(atari); - Phaser.DebugUtils.renderSpritePhysicsBody(card); - - } - -})(); diff --git a/wip/phaser clean up/body1.ts b/wip/phaser clean up/body1.ts deleted file mode 100644 index 86cb69df..00000000 --- a/wip/phaser clean up/body1.ts +++ /dev/null @@ -1,206 +0,0 @@ -/// -/// -/// -/// - -(function () { - - var game = new Phaser.Game(this, 'game', 800, 600, init, create, update, render); - - function init() { - - game.load.image('xatari', 'assets/sprites/atari800xl.png'); - game.load.image('card', 'assets/sprites/mana_card.png'); - game.load.image('atari', 'assets/sprites/shinyball.png'); - game.load.start(); - - } - - var debug: HTMLTextAreaElement; - var atari: Phaser.Sprite; - var card: Phaser.Sprite; - var physics: Phaser.Physics.Advanced.Manager; - var circle: Phaser.Physics.Advanced.Body; - var walls: Phaser.Physics.Advanced.Body; - var t: Phaser.Physics.Advanced.Body; - - function create() { - - //atari = game.add.sprite(200, 100, 'atari'); - - // need to get the physics bounds around the sprite center, regardless of origin - //atari.transform.origin.setTo(0.5, 0.5); - //card = game.add.sprite(500, 300, 'card'); - - physics = new Phaser.Physics.Advanced.Manager(game); - //Phaser.Physics.Advanced.Manager.debug = debug; - - walls = new Phaser.Physics.Advanced.Body(null, Phaser.Types.BODY_STATIC, 0, 0); - walls.game = game; - - //walls.addBox(250, 200, 500, 20, 0, 1, 1); - - //staticBody.addShape(new ShapeBox(0, 0.2, 20.48, 0.4)); - - // * 0.02 p2m - // * 50 m2p - - walls.addBox(0, 500, 1024, 20, 0, 1, 1); - - //walls.transform.setRotation(game.math.degreesToRadians(4)); - //walls.fixedRotation = true; - - // position is in relation to the containing body! don't forget this - //ground = walls.addShape(new Phaser.Physics.Advanced.Shapes.Box(400, 500, 500, 20)); - - //walls.addShape(new Phaser.Physics.Advanced.ShapeBox(0, 0.2, 20.48, 0.4)); - //walls.addShape(new Phaser.Physics.Advanced.ShapeBox(0, 15.16, 20.48, 0.4)); - //walls.addShape(new Phaser.Physics.Advanced.ShapeBox(-10.04, 7.68, 0.4, 14.56)); - //walls.addShape(new Phaser.Physics.Advanced.ShapeBox(10.04, 7.68, 0.4, 14.56)); - //walls.resetMassData(); - - physics.space.addBody(walls); - - // Add a circle - //circle = new Phaser.Physics.Advanced.Body(null, Phaser.Types.BODY_DYNAMIC, 200, 100); - //circle.game = game; - //circle.addCircle(32, 0, 0, 0.5); - //physics.space.addBody(circle); - - t = new Phaser.Physics.Advanced.Body(null, Phaser.Types.BODY_DYNAMIC, 300, 100); - //t.fixedRotation = true; - t.game = game; - t.addBox(0, 0, 20, 20, 0.5, 1, 1); - //t.addCircle(32, 0, 0, 0.8); - //t.addTriangle(0, 0, 1, 1, 2, 2); - //t.addPoly([{ x: -0.8, y: 0.48 }, { x: -0.8, y: 0 }, { x: 0.8, y: 0 }, { x: 0.8, y: 0.32 }, { x: 0, y: 0.84 }, { x: -0.56, y: 0.84 }], 1, 1, 6); - //t.addPoly([{ x: -0.8, y: 0.48 }, { x: -0.8, y: 0 }, { x: 0.8, y: 0 }, { x: 0.8, y: 0.32 }, { x: 0, y: 0.84 }, { x: -0.56, y: 0.84 }], 0.5, 1, 1); - //t.transform.setRotation(game.math.degreesToRadians(45)); - //t.fixedRotation = true; - physics.space.addBody(t); - - game.input.onTap.add(step, this); - - } - - function step() { - - physics.update(); - } - - function update() { - - //if (physics.space.stepCount < 90) - //{ - physics.update(); - //} - - //atari.x = physics.metersToPixels(circle.position.x); - //atari.y = physics.metersToPixels(circle.position.y); - //atari.rotation = physics.metersToPixels(circle.angle); - - // force moves without rotating - - if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT)) - { - circle.applyAngularImpulse(-0.02); - } - else if (game.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) - { - circle.applyAngularImpulse(0.02); - } - - - /* - if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT)) - { - circle.applyForceToCenter(new Phaser.Vec2(-8, 0)); - } - else if (game.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) - { - circle.applyForceToCenter(new Phaser.Vec2(8, 0)); - } - */ - - if (game.input.keyboard.isDown(Phaser.Keyboard.UP)) - { - circle.applyForceToCenter(new Phaser.Vec2(0, -10)); - } - else if (game.input.keyboard.isDown(Phaser.Keyboard.DOWN)) - { - circle.applyForceToCenter(new Phaser.Vec2(0, 5)); - } - - //console.log(circle.velocity.x, circle.velocity.y); - //console.log('p', circle.position.x, circle.position.y); - } - - function renderBounds(body: Phaser.Physics.Advanced.Body) { - - game.stage.context.fillStyle = 'rgba(0,255,200,0.2)'; - - game.stage.context.fillRect(body.bounds.x, body.bounds.y, body.bounds.width, body.bounds.height); - - } - - function renderCircle(shape) { - - game.stage.context.beginPath(); - game.stage.context.arc(shape.tc.x * 50, shape.tc.y * 50, shape.radius * 50, 0, Math.PI * 2, false); - - if (shape.body.isAwake) - { - game.stage.context.fillStyle = 'rgba(0,255,0, 0.3)'; - } - else - { - game.stage.context.fillStyle = 'rgba(100,100,100, 0.1)'; - } - - game.stage.context.fill(); - game.stage.context.closePath(); - - } - - function drawPolygon(ctx, shape, lineWidth, fillStyle) { - - var verts = shape.tverts; - var body = shape.body; - - ctx.beginPath(); - ctx.moveTo(body.position.x + verts[0].x * 50, body.position.y + verts[0].y * 50); - - for (var i = 0; i < verts.length; i++) { - ctx.lineTo(body.position.x + verts[i].x * 50, body.position.y + verts[i].y * 50); - } - - ctx.lineTo(body.position.x + verts[verts.length - 1].x * 50, body.position.y + verts[verts.length - 1].y * 50); - - ctx.closePath(); - - ctx.fillStyle = fillStyle; - ctx.fill(); - - } - - function render() { - - //game.stage.context.fillStyle = 'rgb(255,255,0)'; - //game.stage.context.fillText('x: ' + t.position.x + ' y: ' + t.position.y, 32, 32); - //game.stage.context.fillText('vx: ' + t.velocity.x + ' vy: ' + t.velocity.y, 32, 64); - //game.stage.context.fillText('x: ' + t.bounds.x + ' y: ' + t.bounds.y, 32, 32); - //game.stage.context.fillText('vx: ' + t.velocity.x + ' vy: ' + t.velocity.y, 32, 64); - - //renderCircle(circle.shapes[0]); - //renderBounds(circle); - - drawPolygon(game.stage.context, walls.shapes[0], 1, 'rgb(0,255,255)'); - //drawPolygon(game.stage.context, walls.shapes[1], 1, 'rgb(0,255,255)'); - - //renderCircle(t.shapes[0]); - drawPolygon(game.stage.context, t.shapes[0], 1, 'rgb(255,255,255)'); - //renderBounds(t); - - } - -})(); diff --git a/wip/phaser clean up/obb vs obb.ts b/wip/phaser clean up/obb vs obb.ts deleted file mode 100644 index 5b22bebf..00000000 --- a/wip/phaser clean up/obb vs obb.ts +++ /dev/null @@ -1,54 +0,0 @@ -/// - -(function () { - - var game = new Phaser.Game(this, 'game', 800, 600, init, create, update, render); - - function init() { - - // Using Phasers asset loader we load up a PNG from the assets folder - game.load.image('atari', 'assets/sprites/atari800xl.png'); - game.load.image('card', 'assets/sprites/mana_card.png'); - game.load.start(); - - } - - var atari: Phaser.Sprite; - var card: Phaser.Sprite; - - function create() { - - atari = game.add.sprite(200, 310, 'atari'); - - card = game.add.sprite(500, 300, 'card'); - - atari.input.start(0); - atari.input.enableDrag(); - - card.input.start(0); - card.events.onInputDown.add(rotateIt, this); - - } - - function rotateIt() { - card.rotation += 10; - } - - function update() { - } - - function render() { - - game.stage.context.save(); - - game.stage.context.strokeStyle = 'rgb(255,255,0)'; - game.stage.context.strokeRect(atari.cameraView.x, atari.cameraView.y, atari.cameraView.width, atari.cameraView.height); - - game.stage.context.strokeStyle = 'rgb(255,0,255)'; - game.stage.context.strokeRect(card.cameraView.x, card.cameraView.y, card.cameraView.width, card.cameraView.height); - - game.stage.context.restore(); - - } - -})(); From 19759699df1c7a15b0a3a394819e15d24d1517df Mon Sep 17 00:00:00 2001 From: photonstorm Date: Tue, 10 Dec 2013 14:34:22 +0000 Subject: [PATCH 025/154] More TypeScript definitions fixes (for Easing and Animation data). --- build/phaser.d.ts | 146 ++++++++++++++++++++++++---------------------- 1 file changed, 75 insertions(+), 71 deletions(-) diff --git a/build/phaser.d.ts b/build/phaser.d.ts index 4148ead4..e82344c4 100644 --- a/build/phaser.d.ts +++ b/build/phaser.d.ts @@ -93,7 +93,7 @@ declare module Phaser { onPausedCallback(): void; onShutDownCallback(): void; boot(): void; - add(key: string, state: typeof Phaser.State, autoStart?: boolean): void; + add(key: string, state: Phaser.State, autoStart?: boolean): void; remove(key: string): void; start(key: string, clearWorld?: boolean, clearCache?: boolean): void; dummy(): void; @@ -1180,71 +1180,75 @@ declare module Phaser { pause(): void; resume(): void; update(time: number): boolean; - } + } - class Easing.Linear { - static None(k: number); - } + module Easing { - class Easing.Quadratic { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Linear { + static None(k: number): number; + } - class Easing.Cubic { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Quadratic { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } - class Easing.Quartic { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Cubic { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } - class Easing.Quintic { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Quartic { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } - class Easing.Sinusoidal { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } - - class Easing.Exponential { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Quintic { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } - class Easing.Circular { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Sinusoidal { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } - class Easing.Elastic { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Exponential { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } - class Easing.Back { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Circular { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } - class Easing.Bounce { - static In(k: number); - static Out(k: number); - static InOut(k: number); - } + class Elastic { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } + + class Back { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } + + class Bounce { + static In(k: number): number; + static Out(k: number): number; + static InOut(k: number): number; + } + + } class Time { constructor(game: Phaser.Game); @@ -1276,13 +1280,13 @@ declare module Phaser { constructor(sprite); sprite: Phaser.Sprite; game: Phaser.Game; - currentFrame: Phaser.Animation.Frame; + currentFrame: Phaser.Frame; updateIfVisible: boolean; - frameData: Phaser.Animation.FrameData; + frameData: Phaser.FrameData; frameTotal: number; frame: number; frameName: string; - loadFrameData(frameData: Phaser.Animation.FrameData): void; + loadFrameData(frameData: Phaser.FrameData): void; add(name: string, frames?: Array, frameRate?: number, loop?: boolean, useNumericIndex?: boolean): Phaser.Animation; validateFrames(frames: Array, useNumericIndex?: boolean): boolean; play(name: string, frameRate?: number, loop?: boolean): Phaser.Animation; @@ -1292,14 +1296,14 @@ declare module Phaser { } class Animation { - constructor(game: Phaser.Game, parent: Phaser.Sprite, name: string, frameData: Phaser.Animation.FrameData, frames: any[], delay: number, looped: boolean); + constructor(game: Phaser.Game, parent: Phaser.Sprite, name: string, frameData: Phaser.FrameData, frames: any[], delay: number, looped: boolean); game: Phaser.Game; name: string; delay: number; looped: boolean; isFinished: boolean; isPlaying: boolean; - currentFrame: Phaser.Animation.Frame; + currentFrame: Phaser.Frame; frameTotal: number; frame: number; play(frameRate?: number, loop?: boolean): Phaser.Animation; @@ -1346,10 +1350,10 @@ declare module Phaser { } class AnimationParser { - spriteSheet(game: Phaser.Game, key: string, frameWidth: number, frameHeight: number, frameMax?: number): Phaser.Animation.FrameData; - JSONData(game: Phaser.Game, json: Object, cacheKey: string): Phaser.Animation.FrameData; - JSONDataHash(game: Phaser.Game, json: Object, cacheKey: string): Phaser.Animation.FrameData; - XMLData(game: Phaser.Game, xml: Object, cacheKey: string): Phaser.Animation.FrameData; + spriteSheet(game: Phaser.Game, key: string, frameWidth: number, frameHeight: number, frameMax?: number): Phaser.FrameData; + JSONData(game: Phaser.Game, json: Object, cacheKey: string): Phaser.FrameData; + JSONDataHash(game: Phaser.Game, json: Object, cacheKey: string): Phaser.FrameData; + XMLData(game: Phaser.Game, xml: Object, cacheKey: string): Phaser.FrameData; } class Cache { @@ -1374,11 +1378,11 @@ declare module Phaser { checkImageKey(key: string): boolean; getImage(key: string): Object; getTilemap(key: string): Phaser.Tilemap; - getFrameData(key: string): Phaser.Animation.FrameData; - getFrameByIndex(key: string, frame: string): Phaser.Animation.Frame; - getFrameByName(key: string, frame: string): Phaser.Animation.Frame; - getFrame(key: string): Phaser.Animation.Frame; - getTextureFrame(key: string): Phaser.Animation.Frame; + getFrameData(key: string): Phaser.FrameData; + getFrameByIndex(key: string, frame: string): Phaser.Frame; + getFrameByName(key: string, frame: string): Phaser.Frame; + getFrame(key: string): Phaser.Frame; + getTextureFrame(key: string): Phaser.Frame; getTexture(key: string): Phaser.RenderTexture; getSound(key: string): Phaser.Sound; getSoundData(key: string): Object; @@ -1443,7 +1447,7 @@ declare module Phaser { } class LoaderParser { - bitmapFont(game: Phaser.Game, xml: Object, cacheKey: Phaser.Animation.FrameData): void; + bitmapFont(game: Phaser.Game, xml: Object, cacheKey: Phaser.FrameData): void; } class Sound { From 636b1af25cc67e32187c4dfe3efee6830a20fa20 Mon Sep 17 00:00:00 2001 From: "Diego F. Goberna" Date: Tue, 10 Dec 2013 16:49:01 +0100 Subject: [PATCH 026/154] Spanish translation of the tutorials --- .gitignore | 2 + .../Spanish/01 Comenzando/hellophaser.zip | Bin 0 -> 255324 bytes .../01 Comenzando/hellophaser/index.html | 34 ++ .../01 Comenzando/hellophaser/phaser.min.js | 12 + .../01 Comenzando/hellophaser/phaser.png | Bin 0 -> 180337 bytes .../01 Comenzando/images/cloneFrom.jpg | Bin 0 -> 115236 bytes .../01 Comenzando/images/dashboard.jpg | Bin 0 -> 68462 bytes .../Spanish/01 Comenzando/images/editor.jpg | Bin 0 -> 117383 bytes .../Spanish/01 Comenzando/images/start.jpg | Bin 0 -> 99978 bytes tutorials/Spanish/01 Comenzando/index.html | 46 +++ tutorials/Spanish/01 Comenzando/part2.html | 70 ++++ tutorials/Spanish/01 Comenzando/part3.html | 64 ++++ tutorials/Spanish/01 Comenzando/part4.html | 68 ++++ tutorials/Spanish/01 Comenzando/part5.html | 48 +++ tutorials/Spanish/01 Comenzando/part6.html | 46 +++ tutorials/Spanish/01 Comenzando/part7.html | 46 +++ tutorials/Spanish/01 Comenzando/part8.html | 56 ++++ .../assets/baddie.png | Bin 0 -> 15519 bytes .../assets/diamond.png | Bin 0 -> 508 bytes .../assets/dude.png | Bin 0 -> 3226 bytes .../assets/firstaid.png | Bin 0 -> 554 bytes .../assets/platform.png | Bin 0 -> 14973 bytes .../02 Creando tu primer juego/assets/sky.png | Bin 0 -> 4757 bytes .../assets/star.png | Bin 0 -> 443 bytes .../js/phaser.min.js | 12 + .../02 Creando tu primer juego/part1.html | 31 ++ .../02 Creando tu primer juego/part2.html | 37 +++ .../02 Creando tu primer juego/part3.html | 40 +++ .../02 Creando tu primer juego/part4.html | 62 ++++ .../02 Creando tu primer juego/part5.html | 74 +++++ .../02 Creando tu primer juego/part6.html | 79 +++++ .../02 Creando tu primer juego/part7.html | 113 +++++++ .../02 Creando tu primer juego/part8.html | 143 +++++++++ .../02 Creando tu primer juego/part9.html | 152 +++++++++ .../phaser_tutorial_02.zip | Bin 0 -> 103613 bytes .../screen shots/part3.png | Bin 0 -> 4520 bytes .../screen shots/part4.png | Bin 0 -> 5116 bytes .../screen shots/part5.png | Bin 0 -> 5983 bytes .../screen shots/part6.png | Bin 0 -> 5975 bytes .../screen shots/part7.png | Bin 0 -> 7066 bytes .../screen shots/part8.png | Bin 0 -> 13305 bytes .../screen shots/part9.png | Bin 0 -> 12780 bytes .../screen shots/tutorial_header.png | Bin 0 -> 61622 bytes .../02 Creando tu primer juego/tutorial.html | 301 ++++++++++++++++++ 44 files changed, 1536 insertions(+) create mode 100644 tutorials/Spanish/01 Comenzando/hellophaser.zip create mode 100644 tutorials/Spanish/01 Comenzando/hellophaser/index.html create mode 100644 tutorials/Spanish/01 Comenzando/hellophaser/phaser.min.js create mode 100644 tutorials/Spanish/01 Comenzando/hellophaser/phaser.png create mode 100644 tutorials/Spanish/01 Comenzando/images/cloneFrom.jpg create mode 100644 tutorials/Spanish/01 Comenzando/images/dashboard.jpg create mode 100644 tutorials/Spanish/01 Comenzando/images/editor.jpg create mode 100644 tutorials/Spanish/01 Comenzando/images/start.jpg create mode 100644 tutorials/Spanish/01 Comenzando/index.html create mode 100644 tutorials/Spanish/01 Comenzando/part2.html create mode 100644 tutorials/Spanish/01 Comenzando/part3.html create mode 100644 tutorials/Spanish/01 Comenzando/part4.html create mode 100644 tutorials/Spanish/01 Comenzando/part5.html create mode 100644 tutorials/Spanish/01 Comenzando/part6.html create mode 100644 tutorials/Spanish/01 Comenzando/part7.html create mode 100644 tutorials/Spanish/01 Comenzando/part8.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/assets/baddie.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/assets/diamond.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/assets/dude.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/assets/firstaid.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/assets/platform.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/assets/sky.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/assets/star.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/js/phaser.min.js create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part1.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part2.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part3.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part4.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part5.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part6.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part7.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part8.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/part9.html create mode 100644 tutorials/Spanish/02 Creando tu primer juego/phaser_tutorial_02.zip create mode 100644 tutorials/Spanish/02 Creando tu primer juego/screen shots/part3.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/screen shots/part4.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/screen shots/part5.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/screen shots/part6.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/screen shots/part7.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/screen shots/part8.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/screen shots/part9.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/screen shots/tutorial_header.png create mode 100644 tutorials/Spanish/02 Creando tu primer juego/tutorial.html diff --git a/.gitignore b/.gitignore index 4b7085e3..b358b21c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ Phaser OSX.sublime-workspace Phaser.sublime-project Phaser.sublime-workspace *.suo +*.sublime-project +*.sublime-workspace # Vendors node_modules/ diff --git a/tutorials/Spanish/01 Comenzando/hellophaser.zip b/tutorials/Spanish/01 Comenzando/hellophaser.zip new file mode 100644 index 0000000000000000000000000000000000000000..45769f49548335fb559cd26997b0bbc4f46eb0ee GIT binary patch literal 255324 zcmV)1K+V5UO9KQH00008056k$Lywq8BuoJS0Ivc7015yA0BLSyWq2-VbZu;PQn60M zFc965_=jtjq*8FYfU1&IVu2BcR)W#kN8-w{BgZsURsS73ajF322K(;$>E5$_`HX93 z4-GpU9{M+@1+L;kM$!R4U}UA+4uviN1Q9o^Fbjn1@AD6TuA zmDH3&0Uw`=S)o-jhvUfcv8M(~TBD;V?BHdv_2iIbxmcud=a+y!Y&Xv-#BmBoXbk$! zt1(G|8Kf3hVTaTFeyTI-k9_!T#D_OR{3#JNEis9uF13@3!)rCFjDNO0UDOB`E=lk(@A87R_r4f3P>_rg!CiOdETUP{k^3h?|p*P8Q@g1-Ja; z_;iLRpFaZO%iSFKx%>uDO9KQH000080HKn7L$@4&q0k}$0H*{601W^D0B~qwb7gWa zZE0>UYIE#7ZExE+liv@x|KR#?c`RFYt-Q2dyGoFz*=~Te36ga87D2F}B-&CUORgj* zF;f5co8gcW^Gd!I5Qj$sl4pIXr22kYIRZd0`?uV|N0ueQqupLa#I)Cbp;-Mj zj9Ip`eV8O{d7u|Y;NWU9$$>Cp?UoAWyIi9BObI2NAf69veFeXLn-(yfZ?y6OxR}gRs-#wo~+axowzJoA)PUg>(v%Dsc6v za-vmA^e_^(2(uCEZQ@1~ZIGUaEQrp8yD3dAibi^&+_c%(uWS&-9>0PzyxTSiy23TKnHkt1EX z45jTTHvu*BWw1YSWV)E~C`+%0H^N^8wq@QH)lx*}oed*E zt!_JU9CD^PY=3L3b7%V{WR^k(Gjng%9rc17m!14BcWYz0D+?%aV$fyn4S4!qV-@+knJb}W_4U#-mQ zl%Q}Kz>>-cB>*AYgvT)H31Td_*E>9U+*wTZ885UUh$eAEi?uQzSQ0h2gmDuxYqbLJ zgp_REFv`3P1OU_%sZ9ZuhJnk~1n1C>7G=1y@5JWFCYUW6yRdns_Mjr(fX(OOQUoiY`)S4^SGeW_ ztQk4x#8{CB7N!IiQNdwahVb3>QF}(_C-Flo;twtKQpZUWCyHga7)w6b)})9&TBw{8 z4Tu?LmB+~esp$wQOjcl+Ik;iEI2ncsp%R2SGl+a_Fd=#yxZt5PUKcXrQ87{Hm)w3B zcq;Hw41A0|gvT~LcIdH7ZF^LDMUU6?cq7_!x`7803$kTNlYTCd-F%q4&l@I0ch4T@ zkXW#qSir|G^sp2fiN}(NEQ!gIsI0xRcxJF(2B3_ZcyQ%_bsb!*3mPycO+-G0Z?$8s5kNk1Q2{<-AwfRP&_+JZneAZr2p-Tqh6i+?!vng1fd_Pl_#L}L zOpo0&ctH0BJl@>o>WiY9b-iBHo%Z7Ht?8oBW?c>yK2+R6#Wq$>`;@Sy^`>|w`Q7R-^6buO$Wkd2s@sNm7LL_Ar5(ygRM6yOvk+@M>BylHaDT9DBoyRFJ z&9De?UN{uQI4V{Z40uGH3o?b8T9Ow={Jpv%Ep zap5>hrbDe!t=Q_8z)(a`G9t-vxNv`|b=XzmTKPzy*VYhRO&k6LR+C zweO%ZhRRfs-6gVnMD`Vtg#n4hpiXbEiQcOwdas-5y&-zP5IqzU5=0@1rK3*qmnMqV zu!*E)HPb}V3)${Ss=Jcv9#XZo8wI=5NO!l9?p~d)Soh9hQ=L`p9)rfgqYeAzp$H%c zOB>w4FbCIS>dK0lJ8g1x0=h%!BqpN~OR=A}Wh+2kz)p@u(~wu}0n;aISfuxdz{`Bh ztjV&^gQ=fkicO3m$NTJYsJjKl#Ap9xnSY} zcMxnJx4`VJ?e+=`jA#U1zbCT+6pMJvoG!$Z$E0%iBTZ zOW$&cZ5TMPH5;p4eilaS|k@GK4n)g4>#EP)iC5$o1-u1sinPE4YudQrplR$~NGa35?RquyF1( zh^s{5K1c%x(7sSED98>WDzq_=Mm5eN%i`!`>~Wk#!pI|!CrtE{RdWWFnbr-=YRa|p zL!5-(p-%d*K;^{m3p@hs3gbM`ota(Q)OX~7!Wbm+4H!2LVOGEdM9Eu5Y!~%#@e&)b$x-+B}276or8o08b!m12cQy&G3w+ci-R? zLFz2BgQE4I!;qPTEQ{)>!ej%`UcDNM#)$Z5p7*Oz0>B4=B|TR#37^IHT!Iy7q}~xq zz2i`Cfhqi-$b>XA{f1a1R9!N`q?kepw6(QvFcLs=txIHFTG?D!Timz#%I1QvR_z%1 zyEoty(v)LfaX990z1*z>pj`bt@W`;z(ZopeI~Sc`@#A62Ti?m^xKt!zuQ$DXY-=+q z)cg({&K)dYwK~PR?MSWiOlRP+jDc}@>cx>R-qAe2C+j?|&KZCnMChWN0U(8m7WH&C zhUY6l#kZZYTnhyPu*ma--@FRWqL_8ExNkju-s7&!=o z=K3$PwGTw*%W!Etl@i8@lkccm zQz>9$tW4;eV%5czOO|hx>|zck!Hb2v8X2iT<%MmR%16xg^ChNKS%xdtc5&pJ22r_- za>T9#aO1QBK=a9@R+hpHh^0j>391sOm~ufW*N#QLOwsI$7ZJokU@Fp0eZ{cewxqOE zQ_~}*p_(u*rN$7C7!3mSL@zEy?qw(wUpGZ)O!4O6v5&1?-k)?u`z>W^?kH0eR-l)C ztnN-CHP#M7s|K@VAs?51tzTUE9!kj8=vxZj;aZW zog-3F!KojF9&iE6Xw6=7gxdL-LPHVmS_7-Cbq%;SMX5RXbMSy$J;GsBx76yinn^*! zwqJ>yT!!dH@s->(piIhwq3}Q+3sO|67G^f~;+CU_#cP63SVn0NQZ#}M=MMG(NZ}CexJhPic^~ALxOX;J$Jrih6 z{@C!PUW)rQWxe!mUk;Z7a|r73w1sXGl;~bNed|WqPZ7Atm`7;sR78hDYawu%sA_I1 za8UR1SU{Bm7t9s5;f)IUw^sD@fz4GXeVKSxXV?eSt%SC8!a~^F##z@lhWX5}n{m}{ zL>t)3yEyX!niob>;w){=7HQUUc#E|}7c?dW$EA%Y(x9Fv4$X`jHeTh?2y;He?JKHy z-x4Q$>ukT7_2+ReQ`X9`JgNAwDkujFW~aO{@>1IROpL-kOFvAOck+eRV`$ngZvaXf*Zro(+!$>jvb>L(ag?k35zt~2b0 z+**_JY}iAn;|UqC)x)s0ShN5w_mB+F(HlML*x6@e*6SHn zdz)<`>CJgQxfkq~BMswUp6sL-8XW+Z04ML zmNir6{c3Xq*rj^Z^Xv+%rqLJ#YQ=+&4tV6VXj+_`RE+A|`4j0Ys2gdzF=|3pwxcG+ zt!jNOu|iXtF9K2#w5GKxVUz@0#;~;Yw)Jykd}ADwB%V=qJsNNaa%3Xig8_`V>r)E> z+PMA;q9j0-(c?m;Sz zwNCT20JN&F(p5I}A;O(T!PK>+kd3+~M(Fw};}t_8?t2ph2MAullaqp7q>j+5&;y{*QLgZ5k+O$;Wt+@^f`bV9iR~Aio** z8%)F4VIiVEf?ZKOyC{O9@5o=)La8dU=h|S|^wwjkSYZ`#b6?{2h(-4-)knFRagbq< z{lT3Nr{B?sNHzAtshyWEh_!@ZFt?jg7f z+<-TCsr*xʗ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
#6|KVqdx{7=RM39Vhprmb-LvHQrJ^ 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 literal 0 HcmV?d00001 diff --git a/tutorials/Spanish/01 Comenzando/hellophaser/index.html b/tutorials/Spanish/01 Comenzando/hellophaser/index.html new file mode 100644 index 00000000..5035a235 --- /dev/null +++ b/tutorials/Spanish/01 Comenzando/hellophaser/index.html @@ -0,0 +1,34 @@ + + + + + hello phaser! + + + + + + + + \ No newline at end of file diff --git a/tutorials/Spanish/01 Comenzando/hellophaser/phaser.min.js b/tutorials/Spanish/01 Comenzando/hellophaser/phaser.min.js new file mode 100644 index 00000000..4f17eda8 --- /dev/null +++ b/tutorials/Spanish/01 Comenzando/hellophaser/phaser.min.js @@ -0,0 +1,12 @@ +/*! Phaser v1.1.3 | (c) 2013 Photon Storm Ltd. */ +!function(a,b){"function"==typeof define&&define.amd?define(b):"object"==typeof exports?module.exports=b():a.Phaser=b()}(this,function(){function a(a){return[(255&a>>16)/255,(255&a>>8)/255,(255&a)/255]}function b(){return c.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,c.Matrix}function a(a){return[(255&a>>16)/255,(255&a>>8)/255,(255&a)/255]}var c=c||{},d=d||{VERSION:"1.1.3",DEV_VERSION:"1.1.3",GAMES:[],AUTO:0,CANVAS:1,WEBGL:2,HEADLESS:3,SPRITE:0,BUTTON:1,BULLET:2,GRAPHICS:3,TEXT:4,TILESPRITE:5,BITMAPTEXT:6,GROUP:7,RENDERTEXTURE:8,TILEMAP:9,TILEMAPLAYER:10,EMITTER:11,POLYGON:12,BITMAPDATA:13,CANVAS_FILTER:14,WEBGL_FILTER:15,NONE:0,LEFT:1,RIGHT:2,UP:3,DOWN:4};c.InteractionManager=function(){},d.Utils={shuffle:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},pad:function(a,b,c,d){if("undefined"==typeof b)var b=0;if("undefined"==typeof c)var c=" ";if("undefined"==typeof d)var d=3;var e=0;if(b+1>=a.length)switch(d){case 1:a=Array(b+1-a.length).join(c)+a;break;case 3:var f=Math.ceil((e=b-a.length)/2),g=e-f;a=Array(g+1).join(c)+a+Array(f+1).join(c);break;default:a+=Array(b+1-a.length).join(c)}return a},isPlainObject:function(a){if("object"!=typeof a||a.nodeType||a===a.window)return!1;try{if(a.constructor&&!hasOwn.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},extend:function(){var a,b,c,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(b in a)c=h[b],e=a[b],h!==e&&(k&&e&&(d.Utils.isPlainObject(e)||(f=Array.isArray(e)))?(f?(f=!1,g=c&&Array.isArray(c)?c:[]):g=c&&d.Utils.isPlainObject(c)?c:{},h[b]=d.Utils.extend(k,g,e)):void 0!==e&&(h[b]=e));return h}},function(){var a=!1;a&&(window.console=void 0),void 0===window.console&&(window.console={debug:function(){return!0},info:function(){return!1},warn:function(){return!1},log:function(){return!1}}),debug=function(a){window.console.debug(a)},info=function(a){window.console.info(a)},warn=function(a){window.console.warn(a)},log=function(a){window.console.log(a)}}(),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),b(),c.mat3={},c.mat3.create=function(){var a=new c.Matrix(9);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=1,a[5]=0,a[6]=0,a[7]=0,a[8]=1,a},c.mat3.identity=function(a){return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=1,a[5]=0,a[6]=0,a[7]=0,a[8]=1,a},c.mat4={},c.mat4.create=function(){var a=new c.Matrix(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a},c.mat3.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],f=a[2],g=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],m=b[0],n=b[1],o=b[2],p=b[3],q=b[4],r=b[5],s=b[6],t=b[7],u=b[8];return c[0]=m*d+n*g+o*j,c[1]=m*e+n*h+o*k,c[2]=m*f+n*i+o*l,c[3]=p*d+q*g+r*j,c[4]=p*e+q*h+r*k,c[5]=p*f+q*i+r*l,c[6]=s*d+t*g+u*j,c[7]=s*e+t*h+u*k,c[8]=s*f+t*i+u*l,c},c.mat3.clone=function(a){var b=new c.Matrix(9);return b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8],b},c.mat3.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[5];return a[1]=a[3],a[2]=a[6],a[3]=c,a[5]=a[7],a[6]=d,a[7]=e,a}return b[0]=a[0],b[1]=a[3],b[2]=a[6],b[3]=a[1],b[4]=a[4],b[5]=a[7],b[6]=a[2],b[7]=a[5],b[8]=a[8],b},c.mat3.toMat4=function(a,b){return b||(b=c.mat4.create()),b[15]=1,b[14]=0,b[13]=0,b[12]=0,b[11]=0,b[10]=a[8],b[9]=a[7],b[8]=a[6],b[7]=0,b[6]=a[5],b[5]=a[4],b[4]=a[3],b[3]=0,b[2]=a[2],b[1]=a[1],b[0]=a[0],b},c.mat4.create=function(){var a=new c.Matrix(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a},c.mat4.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[3],f=a[6],g=a[7],h=a[11];return a[1]=a[4],a[2]=a[8],a[3]=a[12],a[4]=c,a[6]=a[9],a[7]=a[13],a[8]=d,a[9]=f,a[11]=a[14],a[12]=e,a[13]=g,a[14]=h,a}return b[0]=a[0],b[1]=a[4],b[2]=a[8],b[3]=a[12],b[4]=a[1],b[5]=a[5],b[6]=a[9],b[7]=a[13],b[8]=a[2],b[9]=a[6],b[10]=a[10],b[11]=a[14],b[12]=a[3],b[13]=a[7],b[14]=a[11],b[15]=a[15],b},c.mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],f=a[2],g=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],m=a[9],n=a[10],o=a[11],p=a[12],q=a[13],r=a[14],s=a[15],t=b[0],u=b[1],v=b[2],w=b[3];return c[0]=t*d+u*h+v*l+w*p,c[1]=t*e+u*i+v*m+w*q,c[2]=t*f+u*j+v*n+w*r,c[3]=t*g+u*k+v*o+w*s,t=b[4],u=b[5],v=b[6],w=b[7],c[4]=t*d+u*h+v*l+w*p,c[5]=t*e+u*i+v*m+w*q,c[6]=t*f+u*j+v*n+w*r,c[7]=t*g+u*k+v*o+w*s,t=b[8],u=b[9],v=b[10],w=b[11],c[8]=t*d+u*h+v*l+w*p,c[9]=t*e+u*i+v*m+w*q,c[10]=t*f+u*j+v*n+w*r,c[11]=t*g+u*k+v*o+w*s,t=b[12],u=b[13],v=b[14],w=b[15],c[12]=t*d+u*h+v*l+w*p,c[13]=t*e+u*i+v*m+w*q,c[14]=t*f+u*j+v*n+w*r,c[15]=t*g+u*k+v*o+w*s,c},c.Point=function(a,b){this.x=a||0,this.y=b||0},c.Point.prototype.clone=function(){return new c.Point(this.x,this.y)},c.Point.prototype.constructor=c.Point,c.Rectangle=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},c.Rectangle.prototype.clone=function(){return new c.Rectangle(this.x,this.y,this.width,this.height)},c.Rectangle.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=this.x;if(a>=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},c.Rectangle.prototype.constructor=c.Rectangle,c.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var b=[],d=0,e=a.length;e>d;d+=2)b.push(new c.Point(a[d],a[d+1]));a=b}this.points=a},c.Polygon.prototype.clone=function(){for(var a=[],b=0;bb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},c.Polygon.prototype.constructor=c.Polygon,c.DisplayObject=function(){this.last=this,this.first=this,this.position=new c.Point,this.scale=new c.Point(1,1),this.pivot=new c.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.worldTransform=c.mat3.create(),this.localTransform=c.mat3.create(),this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=new c.Rectangle(0,0,1,1)},c.DisplayObject.prototype.constructor=c.DisplayObject,c.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(c.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(c.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){a?this._mask?(a.start=this._mask.start,a.end=this._mask.end):(this.addFilter(a),a.renderable=!1):(this.removeFilter(this._mask),this._mask.renderable=!0),this._mask=a}}),Object.defineProperty(c.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){this._filters&&this.removeFilter(this._filters),this.addFilter(a);for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);if(void 0!=a.parent&&a.parent.removeChild(a),a.parent=this,this.stage){var c=a;do c.interactive&&(this.stage.dirty=!0),c.stage=this.stage,c=c._iNext;while(c)}var d,e,f=a.first,g=a.last;if(b==this.children.length){e=this.last;for(var h=this,i=this.last;h;)h.last==i&&(h.last=a.last),h=h.parent}else e=0===b?this:this.children[b-1].last;d=e._iNext,d&&(d._iPrev=g,g._iNext=d),f._iPrev=e,e._iNext=f,this.children.splice(b,0,a),this.__renderGroup&&(a.__renderGroup&&a.__renderGroup.removeDisplayObjectAndChildren(a),this.__renderGroup.addDisplayObjectAndChildren(a))},c.DisplayObjectContainer.prototype.swapChildren=function(){},c.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&aa;a++)this.children[a].updateTransform()}},c.blendModes={},c.blendModes.NORMAL=0,c.blendModes.SCREEN=1,c.Sprite=function(a){c.DisplayObjectContainer.call(this),this.anchor=new c.Point,this.texture=a,this.blendMode=c.blendModes.NORMAL,this._width=0,this._height=0,a.baseTexture.hasLoaded?this.updateFrame=!0:(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},c.Sprite.prototype=Object.create(c.DisplayObjectContainer.prototype),c.Sprite.prototype.constructor=c.Sprite,Object.defineProperty(c.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(c.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),c.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!=a.baseTexture?(this.textureChange=!0,this.texture=a,this.__renderGroup&&this.__renderGroup.updateTexture(this)):this.texture=a,this.updateFrame=!0},c.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},c.Sprite.fromFrame=function(a){var b=c.TextureCache[a];if(!b)throw new Error("The frameId '"+a+"' does not exist in the texture cache"+this);return new c.Sprite(b)},c.Sprite.fromImage=function(a){var b=c.Texture.fromImage(a);return new c.Sprite(b)},c.Stage=function(a){c.DisplayObjectContainer.call(this),this.worldTransform=c.mat3.create(),this.interactive=!0,this.interactionManager=new c.InteractionManager(this),this.dirty=!0,this.__childrenAdded=[],this.__childrenRemoved=[],this.stage=this,this.stage.hitArea=new c.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a),this.worldVisible=!0},c.Stage.prototype=Object.create(c.DisplayObjectContainer.prototype),c.Stage.prototype.constructor=c.Stage,c.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},c.Stage.prototype.updateTransform=function(){this.worldAlpha=1,this.vcount=c.visibleCount;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},c.Stage.prototype.setBackgroundColor=function(b){this.backgroundColor=b||0,this.backgroundColorSplit=a(this.backgroundColor);var c=this.backgroundColor.toString(16);c="000000".substr(0,6-c.length)+c,this.backgroundColorString="#"+c},c.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global},c.CustomRenderable=function(){c.DisplayObject.call(this),this.renderable=!0},c.CustomRenderable.prototype=Object.create(c.DisplayObject.prototype),c.CustomRenderable.prototype.constructor=c.CustomRenderable,c.CustomRenderable.prototype.renderCanvas=function(){},c.CustomRenderable.prototype.initWebGL=function(){},c.CustomRenderable.prototype.renderWebGL=function(){},c.Strip=function(a,b,d){c.DisplayObjectContainer.call(this),this.texture=a,this.blendMode=c.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(e){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=b,this.height=d,a.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},c.Strip.prototype=Object.create(c.DisplayObjectContainer.prototype),c.Strip.prototype.constructor=c.Strip,c.Strip.prototype.setTexture=function(a){this.texture=a,this.width=a.frame.width,this.height=a.frame.height,this.updateFrame=!0},c.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},c.Rope=function(a,b){c.Strip.call(this,a),this.points=b;try{this.verticies=new Float32Array(4*b.length),this.uvs=new Float32Array(4*b.length),this.colors=new Float32Array(2*b.length),this.indices=new Uint16Array(2*b.length)}catch(d){this.verticies=verticies,this.uvs=uvs,this.colors=colors,this.indices=indices}this.refresh()},c.Rope.prototype=Object.create(c.Strip.prototype),c.Rope.prototype.constructor=c.Rope,c.Rope.prototype.refresh=function(){var a=this.points;if(!(a.length<1)){var b=this.uvs,c=this.indices,d=this.colors,e=a[0],f=a[0];this.count-=.2,b[0]=0,b[1]=1,b[2]=0,b[3]=1,d[0]=1,d[1]=1,c[0]=0,c[1]=1;for(var g=a.length,h=1;g>h;h++){var f=a[h],i=4*h,j=h/(g-1);h%2?(b[i]=j,b[i+1]=0,b[i+2]=j,b[i+3]=1):(b[i]=j,b[i+1]=0,b[i+2]=j,b[i+3]=1),i=2*h,d[i]=1,d[i+1]=1,i=2*h,c[i]=i,c[i+1]=i+1,e=f}}},c.Rope.prototype.updateTransform=function(){var a=this.points;if(!(a.length<1)){var b,d=this.verticies,e=a[0],f={x:0,y:0},g=a[0];this.count-=.2,d[0]=g.x+f.x,d[1]=g.y+f.y,d[2]=g.x-f.x,d[3]=g.y-f.y;for(var h=a.length,i=1;h>i;i++){var g=a[i],j=4*i;b=i1&&(k=1);var l=Math.sqrt(f.x*f.x+f.y*f.y),m=this.texture.height/2;f.x/=l,f.y/=l,f.x*=m,f.y*=m,d[j]=g.x+f.x,d[j+1]=g.y+f.y,d[j+2]=g.x-f.x,d[j+3]=g.y-f.y,e=g}c.DisplayObjectContainer.prototype.updateTransform.call(this)}},c.Rope.prototype.setTexture=function(a){this.texture=a,this.updateFrame=!0},c.TilingSprite=function(a,b,d){c.DisplayObjectContainer.call(this),this.texture=a,this.width=b,this.height=d,this.tileScale=new c.Point(1,1),this.tilePosition=new c.Point(0,0),this.renderable=!0,this.blendMode=c.blendModes.NORMAL},c.TilingSprite.prototype=Object.create(c.DisplayObjectContainer.prototype),c.TilingSprite.prototype.constructor=c.TilingSprite,c.TilingSprite.prototype.setTexture=function(a){this.texture=a,this.updateFrame=!0},c.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},c.AbstractFilter=function(a,b){this.passes=[this],this.dirty=!0,this.padding=0,this.uniforms=b||{},this.fragmentSrc=a||[]},c.FilterBlock=function(){this.visible=!0,this.renderable=!0},c.Graphics=function(){c.DisplayObjectContainer.call(this),this.renderable=!0,this.fillAlpha=1,this.lineWidth=0,this.lineColor="black",this.graphicsData=[],this.currentPath={points:[]}},c.Graphics.prototype=Object.create(c.DisplayObjectContainer.prototype),c.Graphics.prototype.constructor=c.Graphics,c.Graphics.prototype.lineStyle=function(a,b,d){0===this.currentPath.points.length&&this.graphicsData.pop(),this.lineWidth=a||0,this.lineColor=b||0,this.lineAlpha=void 0==d?1:d,this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[],type:c.Graphics.POLY},this.graphicsData.push(this.currentPath)},c.Graphics.prototype.moveTo=function(a,b){0===this.currentPath.points.length&&this.graphicsData.pop(),this.currentPath=this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[],type:c.Graphics.POLY},this.currentPath.points.push(a,b),this.graphicsData.push(this.currentPath)},c.Graphics.prototype.lineTo=function(a,b){this.currentPath.points.push(a,b),this.dirty=!0},c.Graphics.prototype.beginFill=function(a,b){this.filling=!0,this.fillColor=a||0,this.fillAlpha=void 0==b?1:b},c.Graphics.prototype.endFill=function(){this.filling=!1,this.fillColor=null,this.fillAlpha=1},c.Graphics.prototype.drawRect=function(a,b,d,e){0===this.currentPath.points.length&&this.graphicsData.pop(),this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[a,b,d,e],type:c.Graphics.RECT},this.graphicsData.push(this.currentPath),this.dirty=!0},c.Graphics.prototype.drawCircle=function(a,b,d){0===this.currentPath.points.length&&this.graphicsData.pop(),this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[a,b,d,d],type:c.Graphics.CIRC},this.graphicsData.push(this.currentPath),this.dirty=!0},c.Graphics.prototype.drawElipse=function(a,b,d,e){0===this.currentPath.points.length&&this.graphicsData.pop(),this.currentPath={lineWidth:this.lineWidth,lineColor:this.lineColor,lineAlpha:this.lineAlpha,fillColor:this.fillColor,fillAlpha:this.fillAlpha,fill:this.filling,points:[a,b,d,e],type:c.Graphics.ELIP},this.graphicsData.push(this.currentPath),this.dirty=!0},c.Graphics.prototype.clear=function(){this.lineWidth=0,this.filling=!1,this.dirty=!0,this.clearDirty=!0,this.graphicsData=[],this.bounds=null},c.Graphics.prototype.updateFilterBounds=function(){if(!this.bounds){for(var a,b,d,e=1/0,f=-1/0,g=1/0,h=-1/0,i=0;ib?b:e,f=b+m>f?b+m:f,g=g>d?b:g,h=d+n>h?d+n:h}else if(k===c.Graphics.CIRC||k===c.Graphics.ELIP){b=a.x,d=a.y;var o=a.radius+l/2;e=e>b-o?b-o:e,f=b+o>f?b+o:f,g=g>d-o?d-o:g,h=d+o>h?d+o:h}else for(var p=0;pb-l?b-l:e,f=b+l>f?b+l:f,g=g>d-l?d-l:g,h=d+l>h?d+l:h}this.bounds=new c.Rectangle(e,g,f-e,h-g)}},c.Graphics.POLY=0,c.Graphics.RECT=1,c.Graphics.CIRC=2,c.Graphics.ELIP=3,c.CanvasGraphics=function(){},c.CanvasGraphics.renderGraphics=function(a,b){for(var d=a.worldAlpha,e=0;e1&&(d=1,console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var e=0;1>e;e++){var f=a.graphicsData[e],g=f.points;if(f.type==c.Graphics.POLY){b.beginPath(),b.moveTo(g[0],g[1]);for(var h=1;h0&&(c.Texture.frameUpdates=[])},c.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},c.CanvasRenderer.prototype.renderDisplayObject=function(a){var b,d=this.context;d.globalCompositeOperation="source-over";var e=a.last._iNext;a=a.first;do if(b=a.worldTransform,a.visible)if(a.renderable){if(a instanceof c.Sprite){var f=a.texture.frame;f&&f.width&&f.height&&(d.globalAlpha=a.worldAlpha,d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),d.drawImage(a.texture.baseTexture.source,f.x,f.y,f.width,f.height,a.anchor.x*-f.width,a.anchor.y*-f.height,f.width,f.height))}else if(a instanceof c.Strip)d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),this.renderStrip(a);else if(a instanceof c.TilingSprite)d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),this.renderTilingSprite(a);else if(a instanceof c.CustomRenderable)d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),a.renderCanvas(this);else if(a instanceof c.Graphics)d.setTransform(b[0],b[3],b[1],b[4],b[2],b[5]),c.CanvasGraphics.renderGraphics(a,d);else if(a instanceof c.FilterBlock&&a.data instanceof c.Graphics){var g=a.data;if(a.open){d.save();var h=g.alpha,i=g.worldTransform;d.setTransform(i[0],i[3],i[1],i[4],i[2],i[5]),g.worldAlpha=.5,d.worldAlpha=0,c.CanvasGraphics.renderGraphicsMask(g,d),d.clip(),g.worldAlpha=h}else d.restore()}a=a._iNext}else a=a._iNext;else a=a.last._iNext;while(a!=e)},c.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies;a.uvs;var d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},c.CanvasRenderer.prototype.renderTilingSprite=function(a){var b=this.context;b.globalAlpha=a.worldAlpha,a.__tilePattern||(a.__tilePattern=b.createPattern(a.texture.baseTexture.source,"repeat")),b.beginPath();var c=a.tilePosition,d=a.tileScale;b.scale(d.x,d.y),b.translate(c.x,c.y),b.fillStyle=a.__tilePattern,b.fillRect(-c.x,-c.y,a.width/d.x,a.height/d.y),b.scale(1/d.x,1/d.y),b.translate(-c.x,-c.y),b.closePath()},c.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},c.PixiShader=function(){this.program,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor;","}"],this.textureCount=0},c.PixiShader.prototype.init=function(){var a=c.compileProgram(this.vertexSrc||c.PixiShader.defaultVertexSrc,this.fragmentSrc),b=c.gl;b.useProgram(a),this.uSampler=b.getUniformLocation(a,"uSampler"),this.projectionVector=b.getUniformLocation(a,"projectionVector"),this.offsetVector=b.getUniformLocation(a,"offsetVector"),this.dimensions=b.getUniformLocation(a,"dimensions"),this.aVertexPosition=b.getAttribLocation(a,"aVertexPosition"),this.colorAttribute=b.getAttribLocation(a,"aColor"),this.aTextureCoord=b.getAttribLocation(a,"aTextureCoord");for(var d in this.uniforms)this.uniforms[d].uniformLocation=b.getUniformLocation(a,d);this.initUniforms(),this.program=a},c.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a;for(var b in this.uniforms){var a=this.uniforms[b],d=a.type;"sampler2D"==d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"==d||"mat3"==d||"mat4"==d?(a.glMatrix=!0,a.glValueLength=1,"mat2"==d?a.glFunc=c.gl.uniformMatrix2fv:"mat3"==d?a.glFunc=c.gl.uniformMatrix3fv:"mat4"==d&&(a.glFunc=c.gl.uniformMatrix4fv)):(a.glFunc=c.gl["uniform"+d],a.glValueLength="2f"==d||"2i"==d?2:"3f"==d||"3i"==d?3:"4f"==d||"4i"==d?4:1)}},c.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){if(c.gl.activeTexture(c.gl["TEXTURE"+this.textureCount]),c.gl.bindTexture(c.gl.TEXTURE_2D,a.value.baseTexture._glTexture),a.textureData){var b=a.textureData,d=b.magFilter?b.magFilter:c.gl.LINEAR,e=b.minFilter?b.minFilter:c.gl.LINEAR,f=b.wrapS?b.wrapS:c.gl.CLAMP_TO_EDGE,g=b.wrapT?b.wrapT:c.gl.CLAMP_TO_EDGE,h=b.luminance?c.gl.LUMINANCE:c.gl.RGBA;if(b.repeat&&(f=c.gl.REPEAT,g=c.gl.REPEAT),c.gl.pixelStorei(c.gl.UNPACK_FLIP_Y_WEBGL,!1),b.width){var i=b.width?b.width:512,j=b.height?b.height:2,k=b.border?b.border:0;c.gl.texImage2D(c.gl.TEXTURE_2D,0,h,i,j,k,h,c.gl.UNSIGNED_BYTE,null)}else c.gl.texImage2D(c.gl.TEXTURE_2D,0,h,c.gl.RGBA,c.gl.UNSIGNED_BYTE,a.value.baseTexture.source);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MAG_FILTER,d),c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MIN_FILTER,e),c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_S,f),c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_T,g)}c.gl.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},c.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a;for(var b in this.uniforms)a=this.uniforms[b],1==a.glValueLength?a.glMatrix===!0?a.glFunc.call(c.gl,a.uniformLocation,a.transpose,a.value):a.glFunc.call(c.gl,a.uniformLocation,a.value):2==a.glValueLength?a.glFunc.call(c.gl,a.uniformLocation,a.value.x,a.value.y):3==a.glValueLength?a.glFunc.call(c.gl,a.uniformLocation,a.value.x,a.value.y,a.value.z):4==a.glValueLength?a.glFunc.call(c.gl,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"==a.type&&(a._init?(c.gl.activeTexture(c.gl["TEXTURE"+this.textureCount]),c.gl.bindTexture(c.gl.TEXTURE_2D,a.value.baseTexture._glTexture),c.gl.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a))},c.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying float vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {","gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"],c.PrimitiveShader=function(){this.program,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {","gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","varying vec4 vColor;","void main(void) {","vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);","v -= offsetVector.xyx;","gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);","vColor = aColor * alpha;","}"] +},c.PrimitiveShader.prototype.init=function(){var a=c.compileProgram(this.vertexSrc,this.fragmentSrc),b=c.gl;b.useProgram(a),this.projectionVector=b.getUniformLocation(a,"projectionVector"),this.offsetVector=b.getUniformLocation(a,"offsetVector"),this.aVertexPosition=b.getAttribLocation(a,"aVertexPosition"),this.colorAttribute=b.getAttribLocation(a,"aColor"),this.translationMatrix=b.getUniformLocation(a,"translationMatrix"),this.alpha=b.getUniformLocation(a,"alpha"),this.program=a},c.StripShader=function(){this.program,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","varying vec2 offsetVector;","varying float vColor;","void main(void) {","vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);","v -= offsetVector.xyx;","gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);","vTextureCoord = aTextureCoord;","vColor = aColor;","}"]},c.StripShader.prototype.init=function(){var a=c.compileProgram(this.vertexSrc,this.fragmentSrc),b=c.gl;b.useProgram(a),this.uSampler=b.getUniformLocation(a,"uSampler"),this.projectionVector=b.getUniformLocation(a,"projectionVector"),this.offsetVector=b.getUniformLocation(a,"offsetVector"),this.colorAttribute=b.getAttribLocation(a,"aColor"),this.aVertexPosition=b.getAttribLocation(a,"aVertexPosition"),this.aTextureCoord=b.getAttribLocation(a,"aTextureCoord"),this.translationMatrix=b.getUniformLocation(a,"translationMatrix"),this.alpha=b.getUniformLocation(a,"alpha"),this.program=a},c._batchs=[],c._getBatch=function(a){return 0===c._batchs.length?new c.WebGLBatch(a):c._batchs.pop()},c._returnBatch=function(a){a.clean(),c._batchs.push(a)},c._restoreBatchs=function(a){for(var b=0;bc;c++){var d=6*c,e=4*c;this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3}a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW)},c.WebGLBatch.prototype.refresh=function(){this.gl,this.dynamicSizethis.width&&(f.width=this.width),f.y<0&&(f.y=0),f.height>this.height&&(f.height=this.height),b.bindFramebuffer(b.FRAMEBUFFER,e.frameBuffer),b.viewport(0,0,f.width,f.height),c.projection.x=f.width/2,c.projection.y=-f.height/2,c.offset.x=-f.x,c.offset.y=-f.y,b.uniform2f(c.defaultShader.projectionVector,f.width/2,-f.height/2),b.uniform2f(c.defaultShader.offsetVector,-f.x,-f.y),b.colorMask(!0,!0,!0,!0),b.clearColor(0,0,0,0),b.clear(b.COLOR_BUFFER_BIT),a._glFilterTexture=e},c.WebGLFilterManager.prototype.popFilter=function(){var a=c.gl,b=this.filterStack.pop(),d=b.target.filterArea,e=b._glFilterTexture;if(b.filterPasses.length>1){a.viewport(0,0,d.width,d.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=d.height,this.vertexArray[2]=d.width,this.vertexArray[3]=d.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=d.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=d.width/this.width,this.uvArray[5]=d.height/this.height,this.uvArray[6]=d.width/this.width,this.uvArray[7]=d.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray);var f=e,g=this.texturePool.pop();g||(g=new c.FilterTexture(this.width,this.height)),a.bindFramebuffer(a.FRAMEBUFFER,g.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var h=0;hs?s:E,E=E>t?t:E,E=E>u?u:E,E=E>v?v:E,F=F>w?w:F,F=F>x?x:F,F=F>y?y:F,F=F>z?z:F,C=s>C?s:C,C=t>C?t:C,C=u>C?u:C,C=v>C?v:C,D=w>D?w:D,D=x>D?x:D,D=y>D?y:D,D=z>D?z:D),l=!1,A=A._iNext}while(A!=B);a.filterArea.x=E,a.filterArea.y=F,a.filterArea.width=C-E,a.filterArea.height=D-F},c.FilterTexture=function(a,b){var d=c.gl;this.frameBuffer=d.createFramebuffer(),this.texture=d.createTexture(),d.bindTexture(d.TEXTURE_2D,this.texture),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MAG_FILTER,d.LINEAR),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MIN_FILTER,d.LINEAR),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.bindFramebuffer(d.FRAMEBUFFER,this.framebuffer),d.bindFramebuffer(d.FRAMEBUFFER,this.frameBuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,d.TEXTURE_2D,this.texture,0),this.resize(a,b)},c.FilterTexture.prototype.resize=function(a,b){this.width=a,this.height=b;var d=c.gl;d.bindTexture(d.TEXTURE_2D,this.texture),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,a,b,0,d.RGBA,d.UNSIGNED_BYTE,null)},c.WebGLGraphics=function(){},c.WebGLGraphics.renderGraphics=function(a,b){var d=c.gl;a._webGL||(a._webGL={points:[],indices:[],lastIndex:0,buffer:d.createBuffer(),indexBuffer:d.createBuffer()}),a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,a._webGL.lastIndex=0,a._webGL.points=[],a._webGL.indices=[]),c.WebGLGraphics.updateGraphics(a)),c.activatePrimitiveShader();var e=c.mat3.clone(a.worldTransform);c.mat3.transpose(e),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.uniformMatrix3fv(c.primitiveShader.translationMatrix,!1,e),d.uniform2f(c.primitiveShader.projectionVector,b.x,-b.y),d.uniform2f(c.primitiveShader.offsetVector,-c.offset.x,-c.offset.y),d.uniform1f(c.primitiveShader.alpha,a.worldAlpha),d.bindBuffer(d.ARRAY_BUFFER,a._webGL.buffer),d.vertexAttribPointer(c.primitiveShader.aVertexPosition,2,d.FLOAT,!1,24,0),d.vertexAttribPointer(c.primitiveShader.colorAttribute,4,d.FLOAT,!1,24,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,a._webGL.indexBuffer),d.drawElements(d.TRIANGLE_STRIP,a._webGL.indices.length,d.UNSIGNED_SHORT,0),c.deactivatePrimitiveShader()},c.WebGLGraphics.updateGraphics=function(a){for(var b=a._webGL.lastIndex;b3&&c.WebGLGraphics.buildPoly(d,a._webGL),d.lineWidth>0&&c.WebGLGraphics.buildLine(d,a._webGL)):d.type==c.Graphics.RECT?c.WebGLGraphics.buildRectangle(d,a._webGL):(d.type==c.Graphics.CIRC||d.type==c.Graphics.ELIP)&&c.WebGLGraphics.buildCircle(d,a._webGL)}a._webGL.lastIndex=a.graphicsData.length;var e=c.gl;a._webGL.glPoints=new Float32Array(a._webGL.points),e.bindBuffer(e.ARRAY_BUFFER,a._webGL.buffer),e.bufferData(e.ARRAY_BUFFER,a._webGL.glPoints,e.STATIC_DRAW),a._webGL.glIndicies=new Uint16Array(a._webGL.indices),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a._webGL.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,a._webGL.glIndicies,e.STATIC_DRAW)},c.WebGLGraphics.buildRectangle=function(b,d){var e=b.points,f=e[0],g=e[1],h=e[2],i=e[3];if(b.fill){var j=a(b.fillColor),k=b.fillAlpha,l=j[0]*k,m=j[1]*k,n=j[2]*k,o=d.points,p=d.indices,q=o.length/6;o.push(f,g),o.push(l,m,n,k),o.push(f+h,g),o.push(l,m,n,k),o.push(f,g+i),o.push(l,m,n,k),o.push(f+h,g+i),o.push(l,m,n,k),p.push(q,q,q+1,q+2,q+3,q+3)}b.lineWidth&&(b.points=[f,g,f+h,g,f+h,g+i,f,g+i,f,g],c.WebGLGraphics.buildLine(b,d))},c.WebGLGraphics.buildCircle=function(b,d){var e=b.points,f=e[0],g=e[1],h=e[2],i=e[3],j=40,k=2*Math.PI/j;if(b.fill){var l=a(b.fillColor),m=b.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=d.points,r=d.indices,s=q.length/6;r.push(s);for(var t=0;j+1>t;t++)q.push(f,g,n,o,p,m),q.push(f+Math.sin(k*t)*h,g+Math.cos(k*t)*i,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(b.lineWidth){b.points=[];for(var t=0;j+1>t;t++)b.points.push(f+Math.sin(k*t)*h,g+Math.cos(k*t)*i);c.WebGLGraphics.buildLine(b,d)}},c.WebGLGraphics.buildLine=function(b,d){var e=b.points;if(0!==e.length){if(b.lineWidth%2)for(var f=0;ff;f++)k=e[2*(f-1)],l=e[2*(f-1)+1],m=e[2*f],n=e[2*f+1],o=e[2*(f+1)],p=e[2*(f+1)+1],q=-(l-n),r=k-m,E=Math.sqrt(q*q+r*r),q/=E,r/=E,q*=K,r*=K,s=-(n-p),t=m-o,E=Math.sqrt(s*s+t*t),s/=E,t/=E,s*=K,t*=K,w=-r+l-(-r+n),x=-q+m-(-q+k),y=(-q+k)*(-r+n)-(-q+m)*(-r+l),z=-t+p-(-t+n),A=-s+m-(-s+o),B=(-s+o)*(-t+n)-(-s+m)*(-t+p),C=w*A-z*x,Math.abs(C)<.1?(C+=10.1,F.push(m-q,n-r,N,O,P,M),F.push(m+q,n+r,N,O,P,M)):(px=(x*B-A*y)/C,py=(z*y-w*B)/C,D=(px-m)*(px-m)+(py-n)+(py-n),D>19600?(u=q-s,v=r-t,E=Math.sqrt(u*u+v*v),u/=E,v/=E,u*=K,v*=K,F.push(m-u,n-v),F.push(N,O,P,M),F.push(m+u,n+v),F.push(N,O,P,M),F.push(m-u,n-v),F.push(N,O,P,M),I++):(F.push(px,py),F.push(N,O,P,M),F.push(m-(px-m),n-(py-n)),F.push(N,O,P,M)));k=e[2*(H-2)],l=e[2*(H-2)+1],m=e[2*(H-1)],n=e[2*(H-1)+1],q=-(l-n),r=k-m,E=Math.sqrt(q*q+r*r),q/=E,r/=E,q*=K,r*=K,F.push(m-q,n-r),F.push(N,O,P,M),F.push(m+q,n+r),F.push(N,O,P,M),G.push(J);for(var f=0;I>f;f++)G.push(J++);G.push(J-1)}},c.WebGLGraphics.buildPoly=function(b,d){var e=b.points;if(!(e.length<6)){for(var f=d.points,g=d.indices,h=e.length/2,i=a(b.fillColor),j=b.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=c.PolyK.Triangulate(e),o=f.length/6,p=0;pp;p++)f.push(e[2*p],e[2*p+1],k,l,m,j)}},c._defaultFrame=new c.Rectangle(0,0,1,1),c.gl,c.WebGLRenderer=function(a,b,d,e,f){this.transparent=!!e,this.width=a||800,this.height=b||600,this.view=d||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var g=this;this.view.addEventListener("webglcontextlost",function(a){g.handleContextLost(a)},!1),this.view.addEventListener("webglcontextrestored",function(a){g.handleContextRestored(a)},!1),this.batchs=[];var h={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!1,stencil:!0};try{c.gl=this.gl=this.view.getContext("experimental-webgl",h)}catch(i){try{c.gl=this.gl=this.view.getContext("webgl",h)}catch(i){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}c.initDefaultShaders();var j=this.gl;j.useProgram(c.defaultShader.program),c.WebGLRenderer.gl=j,this.batch=new c.WebGLBatch(j),j.disable(j.DEPTH_TEST),j.disable(j.CULL_FACE),j.enable(j.BLEND),j.colorMask(!0,!0,!0,this.transparent),c.projection=new c.Point(400,300),c.offset=new c.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.stageRenderGroup=new c.WebGLRenderGroup(this.gl,this.transparent)},c.WebGLRenderer.prototype.constructor=c.WebGLRenderer,c.WebGLRenderer.getBatch=function(){return 0===c._batchs.length?new c.WebGLBatch(c.WebGLRenderer.gl):c._batchs.pop()},c.WebGLRenderer.returnBatch=function(a){a.clean(),c._batchs.push(a)},c.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(this.__stage=a,this.stageRenderGroup.setRenderable(a)),c.WebGLRenderer.updateTextures(),c.visibleCount++,a.updateTransform();var b=this.gl;if(b.colorMask(!0,!0,!0,this.transparent),b.viewport(0,0,this.width,this.height),b.bindFramebuffer(b.FRAMEBUFFER,null),b.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],!this.transparent),b.clear(b.COLOR_BUFFER_BIT),this.stageRenderGroup.backgroundColor=a.backgroundColorSplit,c.projection.x=this.width/2,c.projection.y=-this.height/2,this.stageRenderGroup.render(c.projection),a.interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this))),c.Texture.frameUpdates.length>0){for(var d=0;dn;n++)renderable=this.batchs[n],renderable instanceof c.WebGLBatch?this.batchs[n].render():this.renderSpecial(renderable,b);endBatch instanceof c.WebGLBatch?endBatch.render(0,h+1):this.renderSpecial(endBatch,b)},c.WebGLRenderGroup.prototype.renderSpecial=function(a,b){var d=a.vcount===c.visibleCount;a instanceof c.TilingSprite?d&&this.renderTilingSprite(a,b):a instanceof c.Strip?d&&this.renderStrip(a,b):a instanceof c.CustomRenderable?d&&a.renderWebGL(this,b):a instanceof c.Graphics?d&&a.renderable&&c.WebGLGraphics.renderGraphics(a,b):a instanceof c.FilterBlock&&this.handleFilterBlock(a,b)},flip=!1;var e=[],f=0;return c.WebGLRenderGroup.prototype.handleFilterBlock=function(a,b){var d=c.gl;if(a.open)a.data instanceof Array?this.filterManager.pushFilter(a):(f++,e.push(a),d.enable(d.STENCIL_TEST),d.colorMask(!1,!1,!1,!1),d.stencilFunc(d.ALWAYS,1,1),d.stencilOp(d.KEEP,d.KEEP,d.INCR),c.WebGLGraphics.renderGraphics(a.data,b),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,e.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP));else if(a.data instanceof Array)this.filterManager.popFilter();else{var g=e.pop(a);g&&(d.colorMask(!1,!1,!1,!1),d.stencilFunc(d.ALWAYS,1,1),d.stencilOp(d.KEEP,d.KEEP,d.DECR),c.WebGLGraphics.renderGraphics(g.data,b),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,e.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP)),d.disable(d.STENCIL_TEST)}},c.WebGLRenderGroup.prototype.updateTexture=function(a){this.removeObject(a);for(var b=a.first;b!=this.root&&(b=b._iPrev,!b.renderable||!b.__renderGroup););for(var c=a.last;c._iNext&&(c=c._iNext,!c.renderable||!c.__renderGroup););this.insertObject(a,b,c)},c.WebGLRenderGroup.prototype.addFilterBlocks=function(a,b){a.__renderGroup=this,b.__renderGroup=this;for(var c=a;c!=this.root.first&&(c=c._iPrev,!c.renderable||!c.__renderGroup););this.insertAfter(a,c);for(var d=b;d!=this.root.first&&(d=d._iPrev,!d.renderable||!d.__renderGroup););this.insertAfter(b,d)},c.WebGLRenderGroup.prototype.removeFilterBlocks=function(a,b){this.removeObject(a),this.removeObject(b)},c.WebGLRenderGroup.prototype.addDisplayObjectAndChildren=function(a){a.__renderGroup&&a.__renderGroup.removeDisplayObjectAndChildren(a);for(var b=a.first;b!=this.root.first&&(b=b._iPrev,!b.renderable||!b.__renderGroup););for(var c=a.last;c._iNext&&(c=c._iNext,!c.renderable||!c.__renderGroup););var d=a.first,e=a.last._iNext;do d.__renderGroup=this,d.renderable&&(this.insertObject(d,b,c),b=d),d=d._iNext;while(d!=e)},c.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren=function(a){if(a.__renderGroup==this){a.last;do a.__renderGroup=null,a.renderable&&this.removeObject(a),a=a._iNext;while(a)}},c.WebGLRenderGroup.prototype.insertObject=function(a,b,d){var e=b,f=d;if(a instanceof c.Sprite){var g,h;if(e instanceof c.Sprite){if(g=e.batch,g&&g.texture==a.texture.baseTexture&&g.blendMode==a.blendMode)return g.insertAfter(a,e),void 0}else g=e;if(f)if(f instanceof c.Sprite){if(h=f.batch){if(h.texture==a.texture.baseTexture&&h.blendMode==a.blendMode)return h.insertBefore(a,f),void 0;if(h==g){var i=g.split(f),j=c.WebGLRenderer.getBatch(),k=this.batchs.indexOf(g);return j.init(a),this.batchs.splice(k+1,0,j,i),void 0}}}else h=f;var j=c.WebGLRenderer.getBatch();if(j.init(a),g){var k=this.batchs.indexOf(g);this.batchs.splice(k+1,0,j)}else this.batchs.push(j)}else a instanceof c.TilingSprite?this.initTilingSprite(a):a instanceof c.Strip&&this.initStrip(a),this.insertAfter(a,e)},c.WebGLRenderGroup.prototype.insertAfter=function(a,b){if(b instanceof c.Sprite){var d=b.batch;if(d)if(d.tail==b){var e=this.batchs.indexOf(d);this.batchs.splice(e+1,0,a)}else{var f=d.split(b.__next),e=this.batchs.indexOf(d);this.batchs.splice(e+1,0,a,f)}else this.batchs.push(a)}else{var e=this.batchs.indexOf(b);this.batchs.splice(e+1,0,a)}},c.WebGLRenderGroup.prototype.removeObject=function(a){var b;if(a instanceof c.Sprite){var d=a.batch;if(!d)return;d.remove(a),0==d.size&&(b=d)}else b=a;if(b){var e=this.batchs.indexOf(b);if(-1==e)return;if(0===e||e==this.batchs.length-1)return this.batchs.splice(e,1),b instanceof c.WebGLBatch&&c.WebGLRenderer.returnBatch(b),void 0;if(this.batchs[e-1]instanceof c.WebGLBatch&&this.batchs[e+1]instanceof c.WebGLBatch&&this.batchs[e-1].texture==this.batchs[e+1].texture&&this.batchs[e-1].blendMode==this.batchs[e+1].blendMode)return this.batchs[e-1].merge(this.batchs[e+1]),b instanceof c.WebGLBatch&&c.WebGLRenderer.returnBatch(b),c.WebGLRenderer.returnBatch(this.batchs[e+1]),this.batchs.splice(e,2),void 0;this.batchs.splice(e,1),b instanceof c.WebGLBatch&&c.WebGLRenderer.returnBatch(b)}},c.WebGLRenderGroup.prototype.initTilingSprite=function(a){var b=this.gl;a.verticies=new Float32Array([0,0,a.width,0,a.width,a.height,0,a.height]),a.uvs=new Float32Array([0,0,1,0,1,1,0,1]),a.colors=new Float32Array([1,1,1,1]),a.indices=new Uint16Array([0,1,3,2]),a._vertexBuffer=b.createBuffer(),a._indexBuffer=b.createBuffer(),a._uvBuffer=b.createBuffer(),a._colorBuffer=b.createBuffer(),b.bindBuffer(b.ARRAY_BUFFER,a._vertexBuffer),b.bufferData(b.ARRAY_BUFFER,a.verticies,b.STATIC_DRAW),b.bindBuffer(b.ARRAY_BUFFER,a._uvBuffer),b.bufferData(b.ARRAY_BUFFER,a.uvs,b.DYNAMIC_DRAW),b.bindBuffer(b.ARRAY_BUFFER,a._colorBuffer),b.bufferData(b.ARRAY_BUFFER,a.colors,b.STATIC_DRAW),b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,a._indexBuffer),b.bufferData(b.ELEMENT_ARRAY_BUFFER,a.indices,b.STATIC_DRAW),a.texture.baseTexture._glTexture?(b.bindTexture(b.TEXTURE_2D,a.texture.baseTexture._glTexture),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.REPEAT),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.REPEAT),a.texture.baseTexture._powerOf2=!0):a.texture.baseTexture._powerOf2=!0},c.WebGLRenderGroup.prototype.renderStrip=function(a,b){var d=this.gl;c.activateStripShader();var e=c.stripShader;e.program;var f=c.mat3.clone(a.worldTransform);c.mat3.transpose(f),d.uniformMatrix3fv(e.translationMatrix,!1,f),d.uniform2f(e.projectionVector,b.x,b.y),d.uniform2f(e.offsetVector,-c.offset.x,-c.offset.y),d.uniform1f(e.alpha,a.worldAlpha),a.dirty?(a.dirty=!1,d.bindBuffer(d.ARRAY_BUFFER,a._vertexBuffer),d.bufferData(d.ARRAY_BUFFER,a.verticies,d.STATIC_DRAW),d.vertexAttribPointer(e.aVertexPosition,2,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,a._uvBuffer),d.bufferData(d.ARRAY_BUFFER,a.uvs,d.STATIC_DRAW),d.vertexAttribPointer(e.aTextureCoord,2,d.FLOAT,!1,0,0),d.activeTexture(d.TEXTURE0),d.bindTexture(d.TEXTURE_2D,a.texture.baseTexture._glTexture),d.bindBuffer(d.ARRAY_BUFFER,a._colorBuffer),d.bufferData(d.ARRAY_BUFFER,a.colors,d.STATIC_DRAW),d.vertexAttribPointer(e.colorAttribute,1,d.FLOAT,!1,0,0),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,a._indexBuffer),d.bufferData(d.ELEMENT_ARRAY_BUFFER,a.indices,d.STATIC_DRAW)):(d.bindBuffer(d.ARRAY_BUFFER,a._vertexBuffer),d.bufferSubData(d.ARRAY_BUFFER,0,a.verticies),d.vertexAttribPointer(e.aVertexPosition,2,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,a._uvBuffer),d.vertexAttribPointer(e.aTextureCoord,2,d.FLOAT,!1,0,0),d.activeTexture(d.TEXTURE0),d.bindTexture(d.TEXTURE_2D,a.texture.baseTexture._glTexture),d.bindBuffer(d.ARRAY_BUFFER,a._colorBuffer),d.vertexAttribPointer(e.colorAttribute,1,d.FLOAT,!1,0,0),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,a._indexBuffer)),d.drawElements(d.TRIANGLE_STRIP,a.indices.length,d.UNSIGNED_SHORT,0),c.deactivateStripShader() +},c.WebGLRenderGroup.prototype.renderTilingSprite=function(a,b){var d=this.gl;c.shaderProgram;var e=a.tilePosition,f=a.tileScale,g=e.x/a.texture.baseTexture.width,h=e.y/a.texture.baseTexture.height,i=a.width/a.texture.baseTexture.width/f.x,j=a.height/a.texture.baseTexture.height/f.y;a.uvs[0]=0-g,a.uvs[1]=0-h,a.uvs[2]=1*i-g,a.uvs[3]=0-h,a.uvs[4]=1*i-g,a.uvs[5]=1*j-h,a.uvs[6]=0-g,a.uvs[7]=1*j-h,d.bindBuffer(d.ARRAY_BUFFER,a._uvBuffer),d.bufferSubData(d.ARRAY_BUFFER,0,a.uvs),this.renderStrip(a,b)},c.WebGLRenderGroup.prototype.initStrip=function(a){var b=this.gl;this.shaderProgram,a._vertexBuffer=b.createBuffer(),a._indexBuffer=b.createBuffer(),a._uvBuffer=b.createBuffer(),a._colorBuffer=b.createBuffer(),b.bindBuffer(b.ARRAY_BUFFER,a._vertexBuffer),b.bufferData(b.ARRAY_BUFFER,a.verticies,b.DYNAMIC_DRAW),b.bindBuffer(b.ARRAY_BUFFER,a._uvBuffer),b.bufferData(b.ARRAY_BUFFER,a.uvs,b.STATIC_DRAW),b.bindBuffer(b.ARRAY_BUFFER,a._colorBuffer),b.bufferData(b.ARRAY_BUFFER,a.colors,b.STATIC_DRAW),b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,a._indexBuffer),b.bufferData(b.ELEMENT_ARRAY_BUFFER,a.indices,b.STATIC_DRAW)},c.initDefaultShaders=function(){c.primitiveShader=new c.PrimitiveShader,c.primitiveShader.init(),c.stripShader=new c.StripShader,c.stripShader.init(),c.defaultShader=new c.PixiShader,c.defaultShader.init();var a=c.gl,b=c.defaultShader.program;a.useProgram(b),a.enableVertexAttribArray(c.defaultShader.aVertexPosition),a.enableVertexAttribArray(c.defaultShader.colorAttribute),a.enableVertexAttribArray(c.defaultShader.aTextureCoord)},c.activatePrimitiveShader=function(){var a=c.gl;a.useProgram(c.primitiveShader.program),a.disableVertexAttribArray(c.defaultShader.aVertexPosition),a.disableVertexAttribArray(c.defaultShader.colorAttribute),a.disableVertexAttribArray(c.defaultShader.aTextureCoord),a.enableVertexAttribArray(c.primitiveShader.aVertexPosition),a.enableVertexAttribArray(c.primitiveShader.colorAttribute)},c.deactivatePrimitiveShader=function(){var a=c.gl;a.useProgram(c.defaultShader.program),a.disableVertexAttribArray(c.primitiveShader.aVertexPosition),a.disableVertexAttribArray(c.primitiveShader.colorAttribute),a.enableVertexAttribArray(c.defaultShader.aVertexPosition),a.enableVertexAttribArray(c.defaultShader.colorAttribute),a.enableVertexAttribArray(c.defaultShader.aTextureCoord)},c.activateStripShader=function(){var a=c.gl;a.useProgram(c.stripShader.program)},c.deactivateStripShader=function(){var a=c.gl;a.useProgram(c.defaultShader.program)},c.CompileVertexShader=function(a,b){return c._CompileShader(a,b,a.VERTEX_SHADER)},c.CompileFragmentShader=function(a,b){return c._CompileShader(a,b,a.FRAGMENT_SHADER)},c._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(console.log(a.getShaderInfoLog(e)),null)},c.compileProgram=function(a,b){var d=c.gl,e=c.CompileFragmentShader(d,b),f=c.CompileVertexShader(d,a),g=d.createProgram();return d.attachShader(g,f),d.attachShader(g,e),d.linkProgram(g),d.getProgramParameter(g,d.LINK_STATUS)||console.log("Could not initialise shaders"),g},c.BitmapText=function(a,b){c.DisplayObjectContainer.call(this),this.setText(a),this.setStyle(b),this.updateText(),this.dirty=!1},c.BitmapText.prototype=Object.create(c.DisplayObjectContainer.prototype),c.BitmapText.prototype.constructor=c.BitmapText,c.BitmapText.prototype.setText=function(a){this.text=a||" ",this.dirty=!0},c.BitmapText.prototype.setStyle=function(a){a=a||{},a.align=a.align||"left",this.style=a;var b=a.font.split(" ");this.fontName=b[b.length-1],this.fontSize=b.length>=2?parseInt(b[b.length-2],10):c.BitmapText.fonts[this.fontName].size,this.dirty=!0},c.BitmapText.prototype.updateText=function(){for(var a=c.BitmapText.fonts[this.fontName],b=new c.Point,d=null,e=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"==this.style.align?n=f-g[j]:"center"==this.style.align&&(n=(f-g[j])/2),m.push(n)}for(j=0;j0;)this.removeChild(this.getChildAt(0));this.updateText(),this.dirty=!1}c.DisplayObjectContainer.prototype.updateTransform.call(this)},c.BitmapText.fonts={},c.Text=function(a,b){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),c.Sprite.call(this,c.Texture.fromCanvas(this.canvas)),this.setText(a),this.setStyle(b),this.updateText(),this.dirty=!1},c.Text.prototype=Object.create(c.Sprite.prototype),c.Text.prototype.constructor=c.Text,c.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,this.style=a,this.dirty=!0},c.Text.prototype.setText=function(a){this.text=a.toString()||" ",this.dirty=!0},c.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.wordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),d=[],e=0,f=0;fe?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}b+="\n"}return b},c.Text.prototype.destroy=function(a){a&&this.texture.destroy()},c.Text.heightCache={},c.BaseTextureCache={},c.texturesToUpdate=[],c.texturesToDestroy=[],c.BaseTexture=function(a){if(c.EventTarget.call(this),this.width=100,this.height=100,this.hasLoaded=!1,this.source=a,a){if(this.source instanceof Image||this.source instanceof HTMLImageElement)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,c.texturesToUpdate.push(this);else{var b=this;this.source.onload=function(){b.hasLoaded=!0,b.width=b.source.width,b.height=b.source.height,c.texturesToUpdate.push(b),b.dispatchEvent({type:"loaded",content:b})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,c.texturesToUpdate.push(this);this._powerOf2=!1}},c.BaseTexture.prototype.constructor=c.BaseTexture,c.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.source.src=null),this.source=null,c.texturesToDestroy.push(this)},c.BaseTexture.fromImage=function(a,b){var d=c.BaseTextureCache[a];if(!d){var e=new Image;b&&(e.crossOrigin=""),e.src=a,d=new c.BaseTexture(e),c.BaseTextureCache[a]=d}return d},c.TextureCache={},c.FrameCache={},c.Texture=function(a,b){if(c.EventTarget.call(this),b||(this.noFrame=!0,b=new c.Rectangle(0,0,1,1)),a instanceof c.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=b,this.trim=new c.Point,this.scope=this,a.hasLoaded)this.noFrame&&(b=new c.Rectangle(0,0,a.width,a.height)),this.setFrame(b);else{var d=this;a.addEventListener("loaded",function(){d.onBaseTextureLoaded()})}},c.Texture.prototype.constructor=c.Texture,c.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new c.Rectangle(0,0,a.width,a.height)),this.noFrame=!1,this.width=this.frame.width,this.height=this.frame.height,this.scope.dispatchEvent({type:"update",content:this})},c.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},c.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,c.Texture.frameUpdates.push(this)},c.Texture.fromImage=function(a,b){var d=c.TextureCache[a];return d||(d=new c.Texture(c.BaseTexture.fromImage(a,b)),c.TextureCache[a]=d),d},c.Texture.fromFrame=function(a){var b=c.TextureCache[a];if(!b)throw new Error("The frameId '"+a+"' does not exist in the texture cache "+this);return b},c.Texture.fromCanvas=function(a){var b=new c.BaseTexture(a);return new c.Texture(b)},c.Texture.addTextureToCache=function(a,b){c.TextureCache[b]=a},c.Texture.removeTextureFromCache=function(a){var b=c.TextureCache[a];return c.TextureCache[a]=null,b},c.Texture.frameUpdates=[],c.RenderTexture=function(a,b){c.EventTarget.call(this),this.width=a||100,this.height=b||100,this.indetityMatrix=c.mat3.create(),this.frame=new c.Rectangle(0,0,this.width,this.height),c.gl?this.initWebGL():this.initCanvas()},c.RenderTexture.prototype=Object.create(c.Texture.prototype),c.RenderTexture.prototype.constructor=c.RenderTexture,c.RenderTexture.prototype.initWebGL=function(){var a=c.gl;this.glFramebuffer=a.createFramebuffer(),a.bindFramebuffer(a.FRAMEBUFFER,this.glFramebuffer),this.glFramebuffer.width=this.width,this.glFramebuffer.height=this.height,this.baseTexture=new c.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTexture=a.createTexture(),a.bindTexture(a.TEXTURE_2D,this.baseTexture._glTexture),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,this.width,this.height,0,a.RGBA,a.UNSIGNED_BYTE,null),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),this.baseTexture.isRender=!0,a.bindFramebuffer(a.FRAMEBUFFER,this.glFramebuffer),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,this.baseTexture._glTexture,0),this.projection=new c.Point(this.width/2,-this.height/2),this.render=this.renderWebGL},c.RenderTexture.prototype.resize=function(a,b){if(this.width=a,this.height=b,c.gl){this.projection.x=this.width/2,this.projection.y=-this.height/2;var d=c.gl;d.bindTexture(d.TEXTURE_2D,this.baseTexture._glTexture),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,this.width,this.height,0,d.RGBA,d.UNSIGNED_BYTE,null)}else this.frame.width=this.width,this.frame.height=this.height,this.renderer.resize(this.width,this.height)},c.RenderTexture.prototype.initCanvas=function(){this.renderer=new c.CanvasRenderer(this.width,this.height,null,0),this.baseTexture=new c.BaseTexture(this.renderer.view),this.frame=new c.Rectangle(0,0,this.width,this.height),this.render=this.renderCanvas},c.RenderTexture.prototype.renderWebGL=function(a,b,d){var e=c.gl;e.colorMask(!0,!0,!0,!0),e.viewport(0,0,this.width,this.height),e.bindFramebuffer(e.FRAMEBUFFER,this.glFramebuffer),d&&(e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT));var f=a.children,g=a.worldTransform;a.worldTransform=c.mat3.create(),a.worldTransform[4]=-1,a.worldTransform[5]=-2*this.projection.y,b&&(a.worldTransform[2]=b.x,a.worldTransform[5]-=b.y),c.visibleCount++,a.vcount=c.visibleCount;for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();var j=a.__renderGroup;j?a==j.root?j.render(this.projection,this.glFramebuffer):j.renderSpecific(a,this.projection,this.glFramebuffer):(this.renderGroup||(this.renderGroup=new c.WebGLRenderGroup(e)),this.renderGroup.setRenderable(a),this.renderGroup.render(this.projection,this.glFramebuffer)),a.worldTransform=g},c.RenderTexture.prototype.renderCanvas=function(a,b,d){var e=a.children;a.worldTransform=c.mat3.create(),b&&(a.worldTransform[2]=b.x,a.worldTransform[5]=b.y);for(var f=0,g=e.length;g>f;f++)e[f].updateTransform();d&&this.renderer.context.clearRect(0,0,this.width,this.height),this.renderer.renderDisplayObject(a),this.renderer.context.setTransform(1,0,0,1,0,0)},c.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)}},c.PolyK={},c.PolyK.Triangulate=function(a){var b=!0,d=a.length>>1;if(3>d)return[];for(var e=[],f=[],g=0;d>g;g++)f.push(g);for(var g=0,h=d;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(c.PolyK._convex(l,m,n,o,p,q,b)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!=i&&t!=j&&t!=k&&c.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)e.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!b)return console.log("PIXI Warning: shape too complex to fill"),[];var e=[];f=[];for(var g=0;d>g;g++)f.push(g);g=0,h=d,b=!1}}return e.push(f[0],f[1],f[2]),e},c.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},c.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0==g},d.Camera=function(a,b,c,e,f,g){this.game=a,this.world=a.world,this.id=0,this.view=new d.Rectangle(c,e,f,g),this.screenView=new d.Rectangle(c,e,f,g),this.bounds=new d.Rectangle(c,e,f,g),this.deadzone=null,this.visible=!0,this.atLimit={x:!1,y:!1},this.target=null,this._edge=0,this.displayObject=null},d.Camera.FOLLOW_LOCKON=0,d.Camera.FOLLOW_PLATFORMER=1,d.Camera.FOLLOW_TOPDOWN=2,d.Camera.FOLLOW_TOPDOWN_TIGHT=3,d.Camera.prototype={follow:function(a,b){"undefined"==typeof b&&(b=d.Camera.FOLLOW_LOCKON),this.target=a;var c;switch(b){case d.Camera.FOLLOW_PLATFORMER:var e=this.width/8,f=this.height/3;this.deadzone=new d.Rectangle((this.width-e)/2,(this.height-f)/2-.25*f,e,f);break;case d.Camera.FOLLOW_TOPDOWN:c=Math.max(this.width,this.height)/4,this.deadzone=new d.Rectangle((this.width-c)/2,(this.height-c)/2,c,c);break;case d.Camera.FOLLOW_TOPDOWN_TIGHT:c=Math.max(this.width,this.height)/8,this.deadzone=new d.Rectangle((this.width-c)/2,(this.height-c)/2,c,c);break;case d.Camera.FOLLOW_LOCKON:this.deadzone=null;break;default:this.deadzone=null}},focusOn:function(a){this.setPosition(Math.round(a.x-this.view.halfWidth),Math.round(a.y-this.view.halfHeight))},focusOnXY:function(a,b){this.setPosition(Math.round(a-this.view.halfWidth),Math.round(b-this.view.halfHeight))},update:function(){this.target&&this.updateTarget(),this.bounds&&this.checkBounds(),this.displayObject.position.x=-this.view.x,this.displayObject.position.y=-this.view.y},updateTarget:function(){this.deadzone?(this._edge=this.target.x-this.deadzone.x,this.view.x>this._edge&&(this.view.x=this._edge),this._edge=this.target.x+this.target.width-this.deadzone.x-this.deadzone.width,this.view.xthis._edge&&(this.view.y=this._edge),this._edge=this.target.y+this.target.height-this.deadzone.y-this.deadzone.height,this.view.ythis.bounds.right-this.width&&(this.atLimit.x=!0,this.view.x=this.bounds.right-this.width+1),this.view.ythis.bounds.bottom-this.height&&(this.atLimit.y=!0,this.view.y=this.bounds.bottom-this.height+1),this.view.floor()},setPosition:function(a,b){this.view.x=a,this.view.y=b,this.bounds&&this.checkBounds()},setSize:function(a,b){this.view.width=a,this.view.height=b}},Object.defineProperty(d.Camera.prototype,"x",{get:function(){return this.view.x},set:function(a){this.view.x=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(d.Camera.prototype,"y",{get:function(){return this.view.y},set:function(a){this.view.y=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(d.Camera.prototype,"width",{get:function(){return this.view.width},set:function(a){this.view.width=a}}),Object.defineProperty(d.Camera.prototype,"height",{get:function(){return this.view.height},set:function(a){this.view.height=a}}),d.State=function(){this.game=null,this.add=null,this.camera=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.particles=null,this.physics=null},d.State.prototype={preload:function(){},loadUpdate:function(){},loadRender:function(){},create:function(){},update:function(){},render:function(){},paused:function(){},destroy:function(){}},d.StateManager=function(a,b){this.game=a,this.states={},this._pendingState=null,null!==b&&(this._pendingState=b),this._created=!1,this.current="",this.onInitCallback=null,this.onPreloadCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPreRenderCallback=null,this.onLoadUpdateCallback=null,this.onLoadRenderCallback=null,this.onPausedCallback=null,this.onShutDownCallback=null},d.StateManager.prototype={boot:function(){this.game.onPause.add(this.pause,this),this.game.onResume.add(this.resume,this),null!==this._pendingState&&("string"==typeof this._pendingState?this.start(this._pendingState,!1,!1):this.add("default",this._pendingState,!0))},add:function(a,b,c){"undefined"==typeof c&&(c=!1);var e;return b instanceof d.State?e=b:"object"==typeof b?(e=b,e.game=this.game):"function"==typeof b&&(e=new b(this.game)),this.states[a]=e,c&&(this.game.isBooted?this.start(a):this._pendingState=a),e},remove:function(a){this.current==a&&(this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onDestroyCallback=null),delete this.states[a]},start:function(a,b,c){return"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!1),this.game.isBooted===!1?(this._pendingState=a,void 0):(this.checkState(a)!==!1&&(this.current&&this.onShutDownCallback.call(this.callbackContext,this.game),b&&(this.game.tweens.removeAll(),this.game.world.destroy(),c===!0&&this.game.cache.destroy()),this.setCurrentState(a),this.onPreloadCallback?(this.game.load.reset(),this.onPreloadCallback.call(this.callbackContext,this.game),0===this.game.load.totalQueuedFiles()?this.game.loadComplete():this.game.load.start()):this.game.loadComplete()),void 0)},dummy:function(){},checkState:function(a){if(this.states[a]){var b=!1;return this.states[a].preload&&(b=!0),b===!1&&this.states[a].loadRender&&(b=!0),b===!1&&this.states[a].loadUpdate&&(b=!0),b===!1&&this.states[a].create&&(b=!0),b===!1&&this.states[a].update&&(b=!0),b===!1&&this.states[a].preRender&&(b=!0),b===!1&&this.states[a].render&&(b=!0),b===!1&&this.states[a].paused&&(b=!0),b===!1?(console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions."),!1):!0}return console.warn("Phaser.StateManager - No state found with the key: "+a),!1},link:function(a){this.states[a].game=this.game,this.states[a].add=this.game.add,this.states[a].camera=this.game.camera,this.states[a].cache=this.game.cache,this.states[a].input=this.game.input,this.states[a].load=this.game.load,this.states[a].math=this.game.math,this.states[a].sound=this.game.sound,this.states[a].stage=this.game.stage,this.states[a].time=this.game.time,this.states[a].tweens=this.game.tweens,this.states[a].world=this.game.world,this.states[a].particles=this.game.particles,this.states[a].physics=this.game.physics,this.states[a].rnd=this.game.rnd},setCurrentState:function(a){this.callbackContext=this.states[a],this.link(a),this.onInitCallback=this.states[a].init||this.dummy,this.onPreloadCallback=this.states[a].preload||null,this.onLoadRenderCallback=this.states[a].loadRender||null,this.onLoadUpdateCallback=this.states[a].loadUpdate||null,this.onCreateCallback=this.states[a].create||null,this.onUpdateCallback=this.states[a].update||null,this.onPreRenderCallback=this.states[a].preRender||null,this.onRenderCallback=this.states[a].render||null,this.onPausedCallback=this.states[a].paused||null,this.onShutDownCallback=this.states[a].shutdown||this.dummy,this.current=a,this._created=!1,this.onInitCallback.call(this.callbackContext,this.game)},loadComplete:function(){this._created===!1&&this.onCreateCallback?(this._created=!0,this.onCreateCallback.call(this.callbackContext,this.game)):this._created=!0},pause:function(){this._created&&this.onPausedCallback&&this.onPausedCallback.call(this.callbackContext,this.game,!0)},resume:function(){this._created&&this.onre&&this.onPausedCallback.call(this.callbackContext,this.game,!1)},update:function(){this._created&&this.onUpdateCallback?this.onUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},preRender:function(){this.onPreRenderCallback&&this.onPreRenderCallback.call(this.callbackContext,this.game)},render:function(){this._created&&this.onRenderCallback?(this.game.renderType===d.CANVAS&&(this.game.context.save(),this.game.context.setTransform(1,0,0,1,0,0)),this.onRenderCallback.call(this.callbackContext,this.game),this.game.renderType===d.CANVAS&&this.game.context.restore()):this.onLoadRenderCallback&&this.onLoadRenderCallback.call(this.callbackContext,this.game)},destroy:function(){this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onDestroyCallback=null,this.game=null,this.states={},this._pendingState=null}},d.LinkedList=function(){this.next=null,this.prev=null,this.first=null,this.last=null,this.total=0},d.LinkedList.prototype={add:function(a){return 0===this.total&&null==this.first&&null==this.last?(this.first=a,this.last=a,this.next=a,a.prev=this,this.total++,a):(this.last.next=a,a.prev=this.last,this.last=a,this.total++,a)},remove:function(a){a==this.first?this.first=this.first.next:a==this.last&&(this.last=this.last.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),a.next=a.prev=null,null==this.first&&(this.last=null),this.total--},callAll:function(a){if(this.first&&this.last){var b=this.first;do b&&b[a]&&b[a].call(b),b=b.next;while(b!=this.last.next)}}},d.Signal=function(){this._bindings=[],this._prevParams=null;var a=this;this.dispatch=function(){d.Signal.prototype.dispatch.apply(a,arguments)}},d.Signal.prototype={memorize:!1,_shouldPropagate:!0,active:!0,validateListener:function(a,b){if("function"!=typeof a)throw new Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}",b))},_registerListener:function(a,b,c,e){var f,g=this._indexOfListener(a,c);if(-1!==g){if(f=this._bindings[g],f.isOnce()!==b)throw new Error("You cannot add"+(b?"":"Once")+"() then add"+(b?"Once":"")+"() the same listener without removing the relationship first.")}else f=new d.SignalBinding(this,a,b,c,e),this._addBinding(f);return this.memorize&&this._prevParams&&f.execute(this._prevParams),f},_addBinding:function(a){var b=this._bindings.length;do--b;while(this._bindings[b]&&a._priority<=this._bindings[b]._priority);this._bindings.splice(b+1,0,a)},_indexOfListener:function(a,b){for(var c,d=this._bindings.length;d--;)if(c=this._bindings[d],c._listener===a&&c.context===b)return d;return-1},has:function(a,b){return-1!==this._indexOfListener(a,b)},add:function(a,b,c){return this.validateListener(a,"add"),this._registerListener(a,!1,b,c)},addOnce:function(a,b,c){return this.validateListener(a,"addOnce"),this._registerListener(a,!0,b,c)},remove:function(a,b){this.validateListener(a,"remove");var c=this._indexOfListener(a,b);return-1!==c&&(this._bindings[c]._destroy(),this._bindings.splice(c,1)),a},removeAll:function(){for(var a=this._bindings.length;a--;)this._bindings[a]._destroy();this._bindings.length=0},getNumListeners:function(){return this._bindings.length},halt:function(){this._shouldPropagate=!1},dispatch:function(){if(this.active){var a,b=Array.prototype.slice.call(arguments),c=this._bindings.length;if(this.memorize&&(this._prevParams=b),c){a=this._bindings.slice(),this._shouldPropagate=!0;do c--;while(a[c]&&this._shouldPropagate&&a[c].execute(b)!==!1)}}},forget:function(){this._prevParams=null},dispose:function(){this.removeAll(),delete this._bindings,delete this._prevParams},toString:function(){return"[Phaser.Signal active:"+this.active+" numListeners:"+this.getNumListeners()+"]"}},d.SignalBinding=function(a,b,c,d,e){this._listener=b,this._isOnce=c,this.context=d,this._signal=a,this._priority=e||0},d.SignalBinding.prototype={active:!0,params:null,execute:function(a){var b,c;return this.active&&this._listener&&(c=this.params?this.params.concat(a):a,b=this._listener.apply(this.context,c),this._isOnce&&this.detach()),b},detach:function(){return this.isBound()?this._signal.remove(this._listener,this.context):null},isBound:function(){return!!this._signal&&!!this._listener},isOnce:function(){return this._isOnce},getListener:function(){return this._listener},getSignal:function(){return this._signal},_destroy:function(){delete this._signal,delete this._listener,delete this.context},toString:function(){return"[Phaser.SignalBinding isOnce:"+this._isOnce+", isBound:"+this.isBound()+", active:"+this.active+"]"}},d.Filter=function(a,b,c){this.game=a,this.type=d.WEBGL_FILTER,this.passes=[this],this.dirty=!0,this.padding=0,this.uniforms={time:{type:"1f",value:0},resolution:{type:"2f",value:{x:256,y:256}},mouse:{type:"2f",value:{x:0,y:0}}},this.fragmentSrc=c||[]},d.Filter.prototype={init:function(){},setResolution:function(a,b){this.uniforms.resolution.value.x=a,this.uniforms.resolution.value.y=b},update:function(a){"undefined"!=typeof a&&(a.x>0&&(this.uniforms.mouse.x=a.x.toFixed(2)),a.y>0&&(this.uniforms.mouse.y=a.y.toFixed(2))),this.uniforms.time.value=this.game.time.totalElapsedSeconds()},destroy:function(){this.game=null}},Object.defineProperty(d.Filter.prototype,"width",{get:function(){return this.uniforms.resolution.value.x},set:function(a){this.uniforms.resolution.value.x=a}}),Object.defineProperty(d.Filter.prototype,"height",{get:function(){return this.uniforms.resolution.value.y},set:function(a){this.uniforms.resolution.value.y=a}}),d.Plugin=function(a,b){"undefined"==typeof b&&(b=null),this.game=a,this.parent=b,this.active=!1,this.visible=!1,this.hasPreUpdate=!1,this.hasUpdate=!1,this.hasPostUpdate=!1,this.hasRender=!1,this.hasPostRender=!1},d.Plugin.prototype={preUpdate:function(){},update:function(){},render:function(){},postRender:function(){},destroy:function(){this.game=null,this.parent=null,this.active=!1,this.visible=!1}},d.PluginManager=function(a,b){this.game=a,this._parent=b,this.plugins=[],this._pluginsLength=0},d.PluginManager.prototype={add:function(a){var b=!1;return"function"==typeof a?a=new a(this.game,this._parent):(a.game=this.game,a.parent=this._parent),"function"==typeof a.preUpdate&&(a.hasPreUpdate=!0,b=!0),"function"==typeof a.update&&(a.hasUpdate=!0,b=!0),"function"==typeof a.postUpdate&&(a.hasPostUpdate=!0,b=!0),"function"==typeof a.render&&(a.hasRender=!0,b=!0),"function"==typeof a.postRender&&(a.hasPostRender=!0,b=!0),b?((a.hasPreUpdate||a.hasUpdate||a.hasPostUpdate)&&(a.active=!0),(a.hasRender||a.hasPostRender)&&(a.visible=!0),this._pluginsLength=this.plugins.push(a),"function"==typeof a.init&&a.init(),a):null},remove:function(a){if(0!==this._pluginsLength)for(this._p=0;this._pthis._nextOffsetCheck&&(d.Canvas.getOffset(this.canvas,this.offset),this._nextOffsetCheck=this.game.time.now+this.checkOffsetInterval)},visibilityChange:function(a){this.disableVisibilityChange||(this.game.paused="pagehide"==a.type||"blur"==a.type||document.hidden===!0||document.webkitHidden===!0?!0:!1)}},Object.defineProperty(d.Stage.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(a){this._backgroundColor=a,this.game.transparent===!1&&(this.game.renderType==d.CANVAS?this.game.canvas.style.backgroundColor=a:("string"==typeof a&&(a=d.Color.hexToRGB(a)),this._stage.setBackgroundColor(a)))}}),d.Group=function(a,b,e,f){("undefined"==typeof b||null===typeof b)&&(b=a.world),"undefined"==typeof f&&(f=!1),this.game=a,this.name=e||"group",f?this._container=this.game.stage._stage:(this._container=new c.DisplayObjectContainer,this._container.name=this.name,b?b instanceof d.Group?(b._container.addChild(this._container),b._container.updateTransform()):(b.addChild(this._container),b.updateTransform()):(this.game.stage._stage.addChild(this._container),this.game.stage._stage.updateTransform())),this.type=d.GROUP,this.exists=!0,this.scale=new d.Point(1,1),this.cursor=null},d.Group.RETURN_NONE=0,d.Group.RETURN_TOTAL=1,d.Group.RETURN_CHILD=2,d.Group.SORT_ASCENDING=-1,d.Group.SORT_DESCENDING=1,d.Group.prototype={add:function(a){return a.group!==this&&(a.group=this,a.events&&a.events.onAddedToGroup.dispatch(a,this),this._container.addChild(a),a.updateTransform(),null===this.cursor&&(this.cursor=a)),a},addAt:function(a,b){return a.group!==this&&(a.group=this,a.events&&a.events.onAddedToGroup.dispatch(a,this),this._container.addChildAt(a,b),a.updateTransform(),null===this.cursor&&(this.cursor=a)),a},getAt:function(a){return this._container.getChildAt(a)},create:function(a,b,c,e,f){"undefined"==typeof f&&(f=!0);var g=new d.Sprite(this.game,a,b,c,e);return g.group=this,g.exists=f,g.visible=f,g.alive=f,g.events&&g.events.onAddedToGroup.dispatch(g,this),this._container.addChild(g),g.updateTransform(),null===this.cursor&&(this.cursor=g),g},createMultiple:function(a,b,c,e){"undefined"==typeof e&&(e=!1);for(var f=0;a>f;f++){var g=new d.Sprite(this.game,0,0,b,c);g.group=this,g.exists=e,g.visible=e,g.alive=e,g.events&&g.events.onAddedToGroup.dispatch(g,this),this._container.addChild(g),g.updateTransform(),null===this.cursor&&(this.cursor=g)}},next:function(){this.cursor&&(this.cursor=this.cursor==this._container.last?this._container._iNext:this.cursor._iNext)},previous:function(){this.cursor&&(this.cursor=this.cursor==this._container._iNext?this._container.last:this.cursor._iPrev)},childTest:function(a,b){var c=a+" next: ";c+=b._iNext?b._iNext.name:"-null-",c=c+" "+a+" prev: ",c+=b._iPrev?b._iPrev.name:"-null-",console.log(c)},swapIndex:function(a,b){var c=this.getAt(a),d=this.getAt(b);console.log("swapIndex ",a," with ",b),this.swap(c,d)},swap:function(a,b){if(a===b||!a.parent||!b.parent||a.group!==this||b.group!==this)return!1;var c=a._iPrev,d=a._iNext,e=b._iPrev,f=b._iNext,g=this._container.last._iNext,h=this.game.stage._stage;do h!==a&&h!==b&&(h.first===a?h.first=b:h.first===b&&(h.first=a),h.last===a?h.last=b:h.last===b&&(h.last=a)),h=h._iNext;while(h!=g);return a._iNext==b?(a._iNext=f,a._iPrev=b,b._iNext=a,b._iPrev=c,c&&(c._iNext=b),f&&(f._iPrev=a),a.__renderGroup&&a.__renderGroup.updateTexture(a),b.__renderGroup&&b.__renderGroup.updateTexture(b),!0):b._iNext==a?(a._iNext=b,a._iPrev=e,b._iNext=d,b._iPrev=a,e&&(e._iNext=a),d&&(d._iPrev=b),a.__renderGroup&&a.__renderGroup.updateTexture(a),b.__renderGroup&&b.__renderGroup.updateTexture(b),!0):(a._iNext=f,a._iPrev=e,b._iNext=d,b._iPrev=c,c&&(c._iNext=b),d&&(d._iPrev=b),e&&(e._iNext=a),f&&(f._iPrev=a),a.__renderGroup&&a.__renderGroup.updateTexture(a),b.__renderGroup&&b.__renderGroup.updateTexture(b),!0)},bringToTop:function(a){return a.group===this&&(this.remove(a),this.add(a)),a},getIndex:function(a){return this._container.children.indexOf(a)},replace:function(a,b){if(this._container.first._iNext){var c=this.getIndex(a);-1!=c&&(void 0!==b.parent&&(b.events.onRemovedFromGroup.dispatch(b,this),b.parent.removeChild(b)),this._container.removeChild(a),this._container.addChildAt(b,c),b.events.onAddedToGroup.dispatch(b,this),b.updateTransform(),this.cursor==a&&(this.cursor=this._container._iNext))}},setProperty:function(a,b,c,d){d=d||0;var e=b.length;1==e?0===d?a[b[0]]=c:1==d?a[b[0]]+=c:2==d?a[b[0]]-=c:3==d?a[b[0]]*=c:4==d&&(a[b[0]]/=c):2==e?0===d?a[b[0]][b[1]]=c:1==d?a[b[0]][b[1]]+=c:2==d?a[b[0]][b[1]]-=c:3==d?a[b[0]][b[1]]*=c:4==d&&(a[b[0]][b[1]]/=c):3==e?0===d?a[b[0]][b[1]][b[2]]=c:1==d?a[b[0]][b[1]][b[2]]+=c:2==d?a[b[0]][b[1]][b[2]]-=c:3==d?a[b[0]][b[1]][b[2]]*=c:4==d&&(a[b[0]][b[1]][b[2]]/=c):4==e&&(0===d?a[b[0]][b[1]][b[2]][b[3]]=c:1==d?a[b[0]][b[1]][b[2]][b[3]]+=c:2==d?a[b[0]][b[1]][b[2]][b[3]]-=c:3==d?a[b[0]][b[1]][b[2]][b[3]]*=c:4==d&&(a[b[0]][b[1]][b[2]][b[3]]/=c))},setAll:function(a,b,c,d,e){if(a=a.split("."),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),e=e||0,this._container.children.length>0&&this._container.first._iNext){var f=this._container.first._iNext;do(c===!1||c&&f.alive)&&(d===!1||d&&f.visible)&&this.setProperty(f,a,b,e),f=f._iNext;while(f!=this._container.last._iNext)}},addAll:function(a,b,c,d){this.setAll(a,b,c,d,1)},subAll:function(a,b,c,d){this.setAll(a,b,c,d,2)},multiplyAll:function(a,b,c,d){this.setAll(a,b,c,d,3)},divideAll:function(a,b,c,d){this.setAll(a,b,c,d,4)},callAllExists:function(a,b){var c=Array.prototype.splice.call(arguments,2);if(this._container.children.length>0&&this._container.first._iNext){var d=this._container.first._iNext;do d.exists==b&&d[a]&&d[a].apply(d,c),d=d._iNext;while(d!=this._container.last._iNext)}},callbackFromArray:function(a,b,c){if(1==c){if(a[b[0]])return a[b[0]]}else if(2==c){if(a[b[0]][b[1]])return a[b[0]][b[1]]}else if(3==c){if(a[b[0]][b[1]][b[2]])return a[b[0]][b[1]][b[2]]}else if(4==c){if(a[b[0]][b[1]][b[2]][b[3]])return a[b[0]][b[1]][b[2]][b[3]]}else if(a[b])return a[b];return!1},callAll:function(a,b){if("undefined"!=typeof a){a=a.split(".");var c=a.length;if("undefined"==typeof b)b=null;else if("string"==typeof b){b=b.split(".");var d=b.length}var e=Array.prototype.splice.call(arguments,2),f=null,g=null;if(this._container.children.length>0&&this._container.first._iNext){var h=this._container.first._iNext;do f=this.callbackFromArray(h,a,c),b&&f?(g=this.callbackFromArray(h,b,d),f&&f.apply(g,e)):f&&f.apply(h,e),h=h._iNext;while(h!=this._container.last._iNext)}}},forEach:function(a,b,c){"undefined"==typeof c&&(c=!1);var d=Array.prototype.splice.call(arguments,3);if(d.unshift(null),this._container.children.length>0&&this._container.first._iNext){var e=this._container.first._iNext;do(c===!1||c&&e.exists)&&(d[0]=e,a.apply(b,d)),e=e._iNext;while(e!=this._container.last._iNext)}},forEachExists:function(a,b){var c=Array.prototype.splice.call(arguments,2);c.unshift(null),this.iterate("exists",!0,d.Group.RETURN_TOTAL,a,b,c)},forEachAlive:function(a,b){var c=Array.prototype.splice.call(arguments,2);c.unshift(null),this.iterate("alive",!0,d.Group.RETURN_TOTAL,a,b,c)},forEachDead:function(a,b){var c=Array.prototype.splice.call(arguments,2);c.unshift(null),this.iterate("alive",!1,d.Group.RETURN_TOTAL,a,b,c)},sort:function(a,b){"undefined"==typeof a&&(a="y"),"undefined"==typeof b&&(b=d.Group.SORT_ASCENDING);var c,e;do{c=!1;for(var f=0,g=this._container.children.length-1;g>f;f++)b==d.Group.SORT_ASCENDING?this._container.children[f][a]>this._container.children[f+1][a]&&(this.swap(this.getAt(f),this.getAt(f+1)),e=this._container.children[f],this._container.children[f]=this._container.children[f+1],this._container.children[f+1]=e,c=!0):this._container.children[f][a]0&&this._container.first._iNext){var i=this._container.first._iNext;do{if(i[a]===b&&(h++,e&&(g[0]=i,e.apply(f,g)),c==d.Group.RETURN_CHILD))return i;i=i._iNext}while(i!=this._container.last._iNext)}return c==d.Group.RETURN_TOTAL?h:c==d.Group.RETURN_CHILD?null:void 0},getFirstExists:function(a){return"boolean"!=typeof a&&(a=!0),this.iterate("exists",a,d.Group.RETURN_CHILD)},getFirstAlive:function(){return this.iterate("alive",!0,d.Group.RETURN_CHILD)},getFirstDead:function(){return this.iterate("alive",!1,d.Group.RETURN_CHILD)},countLiving:function(){return this.iterate("alive",!0,d.Group.RETURN_TOTAL)},countDead:function(){return this.iterate("alive",!1,d.Group.RETURN_TOTAL)},getRandom:function(a,b){return 0===this._container.children.length?null:(a=a||0,b=b||this._container.children.length,this.game.math.getRandom(this._container.children,a,b))},remove:function(a){return a.group!==this?!1:(a.events&&a.events.onRemovedFromGroup.dispatch(a,this),a.parent===this._container&&this._container.removeChild(a),this.cursor==a&&(this.cursor=this._container._iNext?this._container._iNext:null),a.group=null,!0)},removeAll:function(){if(0!==this._container.children.length){do this._container.children[0].events&&this._container.children[0].events.onRemovedFromGroup.dispatch(this._container.children[0],this),this._container.removeChild(this._container.children[0]);while(this._container.children.length>0);this.cursor=null}},removeBetween:function(a,b){if(0!==this._container.children.length){if(a>b||0>a||b>this._container.children.length)return!1;for(var c=a;b>c;c++){var d=this._container.children[c];d.events.onRemovedFromGroup.dispatch(d,this),this._container.removeChild(d),this.cursor==d&&(this.cursor=this._container._iNext?this._container._iNext:null)}}},destroy:function(){this.removeAll(),this._container.parent.removeChild(this._container),this._container=null,this.game=null,this.exists=!1,this.cursor=null},validate:function(){var a=this.game.stage._stage.last._iNext,b=this.game.stage._stage,c=null,d=null,e=0;do{if(e>0){if(b!==c)return console.log("check next fail"),!1;if(b._iPrev!==d)return console.log("check previous fail"),!1}c=b._iNext,d=b,b=b._iNext,e++}while(b!=a);return!0},dump:function(a){"undefined"==typeof a&&(a=!1);var b=20,c="\n"+d.Utils.pad("Node",b)+"|"+d.Utils.pad("Next",b)+"|"+d.Utils.pad("Previous",b)+"|"+d.Utils.pad("First",b)+"|"+d.Utils.pad("Last",b);console.log(c);var c=d.Utils.pad("----------",b)+"|"+d.Utils.pad("----------",b)+"|"+d.Utils.pad("----------",b)+"|"+d.Utils.pad("----------",b)+"|"+d.Utils.pad("----------",b);if(console.log(c),a)var e=this.game.stage._stage.last._iNext,f=this.game.stage._stage;else var e=this._container.last._iNext,f=this._container;do{var g=f.name||"*";if(this.cursor==f)var g="> "+g;var h="-",i="-",j="-",k="-";f._iNext&&(h=f._iNext.name),f._iPrev&&(i=f._iPrev.name),f.first&&(j=f.first.name),f.last&&(k=f.last.name),"undefined"==typeof h&&(h="-"),"undefined"==typeof i&&(i="-"),"undefined"==typeof j&&(j="-"),"undefined"==typeof k&&(k="-");var c=d.Utils.pad(g,b)+"|"+d.Utils.pad(h,b)+"|"+d.Utils.pad(i,b)+"|"+d.Utils.pad(j,b)+"|"+d.Utils.pad(k,b);console.log(c),f=f._iNext}while(f!=e)}},Object.defineProperty(d.Group.prototype,"total",{get:function(){return this.iterate("exists",!0,d.Group.RETURN_TOTAL)}}),Object.defineProperty(d.Group.prototype,"length",{get:function(){return this.iterate("exists",!0,d.Group.RETURN_TOTAL)}}),Object.defineProperty(d.Group.prototype,"x",{get:function(){return this._container.position.x},set:function(a){this._container.position.x=a}}),Object.defineProperty(d.Group.prototype,"y",{get:function(){return this._container.position.y},set:function(a){this._container.position.y=a}}),Object.defineProperty(d.Group.prototype,"angle",{get:function(){return d.Math.radToDeg(this._container.rotation)},set:function(a){this._container.rotation=d.Math.degToRad(a)}}),Object.defineProperty(d.Group.prototype,"rotation",{get:function(){return this._container.rotation},set:function(a){this._container.rotation=a}}),Object.defineProperty(d.Group.prototype,"visible",{get:function(){return this._container.visible},set:function(a){this._container.visible=a}}),Object.defineProperty(d.Group.prototype,"alpha",{get:function(){return this._container.alpha},set:function(a){this._container.alpha=a}}),d.World=function(a){d.Group.call(this,a,null,"__world",!1),this.scale=new d.Point(1,1),this.bounds=new d.Rectangle(0,0,a.width,a.height),this.camera=null,this.currentRenderOrderID=0},d.World.prototype=Object.create(d.Group.prototype),d.World.prototype.constructor=d.World,d.World.prototype.boot=function(){this.camera=new d.Camera(this.game,0,0,0,this.game.width,this.game.height),this.camera.displayObject=this._container,this.game.camera=this.camera},d.World.prototype.update=function(){if(this.currentRenderOrderID=0,this.game.stage._stage.first._iNext){var a,b=this.game.stage._stage.first._iNext;do a=!1,b.preUpdate&&(a=b.preUpdate()===!1),b.update&&(a=b.update()===!1||a),b=a?b.last._iNext:b._iNext;while(b!=this.game.stage._stage.last._iNext)}},d.World.prototype.postUpdate=function(){if(this.game.stage._stage.first._iNext){var a=this.game.stage._stage.first._iNext;do a.postUpdate&&a.postUpdate(),a=a._iNext;while(a!=this.game.stage._stage.last._iNext)}this.camera.update()},d.World.prototype.setBounds=function(a,b,c,d){this.bounds.setTo(a,b,c,d),this.camera.bounds&&this.camera.bounds.setTo(a,b,c,d)},d.World.prototype.destroy=function(){this.camera.x=0,this.camera.y=0,this.game.input.reset(!0),this.removeAll()},Object.defineProperty(d.World.prototype,"width",{get:function(){return this.bounds.width},set:function(a){this.bounds.width=a}}),Object.defineProperty(d.World.prototype,"height",{get:function(){return this.bounds.height},set:function(a){this.bounds.height=a}}),Object.defineProperty(d.World.prototype,"centerX",{get:function(){return this.bounds.halfWidth}}),Object.defineProperty(d.World.prototype,"centerY",{get:function(){return this.bounds.halfHeight}}),Object.defineProperty(d.World.prototype,"randomX",{get:function(){return this.bounds.x<0?this.game.rnd.integerInRange(this.bounds.x,this.bounds.width-Math.abs(this.bounds.x)):this.game.rnd.integerInRange(this.bounds.x,this.bounds.width)}}),Object.defineProperty(d.World.prototype,"randomY",{get:function(){return this.bounds.y<0?this.game.rnd.integerInRange(this.bounds.y,this.bounds.height-Math.abs(this.bounds.y)):this.game.rnd.integerInRange(this.bounds.y,this.bounds.height)}}),Object.defineProperty(d.World.prototype,"visible",{get:function(){return this._container.visible},set:function(a){this._container.visible=a}}),d.Game=function(a,b,c,e,f,g,h){a=a||800,b=b||600,c=c||d.AUTO,e=e||"",f=f||null,"undefined"==typeof g&&(g=!1),"undefined"==typeof h&&(h=!0),this.id=d.GAMES.push(this)-1,this.parent=e,this.width=a,this.height=b,this.transparent=g,this.antialias=h,this.renderer=null,this.state=new d.StateManager(this,f),this._paused=!1,this.renderType=c,this._loadComplete=!1,this.isBooted=!1,this.isRunning=!1,this.raf=null,this.add=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.net=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.physics=null,this.rnd=null,this.device=null,this.camera=null,this.canvas=null,this.context=null,this.debug=null,this.particles=null;var i=this;return this._onBoot=function(){return i.boot()},"complete"===document.readyState||"interactive"===document.readyState?window.setTimeout(this._onBoot,0):(document.addEventListener("DOMContentLoaded",this._onBoot,!1),window.addEventListener("load",this._onBoot,!1)),this},d.Game.prototype={boot:function(){this.isBooted||(document.body?(document.removeEventListener("DOMContentLoaded",this._onBoot),window.removeEventListener("load",this._onBoot),this.onPause=new d.Signal,this.onResume=new d.Signal,this.isBooted=!0,this.device=new d.Device,this.math=d.Math,this.rnd=new d.RandomDataGenerator([(Date.now()*Math.random()).toString()]),this.stage=new d.Stage(this,this.width,this.height),this.setUpRenderer(),this.world=new d.World(this),this.add=new d.GameObjectFactory(this),this.cache=new d.Cache(this),this.load=new d.Loader(this),this.time=new d.Time(this),this.tweens=new d.TweenManager(this),this.input=new d.Input(this),this.sound=new d.SoundManager(this),this.physics=new d.Physics.Arcade(this),this.particles=new d.Particles(this),this.plugins=new d.PluginManager(this,this),this.net=new d.Net(this),this.debug=new d.Utils.Debug(this),this.stage.boot(),this.world.boot(),this.input.boot(),this.sound.boot(),this.state.boot(),this.load.onLoadComplete.add(this.loadComplete,this),this.showDebugHeader(),this.isRunning=!0,this._loadComplete=!1,this.raf=new d.RequestAnimationFrame(this),this.raf.start()):window.setTimeout(this._onBoot,20))},showDebugHeader:function(){var a=d.DEV_VERSION,b="Canvas",c="HTML Audio";if(this.renderType==d.WEBGL?b="WebGL":this.renderType==d.HEADLESS&&(b="Headless"),this.device.webAudio&&(c="WebAudio"),this.device.chrome){var e=["%c %c %c Phaser v"+a+" - Renderer: "+b+" - Audio: "+c+" %c %c ","background: #00bff3","background: #0072bc","color: #ffffff; background: #003471","background: #0072bc","background: #00bff3"];console.log.apply(console,e)}else console.log("Phaser v"+a+" - Renderer: "+b+" - Audio: "+c)},setUpRenderer:function(){if(this.renderType===d.HEADLESS||this.renderType===d.CANVAS||this.renderType===d.AUTO&&this.device.webGL===!1){if(!this.device.canvas)throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting.");this.renderType===d.AUTO&&(this.renderType=d.CANVAS),this.renderer=new c.CanvasRenderer(this.width,this.height,this.stage.canvas,this.transparent),d.Canvas.setSmoothingEnabled(this.renderer.context,this.antialias),this.canvas=this.renderer.view,this.context=this.renderer.context}else this.renderType=d.WEBGL,this.renderer=new c.WebGLRenderer(this.width,this.height,this.stage.canvas,this.transparent,this.antialias),this.canvas=this.renderer.view,this.context=null;d.Canvas.addToDOM(this.renderer.view,this.parent,!0),d.Canvas.setTouchAction(this.renderer.view)},loadComplete:function(){this._loadComplete=!0,this.state.loadComplete()},update:function(a){this.time.update(a),this._paused?(this.renderer.render(this.stage._stage),this.plugins.render(),this.state.render()):(this.plugins.preUpdate(),this.physics.preUpdate(),this.stage.update(),this.input.update(),this.tweens.update(),this.sound.update(),this.world.update(),this.particles.update(),this.state.update(),this.plugins.update(),this.world.postUpdate(),this.plugins.postUpdate(),this.renderType!==d.HEADLESS&&(this.renderer.render(this.stage._stage),this.plugins.render(),this.state.render(),this.plugins.postRender()))},destroy:function(){this.raf.stop(),this.input.destroy(),this.state.destroy(),this.state=null,this.cache=null,this.input=null,this.load=null,this.sound=null,this.stage=null,this.time=null,this.world=null,this.isBooted=!1}},Object.defineProperty(d.Game.prototype,"paused",{get:function(){return this._paused},set:function(a){a===!0?this._paused===!1&&(this._paused=!0,this.onPause.dispatch(this)):this._paused&&(this._paused=!1,this.onResume.dispatch(this))}}),d.Input=function(a){this.game=a,this.hitCanvas=null,this.hitContext=null},d.Input.MOUSE_OVERRIDES_TOUCH=0,d.Input.TOUCH_OVERRIDES_MOUSE=1,d.Input.MOUSE_TOUCH_COMBINE=2,d.Input.prototype={pollRate:0,_pollCounter:0,_oldPosition:null,_x:0,_y:0,disabled:!1,multiInputOverride:d.Input.MOUSE_TOUCH_COMBINE,position:null,speed:null,circle:null,scale:null,maxPointers:10,currentPointers:0,tapRate:200,doubleTapRate:300,holdRate:2e3,justPressedRate:200,justReleasedRate:200,recordPointerHistory:!1,recordRate:100,recordLimit:100,pointer1:null,pointer2:null,pointer3:null,pointer4:null,pointer5:null,pointer6:null,pointer7:null,pointer8:null,pointer9:null,pointer10:null,activePointer:null,mousePointer:null,mouse:null,keyboard:null,touch:null,mspointer:null,onDown:null,onUp:null,onTap:null,onHold:null,interactiveItems:new d.LinkedList,boot:function(){this.mousePointer=new d.Pointer(this.game,0),this.pointer1=new d.Pointer(this.game,1),this.pointer2=new d.Pointer(this.game,2),this.mouse=new d.Mouse(this.game),this.keyboard=new d.Keyboard(this.game),this.touch=new d.Touch(this.game),this.mspointer=new d.MSPointer(this.game),this.onDown=new d.Signal,this.onUp=new d.Signal,this.onTap=new d.Signal,this.onHold=new d.Signal,this.scale=new d.Point(1,1),this.speed=new d.Point,this.position=new d.Point,this._oldPosition=new d.Point,this.circle=new d.Circle(0,0,44),this.activePointer=this.mousePointer,this.currentPointers=0,this.hitCanvas=document.createElement("canvas"),this.hitCanvas.width=1,this.hitCanvas.height=1,this.hitContext=this.hitCanvas.getContext("2d"),this.mouse.start(),this.keyboard.start(),this.touch.start(),this.mspointer.start(),this.mousePointer.active=!0},destroy:function(){this.mouse.stop(),this.keyboard.stop(),this.touch.stop(),this.mspointer.stop()},addPointer:function(){for(var a=0,b=10;b>0;b--)null===this["pointer"+b]&&(a=b);return 0===a?(console.warn("You can only have 10 Pointer objects"),null):(this["pointer"+a]=new d.Pointer(this.game,a),this["pointer"+a])},update:function(){return this.pollRate>0&&this._pollCounter=b;b++)this["pointer"+b]&&this["pointer"+b].reset();this.currentPointers=0,this.game.stage.canvas.style.cursor="default",a===!0&&(this.onDown.dispose(),this.onUp.dispose(),this.onTap.dispose(),this.onHold.dispose(),this.onDown=new d.Signal,this.onUp=new d.Signal,this.onTap=new d.Signal,this.onHold=new d.Signal,this.interactiveItems.callAll("reset")),this._pollCounter=0}},resetSpeed:function(a,b){this._oldPosition.setTo(a,b),this.speed.setTo(0,0)},startPointer:function(a){if(this.maxPointers<10&&this.totalActivePointers==this.maxPointers)return null;if(this.pointer1.active===!1)return this.pointer1.start(a);if(this.pointer2.active===!1)return this.pointer2.start(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active===!1)return this["pointer"+b].start(a);return null},updatePointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.move(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.move(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].move(a);return null},stopPointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.stop(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.stop(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].stop(a);return null},getPointer:function(a){if(a=a||!1,this.pointer1.active==a)return this.pointer1;if(this.pointer2.active==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active==a)return this["pointer"+b];return null},getPointerFromIdentifier:function(a){if(this.pointer1.identifier==a)return this.pointer1;if(this.pointer2.identifier==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].identifier==a)return this["pointer"+b];return null}},Object.defineProperty(d.Input.prototype,"x",{get:function(){return this._x},set:function(a){this._x=Math.floor(a)}}),Object.defineProperty(d.Input.prototype,"y",{get:function(){return this._y},set:function(a){this._y=Math.floor(a)}}),Object.defineProperty(d.Input.prototype,"pollLocked",{get:function(){return this.pollRate>0&&this._pollCounter=a;a++)this["pointer"+a]&&this["pointer"+a].active&&this.currentPointers++;return this.currentPointers}}),Object.defineProperty(d.Input.prototype,"worldX",{get:function(){return this.game.camera.view.x+this.x}}),Object.defineProperty(d.Input.prototype,"worldY",{get:function(){return this.game.camera.view.y+this.y}}),d.Key=function(a,b){this.game=a,this.isDown=!1,this.isUp=!1,this.altKey=!1,this.ctrlKey=!1,this.shiftKey=!1,this.timeDown=0,this.duration=0,this.timeUp=0,this.repeats=0,this.keyCode=b,this.onDown=new d.Signal,this.onUp=new d.Signal},d.Key.prototype={processKeyDown:function(a){this.altKey=a.altKey,this.ctrlKey=a.ctrlKey,this.shiftKey=a.shiftKey,this.isDown?(this.duration=a.timeStamp-this.timeDown,this.repeats++):(this.isDown=!0,this.isUp=!1,this.timeDown=a.timeStamp,this.duration=0,this.repeats=0,this.onDown.dispatch(this))},processKeyUp:function(a){this.isDown=!1,this.isUp=!0,this.timeUp=a.timeStamp,this.onUp.dispatch(this)},justPressed:function(a){return"undefined"==typeof a&&(a=250),this.isDown&&this.duration=this.game.input.holdRate&&((this.game.input.multiInputOverride==d.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==d.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==d.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&this.game.input.onHold.dispatch(this),this._holdSent=!0),this.game.input.recordPointerHistory&&this.game.time.now>=this._nextDrop&&(this._nextDrop=this.game.time.now+this.game.input.recordRate,this._history.push({x:this.position.x,y:this.position.y}),this._history.length>this.game.input.recordLimit&&this._history.shift()))},move:function(a){if(!this.game.input.pollLocked){if("undefined"!=typeof a.button&&(this.button=a.button),this.clientX=a.clientX,this.clientY=a.clientY,this.pageX=a.pageX,this.pageY=a.pageY,this.screenX=a.screenX,this.screenY=a.screenY,this.x=(this.pageX-this.game.stage.offset.x)*this.game.input.scale.x,this.y=(this.pageY-this.game.stage.offset.y)*this.game.input.scale.y,this.position.setTo(this.x,this.y),this.circle.x=this.x,this.circle.y=this.y,(this.game.input.multiInputOverride==d.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==d.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==d.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.activePointer=this,this.game.input.x=this.x,this.game.input.y=this.y,this.game.input.position.setTo(this.game.input.x,this.game.input.y),this.game.input.circle.x=this.game.input.x,this.game.input.circle.y=this.game.input.y),this.game.paused)return this;if(null!==this.targetObject&&this.targetObject.isDragged===!0)return this.targetObject.update(this)===!1&&(this.targetObject=null),this;if(this._highestRenderOrderID=-1,this._highestRenderObject=null,this._highestInputPriorityID=-1,this.game.input.interactiveItems.total>0){var b=this.game.input.interactiveItems.next;do(b.pixelPerfect||b.priorityID>this._highestInputPriorityID||b.priorityID==this._highestInputPriorityID&&b.sprite.renderOrderID>this._highestRenderOrderID)&&b.checkPointerOver(this)&&(this._highestRenderOrderID=b.sprite.renderOrderID,this._highestInputPriorityID=b.priorityID,this._highestRenderObject=b),b=b.next;while(null!=b)}return null==this._highestRenderObject?this.targetObject&&(this.targetObject._pointerOutHandler(this),this.targetObject=null):null==this.targetObject?(this.targetObject=this._highestRenderObject,this._highestRenderObject._pointerOverHandler(this)):this.targetObject==this._highestRenderObject?this._highestRenderObject.update(this)===!1&&(this.targetObject=null):(this.targetObject._pointerOutHandler(this),this.targetObject=this._highestRenderObject,this.targetObject._pointerOverHandler(this)),this}},leave:function(a){this.withinGame=!1,this.move(a)},stop:function(a){if(this._stateReset)return a.preventDefault(),void 0;if(this.timeUp=this.game.time.now,(this.game.input.multiInputOverride==d.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==d.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==d.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.onUp.dispatch(this,a),this.duration>=0&&this.duration<=this.game.input.tapRate&&(this.timeUp-this.previousTapTime0&&(this.active=!1),this.withinGame=!1,this.isDown=!1,this.isUp=!0,this.isMouse===!1&&this.game.input.currentPointers--,this.game.input.interactiveItems.total>0){var b=this.game.input.interactiveItems.next;do b&&b._releasedHandler(this),b=b.next;while(null!=b)}return this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null,this},justPressed:function(a){return a=a||this.game.input.justPressedRate,this.isDown===!0&&this.timeDown+a>this.game.time.now},justReleased:function(a){return a=a||this.game.input.justReleasedRate,this.isUp===!0&&this.timeUp+a>this.game.time.now},reset:function(){this.isMouse===!1&&(this.active=!1),this.identifier=null,this.isDown=!1,this.isUp=!0,this.totalTouches=0,this._holdSent=!1,this._history.length=0,this._stateReset=!0,this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null}},Object.defineProperty(d.Pointer.prototype,"duration",{get:function(){return this.isUp?-1:this.game.time.now-this.timeDown}}),Object.defineProperty(d.Pointer.prototype,"worldX",{get:function(){return this.game.world.camera.x+this.x}}),Object.defineProperty(d.Pointer.prototype,"worldY",{get:function(){return this.game.world.camera.y+this.y}}),d.Touch=function(a){this.game=a,this.disabled=!1,this.callbackContext=this.game,this.touchStartCallback=null,this.touchMoveCallback=null,this.touchEndCallback=null,this.touchEnterCallback=null,this.touchLeaveCallback=null,this.touchCancelCallback=null,this.preventDefault=!0,this.event=null,this._onTouchStart=null,this._onTouchMove=null,this._onTouchEnd=null,this._onTouchEnter=null,this._onTouchLeave=null,this._onTouchCancel=null,this._onTouchMove=null},d.Touch.prototype={start:function(){var a=this;this.game.device.touch&&(this._onTouchStart=function(b){return a.onTouchStart(b)},this._onTouchMove=function(b){return a.onTouchMove(b)},this._onTouchEnd=function(b){return a.onTouchEnd(b)},this._onTouchEnter=function(b){return a.onTouchEnter(b)},this._onTouchLeave=function(b){return a.onTouchLeave(b)},this._onTouchCancel=function(b){return a.onTouchCancel(b)},this.game.renderer.view.addEventListener("touchstart",this._onTouchStart,!1),this.game.renderer.view.addEventListener("touchmove",this._onTouchMove,!1),this.game.renderer.view.addEventListener("touchend",this._onTouchEnd,!1),this.game.renderer.view.addEventListener("touchenter",this._onTouchEnter,!1),this.game.renderer.view.addEventListener("touchleave",this._onTouchLeave,!1),this.game.renderer.view.addEventListener("touchcancel",this._onTouchCancel,!1))},consumeDocumentTouches:function(){this._documentTouchMove=function(a){a.preventDefault()},document.addEventListener("touchmove",this._documentTouchMove,!1)},onTouchStart:function(a){if(this.event=a,this.touchStartCallback&&this.touchStartCallback.call(this.callbackContext,a),!this.game.input.disabled&&!this.disabled){this.preventDefault&&a.preventDefault();for(var b=0;bc;c++)this._pointerData[c]={id:c,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1};this.snapOffset=new d.Point,this.enabled=!0,this.sprite.events&&null==this.sprite.events.onInputOver&&(this.sprite.events.onInputOver=new d.Signal,this.sprite.events.onInputOut=new d.Signal,this.sprite.events.onInputDown=new d.Signal,this.sprite.events.onInputUp=new d.Signal,this.sprite.events.onDragStart=new d.Signal,this.sprite.events.onDragStop=new d.Signal)}return this.sprite},reset:function(){this.enabled=!1;for(var a=0;10>a;a++)this._pointerData[a]={id:a,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1}},stop:function(){this.enabled!==!1&&(this.enabled=!1,this.game.input.interactiveItems.remove(this))},destroy:function(){this.enabled&&(this.enabled=!1,this.game.input.interactiveItems.remove(this),this.stop(),this.sprite=null)},pointerX:function(a){return a=a||0,this._pointerData[a].x},pointerY:function(a){return a=a||0,this._pointerData[a].y},pointerDown:function(a){return a=a||0,this._pointerData[a].isDown},pointerUp:function(a){return a=a||0,this._pointerData[a].isUp},pointerTimeDown:function(a){return a=a||0,this._pointerData[a].timeDown},pointerTimeUp:function(a){return a=a||0,this._pointerData[a].timeUp},pointerOver:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOver;for(var b=0;10>b;b++)if(this._pointerData[b].isOver)return!0}return!1},pointerOut:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOut;for(var b=0;10>b;b++)if(this._pointerData[b].isOut)return!0}return!1},pointerTimeOver:function(a){return a=a||0,this._pointerData[a].timeOver},pointerTimeOut:function(a){return a=a||0,this._pointerData[a].timeOut},pointerDragged:function(a){return a=a||0,this._pointerData[a].isDragged},checkPointerOver:function(a){return this.enabled===!1||this.sprite.visible===!1||this.sprite.group&&this.sprite.group.visible===!1?!1:(this.sprite.getLocalUnmodifiedPosition(this._tempPoint,a.x,a.y),this._tempPoint.x>=0&&this._tempPoint.x<=this.sprite.currentFrame.width&&this._tempPoint.y>=0&&this._tempPoint.y<=this.sprite.currentFrame.height?this.pixelPerfect?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:void 0)},checkPixel:function(a,b){if(this.sprite.texture.baseTexture.source){this.game.input.hitContext.clearRect(0,0,1,1),a+=this.sprite.texture.frame.x,b+=this.sprite.texture.frame.y,this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source,a,b,1,1,0,0,1,1);var c=this.game.input.hitContext.getImageData(0,0,1,1);if(c.data[3]>=this.pixelPerfectAlpha)return!0}return!1},update:function(a){return this.enabled===!1||this.sprite.visible===!1||this.sprite.group&&this.sprite.group.visible===!1?(this._pointerOutHandler(a),!1):this.draggable&&this._draggedPointerID==a.id?this.updateDrag(a):this._pointerData[a.id].isOver===!0?this.checkPointerOver(a)?(this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,!0):(this._pointerOutHandler(a),!1):void 0},_pointerOverHandler:function(a){this._pointerData[a.id].isOver===!1&&(this._pointerData[a.id].isOver=!0,this._pointerData[a.id].isOut=!1,this._pointerData[a.id].timeOver=this.game.time.now,this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.stage.canvas.style.cursor="pointer"),this.sprite.events.onInputOver.dispatch(this.sprite,a))},_pointerOutHandler:function(a){this._pointerData[a.id].isOver=!1,this._pointerData[a.id].isOut=!0,this._pointerData[a.id].timeOut=this.game.time.now,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.stage.canvas.style.cursor="default"),this.sprite&&this.sprite.events&&this.sprite.events.onInputOut.dispatch(this.sprite,a)},_touchedHandler:function(a){return this._pointerData[a.id].isDown===!1&&this._pointerData[a.id].isOver===!0&&(this._pointerData[a.id].isDown=!0,this._pointerData[a.id].isUp=!1,this._pointerData[a.id].timeDown=this.game.time.now,this.sprite.events.onInputDown.dispatch(this.sprite,a),this.draggable&&this.isDragged===!1&&this.startDrag(a),this.bringToTop&&this.sprite.bringToTop()),this.consumePointerEvent},_releasedHandler:function(a){this._pointerData[a.id].isDown&&a.isUp&&(this._pointerData[a.id].isDown=!1,this._pointerData[a.id].isUp=!0,this._pointerData[a.id].timeUp=this.game.time.now,this._pointerData[a.id].downDuration=this._pointerData[a.id].timeUp-this._pointerData[a.id].timeDown,this.checkPointerOver(a)?this.sprite.events.onInputUp.dispatch(this.sprite,a):this.useHandCursor&&(this.game.stage.canvas.style.cursor="default"),this.draggable&&this.isDragged&&this._draggedPointerID==a.id&&this.stopDrag(a))},updateDrag:function(a){return a.isUp?(this.stopDrag(a),!1):(this.allowHorizontalDrag&&(this.sprite.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.x=Math.round(this.sprite.x/this.snapX)*this.snapX,this.sprite.y=Math.round(this.sprite.y/this.snapY)*this.snapY),!0)},justOver:function(a,b){return a=a||0,b=b||500,this._pointerData[a].isOver&&this.overDuration(a)a;a++)this._pointerData[a].isDragged=!1;this.draggable=!1,this.isDragged=!1,this._draggedPointerID=-1},startDrag:function(a){this.isDragged=!0,this._draggedPointerID=a.id,this._pointerData[a.id].isDragged=!0,this.dragFromCenter?(this.sprite.centerOn(a.x,a.y),this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y)):this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y),this.updateDrag(a),this.bringToTop&&this.sprite.bringToTop(),this.sprite.events.onDragStart.dispatch(this.sprite,a)},stopDrag:function(a){this.isDragged=!1,this._draggedPointerID=-1,this._pointerData[a.id].isDragged=!1,this.snapOnRelease&&(this.sprite.x=Math.round(this.sprite.x/this.snapX)*this.snapX,this.sprite.y=Math.round(this.sprite.y/this.snapY)*this.snapY),this.sprite.events.onDragStop.dispatch(this.sprite,a),this.sprite.events.onInputUp.dispatch(this.sprite,a),this.checkPointerOver(a)===!1&&this._pointerOutHandler(a)},setDragLock:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!0),this.allowHorizontalDrag=a,this.allowVerticalDrag=b},enableSnap:function(a,b,c,d){"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!1),this.snapX=a,this.snapY=b,this.snapOnDrag=c,this.snapOnRelease=d},disableSnap:function(){this.snapOnDrag=!1,this.snapOnRelease=!1},checkBoundsRect:function(){this.sprite.xthis.boundsRect.right&&(this.sprite.x=this.boundsRect.right-this.sprite.width),this.sprite.ythis.boundsRect.bottom&&(this.sprite.y=this.boundsRect.bottom-this.sprite.height)},checkBoundsSprite:function(){this.sprite.xthis.boundsSprite.x+this.boundsSprite.width&&(this.sprite.x=this.boundsSprite.x+this.boundsSprite.width-this.sprite.width),this.sprite.ythis.boundsSprite.y+this.boundsSprite.height&&(this.sprite.y=this.boundsSprite.y+this.boundsSprite.height-this.sprite.height)}},d.Events=function(a){this.parent=a,this.onAddedToGroup=new d.Signal,this.onRemovedFromGroup=new d.Signal,this.onKilled=new d.Signal,this.onRevived=new d.Signal,this.onOutOfBounds=new d.Signal,this.onInputOver=null,this.onInputOut=null,this.onInputDown=null,this.onInputUp=null,this.onDragStart=null,this.onDragStop=null,this.onAnimationStart=null,this.onAnimationComplete=null,this.onAnimationLoop=null},d.Events.prototype={destroy:function(){this.parent=null,this.onAddedToGroup.dispose(),this.onRemovedFromGroup.dispose(),this.onKilled.dispose(),this.onRevived.dispose(),this.onOutOfBounds.dispose(),this.onInputOver&&(this.onInputOver.dispose(),this.onInputOut.dispose(),this.onInputDown.dispose(),this.onInputUp.dispose(),this.onDragStart.dispose(),this.onDragStop.dispose()),this.onAnimationStart&&(this.onAnimationStart.dispose(),this.onAnimationComplete.dispose(),this.onAnimationLoop.dispose())}},d.GameObjectFactory=function(a){this.game=a,this.world=this.game.world},d.GameObjectFactory.prototype={existing:function(a){return this.world.add(a)},sprite:function(a,b,c,d){return this.world.create(a,b,c,d)},child:function(a,b,c,d,e){return a.create(b,c,d,e)},tween:function(a){return this.game.tweens.create(a)},group:function(a,b){return new d.Group(this.game,a,b)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,b,c,e,f,g){return this.world.add(new d.TileSprite(this.game,a,b,c,e,f,g))},text:function(a,b,c,e){return this.world.add(new d.Text(this.game,a,b,c,e))},button:function(a,b,c,e,f,g,h,i){return this.world.add(new d.Button(this.game,a,b,c,e,f,g,h,i))},graphics:function(a,b){return this.world.add(new d.Graphics(this.game,a,b))},emitter:function(a,b,c){return this.game.particles.add(new d.Particles.Arcade.Emitter(this.game,a,b,c))},bitmapText:function(a,b,c,e){return this.world.add(new d.BitmapText(this.game,a,b,c,e))},tilemap:function(a){return new d.Tilemap(this.game,a)},tileset:function(a){return this.game.cache.getTileset(a)},tilemapLayer:function(a,b,c,e,f,g,h){return this.world.add(new d.TilemapLayer(this.game,a,b,c,e,f,g,h))},renderTexture:function(a,b,c){var e=new d.RenderTexture(this.game,a,b,c);return this.game.cache.addRenderTexture(a,e),e},bitmapData:function(a,b){return new d.BitmapData(this.game,a,b)},filter:function(a){var b=Array.prototype.splice.call(arguments,1),a=new d.Filter[a](this.game);return a.init.apply(a,b),a}},d.BitmapData=function(a,b,e){"undefined"==typeof b&&(b=256),"undefined"==typeof e&&(e=256),this.game=a,this.name="",this.width=b,this.height=e,this.canvas=d.Canvas.create(b,e),this.context=this.canvas.getContext("2d"),this.imageData=this.context.getImageData(0,0,b,e),this.pixels=this.imageData.data.buffer?this.imageData.data.buffer:this.imageData.data,this.baseTexture=new c.BaseTexture(this.canvas),this.texture=new c.Texture(this.baseTexture),this.textureFrame=new d.Frame(0,0,0,b,e,"bitmapData",a.rnd.uuid()),this.type=d.BITMAPDATA,this._dirty=!1},d.BitmapData.prototype={add:function(a){a.loadTexture(this)},addTo:function(a){for(var b=0;b=0&&a<=this.width&&b>=0&&b<=this.height&&(this.pixels[b*this.width+a]=f<<24|e<<16|d<<8|c,this.context.putImageData(this.imageData,0,0),this._dirty=!0)},setPixel:function(a,b,c,d,e){this.setPixel32(a,b,c,d,e,255)},getPixel:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixel32:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixels:function(a){return this.context.getImageData(a.x,a.y,a.width,a.height)},arc:function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=!1),this._dirty=!0,this.context.arc(a,b,c,d,e,f),this},arcTo:function(a,b,c,d,e){return this._dirty=!0,this.context.arcTo(a,b,c,d,e),this},beginFill:function(a){return this.fillStyle(a),this},beginLinearGradientFill:function(a,b,c,d,e,f){for(var g=this.createLinearGradient(c,d,e,f),h=0,i=a.length;i>h;h++)g.addColorStop(b[h],a[h]);return this.fillStyle(g),this},beginLinearGradientStroke:function(a,b,c,d,e,f){for(var g=this.createLinearGradient(c,d,e,f),h=0,i=a.length;i>h;h++)g.addColorStop(b[h],a[h]);return this.strokeStyle(g),this},beginRadialGradientStroke:function(a,b,c,d,e,f,g,h){for(var i=this.createRadialGradient(c,d,e,f,g,h),j=0,k=a.length;k>j;j++)i.addColorStop(b[j],a[j]);return this.strokeStyle(i),this},beginPath:function(){return this.context.beginPath(),this},beginStroke:function(a){return this.strokeStyle(a),this},bezierCurveTo:function(a,b,c,d,e,f){return this._dirty=!0,this.context.bezierCurveTo(a,b,c,d,e,f),this},circle:function(a,b,c){return this.arc(a,b,c,0,2*Math.PI),this},clearRect:function(a,b,c,d){return this._dirty=!0,this.context.clearRect(a,b,c,d),this},clip:function(){return this._dirty=!0,this.context.clip(),this},closePath:function(){return this._dirty=!0,this.context.closePath(),this},createLinearGradient:function(a,b,c,d){return this.context.createLinearGradient(a,b,c,d)},createRadialGradient:function(a,b,c,d,e,f){return this.context.createRadialGradient(a,b,c,d,e,f)},ellipse:function(a,b,c,d){var e=.5522848,f=c/2*e,g=d/2*e,h=a+c,i=b+d,j=a+c/2,k=b+d/2;return this.moveTo(a,k),this.bezierCurveTo(a,k-g,j-f,b,j,b),this.bezierCurveTo(j+f,b,h,k-g,h,k),this.bezierCurveTo(h,k+g,j+f,i,j,i),this.bezierCurveTo(j-f,i,a,k+g,a,k),this},fill:function(){return this._dirty=!0,this.context.fill(),this},fillRect:function(a,b,c,d){return this._dirty=!0,this.context.fillRect(a,b,c,d),this},fillStyle:function(a){return this.context.fillStyle=a,this},font:function(a){return this.context.font=a,this},globalAlpha:function(a){return this.context.globalAlpha=a,this},globalCompositeOperation:function(a){return this.context.globalCompositeOperation=a,this},lineCap:function(a){return this.context.lineCap=a,this},lineDashOffset:function(a){return this.context.lineDashOffset=a,this},lineJoin:function(a){return this.context.lineJoin=a,this},lineWidth:function(a){return this.context.lineWidth=a,this},miterLimit:function(a){return this.context.miterLimit=a,this},lineTo:function(a,b){return this._dirty=!0,this.context.lineTo(a,b),this},moveTo:function(a,b){return this.context.moveTo(a,b),this},quadraticCurveTo:function(a,b,c,d){return this._dirty=!0,this.context.quadraticCurveTo(a,b,c,d),this},rect:function(a,b,c,d){return this._dirty=!0,this.context.rect(a,b,c,d),this},restore:function(){return this._dirty=!0,this.context.restore(),this},rotate:function(a){return this._dirty=!0,this.context.rotate(a),this},setStrokeStyle:function(a,b,c,d,e){return"undefined"==typeof a&&(a=1),"undefined"==typeof b&&(b="butt"),"undefined"==typeof c&&(c="miter"),"undefined"==typeof d&&(d=10),e=!1,this.lineWidth(a),this.lineCap(b),this.lineJoin(c),this.miterLimit(d),this},save:function(){return this._dirty=!0,this.context.save(),this},scale:function(a,b){return this._dirty=!0,this.context.scale(a,b),this},scrollPathIntoView:function(){return this._dirty=!0,this.context.scrollPathIntoView(),this},stroke:function(){return this._dirty=!0,this.context.stroke(),this},strokeRect:function(a,b,c,d){return this._dirty=!0,this.context.strokeRect(a,b,c,d),this},strokeStyle:function(a){return this.context.strokeStyle=a,this},render:function(){this._dirty&&(this.game.renderType==d.WEBGL&&c.texturesToUpdate.push(this.baseTexture),this._dirty=!1)}},d.BitmapData.prototype.mt=d.BitmapData.prototype.moveTo,d.BitmapData.prototype.lt=d.BitmapData.prototype.lineTo,d.BitmapData.prototype.at=d.BitmapData.prototype.arcTo,d.BitmapData.prototype.bt=d.BitmapData.prototype.bezierCurveTo,d.BitmapData.prototype.qt=d.BitmapData.prototype.quadraticCurveTo,d.BitmapData.prototype.a=d.BitmapData.prototype.arc,d.BitmapData.prototype.r=d.BitmapData.prototype.rect,d.BitmapData.prototype.cp=d.BitmapData.prototype.closePath,d.BitmapData.prototype.c=d.BitmapData.prototype.clear,d.BitmapData.prototype.f=d.BitmapData.prototype.beginFill,d.BitmapData.prototype.lf=d.BitmapData.prototype.beginLinearGradientFill,d.BitmapData.prototype.rf=d.BitmapData.prototype.beginRadialGradientFill,d.BitmapData.prototype.ef=d.BitmapData.prototype.endFill,d.BitmapData.prototype.ss=d.BitmapData.prototype.setStrokeStyle,d.BitmapData.prototype.s=d.BitmapData.prototype.beginStroke,d.BitmapData.prototype.ls=d.BitmapData.prototype.beginLinearGradientStroke,d.BitmapData.prototype.rs=d.BitmapData.prototype.beginRadialGradientStroke,d.BitmapData.prototype.dr=d.BitmapData.prototype.rect,d.BitmapData.prototype.dc=d.BitmapData.prototype.circle,d.BitmapData.prototype.de=d.BitmapData.prototype.ellipse,d.Sprite=function(a,b,e,f,g){b=b||0,e=e||0,f=f||null,g=g||null,this.game=a,this.exists=!0,this.alive=!0,this.group=null,this.name="",this.type=d.SPRITE,this.renderOrderID=-1,this.lifespan=0,this.events=new d.Events(this),this.animations=new d.AnimationManager(this),this.input=new d.InputHandler(this),this.key=f,this.currentFrame=null,f instanceof d.RenderTexture?(c.Sprite.call(this,f),this.currentFrame=this.game.cache.getTextureFrame(f.name)):f instanceof d.BitmapData?(c.Sprite.call(this,f.texture,f.textureFrame),this.currentFrame=f.textureFrame):f instanceof c.Texture?(c.Sprite.call(this,f),this.currentFrame=g):(null===f||"undefined"==typeof f?(f="__default",this.key=f):"string"==typeof f&&this.game.cache.checkImageKey(f)===!1&&(f="__missing",this.key=f),c.Sprite.call(this,c.TextureCache[f]),this.game.cache.isSpriteSheet(f)?(this.animations.loadFrameData(this.game.cache.getFrameData(f)),null!==g&&("string"==typeof g?this.frameName=g:this.frame=g)):this.currentFrame=this.game.cache.getFrame(f)),this.textureRegion=new d.Rectangle(this.texture.frame.x,this.texture.frame.y,this.texture.frame.width,this.texture.frame.height),this.anchor=new d.Point,this.x=b,this.y=e,this.position.x=b,this.position.y=e,this.world=new d.Point(b,e),this.autoCull=!1,this.scale=new d.Point(1,1),this._cache={dirty:!1,a00:-1,a01:-1,a02:-1,a10:-1,a11:-1,a12:-1,id:-1,i01:-1,i10:-1,idi:-1,left:null,right:null,top:null,bottom:null,prevX:b,prevY:e,x:-1,y:-1,scaleX:1,scaleY:1,width:this.currentFrame.sourceSizeW,height:this.currentFrame.sourceSizeH,halfWidth:Math.floor(this.currentFrame.sourceSizeW/2),halfHeight:Math.floor(this.currentFrame.sourceSizeH/2),calcWidth:-1,calcHeight:-1,frameID:-1,frameWidth:this.currentFrame.width,frameHeight:this.currentFrame.height,cameraVisible:!0,cropX:0,cropY:0,cropWidth:this.currentFrame.sourceSizeW,cropHeight:this.currentFrame.sourceSizeH},this.offset=new d.Point,this.center=new d.Point(b+Math.floor(this._cache.width/2),e+Math.floor(this._cache.height/2)),this.topLeft=new d.Point(b,e),this.topRight=new d.Point(b+this._cache.width,e),this.bottomRight=new d.Point(b+this._cache.width,e+this._cache.height),this.bottomLeft=new d.Point(b,e+this._cache.height),this.bounds=new d.Rectangle(b,e,this._cache.width,this._cache.height),this.body=new d.Physics.Arcade.Body(this),this.health=1,this.inWorld=d.Rectangle.intersects(this.bounds,this.game.world.bounds),this.inWorldThreshold=0,this.outOfBoundsKill=!1,this._outOfBoundsFired=!1,this.fixedToCamera=!1,this.cameraOffset=new d.Point,this.crop=new d.Rectangle(0,0,this._cache.width,this._cache.height),this.cropEnabled=!1,this.updateCache(),this.updateBounds() +},d.Sprite.prototype=Object.create(c.Sprite.prototype),d.Sprite.prototype.constructor=d.Sprite,d.Sprite.prototype.preUpdate=function(){return!this.exists||this.group&&!this.group.exists?(this.renderOrderID=-1,!1):this.lifespan>0&&(this.lifespan-=this.game.time.elapsed,this.lifespan<=0)?(this.kill(),!1):(this._cache.dirty=!1,this.visible&&(this.renderOrderID=this.game.world.currentRenderOrderID++),this.updateCache(),this.updateAnimation(),this.updateCrop(),(this._cache.dirty||this.world.x!==this._cache.prevX||this.world.y!==this._cache.prevY)&&this.updateBounds(),this.body&&this.body.preUpdate(),!0)},d.Sprite.prototype.updateCache=function(){this._cache.prevX=this.world.x,this._cache.prevY=this.world.y,this.fixedToCamera&&(this.x=this.game.camera.view.x+this.cameraOffset.x,this.y=this.game.camera.view.y+this.cameraOffset.y),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),(this.worldTransform[1]!=this._cache.i01||this.worldTransform[3]!=this._cache.i10||this.worldTransform[0]!=this._cache.a00||this.worldTransform[41]!=this._cache.a11)&&(this._cache.a00=this.worldTransform[0],this._cache.a01=this.worldTransform[1],this._cache.a10=this.worldTransform[3],this._cache.a11=this.worldTransform[4],this._cache.i01=this.worldTransform[1],this._cache.i10=this.worldTransform[3],this._cache.scaleX=Math.sqrt(this._cache.a00*this._cache.a00+this._cache.a01*this._cache.a01),this._cache.scaleY=Math.sqrt(this._cache.a10*this._cache.a10+this._cache.a11*this._cache.a11),this._cache.a01*=-1,this._cache.a10*=-1,this._cache.id=1/(this._cache.a00*this._cache.a11+this._cache.a01*-this._cache.a10),this._cache.idi=1/(this._cache.a00*this._cache.a11+this._cache.i01*-this._cache.i10),this._cache.dirty=!0),this._cache.a02=this.worldTransform[2],this._cache.a12=this.worldTransform[5]},d.Sprite.prototype.updateAnimation=function(){(this.animations.update()||this.currentFrame&&this.currentFrame.uuid!=this._cache.frameID)&&(this._cache.frameID=this.currentFrame.uuid,this._cache.frameWidth=this.texture.frame.width,this._cache.frameHeight=this.texture.frame.height,this._cache.width=this.currentFrame.width,this._cache.height=this.currentFrame.height,this._cache.halfWidth=Math.floor(this._cache.width/2),this._cache.halfHeight=Math.floor(this._cache.height/2),this._cache.dirty=!0)},d.Sprite.prototype.updateCrop=function(){!this.cropEnabled||this.crop.width==this._cache.cropWidth&&this.crop.height==this._cache.cropHeight&&this.crop.x==this._cache.cropX&&this.crop.y==this._cache.cropY||(this.crop.floorAll(),this._cache.cropX=this.crop.x,this._cache.cropY=this.crop.y,this._cache.cropWidth=this.crop.width,this._cache.cropHeight=this.crop.height,this.texture.frame=this.crop,this.texture.width=this.crop.width,this.texture.height=this.crop.height,this.texture.updateFrame=!0,c.Texture.frameUpdates.push(this.texture))},d.Sprite.prototype.updateBounds=function(){this.offset.setTo(this._cache.a02-this.anchor.x*this.width,this._cache.a12-this.anchor.y*this.height),this.getLocalPosition(this.center,this.offset.x+this.width/2,this.offset.y+this.height/2),this.getLocalPosition(this.topLeft,this.offset.x,this.offset.y),this.getLocalPosition(this.topRight,this.offset.x+this.width,this.offset.y),this.getLocalPosition(this.bottomLeft,this.offset.x,this.offset.y+this.height),this.getLocalPosition(this.bottomRight,this.offset.x+this.width,this.offset.y+this.height),this._cache.left=d.Math.min(this.topLeft.x,this.topRight.x,this.bottomLeft.x,this.bottomRight.x),this._cache.right=d.Math.max(this.topLeft.x,this.topRight.x,this.bottomLeft.x,this.bottomRight.x),this._cache.top=d.Math.min(this.topLeft.y,this.topRight.y,this.bottomLeft.y,this.bottomRight.y),this._cache.bottom=d.Math.max(this.topLeft.y,this.topRight.y,this.bottomLeft.y,this.bottomRight.y),this.bounds.setTo(this._cache.left,this._cache.top,this._cache.right-this._cache.left,this._cache.bottom-this._cache.top),this.updateFrame=!0,this.inWorld===!1?(this.inWorld=d.Rectangle.intersects(this.bounds,this.game.world.bounds,this.inWorldThreshold),this.inWorld&&(this._outOfBoundsFired=!1)):(this.inWorld=d.Rectangle.intersects(this.bounds,this.game.world.bounds,this.inWorldThreshold),this.inWorld===!1&&(this.events.onOutOfBounds.dispatch(this),this._outOfBoundsFired=!0,this.outOfBoundsKill&&this.kill())),this._cache.cameraVisible=d.Rectangle.intersects(this.game.world.camera.screenView,this.bounds,0),this.autoCull&&(this.renderable=this._cache.cameraVisible),this.body&&this.body.updateBounds(this.center.x,this.center.y,this._cache.scaleX,this._cache.scaleY)},d.Sprite.prototype.getLocalPosition=function(a,b,c){return a.x=(this._cache.a11*this._cache.id*b+-this._cache.a01*this._cache.id*c+(this._cache.a12*this._cache.a01-this._cache.a02*this._cache.a11)*this._cache.id)*this.scale.x+this._cache.a02,a.y=(this._cache.a00*this._cache.id*c+-this._cache.a10*this._cache.id*b+(-this._cache.a12*this._cache.a00+this._cache.a02*this._cache.a10)*this._cache.id)*this.scale.y+this._cache.a12,a},d.Sprite.prototype.getLocalUnmodifiedPosition=function(a,b,c){return a.x=this._cache.a11*this._cache.idi*b+-this._cache.i01*this._cache.idi*c+(this._cache.a12*this._cache.i01-this._cache.a02*this._cache.a11)*this._cache.idi+this.anchor.x*this._cache.width,a.y=this._cache.a00*this._cache.idi*c+-this._cache.i10*this._cache.idi*b+(-this._cache.a12*this._cache.a00+this._cache.a02*this._cache.i10)*this._cache.idi+this.anchor.y*this._cache.height,a},d.Sprite.prototype.resetCrop=function(){this.crop=new d.Rectangle(0,0,this._cache.width,this._cache.height),this.texture.setFrame(this.crop),this.cropEnabled=!1},d.Sprite.prototype.postUpdate=function(){this.key instanceof d.BitmapData&&this.key._dirty&&this.key.render(),this.exists&&(this.body&&this.body.postUpdate(),this.fixedToCamera?(this._cache.x=this.game.camera.view.x+this.cameraOffset.x,this._cache.y=this.game.camera.view.y+this.cameraOffset.y):(this._cache.x=this.x,this._cache.y=this.y),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.position.x=this._cache.x,this.position.y=this._cache.y)},d.Sprite.prototype.loadTexture=function(a,b){this.key=a,a instanceof d.RenderTexture?this.currentFrame=this.game.cache.getTextureFrame(a.name):a instanceof d.BitmapData?(this.setTexture(a.texture),this.currentFrame=a.textureFrame):a instanceof c.Texture?this.currentFrame=b:(("undefined"==typeof a||this.game.cache.checkImageKey(a)===!1)&&(a="__default",this.key=a),this.game.cache.isSpriteSheet(a)?(this.animations.loadFrameData(this.game.cache.getFrameData(a)),"undefined"!=typeof b&&("string"==typeof b?this.frameName=b:this.frame=b)):(this.currentFrame=this.game.cache.getFrame(a),this.setTexture(c.TextureCache[a])))},d.Sprite.prototype.centerOn=function(a,b){return this.x=a+(this.x-this.center.x),this.y=b+(this.y-this.center.y),this},d.Sprite.prototype.revive=function(a){return"undefined"==typeof a&&(a=1),this.alive=!0,this.exists=!0,this.visible=!0,this.health=a,this.events&&this.events.onRevived.dispatch(this),this},d.Sprite.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},d.Sprite.prototype.destroy=function(){this.group&&this.group.remove(this),this.input&&this.input.destroy(),this.events&&this.events.destroy(),this.animations&&this.animations.destroy(),this.alive=!1,this.exists=!1,this.visible=!1,this.game=null},d.Sprite.prototype.damage=function(a){return this.alive&&(this.health-=a,this.health<0&&this.kill()),this},d.Sprite.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.x=a,this.y=b,this.position.x=this.x,this.position.y=this.y,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(),this},d.Sprite.prototype.bringToTop=function(){return this.group?this.group.bringToTop(this):this.game.world.bringToTop(this),this},d.Sprite.prototype.play=function(a,b,c,d){return this.animations?this.animations.play(a,b,c,d):void 0},Object.defineProperty(d.Sprite.prototype,"angle",{get:function(){return d.Math.wrapAngle(d.Math.radToDeg(this.rotation))},set:function(a){this.rotation=d.Math.degToRad(d.Math.wrapAngle(a))}}),Object.defineProperty(d.Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){this.animations.frame=a}}),Object.defineProperty(d.Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){this.animations.frameName=a}}),Object.defineProperty(d.Sprite.prototype,"inCamera",{get:function(){return this._cache.cameraVisible}}),Object.defineProperty(d.Sprite.prototype,"width",{get:function(){return this.scale.x*this.currentFrame.width},set:function(a){this.scale.x=a/this.currentFrame.width,this._cache.scaleX=a/this.currentFrame.width,this._width=a}}),Object.defineProperty(d.Sprite.prototype,"height",{get:function(){return this.scale.y*this.currentFrame.height},set:function(a){this.scale.y=a/this.currentFrame.height,this._cache.scaleY=a/this.currentFrame.height,this._height=a}}),Object.defineProperty(d.Sprite.prototype,"inputEnabled",{get:function(){return this.input.enabled},set:function(a){console.log("inputEnabled",a,this.input),a?this.input.enabled===!1&&this.input.start():this.input.enabled&&this.input.stop()}}),d.TileSprite=function(a,b,e,f,g,h,i){b=b||0,e=e||0,f=f||256,g=g||256,h=h||null,i=i||null,d.Sprite.call(this,a,b,e,h,i),this.texture=c.TextureCache[h],c.TilingSprite.call(this,this.texture,f,g),this.type=d.TILESPRITE,this.tileScale=new d.Point(1,1),this.tilePosition=new d.Point(0,0)},d.TileSprite.prototype=d.Utils.extend(!0,c.TilingSprite.prototype,d.Sprite.prototype),d.TileSprite.prototype.constructor=d.TileSprite,d.Text=function(a,b,e,f,g){b=b||0,e=e||0,f=f||"",g=g||"",this.game=a,this.exists=!0,this.alive=!0,this.group=null,this.name="",this.type=d.TEXT,this._text=f,this._style=g,c.Text.call(this,f,g),this.position.x=this.x=b,this.position.y=this.y=e,this.anchor=new d.Point,this.scale=new d.Point(1,1),this._cache={dirty:!1,a00:1,a01:0,a02:b,a10:0,a11:1,a12:e,id:1,x:-1,y:-1,scaleX:1,scaleY:1},this._cache.x=this.x,this._cache.y=this.y,this.renderable=!0},d.Text.prototype=Object.create(c.Text.prototype),d.Text.prototype.constructor=d.Text,d.Text.prototype.update=function(){this.exists&&(this._cache.dirty=!1,this._cache.x=this.x,this._cache.y=this.y,(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=!0))},d.Text.prototype.destroy=function(){this.group&&this.group.remove(this),this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null),this.exists=!1,this.group=null},Object.defineProperty(d.Text.prototype,"angle",{get:function(){return d.Math.radToDeg(this.rotation)},set:function(a){this.rotation=d.Math.degToRad(a)}}),Object.defineProperty(d.Text.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(d.Text.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),Object.defineProperty(d.Text.prototype,"content",{get:function(){return this._text},set:function(a){a!==this._text&&(this._text=a,this.setText(a))}}),Object.defineProperty(d.Text.prototype,"font",{get:function(){return this._style},set:function(a){a!==this._style&&(this._style=a,this.setStyle(a))}}),d.BitmapText=function(a,b,e,f,g){b=b||0,e=e||0,f=f||"",g=g||"",this.game=a,this.exists=!0,this.alive=!0,this.group=null,this.name="",this.type=d.BITMAPTEXT,c.BitmapText.call(this,f,g),this.position.x=b,this.position.y=e,this.anchor=new d.Point,this.scale=new d.Point(1,1),this._cache={dirty:!1,a00:1,a01:0,a02:b,a10:0,a11:1,a12:e,id:1,x:-1,y:-1,scaleX:1,scaleY:1},this._cache.x=this.x,this._cache.y=this.y,this.renderable=!0},d.BitmapText.prototype=Object.create(c.BitmapText.prototype),d.BitmapText.prototype.constructor=d.BitmapText,d.BitmapText.prototype.update=function(){this.exists&&(this._cache.dirty=!1,this._cache.x=this.x,this._cache.y=this.y,(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=!0),this.pivot.x=this.anchor.x*this.width,this.pivot.y=this.anchor.y*this.height)},d.BitmapText.prototype.destroy=function(){this.group&&this.group.remove(this),this.canvas&&this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null),this.exists=!1,this.group=null},Object.defineProperty(d.BitmapText.prototype,"angle",{get:function(){return d.Math.radToDeg(this.rotation)},set:function(a){this.rotation=d.Math.degToRad(a)}}),Object.defineProperty(d.BitmapText.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(d.BitmapText.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),d.Button=function(a,b,c,e,f,g,h,i,j){b=b||0,c=c||0,e=e||null,f=f||null,g=g||this,d.Sprite.call(this,a,b,c,e,i),this.type=d.BUTTON,this._onOverFrameName=null,this._onOutFrameName=null,this._onDownFrameName=null,this._onUpFrameName=null,this._onOverFrameID=null,this._onOutFrameID=null,this._onDownFrameID=null,this._onUpFrameID=null,this.onOverSound=null,this.onOutSound=null,this.onDownSound=null,this.onUpSound=null,this.onOverSoundMarker="",this.onOutSoundMarker="",this.onDownSoundMarker="",this.onUpSoundMarker="",this.onInputOver=new d.Signal,this.onInputOut=new d.Signal,this.onInputDown=new d.Signal,this.onInputUp=new d.Signal,this.freezeFrames=!1,this.forceOut=!0,this.setFrames(h,i,j),null!==f&&this.onInputUp.add(f,g),this.input.start(0,!0),this.events.onInputOver.add(this.onInputOverHandler,this),this.events.onInputOut.add(this.onInputOutHandler,this),this.events.onInputDown.add(this.onInputDownHandler,this),this.events.onInputUp.add(this.onInputUpHandler,this)},d.Button.prototype=Object.create(d.Sprite.prototype),d.Button.prototype=d.Utils.extend(!0,d.Button.prototype,d.Sprite.prototype,c.Sprite.prototype),d.Button.prototype.constructor=d.Button,d.Button.prototype.setFrames=function(a,b,c){null!==a&&("string"==typeof a?(this._onOverFrameName=a,this.input.pointerOver()&&(this.frameName=a)):(this._onOverFrameID=a,this.input.pointerOver()&&(this.frame=a))),null!==b&&("string"==typeof b?(this._onOutFrameName=b,this._onUpFrameName=b,this.input.pointerOver()===!1&&(this.frameName=b)):(this._onOutFrameID=b,this._onUpFrameID=b,this.input.pointerOver()===!1&&(this.frame=b))),null!==c&&("string"==typeof c?(this._onDownFrameName=c,this.input.pointerDown()&&(this.frameName=c)):(this._onDownFrameID=c,this.input.pointerDown()&&(this.frame=c)))},d.Button.prototype.setSounds=function(a,b,c,d,e,f,g,h){this.setOverSound(a,b),this.setOutSound(e,f),this.setUpSound(g,h),this.setDownSound(c,d)},d.Button.prototype.setOverSound=function(a,b){this.onOverSound=null,this.onOverSoundMarker="",a instanceof d.Sound&&(this.onOverSound=a),"string"==typeof b&&(this.onOverSoundMarker=b)},d.Button.prototype.setOutSound=function(a,b){this.onOutSound=null,this.onOutSoundMarker="",a instanceof d.Sound&&(this.onOutSound=a),"string"==typeof b&&(this.onOutSoundMarker=b)},d.Button.prototype.setUpSound=function(a,b){this.onUpSound=null,this.onUpSoundMarker="",a instanceof d.Sound&&(this.onUpSound=a),"string"==typeof b&&(this.onUpSoundMarker=b)},d.Button.prototype.setDownSound=function(a,b){this.onDownSound=null,this.onDownSoundMarker="",a instanceof d.Sound&&(this.onDownSound=a),"string"==typeof b&&(this.onDownSoundMarker=b)},d.Button.prototype.onInputOverHandler=function(a){this.freezeFrames===!1&&(null!=this._onOverFrameName?this.frameName=this._onOverFrameName:null!=this._onOverFrameID&&(this.frame=this._onOverFrameID)),this.onOverSound&&this.onOverSound.play(this.onOverSoundMarker),this.onInputOver&&this.onInputOver.dispatch(this,a)},d.Button.prototype.onInputOutHandler=function(a){this.freezeFrames===!1&&(null!=this._onOutFrameName?this.frameName=this._onOutFrameName:null!=this._onOutFrameID&&(this.frame=this._onOutFrameID)),this.onOutSound&&this.onOutSound.play(this.onOutSoundMarker),this.onInputOut&&this.onInputOut.dispatch(this,a)},d.Button.prototype.onInputDownHandler=function(a){this.freezeFrames===!1&&(null!=this._onDownFrameName?this.frameName=this._onDownFrameName:null!=this._onDownFrameID&&(this.frame=this._onDownFrameID)),this.onDownSound&&this.onDownSound.play(this.onDownSoundMarker),this.onInputDown&&this.onInputDown.dispatch(this,a)},d.Button.prototype.onInputUpHandler=function(a){this.freezeFrames===!1&&(null!=this._onUpFrameName?this.frameName=this._onUpFrameName:null!=this._onUpFrameID&&(this.frame=this._onUpFrameID)),this.onUpSound&&this.onUpSound.play(this.onUpSoundMarker),this.forceOut&&this.freezeFrames===!1&&(null!=this._onOutFrameName?this.frameName=this._onOutFrameName:null!=this._onOutFrameID&&(this.frame=this._onOutFrameID)),this.onInputUp&&this.onInputUp.dispatch(this,a)},d.Graphics=function(a,b,e){this.game=a,c.Graphics.call(this),this.type=d.GRAPHICS,this.position.x=b,this.position.y=e},d.Graphics.prototype=Object.create(c.Graphics.prototype),d.Graphics.prototype.constructor=d.Graphics,d.Graphics.prototype.destroy=function(){this.clear(),this.group&&this.group.remove(this),this.game=null},d.Graphics.prototype.drawPolygon=function(a){this.moveTo(a.points[0].x,a.points[0].y);for(var b=1;bh;h++)f[h].updateTransform();var j=a.__renderGroup;j?a==j.root?j.render(this.projection,this.glFramebuffer):j.renderSpecific(a,this.projection,this.glFramebuffer):(this.renderGroup||(this.renderGroup=new c.WebGLRenderGroup(e)),this.renderGroup.setRenderable(a),this.renderGroup.render(this.projection,this.glFramebuffer)),a.worldTransform=g},d.RenderTexture.prototype.renderCanvas=function(a,b,d){var e=a.children;a.worldTransform=c.mat3.create(),b&&(a.worldTransform[2]=b.x,a.worldTransform[5]=b.y);for(var f=0,g=e.length;g>f;f++)e[f].updateTransform();d&&this.renderer.context.clearRect(0,0,this.width,this.height),this.renderer.renderDisplayObject(a),this.renderer.context.setTransform(1,0,0,1,0,0)},d.Canvas={create:function(a,b){a=a||256,b=b||256;var c=document.createElement("canvas");return c.width=a,c.height=b,c.style.display="block",c},getOffset:function(a,b){b=b||new d.Point;var c=a.getBoundingClientRect(),e=a.clientTop||document.body.clientTop||0,f=a.clientLeft||document.body.clientLeft||0,g=window.pageYOffset||a.scrollTop||document.body.scrollTop,h=window.pageXOffset||a.scrollLeft||document.body.scrollLeft;return b.x=c.left+h-f,b.y=c.top+g-e,b},getAspectRatio:function(a){return a.width/a.height},setBackgroundColor:function(a,b){return b=b||"rgb(0,0,0)",a.style.backgroundColor=b,a},setTouchAction:function(a,b){return b=b||"none",a.style.msTouchAction=b,a.style["ms-touch-action"]=b,a.style["touch-action"]=b,a},setUserSelect:function(a,b){return b=b||"none",a.style["-webkit-touch-callout"]=b,a.style["-webkit-user-select"]=b,a.style["-khtml-user-select"]=b,a.style["-moz-user-select"]=b,a.style["-ms-user-select"]=b,a.style["user-select"]=b,a.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",a},addToDOM:function(a,b,c){var d;return"undefined"==typeof c&&(c=!0),b&&("string"==typeof b?d=document.getElementById(b):"object"==typeof b&&1===b.nodeType&&(d=b),c&&(d.style.overflow="hidden")),d||(d=document.body),d.appendChild(a),a},setTransform:function(a,b,c,d,e,f,g){return a.setTransform(d,f,g,e,b,c),a},setSmoothingEnabled:function(a,b){return a.imageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.oImageSmoothingEnabled=b,a.webkitImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b,a},setImageRenderingCrisp:function(a){return a.style["image-rendering"]="crisp-edges",a.style["image-rendering"]="-moz-crisp-edges",a.style["image-rendering"]="-webkit-optimize-contrast",a.style.msInterpolationMode="nearest-neighbor",a},setImageRenderingBicubic:function(a){return a.style["image-rendering"]="auto",a.style.msInterpolationMode="bicubic",a}},d.StageScaleMode=function(a,b,c){this.game=a,this.width=b,this.height=c,this.minWidth=null,this.maxWidth=null,this.minHeight=null,this.maxHeight=null,this._startHeight=0,this.forceLandscape=!1,this.forcePortrait=!1,this.incorrectOrientation=!1,this.pageAlignHorizontally=!1,this.pageAlignVertically=!1,this._width=0,this._height=0,this.maxIterations=5,this.orientationSprite=null,this.enterLandscape=new d.Signal,this.enterPortrait=new d.Signal,this.enterIncorrectOrientation=new d.Signal,this.leaveIncorrectOrientation=new d.Signal,this.hasResized=new d.Signal,this.orientation=window.orientation?window.orientation:window.outerWidth>window.outerHeight?90:0,this.scaleFactor=new d.Point(1,1),this.scaleFactorInversed=new d.Point(1,1),this.margin=new d.Point(0,0),this.aspectRatio=0,this.event=null;var e=this;window.addEventListener("orientationchange",function(a){return e.checkOrientation(a)},!1),window.addEventListener("resize",function(a){return e.checkResize(a)},!1),document.addEventListener("webkitfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("mozfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("fullscreenchange",function(a){return e.fullScreenChange(a)},!1)},d.StageScaleMode.EXACT_FIT=0,d.StageScaleMode.NO_SCALE=1,d.StageScaleMode.SHOW_ALL=2,d.StageScaleMode.prototype={startFullScreen:function(a){if(!this.isFullScreen){"undefined"!=typeof a&&d.Canvas.setSmoothingEnabled(this.game.context,a);var b=this.game.canvas;this._width=this.width,this._height=this.height,console.log("startFullScreen",this._width,this._height),b.requestFullScreen?b.requestFullScreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.webkitRequestFullScreen&&b.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}},stopFullScreen:function(){document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()},fullScreenChange:function(a){this.event=a,this.isFullScreen?(this.game.stage.canvas.style.width="100%",this.game.stage.canvas.style.height="100%",this.setMaximum(),this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height):(this.game.stage.canvas.style.width=this.game.width+"px",this.game.stage.canvas.style.height=this.game.height+"px",this.width=this._width,this.height=this._height,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height)},forceOrientation:function(a,b,d){"undefined"==typeof b&&(b=!1),this.forceLandscape=a,this.forcePortrait=b,"undefined"!=typeof d&&((null==d||this.game.cache.checkImageKey(d)===!1)&&(d="__default"),this.orientationSprite=new c.Sprite(c.TextureCache[d]),this.orientationSprite.anchor.x=.5,this.orientationSprite.anchor.y=.5,this.orientationSprite.position.x=this.game.width/2,this.orientationSprite.position.y=this.game.height/2,this.checkOrientationState(),this.incorrectOrientation?(this.orientationSprite.visible=!0,this.game.world.visible=!1):(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.game.stage._stage.addChild(this.orientationSprite))},checkOrientationState:function(){this.incorrectOrientation?(this.forceLandscape&&window.innerWidth>window.innerHeight||this.forcePortrait&&window.innerHeight>window.innerWidth)&&(this.game.paused=!1,this.incorrectOrientation=!1,this.leaveIncorrectOrientation.dispatch(),this.orientationSprite&&(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.refresh()):(this.forceLandscape&&window.innerWidthwindow.outerHeight?90:0,this.isLandscape?this.enterLandscape.dispatch(this.orientation,!0,!1):this.enterPortrait.dispatch(this.orientation,!1,!0),this.game.stage.scaleMode!==d.StageScaleMode.NO_SCALE&&this.refresh(),this.checkOrientationState()},refresh:function(){if(this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),null==this._check&&this.maxIterations>0){this._iterations=this.maxIterations;var a=this;this._check=window.setInterval(function(){return a.setScreenSize()},10),this.setScreenSize()}},setScreenSize:function(a){"undefined"==typeof a&&(a=!1),this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),this._iterations--,(a||window.innerHeight>this._startHeight||this._iterations<0)&&(document.documentElement.style.minHeight=window.innerHeight+"px",this.incorrectOrientation===!0?this.setMaximum():this.game.stage.scaleMode==d.StageScaleMode.EXACT_FIT?this.setExactFit():this.game.stage.scaleMode==d.StageScaleMode.SHOW_ALL&&this.setShowAll(),this.setSize(),clearInterval(this._check),this._check=null)},setSize:function(){this.incorrectOrientation===!1&&(this.maxWidth&&this.width>this.maxWidth&&(this.width=this.maxWidth),this.maxHeight&&this.height>this.maxHeight&&(this.height=this.maxHeight),this.minWidth&&this.widththis.maxWidth?this.maxWidth:a,this.height=this.maxHeight&&b>this.maxHeight?this.maxHeight:b}},Object.defineProperty(d.StageScaleMode.prototype,"isFullScreen",{get:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement}}),Object.defineProperty(d.StageScaleMode.prototype,"isPortrait",{get:function(){return 0===this.orientation||180==this.orientation}}),Object.defineProperty(d.StageScaleMode.prototype,"isLandscape",{get:function(){return 90===this.orientation||-90===this.orientation}}),d.Device=function(){this.patchAndroidClearRectBug=!1,this.desktop=!1,this.iOS=!1,this.cocoonJS=!1,this.android=!1,this.chromeOS=!1,this.linux=!1,this.macOS=!1,this.windows=!1,this.canvas=!1,this.file=!1,this.fileSystem=!1,this.localStorage=!1,this.webGL=!1,this.worker=!1,this.touch=!1,this.mspointer=!1,this.css3D=!1,this.pointerLock=!1,this.typedArray=!1,this.arora=!1,this.chrome=!1,this.epiphany=!1,this.firefox=!1,this.ie=!1,this.ieVersion=0,this.mobileSafari=!1,this.midori=!1,this.opera=!1,this.safari=!1,this.webApp=!1,this.audioData=!1,this.webAudio=!1,this.ogg=!1,this.opus=!1,this.mp3=!1,this.wav=!1,this.m4a=!1,this.webm=!1,this.iPhone=!1,this.iPhone4=!1,this.iPad=!1,this.pixelRatio=0,this.littleEndian=!1,this._checkAudio(),this._checkBrowser(),this._checkCSS3D(),this._checkDevice(),this._checkFeatures(),this._checkOS() +},d.Device.prototype={_checkOS:function(){var a=navigator.userAgent;/Android/.test(a)?this.android=!0:/CrOS/.test(a)?this.chromeOS=!0:/iP[ao]d|iPhone/i.test(a)?this.iOS=!0:/Linux/.test(a)?this.linux=!0:/Mac OS/.test(a)?this.macOS=!0:/Windows/.test(a)&&(this.windows=!0),(this.windows||this.macOS||this.linux)&&(this.desktop=!0)},_checkFeatures:function(){this.canvas=!!window.CanvasRenderingContext2D;try{this.localStorage=!!localStorage.getItem}catch(a){this.localStorage=!1}this.file=!!(window.File&&window.FileReader&&window.FileList&&window.Blob),this.fileSystem=!!window.requestFileSystem,this.webGL=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}(),this.webGL=null===this.webGL||this.webGL===!1?!1:!0,this.worker=!!window.Worker,("ontouchstart"in document.documentElement||window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>1)&&(this.touch=!0),(window.navigator.msPointerEnabled||window.navigator.pointerEnabled)&&(this.mspointer=!0),this.pointerLock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document},_checkBrowser:function(){var a=navigator.userAgent;/Arora/.test(a)?this.arora=!0:/Chrome/.test(a)?this.chrome=!0:/Epiphany/.test(a)?this.epiphany=!0:/Firefox/.test(a)?this.firefox=!0:/Mobile Safari/.test(a)?this.mobileSafari=!0:/MSIE (\d+\.\d+);/.test(a)?(this.ie=!0,this.ieVersion=parseInt(RegExp.$1,10)):/Midori/.test(a)?this.midori=!0:/Opera/.test(a)?this.opera=!0:/Safari/.test(a)&&(this.safari=!0),navigator.standalone&&(this.webApp=!0),navigator.isCocoonJS&&(this.cocoonJS=!0)},_checkAudio:function(){this.audioData=!!window.Audio,this.webAudio=!(!window.webkitAudioContext&&!window.AudioContext);var a=document.createElement("audio"),b=!1;try{(b=!!a.canPlayType)&&(a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,"")&&(this.ogg=!0),a.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,"")&&(this.opus=!0),a.canPlayType("audio/mpeg;").replace(/^no$/,"")&&(this.mp3=!0),a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,"")&&(this.wav=!0),(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;").replace(/^no$/,""))&&(this.m4a=!0),a.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")&&(this.webm=!0))}catch(c){}},_checkDevice:function(){this.pixelRatio=window.devicePixelRatio||1,this.iPhone=-1!=navigator.userAgent.toLowerCase().indexOf("iphone"),this.iPhone4=2==this.pixelRatio&&this.iPhone,this.iPad=-1!=navigator.userAgent.toLowerCase().indexOf("ipad"),"undefined"!=typeof Int8Array?(this.littleEndian=new Int8Array(new Int16Array([1]).buffer)[0]>0,this.typedArray=!0):(this.littleEndian=!1,this.typedArray=!1)},_checkCSS3D:function(){var a,b=document.createElement("p"),c={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.insertBefore(b,null);for(var d in c)void 0!==b.style[d]&&(b.style[d]="translate3d(1px,1px,1px)",a=window.getComputedStyle(b).getPropertyValue(c[d]));document.body.removeChild(b),this.css3D=void 0!==a&&a.length>0&&"none"!==a},canPlayAudio:function(a){return"mp3"==a&&this.mp3?!0:"ogg"==a&&(this.ogg||this.opus)?!0:"m4a"==a&&this.m4a?!0:"wav"==a&&this.wav?!0:"webm"==a&&this.webm?!0:!1},isConsoleOpen:function(){return window.console&&window.console.firebug?!0:window.console?(console.profile(),console.profileEnd(),console.clear&&console.clear(),console.profiles.length>0):!1}},d.RequestAnimationFrame=function(a){this.game=a,this.isRunning=!1;for(var b=["ms","moz","webkit","o"],c=0;c>>0,b-=d,b*=d,d=b>>>0,b-=d,d+=4294967296*b;return 2.3283064365386963e-10*(d>>>0)},integer:function(){return 4294967296*this.rnd.apply(this)},frac:function(){return this.rnd.apply(this)+1.1102230246251565e-16*(0|2097152*this.rnd.apply(this))},real:function(){return this.integer()+this.frac()},integerInRange:function(a,b){return Math.floor(this.realInRange(a,b))},realInRange:function(a,b){return this.frac()*(b-a)+a},normal:function(){return 1-2*this.frac()},uuid:function(){var a="",b="";for(b=a="";a++<36;b+=~a%5|4&3*a?(15^a?8^this.frac()*(20^a?16:4):4).toString(16):"-");return b},pick:function(a){return a[this.integerInRange(0,a.length)]},weightedPick:function(a){return a[~~(Math.pow(this.frac(),2)*a.length)]},timestamp:function(a,b){return this.realInRange(a||9466848e5,b||1577862e6)},angle:function(){return this.integerInRange(-180,180)}},d.Math={PI2:2*Math.PI,fuzzyEqual:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),Math.abs(a-b)a},fuzzyGreaterThan:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),a>b-c},fuzzyCeil:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.ceil(a-b)},fuzzyFloor:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.floor(a+b)},average:function(){for(var a=[],b=0;b0?Math.floor(a):Math.ceil(a)},shear:function(a){return a%1},snapTo:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.round(a/b),c+a)},snapToFloor:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.floor(a/b),c+a)},snapToCeil:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.ceil(a/b),c+a)},snapToInArray:function(a,b,c){if("undefined"==typeof c&&(c=!0),c&&b.sort(),a=f-a?f:e},roundTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.round(a*d)/d},floorTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.floor(a*d)/d},ceilTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.ceil(a*d)/d},interpolateFloat:function(a,b,c){return(b-a)*c+a},angleBetween:function(a,b,c,d){return Math.atan2(d-b,c-a)},normalizeAngle:function(a,b){"undefined"==typeof b&&(b=!0);var c=b?Math.PI:180;return this.wrap(a,-c,c)},nearestAngleBetween:function(a,b,c){"undefined"==typeof c&&(c=!0);var d=c?Math.PI:180;return a=this.normalizeAngle(a,c),b=this.normalizeAngle(b,c),-d/2>a&&b>d/2&&(a+=2*d),-d/2>b&&a>d/2&&(b+=2*d),b-a},interpolateAngles:function(a,b,c,d,e){return"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=null),a=this.normalizeAngle(a,d),b=this.normalizeAngleToAnother(b,a,d),"function"==typeof e?e(c,a,b-a,1):this.interpolateFloat(a,b,c)},chanceRoll:function(a){return"undefined"==typeof a&&(a=50),0>=a?!1:a>=100?!0:100*Math.random()>=a?!1:!0},numberArray:function(a,b){for(var c=[],d=a;b>=d;d++)c.push(d);return c},maxAdd:function(a,b,c){return a+=b,a>c&&(a=c),a},minSub:function(a,b,c){return a-=b,c>a&&(a=c),a},wrap:function(a,b,c){var d=c-b;if(0>=d)return 0;var e=(a-b)%d;return 0>e&&(e+=d),e+b},wrapValue:function(a,b,c){var d;return a=Math.abs(a),b=Math.abs(b),c=Math.abs(c),d=(a+b)%c},randomSign:function(){return Math.random()>.5?1:-1},isOdd:function(a){return 1&a},isEven:function(a){return 1&a?!1:!0},max:function(){for(var a=1,b=0,c=arguments.length;c>a;a++)arguments[b]a;a++)arguments[a]c?d=c:b>a&&(d=b),d},linearInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return 0>b?this.linear(a[0],a[1],d):b>1?this.linear(a[c],a[c-1],c-d):this.linear(a[e],a[e+1>c?c:e+1],d-e)},bezierInterpolation:function(a,b){for(var c=0,d=a.length-1,e=0;d>=e;e++)c+=Math.pow(1-b,d-e)*Math.pow(b,e)*a[e]*this.bernstein(d,e);return c},catmullRomInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return a[0]===a[c]?(0>b&&(e=Math.floor(d=c*(1+b))),this.catmullRom(a[(e-1+c)%c],a[e],a[(e+1)%c],a[(e+2)%c],d-e)):0>b?a[0]-(this.catmullRom(a[0],a[0],a[1],a[1],-d)-a[0]):b>1?a[c]-(this.catmullRom(a[c],a[c],a[c-1],a[c-1],d-c)-a[c]):this.catmullRom(a[e?e-1:0],a[e],a[e+1>c?c:e+1],a[e+2>c?c:e+2],d-e)},linear:function(a,b,c){return(b-a)*c+a},bernstein:function(a,b){return this.factorial(a)/this.factorial(b)/this.factorial(a-b)},catmullRom:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b},difference:function(a,b){return Math.abs(a-b)},getRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0)return a[b+Math.floor(Math.random()*d)]}return null},floor:function(a){var b=0|a;return a>0?b:b!=a?b-1:b},ceil:function(a){var b=0|a;return a>0?b!=a?b+1:b:b},sinCosGenerator:function(a,b,c,d){"undefined"==typeof b&&(b=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1);for(var e=b,f=c,g=d*Math.PI/a,h=[],i=[],j=0;a>j;j++)f-=e*g,e+=f*g,h[j]=f,i[j]=e;return{sin:i,cos:h,length:a}},shift:function(a){var b=a.shift();return a.push(b),b},shuffleArray:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},distance:function(a,b,c,d){var e=a-c,f=b-d;return Math.sqrt(e*e+f*f)},distanceRounded:function(a,b,c,e){return Math.round(d.Math.distance(a,b,c,e))},clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},within:function(a,b,c){return Math.abs(a-b)<=c},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*(3-2*a))},smootherstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*a*(a*(6*a-15)+10))},sign:function(a){return 0>a?-1:a>0?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}()},d.QuadTree=function(a,b,c,d,e,f,g,h){this.physicsManager=a,this.ID=a.quadTreeID,a.quadTreeID++,this.maxObjects=f||10,this.maxLevels=g||4,this.level=h||0,this.bounds={x:Math.round(b),y:Math.round(c),width:d,height:e,subWidth:Math.floor(d/2),subHeight:Math.floor(e/2),right:Math.round(b)+Math.floor(d/2),bottom:Math.round(c)+Math.floor(e/2)},this.objects=[],this.nodes=[]},d.QuadTree.prototype={split:function(){this.level++,this.nodes[0]=new d.QuadTree(this.physicsManager,this.bounds.right,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[1]=new d.QuadTree(this.physicsManager,this.bounds.x,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[2]=new d.QuadTree(this.physicsManager,this.bounds.x,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[3]=new d.QuadTree(this.physicsManager,this.bounds.right,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level)},insert:function(a){var b,c=0;if(null!=this.nodes[0]&&(b=this.getIndex(a),-1!==b))return this.nodes[b].insert(a),void 0;if(this.objects.push(a),this.objects.length>this.maxObjects&&this.levelthis.bounds.bottom&&(b=2):a.x>this.bounds.right&&(a.ythis.bounds.bottom&&(b=3)),b},retrieve:function(a){var b=this.objects;return a.body.quadTreeIndex=this.getIndex(a.body),a.body.quadTreeIDs.push(this.ID),this.nodes[0]&&(-1!==a.body.quadTreeIndex?b=b.concat(this.nodes[a.body.quadTreeIndex].retrieve(a)):(b=b.concat(this.nodes[0].retrieve(a)),b=b.concat(this.nodes[1].retrieve(a)),b=b.concat(this.nodes[2].retrieve(a)),b=b.concat(this.nodes[3].retrieve(a)))),b},clear:function(){this.objects=[];for(var a=0,b=this.nodes.length;b>a;a++)this.nodes[a]&&(this.nodes[a].clear(),delete this.nodes[a])}},d.Circle=function(a,b,c){a=a||0,b=b||0,c=c||0,this.x=a,this.y=b,this._diameter=c,this._radius=c>0?.5*c:0},d.Circle.prototype={circumference:function(){return 2*Math.PI*this._radius},setTo:function(a,b,c){return this.x=a,this.y=b,this._diameter=c,this._radius=.5*c,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.diameter)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.diameter=this._diameter,a},distance:function(a,b){return"undefined"==typeof b&&(b=!1),b?d.Math.distanceRound(this.x,this.y,a.x,a.y):d.Math.distance(this.x,this.y,a.x,a.y)},clone:function(a){return"undefined"==typeof a&&(a=new d.Circle),a.setTo(this.x,this.y,this.diameter)},contains:function(a,b){return d.Circle.contains(this,a,b)},circumferencePoint:function(a,b,c){return d.Circle.circumferencePoint(this,a,b,c)},offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},toString:function(){return"[{Phaser.Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter+" radius="+this.radius+")}]"}},Object.defineProperty(d.Circle.prototype,"diameter",{get:function(){return this._diameter},set:function(a){a>0&&(this._diameter=a,this._radius=.5*a)}}),Object.defineProperty(d.Circle.prototype,"radius",{get:function(){return this._radius},set:function(a){a>0&&(this._radius=a,this._diameter=2*a)}}),Object.defineProperty(d.Circle.prototype,"left",{get:function(){return this.x-this._radius},set:function(a){a>this.x?(this._radius=0,this._diameter=0):this.radius=this.x-a}}),Object.defineProperty(d.Circle.prototype,"right",{get:function(){return this.x+this._radius},set:function(a){athis.y?(this._radius=0,this._diameter=0):this.radius=this.y-a}}),Object.defineProperty(d.Circle.prototype,"bottom",{get:function(){return this.y+this._radius},set:function(a){a0?Math.PI*this._radius*this._radius:0}}),Object.defineProperty(d.Circle.prototype,"empty",{get:function(){return 0===this._diameter},set:function(a){a===!0&&this.setTo(0,0,0)}}),d.Circle.contains=function(a,b,c){if(b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom){var d=(a.x-b)*(a.x-b),e=(a.y-c)*(a.y-c);return d+e<=a.radius*a.radius}return!1},d.Circle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.diameter==b.diameter},d.Circle.intersects=function(a,b){return d.Math.distance(a.x,a.y,b.x,b.y)<=a.radius+b.radius},d.Circle.circumferencePoint=function(a,b,c,e){return"undefined"==typeof c&&(c=!1),"undefined"==typeof e&&(e=new d.Point),c===!0&&(b=d.Math.radToDeg(b)),e.x=a.x+a.radius*Math.cos(b),e.y=a.y+a.radius*Math.sin(b),e},d.Circle.intersectsRectangle=function(a,b){var c=Math.abs(a.x-b.x-b.halfWidth),d=b.halfWidth+a.radius;if(c>d)return!1;var e=Math.abs(a.y-b.y-b.halfHeight),f=b.halfHeight+a.radius;if(e>f)return!1;if(c<=b.halfWidth||e<=b.halfHeight)return!0;var g=c-b.halfWidth,h=e-b.halfHeight,i=g*g,j=h*h,k=a.radius*a.radius;return k>=i+j},d.Point=function(a,b){a=a||0,b=b||0,this.x=a,this.y=b},d.Point.prototype={copyFrom:function(a){return this.setTo(a.x,a.y)},invert:function(){return this.setTo(this.y,this.x)},setTo:function(a,b){return this.x=a,this.y=b,this},add:function(a,b){return this.x+=a,this.y+=b,this},subtract:function(a,b){return this.x-=a,this.y-=b,this},multiply:function(a,b){return this.x*=a,this.y*=b,this},divide:function(a,b){return this.x/=a,this.y/=b,this},clampX:function(a,b){return this.x=d.Math.clamp(this.x,a,b),this},clampY:function(a,b){return this.y=d.Math.clamp(this.y,a,b),this},clamp:function(a,b){return this.x=d.Math.clamp(this.x,a,b),this.y=d.Math.clamp(this.y,a,b),this},clone:function(a){return"undefined"==typeof a&&(a=new d.Point),a.setTo(this.x,this.y)},copyTo:function(a){return a.x=this.x,a.y=this.y,a},distance:function(a,b){return d.Point.distance(this,a,b)},equals:function(a){return a.x==this.x&&a.y==this.y},rotate:function(a,b,c,e,f){return d.Point.rotate(this,a,b,c,e,f)},getMagnitude:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setMagnitude:function(a){return this.normalize().multiply(a,a)},normalize:function(){if(!this.isZero()){var a=this.getMagnitude();this.x/=a,this.y/=a}return this},isZero:function(){return 0===this.x&&0===this.y},toString:function(){return"[{Point (x="+this.x+" y="+this.y+")}]"}},d.Point.add=function(a,b,c){return"undefined"==typeof c&&(c=new d.Point),c.x=a.x+b.x,c.y=a.y+b.y,c},d.Point.subtract=function(a,b,c){return"undefined"==typeof c&&(c=new d.Point),c.x=a.x-b.x,c.y=a.y-b.y,c},d.Point.multiply=function(a,b,c){return"undefined"==typeof c&&(c=new d.Point),c.x=a.x*b.x,c.y=a.y*b.y,c},d.Point.divide=function(a,b,c){return"undefined"==typeof c&&(c=new d.Point),c.x=a.x/b.x,c.y=a.y/b.y,c},d.Point.equals=function(a,b){return a.x==b.x&&a.y==b.y},d.Point.distance=function(a,b,c){return"undefined"==typeof c&&(c=!1),c?d.Math.distanceRound(a.x,a.y,b.x,b.y):d.Math.distance(a.x,a.y,b.x,b.y)},d.Point.rotate=function(a,b,c,e,f,g){return f=f||!1,g=g||null,f&&(e=d.Math.degToRad(e)),null===g&&(g=Math.sqrt((b-a.x)*(b-a.x)+(c-a.y)*(c-a.y))),a.setTo(b+g*Math.cos(e),c+g*Math.sin(e))},d.Rectangle=function(a,b,c,d){a=a||0,b=b||0,c=c||0,d=d||0,this.x=a,this.y=b,this.width=c,this.height=d},d.Rectangle.prototype={offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},floor:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},floorAll:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.width=Math.floor(this.width),this.height=Math.floor(this.height)},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},inflate:function(a,b){return d.Rectangle.inflate(this,a,b)},size:function(a){return d.Rectangle.size(this,a)},clone:function(a){return d.Rectangle.clone(this,a)},contains:function(a,b){return d.Rectangle.contains(this,a,b)},containsRect:function(a){return d.Rectangle.containsRect(this,a)},equals:function(a){return d.Rectangle.equals(this,a)},intersection:function(a,b){return d.Rectangle.intersection(this,a,b)},intersects:function(a,b){return d.Rectangle.intersects(this,a,b)},intersectsRaw:function(a,b,c,e,f){return d.Rectangle.intersectsRaw(this,a,b,c,e,f)},union:function(a,b){return d.Rectangle.union(this,a,b)},toString:function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.empty+")}]"}},Object.defineProperty(d.Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)}}),Object.defineProperty(d.Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)}}),Object.defineProperty(d.Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(d.Rectangle.prototype,"bottomRight",{get:function(){return new d.Point(this.right,this.bottom)},set:function(a){this.right=a.x,this.bottom=a.y}}),Object.defineProperty(d.Rectangle.prototype,"left",{get:function(){return this.x},set:function(a){this.width=a>=this.right?0:this.right-a,this.x=a}}),Object.defineProperty(d.Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),Object.defineProperty(d.Rectangle.prototype,"volume",{get:function(){return this.width*this.height}}),Object.defineProperty(d.Rectangle.prototype,"perimeter",{get:function(){return 2*this.width+2*this.height}}),Object.defineProperty(d.Rectangle.prototype,"centerX",{get:function(){return this.x+this.halfWidth},set:function(a){this.x=a-this.halfWidth}}),Object.defineProperty(d.Rectangle.prototype,"centerY",{get:function(){return this.y+this.halfHeight},set:function(a){this.y=a-this.halfHeight}}),Object.defineProperty(d.Rectangle.prototype,"top",{get:function(){return this.y},set:function(a){a>=this.bottom?(this.height=0,this.y=a):this.height=this.bottom-a}}),Object.defineProperty(d.Rectangle.prototype,"topLeft",{get:function(){return new d.Point(this.x,this.y)},set:function(a){this.x=a.x,this.y=a.y}}),Object.defineProperty(d.Rectangle.prototype,"empty",{get:function(){return!this.width||!this.height},set:function(a){a===!0&&this.setTo(0,0,0,0)}}),d.Rectangle.inflate=function(a,b,c){return a.x-=b,a.width+=2*b,a.y-=c,a.height+=2*c,a},d.Rectangle.inflatePoint=function(a,b){return d.Rectangle.inflate(a,b.x,b.y)},d.Rectangle.size=function(a,b){return"undefined"==typeof b&&(b=new d.Point),b.setTo(a.width,a.height)},d.Rectangle.clone=function(a,b){return"undefined"==typeof b&&(b=new d.Rectangle),b.setTo(a.x,a.y,a.width,a.height)},d.Rectangle.contains=function(a,b,c){return b>=a.x&&b<=a.right&&c>=a.y&&c<=a.bottom},d.Rectangle.containsRaw=function(a,b,c,d,e,f){return e>=a&&a+c>=e&&f>=b&&b+d>=f},d.Rectangle.containsPoint=function(a,b){return d.Rectangle.contains(a,b.x,b.y)},d.Rectangle.containsRect=function(a,b){return a.volume>b.volume?!1:a.x>=b.x&&a.y>=b.y&&a.right<=b.right&&a.bottom<=b.bottom},d.Rectangle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.width==b.width&&a.height==b.height},d.Rectangle.intersection=function(a,b,c){return c=c||new d.Rectangle,d.Rectangle.intersects(a,b)&&(c.x=Math.max(a.x,b.x),c.y=Math.max(a.y,b.y),c.width=Math.min(a.right,b.right)-c.x,c.height=Math.min(a.bottom,b.bottom)-c.y),c},d.Rectangle.intersects=function(a,b){return a.xa.right+f||ca.bottom+f||e1){if(a&&a==this.decodeURI(e[0]))return this.decodeURI(e[1]);b[this.decodeURI(e[0])]=this.decodeURI(e[1])}}return b},decodeURI:function(a){return decodeURIComponent(a.replace(/\+/g," "))}},d.TweenManager=function(a){this.game=a,this._tweens=[],this._add=[],this.game.onPause.add(this.pauseAll,this),this.game.onResume.add(this.resumeAll,this)},d.TweenManager.prototype={REVISION:"11dev",getAll:function(){return this._tweens},removeAll:function(){this._tweens=[]},add:function(a){this._add.push(a)},create:function(a){return new d.Tween(a,this.game)},remove:function(a){var b=this._tweens.indexOf(a);-1!==b&&(this._tweens[b].pendingDelete=!0)},update:function(){if(0===this._tweens.length&&0===this._add.length)return!1;for(var a=0,b=this._tweens.length;b>a;)this._tweens[a].update(this.game.time.now)?a++:(this._tweens.splice(a,1),b--);return this._add.length>0&&(this._tweens=this._tweens.concat(this._add),this._add.length=0),!0},isTweening:function(a){return this._tweens.some(function(b){return b._object===a})},pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].pause()},resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].resume()}},d.Tween=function(a,b){this._object=a,this.game=b,this._manager=this.game.tweens,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._repeat=0,this._yoyo=!1,this._reversed=!1,this._delayTime=0,this._startTime=null,this._easingFunction=d.Easing.Linear.None,this._interpolationFunction=d.Math.linearInterpolation,this._chainedTweens=[],this._onStartCallback=null,this._onStartCallbackFired=!1,this._onUpdateCallback=null,this._onCompleteCallback=null,this._pausedTime=0,this.pendingDelete=!1;for(var c in a)this._valuesStart[c]=parseFloat(a[c],10);this.onStart=new d.Signal,this.onComplete=new d.Signal,this.isRunning=!1},d.Tween.prototype={to:function(a,b,c,d,e,f,g){b=b||1e3,c=c||null,d=d||!1,e=e||0,f=f||0,g=g||!1;var h;return this._parent?(h=this._manager.create(this._object),this._lastChild.chain(h),this._lastChild=h):(h=this,this._parent=this,this._lastChild=this),h._repeat=f,h._duration=b,h._valuesEnd=a,null!==c&&(h._easingFunction=c),e>0&&(h._delayTime=e),h._yoyo=g,d?this.start():this},start:function(){if(null!==this.game&&null!==this._object){this._manager.add(this),this.onStart.dispatch(this._object),this.isRunning=!0,this._onStartCallbackFired=!1,this._startTime=this.game.time.now+this._delayTime;for(var a in this._valuesEnd){if(this._valuesEnd[a]instanceof Array){if(0===this._valuesEnd[a].length)continue;this._valuesEnd[a]=[this._object[a]].concat(this._valuesEnd[a])}this._valuesStart[a]=this._object[a],this._valuesStart[a]instanceof Array==!1&&(this._valuesStart[a]*=1),this._valuesStartRepeat[a]=this._valuesStart[a]||0}return this}},stop:function(){return this.isRunning=!1,this._manager.remove(this),this},delay:function(a){return this._delayTime=a,this},repeat:function(a){return this._repeat=a,this},yoyo:function(a){return this._yoyo=a,this},easing:function(a){return this._easingFunction=a,this},interpolation:function(a){return this._interpolationFunction=a,this},chain:function(){return this._chainedTweens=arguments,this},loop:function(){return this._lastChild.chain(this),this},onStartCallback:function(a){return this._onStartCallback=a,this},onUpdateCallback:function(a){return this._onUpdateCallback=a,this},onCompleteCallback:function(a){return this._onCompleteCallback=a,this},pause:function(){this._paused=!0,this._pausedTime=this.game.time.now},resume:function(){this._paused=!1,this._startTime+=this.game.time.now-this._pausedTime},update:function(a){if(this.pendingDelete)return!1;if(this._paused||a1?1:c;var d=this._easingFunction(c);for(b in this._valuesEnd){var e=this._valuesStart[b]||0,f=this._valuesEnd[b];f instanceof Array?this._object[b]=this._interpolationFunction(f,d):("string"==typeof f&&(f=e+parseFloat(f,10)),"number"==typeof f&&(this._object[b]=e+(f-e)*d))}if(null!==this._onUpdateCallback&&this._onUpdateCallback.call(this._object,d),1==c){if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(b in this._valuesStartRepeat){if("string"==typeof this._valuesEnd[b]&&(this._valuesStartRepeat[b]=this._valuesStartRepeat[b]+parseFloat(this._valuesEnd[b],10)),this._yoyo){var g=this._valuesStartRepeat[b];this._valuesStartRepeat[b]=this._valuesEnd[b],this._valuesEnd[b]=g,this._reversed=!this._reversed}this._valuesStart[b]=this._valuesStartRepeat[b]}return this._startTime=a+this._delayTime,this.onComplete.dispatch(this._object),null!==this._onCompleteCallback&&this._onCompleteCallback.call(this._object),!0}this.isRunning=!1,this.onComplete.dispatch(this._object),null!==this._onCompleteCallback&&this._onCompleteCallback.call(this._object);for(var h=0,i=this._chainedTweens.length;i>h;h++)this._chainedTweens[h].start(a);return!1}return!0}},d.Easing={Linear:{None:function(a){return a}},Quadratic:{In:function(a){return a*a},Out:function(a){return a*(2-a)},InOut:function(a){return(a*=2)<1?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return(a*=2)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:(a*=2)<1?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),-(c*Math.pow(2,10*(a-=1))*Math.sin((a-b)*2*Math.PI/d)))},Out:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),c*Math.pow(2,-10*a)*Math.sin((a-b)*2*Math.PI/d)+1)},InOut:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),(a*=2)<1?-.5*c*Math.pow(2,10*(a-=1))*Math.sin((a-b)*2*Math.PI/d):.5*c*Math.pow(2,-10*(a-=1))*Math.sin((a-b)*2*Math.PI/d)+1)}},Back:{In:function(a){var b=1.70158;return a*a*((b+1)*a-b) +},Out:function(a){var b=1.70158;return--a*a*((b+1)*a+b)+1},InOut:function(a){var b=2.5949095;return(a*=2)<1?.5*a*a*((b+1)*a-b):.5*((a-=2)*a*((b+1)*a+b)+2)}},Bounce:{In:function(a){return 1-d.Easing.Bounce.Out(1-a)},Out:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*d.Easing.Bounce.In(2*a):.5*d.Easing.Bounce.Out(2*a-1)+.5}}},d.Time=function(a){this.game=a,this._started=0,this._timeLastSecond=0,this._pauseStarted=0,this.physicsElapsed=0,this.time=0,this.pausedTime=0,this.now=0,this.elapsed=0,this.fps=0,this.fpsMin=1e3,this.fpsMax=0,this.msMin=1e3,this.msMax=0,this.frames=0,this.pauseDuration=0,this.timeToCall=0,this.lastTime=0,this.game.onPause.add(this.gamePaused,this),this.game.onResume.add(this.gameResumed,this),this._justResumed=!1},d.Time.prototype={update:function(a){this.now=a,this._justResumed&&(this.time=this.now,this._justResumed=!1),this.timeToCall=this.game.math.max(0,16-(a-this.lastTime)),this.elapsed=this.now-this.time,this.msMin=this.game.math.min(this.msMin,this.elapsed),this.msMax=this.game.math.max(this.msMax,this.elapsed),this.frames++,this.now>this._timeLastSecond+1e3&&(this.fps=Math.round(1e3*this.frames/(this.now-this._timeLastSecond)),this.fpsMin=this.game.math.min(this.fpsMin,this.fps),this.fpsMax=this.game.math.max(this.fpsMax,this.fps),this._timeLastSecond=this.now,this.frames=0),this.time=this.now,this.lastTime=a+this.timeToCall,this.physicsElapsed=1*(this.elapsed/1e3),this.physicsElapsed>1&&(this.physicsElapsed=1),this.game.paused&&(this.pausedTime=this.now-this._pauseStarted)},gamePaused:function(){this._pauseStarted=this.now},gameResumed:function(){this.time=Date.now(),this.pauseDuration=this.pausedTime,this._justResumed=!0},totalElapsedSeconds:function(){return.001*(this.now-this._started)},elapsedSince:function(a){return this.now-a},elapsedSecondsSince:function(a){return.001*(this.now-a)},reset:function(){this._started=this.now}},d.Timer=function(a){this.game=a,this._started=0,this._timeLastSecond=0,this.running=!1,this.events=[],this.onEvent=new d.Signal},d.Timer.prototype={add:function(a){this.events.push({delay:a,dispatched:!1,args:Array.prototype.splice.call(arguments,1)})},start:function(){this._started=this.game.time.now,this.running=!0},stop:function(){this.running=!1,this.events.length=0},update:function(){if(this.running)for(var a=this.seconds(),b=0,c=this.events.length;c>b;b++)this.events[b].dispatched===!1&&a>=this.events[b].delay&&(this.events[b].dispatched=!0,this.onEvent.dispatch.apply(this,this.events[b].args))},seconds:function(){return.001*(this.game.time.now-this._started)}},d.AnimationManager=function(a){this.sprite=a,this.game=a.game,this.currentFrame=null,this.updateIfVisible=!0,this.isLoaded=!1,this._frameData=null,this._anims={},this._outputFrames=[]},d.AnimationManager.prototype={loadFrameData:function(a){this._frameData=a,this.frame=0,this.isLoaded=!0},add:function(a,b,e,f,g){return null==this._frameData?(console.warn("No FrameData available for Phaser.Animation "+a),void 0):(e=e||60,"undefined"==typeof f&&(f=!1),"undefined"==typeof g&&(g=b&&"number"==typeof b[0]?!0:!1),null==this.sprite.events.onAnimationStart&&(this.sprite.events.onAnimationStart=new d.Signal,this.sprite.events.onAnimationComplete=new d.Signal,this.sprite.events.onAnimationLoop=new d.Signal),this._outputFrames.length=0,this._frameData.getFrameIndexes(b,g,this._outputFrames),this._anims[a]=new d.Animation(this.game,this.sprite,a,this._frameData,this._outputFrames,e,f),this.currentAnim=this._anims[a],this.currentFrame=this.currentAnim.currentFrame,this.sprite.setTexture(c.TextureCache[this.currentFrame.uuid]),this._anims[a])},validateFrames:function(a,b){"undefined"==typeof b&&(b=!0);for(var c=0;cthis._frameData.total)return!1}else if(this._frameData.checkFrameName(a[c])===!1)return!1;return!0},play:function(a,b,c,d){if(this._anims[a]){if(this.currentAnim!=this._anims[a])return this.currentAnim=this._anims[a],this.currentAnim.paused=!1,this.currentAnim.play(b,c,d);if(this.currentAnim.isPlaying===!1)return this.currentAnim.paused=!1,this.currentAnim.play(b,c,d)}},stop:function(a,b){"undefined"==typeof b&&(b=!1),"string"==typeof a?this._anims[a]&&(this.currentAnim=this._anims[a],this.currentAnim.stop(b)):this.currentAnim&&this.currentAnim.stop(b)},update:function(){return this.updateIfVisible&&this.sprite.visible===!1?!1:this.currentAnim&&this.currentAnim.update()===!0?(this.currentFrame=this.currentAnim.currentFrame,this.sprite.currentFrame=this.currentFrame,!0):!1},getAnimation:function(a){return"string"==typeof a&&this._anims[a]?this._anims[a]:!1},refreshFrame:function(){this.sprite.currentFrame=this.currentFrame,this.sprite.setTexture(c.TextureCache[this.currentFrame.uuid])},destroy:function(){this._anims={},this._frameData=null,this._frameIndex=0,this.currentAnim=null,this.currentFrame=null}},Object.defineProperty(d.AnimationManager.prototype,"frameData",{get:function(){return this._frameData}}),Object.defineProperty(d.AnimationManager.prototype,"frameTotal",{get:function(){return this._frameData?this._frameData.total:-1}}),Object.defineProperty(d.AnimationManager.prototype,"paused",{get:function(){return this.currentAnim.isPaused},set:function(a){this.currentAnim.paused=a}}),Object.defineProperty(d.AnimationManager.prototype,"frame",{get:function(){return this.currentFrame?this._frameIndex:void 0},set:function(a){"number"==typeof a&&this._frameData&&null!==this._frameData.getFrame(a)&&(this.currentFrame=this._frameData.getFrame(a),this._frameIndex=a,this.sprite.currentFrame=this.currentFrame,this.sprite.setTexture(c.TextureCache[this.currentFrame.uuid]))}}),Object.defineProperty(d.AnimationManager.prototype,"frameName",{get:function(){return this.currentFrame?this.currentFrame.name:void 0},set:function(a){"string"==typeof a&&this._frameData&&null!==this._frameData.getFrameByName(a)?(this.currentFrame=this._frameData.getFrameByName(a),this._frameIndex=this.currentFrame.index,this.sprite.currentFrame=this.currentFrame,this.sprite.setTexture(c.TextureCache[this.currentFrame.uuid])):console.warn("Cannot set frameName: "+a)}}),d.Animation=function(a,b,c,d,e,f,g){this.game=a,this._parent=b,this._frameData=d,this.name=c,this._frames=[],this._frames=this._frames.concat(e),this.delay=1e3/f,this.looped=g,this.killOnComplete=!1,this.isFinished=!1,this.isPlaying=!1,this.isPaused=!1,this._pauseStartTime=0,this._frameIndex=0,this._frameDiff=0,this._frameSkip=1,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex])},d.Animation.prototype={play:function(a,b,d){return"number"==typeof a&&(this.delay=1e3/a),"boolean"==typeof b&&(this.looped=b),"undefined"!=typeof d&&(this.killOnComplete=d),this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this._timeLastFrame=this.game.time.now,this._timeNextFrame=this.game.time.now+this.delay,this._frameIndex=0,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this._parent.setTexture(c.TextureCache[this.currentFrame.uuid]),this._parent.events&&this._parent.events.onAnimationStart.dispatch(this._parent,this),this},restart:function(){this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this._timeLastFrame=this.game.time.now,this._timeNextFrame=this.game.time.now+this.delay,this._frameIndex=0,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex])},stop:function(a){"undefined"==typeof a&&(a=!1),this.isPlaying=!1,this.isFinished=!0,this.paused=!1,a&&(this.currentFrame=this._frameData.getFrame(this._frames[0]))},update:function(){return this.isPaused?!1:this.isPlaying===!0&&this.game.time.now>=this._timeNextFrame?(this._frameSkip=1,this._frameDiff=this.game.time.now-this._timeNextFrame,this._timeLastFrame=this.game.time.now,this._frameDiff>this.delay&&(this._frameSkip=Math.floor(this._frameDiff/this.delay),this._frameDiff-=this._frameSkip*this.delay),this._timeNextFrame=this.game.time.now+(this.delay-this._frameDiff),this._frameIndex+=this._frameSkip,this._frameIndex>=this._frames.length?this.looped?(this._frameIndex%=this._frames.length,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&this._parent.setTexture(c.TextureCache[this.currentFrame.uuid]),this._parent.events.onAnimationLoop.dispatch(this._parent,this)):this.onComplete():(this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&this._parent.setTexture(c.TextureCache[this.currentFrame.uuid])),!0):!1},destroy:function(){this.game=null,this._parent=null,this._frames=null,this._frameData=null,this.currentFrame=null,this.isPlaying=!1},onComplete:function(){this.isPlaying=!1,this.isFinished=!0,this.paused=!1,this._parent.events&&this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.killOnComplete&&this._parent.kill()}},Object.defineProperty(d.Animation.prototype,"paused",{get:function(){return this.isPaused},set:function(a){this.isPaused=a,a?this._pauseStartTime=this.game.time.now:this.isPlaying&&(this._timeNextFrame=this.game.time.now+this.delay)}}),Object.defineProperty(d.Animation.prototype,"frameTotal",{get:function(){return this._frames.length}}),Object.defineProperty(d.Animation.prototype,"frame",{get:function(){return null!==this.currentFrame?this.currentFrame.index:this._frameIndex},set:function(a){this.currentFrame=this._frameData.getFrame(a),null!==this.currentFrame&&(this._frameIndex=a,this._parent.setTexture(c.TextureCache[this.currentFrame.uuid]))}}),d.Animation.generateFrameNames=function(a,b,c,e,f){"undefined"==typeof e&&(e="");var g=[],h="";if(c>b)for(var i=b;c>=i;i++)h="number"==typeof f?d.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);else for(var i=b;i>=c;i--)h="number"==typeof f?d.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);return g},d.Frame=function(a,b,c,e,f,g,h){this.index=a,this.x=b,this.y=c,this.width=e,this.height=f,this.name=g,this.uuid=h,this.centerX=Math.floor(e/2),this.centerY=Math.floor(f/2),this.distance=d.Math.distance(0,0,e,f),this.rotated=!1,this.rotationDirection="cw",this.trimmed=!1,this.sourceSizeW=e,this.sourceSizeH=f,this.spriteSourceSizeX=0,this.spriteSourceSizeY=0,this.spriteSourceSizeW=0,this.spriteSourceSizeH=0},d.Frame.prototype={setTrim:function(a,b,c,d,e,f,g){this.trimmed=a,a&&(this.width=b,this.height=c,this.sourceSizeW=b,this.sourceSizeH=c,this.centerX=Math.floor(b/2),this.centerY=Math.floor(c/2),this.spriteSourceSizeX=d,this.spriteSourceSizeY=e,this.spriteSourceSizeW=f,this.spriteSourceSizeH=g)}},d.FrameData=function(){this._frames=[],this._frameNames=[]},d.FrameData.prototype={addFrame:function(a){return a.index=this._frames.length,this._frames.push(a),""!==a.name&&(this._frameNames[a.name]=a.index),a},getFrame:function(a){return this._frames.length>a?this._frames[a]:null},getFrameByName:function(a){return"number"==typeof this._frameNames[a]?this._frames[this._frameNames[a]]:null},checkFrameName:function(a){return null==this._frameNames[a]?!1:!0},getFrameRange:function(a,b,c){"undefined"==typeof c&&(c=[]);for(var d=a;b>=d;d++)c.push(this._frames[d]);return c},getFrames:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0;dd;d++)b?c.push(this.getFrame(a[d])):c.push(this.getFrameByName(a[d]));return c},getFrameIndexes:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0,e=this._frames.length;e>d;d++)c.push(this._frames[d].index);else for(var d=0,e=a.length;e>d;d++)b?c.push(a[d]):this.getFrameByName(a[d])&&c.push(this.getFrameByName(a[d]).index);return c}},Object.defineProperty(d.FrameData.prototype,"total",{get:function(){return this._frames.length}}),d.AnimationParser={spriteSheet:function(a,b,e,f,g){var h=a.cache.getImage(b);if(null==h)return null;var i=h.width,j=h.height;0>=e&&(e=Math.floor(-i/Math.min(-1,e))),0>=f&&(f=Math.floor(-j/Math.min(-1,f)));var k=Math.round(i/e),l=Math.round(j/f),m=k*l;if(-1!==g&&(m=g),0===i||0===j||e>i||f>j||0===m)return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"),null;for(var n=new d.FrameData,o=0,p=0,q=0;m>q;q++){var r=a.rnd.uuid();n.addFrame(new d.Frame(q,o,p,e,f,"",r)),c.TextureCache[r]=new c.Texture(c.BaseTextureCache[b],{x:o,y:p,width:e,height:f}),o+=e,o===i&&(o=0,p+=f)}return n},JSONData:function(a,b,e){if(!b.frames)return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"),console.log(b),void 0;for(var f,g=new d.FrameData,h=b.frames,i=0;i tag"),void 0;for(var f,g,h,i,j,k,l,m,n,o,p,q,r=new d.FrameData,s=b.getElementsByTagName("SubTexture"),t=0;t0)for(var c=0;c0)for(var c=0;c0?(this._fileIndex=0,this._progressChunk=100/this._fileList.length,this.loadFile()):(this.progress=100,this.hasLoaded=!0,this.onLoadComplete.dispatch()))},loadFile:function(){if(!this._fileList[this._fileIndex])return console.warn("Phaser.Loader loadFile invalid index "+this._fileIndex),void 0;var a=this._fileList[this._fileIndex],b=this;switch(a.type){case"image":case"spritesheet":case"textureatlas":case"bitmapfont":case"tileset":a.data=new Image,a.data.name=a.key,a.data.onload=function(){return b.fileComplete(b._fileIndex)},a.data.onerror=function(){return b.fileError(b._fileIndex)},a.data.crossOrigin=this.crossOrigin,a.data.src=this.baseURL+a.url;break;case"audio":a.url=this.getAudioURL(a.url),null!==a.url?this.game.sound.usingWebAudio?(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return b.fileComplete(b._fileIndex)},this._xhr.onerror=function(){return b.fileError(b._fileIndex)},this._xhr.send()):this.game.sound.usingAudioTag&&(this.game.sound.touchLocked?(a.data=new Audio,a.data.name=a.key,a.data.preload="auto",a.data.src=this.baseURL+a.url,this.fileComplete(this._fileIndex)):(a.data=new Audio,a.data.name=a.key,a.data.onerror=function(){return b.fileError(b._fileIndex)},a.data.preload="auto",a.data.src=this.baseURL+a.url,a.data.addEventListener("canplaythrough",d.GAMES[this.game.id].load.fileComplete(this._fileIndex),!1),a.data.load())):this.fileError(this._fileIndex);break;case"tilemap":if(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",a.format===d.Tilemap.TILED_JSON)this._xhr.onload=function(){return b.jsonLoadComplete(b._fileIndex)};else{if(a.format!==d.Tilemap.CSV)throw new Error("Phaser.Loader. Invalid Tilemap format: "+a.format);this._xhr.onload=function(){return b.csvLoadComplete(b._fileIndex)}}this._xhr.onerror=function(){return b.dataLoadError(b._fileIndex)},this._xhr.send();break;case"text":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return b.fileComplete(b._fileIndex)},this._xhr.onerror=function(){return b.fileError(b._fileIndex)},this._xhr.send();break;case"script":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return b.fileComplete(b._fileIndex)},this._xhr.onerror=function(){return b.fileError(b._fileIndex)},this._xhr.send()}},getAudioURL:function(a){var b;"string"==typeof a&&(a=[a]);for(var c=0;c100&&(this.progress=100),null!==this.preloadSprite&&(0===this.preloadSprite.direction?this.preloadSprite.crop.width=Math.floor(this.preloadSprite.width/100*this.progress):this.preloadSprite.crop.height=Math.floor(this.preloadSprite.height/100*this.progress),this.preloadSprite.sprite.crop=this.preloadSprite.crop),this.onFileComplete.dispatch(this.progress,this._fileList[a].key,b,this.totalLoadedFiles(),this._fileList.length),this.totalQueuedFiles()>0?(this._fileIndex++,this.loadFile()):(this.hasLoaded=!0,this.isLoading=!1,this.removeAll(),this.onLoadComplete.dispatch())},totalLoadedFiles:function(){for(var a=0,b=0;b tag"),void 0;var e=c.TextureCache[d],f={},g=b.getElementsByTagName("info")[0],h=b.getElementsByTagName("common")[0];f.font=g.attributes.getNamedItem("face").nodeValue,f.size=parseInt(g.attributes.getNamedItem("size").nodeValue,10),f.lineHeight=parseInt(h.attributes.getNamedItem("lineHeight").nodeValue,10),f.chars={};for(var i=b.getElementsByTagName("char"),j=0;j=this.durationMS&&(this.usingWebAudio?this.loop?(this.onLoop.dispatch(this),""===this.currentMarker?(this.currentTime=0,this.startTime=this.game.time.now):this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop():this.loop?(this.onLoop.dispatch(this),this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop()))},play:function(a,b,c,d,e){if(a=a||"",b=b||0,"undefined"==typeof c&&(c=this._volume),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!0),this.isPlaying!==!0||e!==!1||this.override!==!1){if(this.isPlaying&&this.override&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.currentMarker=a,""!==a){if(!this.markers[a])return console.warn("Phaser.Sound.play: audio marker "+a+" doesn't exist"),void 0;this.position=this.markers[a].start,this.volume=this.markers[a].volume,this.loop=this.markers[a].loop,this.duration=this.markers[a].duration,this.durationMS=this.markers[a].durationMS,this._tempMarker=a,this._tempPosition=this.position,this._tempVolume=this.volume,this._tempLoop=this.loop}else this.position=b,this.volume=c,this.loop=d,this.duration=0,this.durationMS=0,this._tempMarker=a,this._tempPosition=b,this._tempVolume=c,this._tempLoop=d;this.usingWebAudio?this.game.cache.isSoundDecoded(this.key)?(null==this._buffer&&(this._buffer=this.game.cache.getSoundData(this.key)),this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this.externalNode?this._sound.connect(this.externalNode.input):this._sound.connect(this.gainNode),this.totalDuration=this._sound.buffer.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this.loop&&""===a&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,this.position,this.duration):this._sound.start(0,this.position,this.duration),this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):(this.pendingPlayback=!0,this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).isDecoding===!1&&this.game.sound.decode(this.key,this)):this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).locked?(this.game.cache.reloadSound(this.key),this.pendingPlayback=!0):this._sound&&4==this._sound.readyState?(this._sound.play(),this.totalDuration=this._sound.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this._sound.currentTime=this.position,this._sound.muted=this._muted,this._sound.volume=this._muted?0:this._volume,this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):this.pendingPlayback=!0}},restart:function(a,b,c,d){a=a||"",b=b||0,c=c||1,"undefined"==typeof d&&(d=!1),this.play(a,b,c,d,!0)},pause:function(){this.isPlaying&&this._sound&&(this.stop(),this.isPlaying=!1,this.paused=!0,this.pausedPosition=this.currentTime,this.pausedTime=this.game.time.now,this.onPause.dispatch(this))},resume:function(){if(this.paused&&this._sound){if(this.usingWebAudio){var a=this.position+this.pausedPosition/1e3;this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.gainNode),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,a,this.duration):this._sound.start(0,a,this.duration)}else this._sound.play();this.isPlaying=!0,this.paused=!1,this.startTime+=this.game.time.now-this.pausedTime,this.onResume.dispatch(this)}},stop:function(){this.isPlaying&&this._sound&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.isPlaying=!1;var a=this.currentMarker;this.currentMarker="",this.onStop.dispatch(this,a)}},Object.defineProperty(d.Sound.prototype,"isDecoding",{get:function(){return this.game.cache.getSound(this.key).isDecoding}}),Object.defineProperty(d.Sound.prototype,"isDecoded",{get:function(){return this.game.cache.isSoundDecoded(this.key)}}),Object.defineProperty(d.Sound.prototype,"mute",{get:function(){return this._muted},set:function(a){a=a||null,a?(this._muted=!0,this.usingWebAudio?(this._muteVolume=this.gainNode.gain.value,this.gainNode.gain.value=0):this.usingAudioTag&&this._sound&&(this._muteVolume=this._sound.volume,this._sound.volume=0)):(this._muted=!1,this.usingWebAudio?this.gainNode.gain.value=this._muteVolume:this.usingAudioTag&&this._sound&&(this._sound.volume=this._muteVolume)),this.onMute.dispatch(this)}}),Object.defineProperty(d.Sound.prototype,"volume",{get:function(){return this._volume},set:function(a){this.usingWebAudio?(this._volume=a,this.gainNode.gain.value=a):this.usingAudioTag&&this._sound&&a>=0&&1>=a&&(this._volume=a,this._sound.volume=a)}}),d.SoundManager=function(a){this.game=a,this.onSoundDecode=new d.Signal,this._muted=!1,this._unlockSource=null,this._volume=1,this._sounds=[],this.context=null,this.usingWebAudio=!0,this.usingAudioTag=!1,this.noAudio=!1,this.connectToMaster=!0,this.touchLocked=!1,this.channels=32},d.SoundManager.prototype={boot:function(){if(this.game.device.iOS&&this.game.device.webAudio===!1&&(this.channels=1),this.game.device.iOS||window.PhaserGlobal&&window.PhaserGlobal.fakeiOSTouchLock?(this.game.input.touch.callbackContext=this,this.game.input.touch.touchStartCallback=this.unlock,this.game.input.mouse.callbackContext=this,this.game.input.mouse.mouseDownCallback=this.unlock,this.touchLocked=!0):this.touchLocked=!1,window.PhaserGlobal){if(window.PhaserGlobal.disableAudio===!0)return this.usingWebAudio=!1,this.noAudio=!0,void 0;if(window.PhaserGlobal.disableWebAudio===!0)return this.usingWebAudio=!1,this.usingAudioTag=!0,this.noAudio=!1,void 0}window.AudioContext?this.context=new window.AudioContext:window.webkitAudioContext?this.context=new window.webkitAudioContext:window.Audio?(this.usingWebAudio=!1,this.usingAudioTag=!0):(this.usingWebAudio=!1,this.noAudio=!0),null!==this.context&&(this.masterGain="undefined"==typeof this.context.createGain?this.context.createGainNode():this.context.createGain(),this.masterGain.gain.value=1,this.masterGain.connect(this.context.destination))},unlock:function(){if(this.touchLocked!==!1)if(this.game.device.webAudio===!1||window.PhaserGlobal&&window.PhaserGlobal.disableWebAudio===!0)this.touchLocked=!1,this._unlockSource=null,this.game.input.touch.callbackContext=null,this.game.input.touch.touchStartCallback=null,this.game.input.mouse.callbackContext=null,this.game.input.mouse.mouseDownCallback=null;else{var a=this.context.createBuffer(1,1,22050);this._unlockSource=this.context.createBufferSource(),this._unlockSource.buffer=a,this._unlockSource.connect(this.context.destination),this._unlockSource.noteOn(0)}},stopAll:function(){for(var a=0;a255)return d.Color.getColor(255,255,255);if(a>b)return d.Color.getColor(255,255,255);var e=a+Math.round(Math.random()*(b-a)),f=a+Math.round(Math.random()*(b-a)),g=a+Math.round(Math.random()*(b-a));return d.Color.getColor32(c,e,f,g)},getRGB:function(a){return{alpha:a>>>24,red:255&a>>16,green:255&a>>8,blue:255&a}},getWebRGB:function(a){var b=(a>>>24)/255,c=255&a>>16,d=255&a>>8,e=255&a;return"rgba("+c.toString()+","+d.toString()+","+e.toString()+","+b.toString()+")"},getAlpha:function(a){return a>>>24},getAlphaFloat:function(a){return(a>>>24)/255},getRed:function(a){return 255&a>>16},getGreen:function(a){return 255&a>>8},getBlue:function(a){return 255&a}},d.Physics={},d.Physics.Arcade=function(a){this.game=a,this.gravity=new d.Point,this.bounds=new d.Rectangle(0,0,a.world.width,a.world.height),this.maxObjects=10,this.maxLevels=4,this.OVERLAP_BIAS=4,this.quadTree=new d.QuadTree(this,this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this.quadTreeID=0,this._bounds1=new d.Rectangle,this._bounds2=new d.Rectangle,this._overlap=0,this._maxOverlap=0,this._velocity1=0,this._velocity2=0,this._newVelocity1=0,this._newVelocity2=0,this._average=0,this._mapData=[],this._mapTiles=0,this._result=!1,this._total=0,this._angle=0,this._dx=0,this._dy=0},d.Physics.Arcade.prototype={updateMotion:function(a){this._velocityDelta=60*.5*(this.computeVelocity(0,a,a.angularVelocity,a.angularAcceleration,a.angularDrag,a.maxAngular)-a.angularVelocity)*this.game.time.physicsElapsed,a.angularVelocity+=this._velocityDelta,a.rotation+=a.angularVelocity*this.game.time.physicsElapsed,a.angularVelocity+=this._velocityDelta,this._velocityDelta=60*.5*(this.computeVelocity(1,a,a.velocity.x,a.acceleration.x,a.drag.x,a.maxVelocity.x)-a.velocity.x)*this.game.time.physicsElapsed,a.velocity.x+=this._velocityDelta,a.x+=a.velocity.x*this.game.time.physicsElapsed,a.velocity.x+=this._velocityDelta,this._velocityDelta=60*.5*(this.computeVelocity(2,a,a.velocity.y,a.acceleration.y,a.drag.y,a.maxVelocity.y)-a.velocity.y)*this.game.time.physicsElapsed,a.velocity.y+=this._velocityDelta,a.y+=a.velocity.y*this.game.time.physicsElapsed,a.velocity.y+=this._velocityDelta},computeVelocity:function(a,b,c,d,e,f){return f=f||1e4,1==a&&b.allowGravity?c+=this.gravity.x+b.gravity.x:2==a&&b.allowGravity&&(c+=this.gravity.y+b.gravity.y),0!==d?c+=d*this.game.time.physicsElapsed:0!==e&&(this._drag=e*this.game.time.physicsElapsed,c-this._drag>0?c-=this._drag:c+this._drag<0?c+=this._drag:c=0),c>f?c=f:-f>c&&(c=-f),c},preUpdate:function(){this.quadTree.clear(),this.quadTreeID=0,this.quadTree=new d.QuadTree(this,this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels)},postUpdate:function(){this.quadTree.clear()},overlap:function(a,b,c,e,f){return c=c||null,e=e||null,f=f||c,this._result=!1,this._total=0,a&&b&&a.exists&&b.exists&&(a.type==d.SPRITE?b.type==d.SPRITE?this.overlapSpriteVsSprite(a,b,c,e,f):(b.type==d.GROUP||b.type==d.EMITTER)&&this.overlapSpriteVsGroup(a,b,c,e,f):a.type==d.GROUP?b.type==d.SPRITE?this.overlapSpriteVsGroup(b,a,c,e,f):(b.type==d.GROUP||b.type==d.EMITTER)&&this.overlapGroupVsGroup(a,b,c,e,f):a.type==d.EMITTER&&(b.type==d.SPRITE?this.overlapSpriteVsGroup(b,a,c,e,f):(b.type==d.GROUP||b.type==d.EMITTER)&&this.overlapGroupVsGroup(a,b,c,e,f))),this._total>0},overlapSpriteVsSprite:function(a,b,c,e,f){this._result=d.Rectangle.intersects(a.body,b.body),this._result&&(e?e.call(f,a,b)&&(this._total++,c&&c.call(f,a,b)):(this._total++,c&&c.call(f,a,b)))},overlapSpriteVsGroup:function(a,b,c,e,f){if(0!==b.length){this._potentials=this.quadTree.retrieve(a);for(var g=0,h=this._potentials.length;h>g;g++)this._potentials[g].sprite.group==b&&(this._result=d.Rectangle.intersects(a.body,this._potentials[g]),this._result&&e&&(this._result=e.call(f,a,this._potentials[g].sprite)),this._result&&(this._total++,c&&c.call(f,a,this._potentials[g].sprite)))}},overlapGroupVsGroup:function(a,b,c,d,e){if(0!==a.length&&0!==b.length&&a._container.first._iNext){var f=a._container.first._iNext;do f.exists&&this.overlapSpriteVsGroup(f,b,c,d,e),f=f._iNext;while(f!=a._container.last._iNext)}},collide:function(a,b,c,e,f){return c=c||null,e=e||null,f=f||c,this._result=!1,this._total=0,a&&b&&a.exists&&b.exists&&(a.type==d.SPRITE?b.type==d.SPRITE?this.collideSpriteVsSprite(a,b,c,e,f):b.type==d.GROUP||b.type==d.EMITTER?this.collideSpriteVsGroup(a,b,c,e,f):b.type==d.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,b,c,e,f):a.type==d.GROUP?b.type==d.SPRITE?this.collideSpriteVsGroup(b,a,c,e,f):b.type==d.GROUP||b.type==d.EMITTER?this.collideGroupVsGroup(a,b,c,e,f):b.type==d.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,b,c,e,f):a.type==d.TILEMAPLAYER?b.type==d.SPRITE?this.collideSpriteVsTilemapLayer(b,a,c,e,f):(b.type==d.GROUP||b.type==d.EMITTER)&&this.collideGroupVsTilemapLayer(b,a,c,e,f):a.type==d.EMITTER&&(b.type==d.SPRITE?this.collideSpriteVsGroup(b,a,c,e,f):b.type==d.GROUP||b.type==d.EMITTER?this.collideGroupVsGroup(a,b,c,e,f):b.type==d.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,b,c,e,f))),this._total>0},collideSpriteVsTilemapLayer:function(a,b,c,d,e){if(this._mapData=b.getTiles(a.body.x,a.body.y,a.body.width,a.body.height,!0),0!==this._mapData.length)for(var f=0;ff;f++)this._potentials[f].sprite.group==b&&(this.separate(a.body,this._potentials[f]),this._result&&d&&(this._result=d.call(e,a,this._potentials[f].sprite)),this._result&&(this._total++,c&&c.call(e,a,this._potentials[f].sprite)))}},collideGroupVsGroup:function(a,b,c,d,e){if(0!==a.length&&0!==b.length&&a._container.first._iNext){var f=a._container.first._iNext;do f.exists&&this.collideSpriteVsGroup(f,b,c,d,e),f=f._iNext;while(f!=a._container.last._iNext)}},separate:function(a,b){this._result=this.separateX(a,b)||this.separateY(a,b)},separateX:function(a,b){return a.immovable&&b.immovable?!1:(this._overlap=0,d.Rectangle.intersects(a,b)&&(this._maxOverlap=a.deltaAbsX()+b.deltaAbsX()+this.OVERLAP_BIAS,0===a.deltaX()&&0===b.deltaX()?(a.embedded=!0,b.embedded=!0):a.deltaX()>b.deltaX()?(this._overlap=a.x+a.width-b.x,this._overlap>this._maxOverlap||a.allowCollision.right===!1||b.allowCollision.left===!1?this._overlap=0:(a.touching.right=!0,b.touching.left=!0)):a.deltaX()this._maxOverlap||a.allowCollision.left===!1||b.allowCollision.right===!1?this._overlap=0:(a.touching.left=!0,b.touching.right=!0)),0!==this._overlap)?(a.overlapX=this._overlap,b.overlapX=this._overlap,a.customSeparateX||b.customSeparateX?!0:(this._velocity1=a.velocity.x,this._velocity2=b.velocity.x,a.immovable||b.immovable?a.immovable?b.immovable||(b.x+=this._overlap,b.velocity.x=this._velocity1-this._velocity2*b.bounce.x):(a.x=a.x-this._overlap,a.velocity.x=this._velocity2-this._velocity1*a.bounce.x):(this._overlap*=.5,a.x=a.x-this._overlap,b.x+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.x=this._average+this._newVelocity1*a.bounce.x,b.velocity.x=this._average+this._newVelocity2*b.bounce.x),a.updateHulls(),b.updateHulls(),!0)):!1)},separateY:function(a,b){return a.immovable&&b.immovable?!1:(this._overlap=0,d.Rectangle.intersects(a,b)&&(this._maxOverlap=a.deltaAbsY()+b.deltaAbsY()+this.OVERLAP_BIAS,0===a.deltaY()&&0===b.deltaY()?(a.embedded=!0,b.embedded=!0):a.deltaY()>b.deltaY()?(this._overlap=a.y+a.height-b.y,this._overlap>this._maxOverlap||a.allowCollision.down===!1||b.allowCollision.up===!1?this._overlap=0:(a.touching.down=!0,b.touching.up=!0)):a.deltaY()this._maxOverlap||a.allowCollision.up===!1||b.allowCollision.down===!1?this._overlap=0:(a.touching.up=!0,b.touching.down=!0)),0!==this._overlap)?(a.overlapY=this._overlap,b.overlapY=this._overlap,a.customSeparateY||b.customSeparateY?!0:(this._velocity1=a.velocity.y,this._velocity2=b.velocity.y,a.immovable||b.immovable?a.immovable?b.immovable||(b.y+=this._overlap,b.velocity.y=this._velocity1-this._velocity2*b.bounce.y,a.sprite.active&&a.moves&&a.deltaY()b.deltaY()&&(a.x+=b.x-b.lastX)):(this._overlap*=.5,a.y=a.y-this._overlap,b.y+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.y=this._average+this._newVelocity1*a.bounce.y,b.velocity.y=this._average+this._newVelocity2*b.bounce.y),a.updateHulls(),b.updateHulls(),!0)):!1)},separateTile:function(a,b){return this._result=this.separateTileX(a,b,!0)||this.separateTileY(a,b,!0),this._result},separateTileX:function(a,b,c){return a.immovable||0===a.deltaX()||d.Rectangle.intersects(a.hullX,b)===!1?!1:(this._overlap=0,a.deltaX()<0?(this._overlap=b.right-a.hullX.x,a.allowCollision.left===!1||b.tile.collideRight===!1?this._overlap=0:a.touching.left=!0):(this._overlap=a.hullX.right-b.x,a.allowCollision.right===!1||b.tile.collideLeft===!1?this._overlap=0:a.touching.right=!0),0!==this._overlap?(c&&(a.x=a.deltaX()<0?a.x+this._overlap:a.x-this._overlap,a.velocity.x=0===a.bounce.x?0:-a.velocity.x*a.bounce.x,a.updateHulls()),!0):!1)},separateTileY:function(a,b,c){return a.immovable||0===a.deltaY()||d.Rectangle.intersects(a.hullY,b)===!1?!1:(this._overlap=0,a.deltaY()<0?(this._overlap=b.bottom-a.hullY.y,a.allowCollision.up===!1||b.tile.collideDown===!1?this._overlap=0:a.touching.up=!0):(this._overlap=a.hullY.bottom-b.y,a.allowCollision.down===!1||b.tile.collideUp===!1?this._overlap=0:a.touching.down=!0),0!==this._overlap?(c&&(a.y=a.deltaY()<0?a.y+this._overlap:a.y-this._overlap,a.velocity.y=0===a.bounce.y?0:-a.velocity.y*a.bounce.y,a.updateHulls()),!0):!1)},moveToObject:function(a,b,c,d){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=0),this._angle=Math.atan2(b.y-a.y,b.x-a.x),d>0&&(c=this.distanceBetween(a,b)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*c,a.body.velocity.y=Math.sin(this._angle)*c,this._angle},moveToPointer:function(a,b,c,d){return"undefined"==typeof b&&(b=60),c=c||this.game.input.activePointer,"undefined"==typeof d&&(d=0),this._angle=this.angleToPointer(a,c),d>0&&(b=this.distanceToPointer(a,c)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*b,a.body.velocity.y=Math.sin(this._angle)*b,this._angle},moveToXY:function(a,b,c,d,e){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=0),this._angle=Math.atan2(c-a.y,b-a.x),e>0&&(d=this.distanceToXY(a,b,c)/(e/1e3)),a.body.velocity.x=Math.cos(this._angle)*d,a.body.velocity.y=Math.sin(this._angle)*d,this._angle},velocityFromAngle:function(a,b,c){return"undefined"==typeof b&&(b=60),c=c||new d.Point,c.setTo(Math.cos(this.game.math.degToRad(a))*b,Math.sin(this.game.math.degToRad(a))*b)},velocityFromRotation:function(a,b,c){return"undefined"==typeof b&&(b=60),c=c||new d.Point,c.setTo(Math.cos(a)*b,Math.sin(a)*b)},accelerationFromRotation:function(a,b,c){return"undefined"==typeof b&&(b=60),c=c||new d.Point,c.setTo(Math.cos(a)*b,Math.sin(a)*b)},accelerateToObject:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleBetween(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToPointer:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof b&&(b=this.game.input.activePointer),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleToPointer(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToXY:function(a,b,c,d,e,f){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=1e3),"undefined"==typeof f&&(f=1e3),this._angle=this.angleToXY(a,b,c),a.body.acceleration.setTo(Math.cos(this._angle)*d,Math.sin(this._angle)*d),a.body.maxVelocity.setTo(e,f),this._angle},distanceBetween:function(a,b){return this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToXY:function(a,b,c){return this._dx=a.x-b,this._dy=a.y-c,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},angleBetween:function(a,b){return this._dx=b.x-a.x,this._dy=b.y-a.y,Math.atan2(this._dy,this._dx)},angleToXY:function(a,b,c){return this._dx=b-a.x,this._dy=c-a.y,Math.atan2(this._dy,this._dx)},angleToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=b.worldX-a.x,this._dy=b.worldY-a.y,Math.atan2(this._dy,this._dx)}},d.Physics.Arcade.Body=function(a){this.sprite=a,this.game=a.game,this.offset=new d.Point,this.x=a.x,this.y=a.y,this.preX=a.x,this.preY=a.y,this.preRotation=a.angle,this.screenX=a.x,this.screenY=a.y,this.sourceWidth=a.currentFrame.sourceSizeW,this.sourceHeight=a.currentFrame.sourceSizeH,this.width=a.currentFrame.sourceSizeW,this.height=a.currentFrame.sourceSizeH,this.halfWidth=Math.floor(a.currentFrame.sourceSizeW/2),this.halfHeight=Math.floor(a.currentFrame.sourceSizeH/2),this.center=new d.Point(this.x+this.halfWidth,this.y+this.halfHeight),this._sx=a.scale.x,this._sy=a.scale.y,this.velocity=new d.Point,this.acceleration=new d.Point,this.drag=new d.Point,this.gravity=new d.Point,this.bounce=new d.Point,this.maxVelocity=new d.Point(1e4,1e4),this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.skipQuadTree=!1,this.quadTreeIDs=[],this.quadTreeIndex=-1,this.allowCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.facing=d.NONE,this.immovable=!1,this.moves=!0,this.rotation=0,this.allowRotation=!0,this.allowGravity=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.hullX=new d.Rectangle,this.hullY=new d.Rectangle,this.embedded=!1,this.collideWorldBounds=!1},d.Physics.Arcade.Body.prototype={updateBounds:function(a,b,c,d){(c!=this._sx||d!=this._sy)&&(this.width=this.sourceWidth*c,this.height=this.sourceHeight*d,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this._sx=c,this._sy=d,this.center.setTo(this.x+this.halfWidth,this.y+this.halfHeight))},preUpdate:function(){this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.embedded=!1,this.screenX=this.sprite.worldTransform[2]-this.sprite.anchor.x*this.width+this.offset.x,this.screenY=this.sprite.worldTransform[5]-this.sprite.anchor.y*this.height+this.offset.y,this.preX=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.preY=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.preRotation=this.sprite.angle,this.x=this.preX,this.y=this.preY,this.rotation=this.preRotation,this.moves&&(this.game.physics.updateMotion(this),this.collideWorldBounds&&this.checkWorldBounds(),this.updateHulls()),this.skipQuadTree===!1&&this.allowCollision.none===!1&&this.sprite.visible&&this.sprite.alive&&(this.quadTreeIDs=[],this.quadTreeIndex=-1,this.game.physics.quadTree.insert(this))},postUpdate:function(){this.deltaX()<0?this.facing=d.LEFT:this.deltaX()>0&&(this.facing=d.RIGHT),this.deltaY()<0?this.facing=d.UP:this.deltaY()>0&&(this.facing=d.DOWN),(0!==this.deltaX()||0!==this.deltaY())&&(this.sprite.x+=this.deltaX(),this.sprite.y+=this.deltaY(),this.center.setTo(this.x+this.halfWidth,this.y+this.halfHeight)),this.allowRotation&&(this.sprite.angle+=this.deltaZ())},updateHulls:function(){this.hullX.setTo(this.x,this.preY,this.width,this.height),this.hullY.setTo(this.preX,this.y,this.width,this.height)},checkWorldBounds:function(){this.xthis.game.world.bounds.right&&(this.x=this.game.world.bounds.right-this.width,this.velocity.x*=-this.bounce.x),this.ythis.game.world.bounds.bottom&&(this.y=this.game.world.bounds.bottom-this.height,this.velocity.y*=-this.bounce.y)},setSize:function(a,b,c,d){c=c||this.offset.x,d=d||this.offset.y,this.sourceWidth=a,this.sourceHeight=b,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.setTo(c,d),this.center.setTo(this.x+this.halfWidth,this.y+this.halfHeight)},reset:function(){this.velocity.setTo(0,0),this.acceleration.setTo(0,0),this.angularVelocity=0,this.angularAcceleration=0,this.preX=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.preY=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.preRotation=this.sprite.angle,this.x=this.preX,this.y=this.preY,this.rotation=this.preRotation,this.center.setTo(this.x+this.halfWidth,this.y+this.halfHeight)},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.x-this.preX},deltaY:function(){return this.y-this.preY},deltaZ:function(){return this.rotation-this.preRotation}},Object.defineProperty(d.Physics.Arcade.Body.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(d.Physics.Arcade.Body.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),d.Particles=function(a){this.game=a,this.emitters={},this.ID=0},d.Particles.prototype={add:function(a){return this.emitters[a.name]=a,a},remove:function(a){delete this.emitters[a.name]},update:function(){for(var a in this.emitters)this.emitters[a].exists&&this.emitters[a].update()}},d.Particles.Arcade={},d.Particles.Arcade.Emitter=function(a,b,c,e){this.maxParticles=e||50,d.Group.call(this,a),this.name="emitter"+this.game.particles.ID++,this.type=d.EMITTER,this.x=0,this.y=0,this.width=1,this.height=1,this.minParticleSpeed=new d.Point(-100,-100),this.maxParticleSpeed=new d.Point(100,100),this.minParticleScale=1,this.maxParticleScale=1,this.minRotation=-360,this.maxRotation=360,this.gravity=2,this.particleClass=null,this.particleDrag=new d.Point,this.angularDrag=0,this.frequency=100,this.lifespan=2e3,this.bounce=new d.Point,this._quantity=0,this._timer=0,this._counter=0,this._explode=!0,this.on=!1,this.exists=!0,this.emitX=b,this.emitY=c},d.Particles.Arcade.Emitter.prototype=Object.create(d.Group.prototype),d.Particles.Arcade.Emitter.prototype.constructor=d.Particles.Arcade.Emitter,d.Particles.Arcade.Emitter.prototype.update=function(){if(this.on)if(this._explode){this._counter=0;do this.emitParticle(),this._counter++;while(this._counter=this._timer&&(this.emitParticle(),this._counter++,this._quantity>0&&this._counter>=this._quantity&&(this.on=!1),this._timer=this.game.time.now+this.frequency)},d.Particles.Arcade.Emitter.prototype.makeParticles=function(a,b,c,e,f){"undefined"==typeof b&&(b=0),c=c||this.maxParticles,e=e||0,"undefined"==typeof f&&(f=!1);for(var g,h=0,i=a,j=0;c>h;)null==this.particleClass&&("object"==typeof a&&(i=this.game.rnd.pick(a)),"object"==typeof b&&(j=this.game.rnd.pick(b)),g=new d.Sprite(this.game,0,0,i,j)),e>0?(g.body.allowCollision.any=!0,g.body.allowCollision.none=!1):g.body.allowCollision.none=!0,g.body.collideWorldBounds=f,g.exists=!1,g.visible=!1,g.anchor.setTo(.5,.5),this.add(g),h++;return this},d.Particles.Arcade.Emitter.prototype.kill=function(){this.on=!1,this.alive=!1,this.exists=!1},d.Particles.Arcade.Emitter.prototype.revive=function(){this.alive=!0,this.exists=!0},d.Particles.Arcade.Emitter.prototype.start=function(a,b,c,d){"boolean"!=typeof a&&(a=!0),b=b||0,c=c||250,d=d||0,this.revive(),this.visible=!0,this.on=!0,this._explode=a,this.lifespan=b,this.frequency=c,a?this._quantity=d:this._quantity+=d,this._counter=0,this._timer=this.game.time.now+c},d.Particles.Arcade.Emitter.prototype.emitParticle=function(){var a=this.getFirstExists(!1);if(null!=a){if(this.width>1||this.height>1?a.reset(this.game.rnd.integerInRange(this.left,this.right),this.game.rnd.integerInRange(this.top,this.bottom)):a.reset(this.emitX,this.emitY),a.lifespan=this.lifespan,a.body.bounce.setTo(this.bounce.x,this.bounce.y),a.body.velocity.x=this.minParticleSpeed.x!=this.maxParticleSpeed.x?this.game.rnd.integerInRange(this.minParticleSpeed.x,this.maxParticleSpeed.x):this.minParticleSpeed.x,a.body.velocity.y=this.minParticleSpeed.y!=this.maxParticleSpeed.y?this.game.rnd.integerInRange(this.minParticleSpeed.y,this.maxParticleSpeed.y):this.minParticleSpeed.y,a.body.gravity.y=this.gravity,a.body.angularVelocity=this.minRotation!=this.maxRotation?this.game.rnd.integerInRange(this.minRotation,this.maxRotation):this.minRotation,1!==this.minParticleScale||1!==this.maxParticleScale){var b=this.game.rnd.realInRange(this.minParticleScale,this.maxParticleScale);a.scale.setTo(b,b)}a.body.drag.x=this.particleDrag.x,a.body.drag.y=this.particleDrag.y,a.body.angularDrag=this.angularDrag}},d.Particles.Arcade.Emitter.prototype.setSize=function(a,b){this.width=a,this.height=b},d.Particles.Arcade.Emitter.prototype.setXSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.x=a,this.maxParticleSpeed.x=b},d.Particles.Arcade.Emitter.prototype.setYSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.y=a,this.maxParticleSpeed.y=b},d.Particles.Arcade.Emitter.prototype.setRotation=function(a,b){a=a||0,b=b||0,this.minRotation=a,this.maxRotation=b},d.Particles.Arcade.Emitter.prototype.at=function(a){this.emitX=a.center.x,this.emitY=a.center.y},Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"alpha",{get:function(){return this._container.alpha},set:function(a){this._container.alpha=a}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"visible",{get:function(){return this._container.visible},set:function(a){this._container.visible=a}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"x",{get:function(){return this.emitX},set:function(a){this.emitX=a}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"y",{get:function(){return this.emitY},set:function(a){this.emitY=a}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"left",{get:function(){return Math.floor(this.x-this.width/2)}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"right",{get:function(){return Math.floor(this.x+this.width/2)}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"top",{get:function(){return Math.floor(this.y-this.height/2)}}),Object.defineProperty(d.Particles.Arcade.Emitter.prototype,"bottom",{get:function(){return Math.floor(this.y+this.height/2)}}),d.Tile=function(a,b,c,d,e,f){this.tileset=a,this.index=b,this.width=e,this.height=f,this.x=c,this.y=d,this.mass=1,this.collideNone=!0,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.separateX=!0,this.separateY=!0,this.collisionCallback=null,this.collisionCallbackContext=this},d.Tile.prototype={setCollisionCallback:function(a,b){this.collisionCallbackContext=b,this.collisionCallback=a},destroy:function(){this.tileset=null},setCollision:function(a,b,c,d){this.collideLeft=a,this.collideRight=b,this.collideUp=c,this.collideDown=d,this.collideNone=a||b||c||d?!1:!0},resetCollision:function(){this.collideNone=!0,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1}},Object.defineProperty(d.Tile.prototype,"bottom",{get:function(){return this.y+this.height}}),Object.defineProperty(d.Tile.prototype,"right",{get:function(){return this.x+this.width}}),d.Tilemap=function(a,b){this.game=a,this.layers=null,"string"==typeof b?(this.key=b,this.layers=a.cache.getTilemapData(b).layers,this.calculateIndexes()):this.layers=[],this.currentLayer=0,this.debugMap=[],this.dirty=!1,this._results=[],this._tempA=0,this._tempB=0},d.Tilemap.CSV=0,d.Tilemap.TILED_JSON=1,d.Tilemap.prototype={create:function(a,b,c){for(var e=[],f=0;c>f;f++){e[f]=[];for(var g=0;b>g;g++)e[f][g]=0}this.layers.push({name:a,width:b,height:c,alpha:1,visible:!0,tileMargin:0,tileSpacing:0,format:d.Tilemap.CSV,data:e,indexes:[]}),this.currentLayer=this.layers.length-1,this.dirty=!0},calculateIndexes:function(){for(var a=0;a=0&&b=0&&c=0&&a=0&&b=0&&a=0&&b=0&&b=0&&ca&&(a=0),0>b&&(b=0),c>this.layers[e].width&&(c=this.layers[e].width),d>this.layers[e].height&&(d=this.layers[e].height),this._results.length=0,this._results.push({x:a,y:b,width:c,height:d,layer:e});for(var f=b;b+d>f;f++)for(var g=a;a+c>g;g++)this._results.push({x:g,y:f,index:this.layers[e].data[f][g]});return this._results},paste:function(a,b,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),"undefined"==typeof d&&(d=this.currentLayer),c&&!(c.length<2)){for(var e=c[1].x-a,f=c[1].y-b,g=1;g1?this.debugMap[this.layers[this.currentLayer].data[c][d]]?b.push("background: "+this.debugMap[this.layers[this.currentLayer].data[c][d]]):b.push("background: #ffffff"):b.push("background: rgb(0, 0, 0)");a+="\n"}b[0]=a,console.log.apply(console,b)},destroy:function(){this.removeAllLayers(),this.game=null}},d.TilemapLayer=function(a,b,e,f,g,h,i,j){this.game=a,this.canvas=d.Canvas.create(f,g),this.context=this.canvas.getContext("2d"),this.baseTexture=new c.BaseTexture(this.canvas),this.texture=new c.Texture(this.baseTexture),this.textureFrame=new d.Frame(0,0,0,f,g,"tilemaplayer",a.rnd.uuid()),d.Sprite.call(this,this.game,b,e,this.texture,this.textureFrame),this.type=d.TILEMAPLAYER,this.fixedToCamera=!0,this.tileset=null,this.tileWidth=0,this.tileHeight=0,this.tileMargin=0,this.tileSpacing=0,this.widthInPixels=0,this.heightInPixels=0,this.renderWidth=f,this.renderHeight=g,this._ga=1,this._dx=0,this._dy=0,this._dw=0,this._dh=0,this._tx=0,this._ty=0,this._tw=0,this._th=0,this._tl=0,this._maxX=0,this._maxY=0,this._startX=0,this._startY=0,this._results=[],this._x=0,this._y=0,this._prevX=0,this._prevY=0,this.scrollFactorX=1,this.scrollFactorY=1,this.tilemap=null,this.layer=null,this.index=0,this.dirty=!0,(h instanceof d.Tileset||"string"==typeof h)&&this.updateTileset(h),i instanceof d.Tilemap&&this.updateMapData(i,j)},d.TilemapLayer.prototype=Object.create(d.Sprite.prototype),d.TilemapLayer.prototype=d.Utils.extend(!0,d.TilemapLayer.prototype,d.Sprite.prototype,c.Sprite.prototype),d.TilemapLayer.prototype.constructor=d.TilemapLayer,d.TilemapLayer.prototype.update=function(){this.scrollX=this.game.camera.x*this.scrollFactorX,this.scrollY=this.game.camera.y*this.scrollFactorY,this.render()},d.TilemapLayer.prototype.resizeWorld=function(){this.game.world.setBounds(0,0,this.widthInPixels,this.heightInPixels)},d.TilemapLayer.prototype.updateTileset=function(a){if(a instanceof d.Tileset)this.tileset=a;else{if("string"!=typeof a)return;this.tileset=this.game.cache.getTileset("tiles")}this.tileWidth=this.tileset.tileWidth,this.tileHeight=this.tileset.tileHeight,this.tileMargin=this.tileset.tileMargin,this.tileSpacing=this.tileset.tileSpacing,this.updateMax()},d.TilemapLayer.prototype.updateMapData=function(a,b){"undefined"==typeof b&&(b=0),a instanceof d.Tilemap&&(this.tilemap=a,this.layer=this.tilemap.layers[b],this.index=b,this.updateMax(),this.tilemap.dirty=!0)},d.TilemapLayer.prototype._fixX=function(a){if(1===this.scrollFactorX)return a;var b=a-this._x/this.scrollFactorX;return this._x+b},d.TilemapLayer.prototype._unfixX=function(a){if(1===this.scrollFactorX)return a;var b=a-this._x;return this._x/this.scrollFactorX+b},d.TilemapLayer.prototype._fixY=function(a){if(1===this.scrollFactorY)return a;var b=a-this._y/this.scrollFactorY;return this._y+b},d.TilemapLayer.prototype._unfixY=function(a){if(1===this.scrollFactorY)return a;var b=a-this._y;return this._y/this.scrollFactorY+b},d.TilemapLayer.prototype.getTileX=function(a){var b=this.tileWidth*this.scale.x;return this.game.math.snapToFloor(this._fixX(a),b)/b},d.TilemapLayer.prototype.getTileY=function(a){var b=this.tileHeight*this.scale.y;return this.game.math.snapToFloor(this._fixY(a),b)/b},d.TilemapLayer.prototype.getTileXY=function(a,b,c){return c.x=this.getTileX(a),c.y=this.getTileY(b),c},d.TilemapLayer.prototype.getTiles=function(a,b,c,d,e){if(null!==this.tilemap){"undefined"==typeof e&&(e=!1),0>a&&(a=0),0>b&&(b=0),a=this._fixX(a),b=this._fixY(b),c>this.widthInPixels&&(c=this.widthInPixels),d>this.heightInPixels&&(d=this.heightInPixels);var f=this.tileWidth*this.scale.x,g=this.tileHeight*this.scale.y;this._tx=this.game.math.snapToFloor(a,f)/f,this._ty=this.game.math.snapToFloor(b,g)/g,this._tw=(this.game.math.snapToCeil(c,f)+f)/f,this._th=(this.game.math.snapToCeil(d,g)+g)/g,this._results=[];for(var h=0,i=null,j=0,k=0,l=this._ty;lthis.layer.width&&(this._maxX=this.layer.width),this._maxY>this.layer.height&&(this._maxY=this.layer.height),this.widthInPixels=this.layer.width*this.tileWidth,this.heightInPixels=this.layer.height*this.tileHeight),this.dirty=!0},d.TilemapLayer.prototype.render=function(){if(this.tilemap&&this.tilemap.dirty&&(this.dirty=!0),this.dirty&&this.tileset&&this.tilemap&&this.visible){this._prevX=this._dx,this._prevY=this._dy,this._dx=-(this._x-this._startX*this.tileWidth),this._dy=-(this._y-this._startY*this.tileHeight),this._tx=this._dx,this._ty=this._dy,this.context.clearRect(0,0,this.canvas.width,this.canvas.height);for(var a=this._startY;a0?this.deltaX():-this.deltaX()},d.TilemapLayer.prototype.deltaAbsY=function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},d.TilemapLayer.prototype.deltaX=function(){return this._dx-this._prevX},d.TilemapLayer.prototype.deltaY=function(){return this._dy-this._prevY},Object.defineProperty(d.TilemapLayer.prototype,"scrollX",{get:function(){return this._x},set:function(a){a!==this._x&&a>=0&&this.layer&&(this._x=a,this._x>this.widthInPixels-this.renderWidth&&(this._x=this.widthInPixels-this.renderWidth),this._startX=this.game.math.floor(this._x/this.tileWidth),this._startX<0&&(this._startX=0),this._startX+this._maxX>this.layer.width&&(this._startX=this.layer.width-this._maxX),this.dirty=!0)}}),Object.defineProperty(d.TilemapLayer.prototype,"scrollY",{get:function(){return this._y},set:function(a){a!==this._y&&a>=0&&this.layer&&(this._y=a,this._y>this.heightInPixels-this.renderHeight&&(this._y=this.heightInPixels-this.renderHeight),this._startY=this.game.math.floor(this._y/this.tileHeight),this._startY<0&&(this._startY=0),this._startY+this._maxY>this.layer.height&&(this._startY=this.layer.height-this._maxY),this.dirty=!0)}}),d.TilemapParser={tileset:function(a,b,c,e,f,g,h){var i=a.cache.getTilesetImage(b);if(null==i)return null;var j=i.width,k=i.height;0>=c&&(c=Math.floor(-j/Math.min(-1,c))),0>=e&&(e=Math.floor(-k/Math.min(-1,e)));var l=Math.round(j/c),m=Math.round(k/e),n=l*m;if(-1!==f&&(n=f),0===j||0===k||c>j||e>k||0===n)return console.warn("Phaser.TilemapParser.tileSet: width/height zero or width/height < given tileWidth/tileHeight"),null;for(var o=g,p=g,q=new d.Tileset(i,b,c,e,g,h),r=0;n>r;r++)q.addTile(new d.Tile(q,r,o,p,c,e)),o+=c+h,o===j&&(o=g,p+=e+h);return q},parse:function(a,b,c){return c===d.Tilemap.CSV?this.parseCSV(b):c===d.Tilemap.TILED_JSON?this.parseTiledJSON(b):void 0},parseCSV:function(a){a=a.trim();for(var b=[],c=a.split("\n"),d=c.length,e=0,f=0;fa)for(var g=a;b>=g;g++)this.tiles[g].setCollision(c,d,e,f)},setCollision:function(a,b,c,d,e){this.tiles[a]&&this.tiles[a].setCollision(b,c,d,e)}},Object.defineProperty(d.Tileset.prototype,"total",{get:function(){return this.tiles.length}}),c.CanvasRenderer.prototype.render=function(a){c.texturesToUpdate.length=0,c.texturesToDestroy.length=0,c.visibleCount++,a.updateTransform(),this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.width,this.height),this.renderDisplayObject(a),c.Texture.frameUpdates.length>0&&(c.Texture.frameUpdates.length=0)},c.CanvasRenderer.prototype.renderDisplayObject=function(a){var b=a.last._iNext;a=a.first;do if(a.visible)if(a.renderable&&0!==a.alpha){if(a instanceof c.Sprite)a.texture.frame&&(this.context.globalAlpha=a.worldAlpha,a.texture.trimmed?this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2]+a.texture.trim.x,a.worldTransform[5]+a.texture.trim.y):this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2],a.worldTransform[5]),this.context.drawImage(a.texture.baseTexture.source,a.texture.frame.x,a.texture.frame.y,a.texture.frame.width,a.texture.frame.height,a.anchor.x*-a.texture.frame.width,a.anchor.y*-a.texture.frame.height,a.texture.frame.width,a.texture.frame.height));else if(a instanceof c.Strip)this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2],a.worldTransform[5]),this.renderStrip(a);else if(a instanceof c.TilingSprite)this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2],a.worldTransform[5]),this.renderTilingSprite(a);else if(a instanceof c.CustomRenderable)a.renderCanvas(this);else if(a instanceof c.Graphics)this.context.setTransform(a.worldTransform[0],a.worldTransform[3],a.worldTransform[1],a.worldTransform[4],a.worldTransform[2],a.worldTransform[5]),c.CanvasGraphics.renderGraphics(a,this.context);else if(a instanceof c.FilterBlock)if(a.open){this.context.save();var d=a.mask.alpha,e=a.mask.worldTransform;this.context.setTransform(e[0],e[3],e[1],e[4],e[2],e[5]),a.mask.worldAlpha=.5,this.context.worldAlpha=0,c.CanvasGraphics.renderGraphicsMask(a.mask,this.context),this.context.clip(),a.mask.worldAlpha=d}else this.context.restore();a=a._iNext}else a=a._iNext;else a=a.last._iNext;while(a!=b)},c.WebGLBatch.prototype.update=function(){for(var a,b,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r=0,s=this.head;s;){if(s.vcount===c.visibleCount){if(b=s.texture.frame.width,d=s.texture.frame.height,e=s.anchor.x,f=s.anchor.y,g=b*(1-e),h=b*-e,i=d*(1-f),j=d*-f,k=8*r,a=s.worldTransform,l=a[0],m=a[3],n=a[1],o=a[4],p=a[2],q=a[5],s.texture.trimmed&&(p+=s.texture.trim.x,q+=s.texture.trim.y),this.verticies[k+0]=l*h+n*j+p,this.verticies[k+1]=o*j+m*h+q,this.verticies[k+2]=l*g+n*j+p,this.verticies[k+3]=o*j+m*g+q,this.verticies[k+4]=l*g+n*i+p,this.verticies[k+5]=o*i+m*g+q,this.verticies[k+6]=l*h+n*i+p,this.verticies[k+7]=o*i+m*h+q,s.updateFrame||s.texture.updateFrame){this.dirtyUVS=!0;var t=s.texture,u=t.frame,v=t.baseTexture.width,w=t.baseTexture.height;this.uvs[k+0]=u.x/v,this.uvs[k+1]=u.y/w,this.uvs[k+2]=(u.x+u.width)/v,this.uvs[k+3]=u.y/w,this.uvs[k+4]=(u.x+u.width)/v,this.uvs[k+5]=(u.y+u.height)/w,this.uvs[k+6]=u.x/v,this.uvs[k+7]=(u.y+u.height)/w,s.updateFrame=!1}if(s.cacheAlpha!=s.worldAlpha){s.cacheAlpha=s.worldAlpha;var x=4*r;this.colors[x]=this.colors[x+1]=this.colors[x+2]=this.colors[x+3]=s.worldAlpha,this.dirtyColors=!0}}else k=8*r,this.verticies[k+0]=0,this.verticies[k+1]=0,this.verticies[k+2]=0,this.verticies[k+3]=0,this.verticies[k+4]=0,this.verticies[k+5]=0,this.verticies[k+6]=0,this.verticies[k+7]=0;r++,s=s.__next}},d}); \ No newline at end of file diff --git a/tutorials/Spanish/01 Comenzando/hellophaser/phaser.png b/tutorials/Spanish/01 Comenzando/hellophaser/phaser.png new file mode 100644 index 0000000000000000000000000000000000000000..a37a23af62a9a2f7ad6c0676d6b64810eba89af8 GIT binary patch literal 180337 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≪FlD{saED?lL3>dvNW~evUg%I~hyi#*=|w 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∓M+E1WFqlN-7B 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�&`K&)0ST-%5Ck2agELY+pO(jLAI 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 !LcA z)jXh2k(~Xe#6xpSJW;ma+;%O__7ADdv+0O{%ENb4i`-$`^f{&I6K#wtm87#TeKj3_ z&P8vR9`&(H)A@iTv%Lf@hlLgJByH7G8pKrGTlawN-K%O}nsi&8M`H3@SAxtsSa0Wu?rRhl(9E+YDE0zQu+A`n!ux|} zTjHvor6{*+b#o9VT4M^CmA9R13G+{_q4)JtXO4l@C(72Gf1~1BZ;uWz>&)1CcnX5G z2ud@J4{t-i50iM8#bYYGo(dU0gEo$QtRx$~Y_i-0d>GpzLpuYy(m>)g0Y3!x{B%p+ zIVzc)1^VL#^m}BO`cRYYhZ0X%^ViJgSsn>CMSy>r8UI{C-L14Zl6+?B{VQikKiv!@0RPD+HTZXQwDe#x2!N>!shy>` zwG4M4We~A}0X6`zLMbf)mDm7em&b!b(YMOHGJMn*8TsvsG(a#2%0QggMnH)Xz>s%R zm0F$u@sa)sgCK?=8N+aL0lfSFMVz85Ut?3o=yB)FPV>}@wg{#lo)E8j1R{F4t2z=XpF zz+g*COF%X`YGo=OsFcov2^g=7Mhem?nV}TKaG7^xsXTJ}VFX-S))7BXsC8lhc#RYx zxl8ryEF+L+P^ShAfi?yyHUOa^fYx6&y>8|-2E5AbCX`i8C1QvdII_@R4vW|@B-tp0 ztBRa@vncM#>a=}@m2B|qxpOb+PXt55t13$ayY5%y2Kb!P%Aynnd4Rqp%pSp77?3pj zPaCi&-F8_~!Da)g0iW0tSRRWhDh^Sxr~yCAYY2cpr2!uU)CJTT@I%nwV?aN&0Acpd zyrAD4u&b+cqilbakFe!YwjWgo=Nq{4Y=XK=?9Fpfvw1%C{KKRhX(D@g;=E-&YcWje zPAI=JYstUW4bQ>%S+s@2=9bpK=(fl(_UBXbS*Uk^2>zoJb;~W6we-_NGL<8gf1v*Z z{Pm5p%tx8*$Vm*KW7t@LM07xnERsf}i;RMKrB(in#9 z$ZiRmd5%Io#bP3{D)~l=D&PdTzToV0v=3`8>}#R z5e9Yh6g2<^f(I~}adZXnv~K+y=Jmr^Fhf;27=b`nuEG;YD@PSldchk=hu(l6=C12X zUGWO?yrx5sfDJ>V&dfC-o&mgqbeEQhu=qY^-mY9?EwkflnG;tj&qZy4tnhPSq1$M< zgngS;i7Yi^AzKFv!-C{>ijhJwUS(wCBy^Bg@pnikV)B}4^V;(LkR|0;*$b*tnE@Xw zyDS!D1@uiJmXUM{A%kBLo2BIg^e6Kg^j%CegHf0P`o01Eo(>IeLo+}>Wcv=Y{kH1d z8KB?4p(~h|?7S%R{FVa$A;?vl*9sq~-18i43rRjGHt<_{x)UNe-O+XxgSHej_G0+EK2p&>BK7=v=7 zWe~7ZwHhhDEF*4^x0(fI&9)L~fe^IIG2seax49BIy`=KitYpqn%T~mLbUdc8sOacr zK2yo86ms+p;9HQs!0538Hd?$Cf9`z@^hK0B@JjPq!JuC(&pdUG+?rlFND!J66jQ9mB^SlWBFKC=UNYdPm`}ICc4e}ls z>u;BQ7J7WKb`JZm_b(m%XBq(6A_gFg0l)x6OWY=n5ugcU1gPBz$M# zF$Sm_R#8JRpD_p*9!KyP%Wtie%SM4OvC6zk&1K0*VTvvTz&#!DAY8)Sg9y7%wpK|l zD}29R%M*1}HOrC~%4lwl#&o=t0sEq)>9|2Q84oBZv;}Md_5}d`gocYC9H3$V9}Iu8 z8NhWGkai+JmX}gtRc^byLvu3yknIEXk6)Wm&js5*Br?zQoW}X0)bku$go7UB-MsVz z`9K4`i%C8UZhIDPlSFI|B{))CTwtb$f0L@cDX| z0sZi&s)OzK&erpX4d|bCYO4dMfc`)`)1Mdg4*}ahQe_@&|4)Dc02e>2)bf}6o&W#< M07*qoM6N<$f|g~m$p8QV literal 0 HcmV?d00001 diff --git a/tutorials/Spanish/01 Comenzando/images/cloneFrom.jpg b/tutorials/Spanish/01 Comenzando/images/cloneFrom.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e72b554ef80def040dcf80324827846085863988 GIT binary patch literal 115236 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�D~nVZlgE+h#|!N#WMd4`cg)0{Fn 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 z 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 literal 0 HcmV?d00001 diff --git a/tutorials/Spanish/01 Comenzando/images/editor.jpg b/tutorials/Spanish/01 Comenzando/images/editor.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d6e4ea9e615983f5e53e32cf5566abd8d7aaf37 GIT binary patch literal 117383 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

N~e4~Ic4GSNe)I1l3KEAS^*NS)MQwjzKF7 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 literal 0 HcmV?d00001 diff --git a/tutorials/Spanish/01 Comenzando/images/start.jpg b/tutorials/Spanish/01 Comenzando/images/start.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5d43163c04c6626686c1ea05eda89bd77e1149b GIT binary patch literal 99978 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�hv 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