diff --git a/README.md b/README.md
index 40a17cc9e6..6455f10cb3 100644
--- a/README.md
+++ b/README.md
@@ -30,15 +30,15 @@ bun create @phaserjs/game@latest
We support all of the following frameworks and bundlers:
-| Frameworks | Bundlers |
-| --------- | ------- |
-| Vue.js | Vite |
-| React | Rollup |
-| Angular | Parcel |
-| Next.js | Webpack |
-| SolidJS | ESBuild |
-| Svelte | Import Map |
-| Remix | Bun |
+| Frameworks | Bundlers |
+| ---------- | ---------- |
+| Vue.js | Vite |
+| React | Rollup |
+| Angular | Parcel |
+| Next.js | Webpack |
+| SolidJS | ESBuild |
+| Svelte | Import Map |
+| Remix | Bun |
Most come in both JavaScript and TypeScript versions.
@@ -90,9 +90,9 @@ We maintain documentation for the most recent versions of Phaser on this site.
We recommend the following to begin your journey:
-* [Getting Started with Phaser 3](https://phaser.io/tutorials/getting-started-phaser3) (useful if you are completely new to Phaser)
-* [Making your first Phaser 3 Game](https://phaser.io/tutorials/making-your-first-phaser-3-game)
-* Plus, there are [over 700 Phaser tutorials](https://phaser.io/learn) listed on our website.
+- [Getting Started with Phaser 3](https://phaser.io/tutorials/getting-started-phaser3) (useful if you are completely new to Phaser)
+- [Making your first Phaser 3 Game](https://phaser.io/tutorials/making-your-first-phaser-3-game)
+- Plus, there are [over 700 Phaser tutorials](https://phaser.io/learn) listed on our website.
New tutorials are being published every week, so check our site for more.
@@ -112,7 +112,7 @@ Register for a free Phaser account to [download the book](https://phaser.io/news
## Source Code Examples
-We have created hundreds of examples and they are all available with full source code and assets.
+We have created hundreds of examples and they are all available with full source code and assets.
Browse our brand new [Phaser Examples site](https://phaser.io/examples).
@@ -136,8 +136,20 @@ Read more about [Phaser Compressor](https://phaser.io/news/2024/05/phaser-compre
We meticulously keep track of new features, updates and bug fixes in our change logs. Each version of Phaser has its own change log:
-* [v3.88 Change Log](changelog/3.88/CHANGELOG-v3.88.md)
-* [v3.0.0 to v3.87 Change Logs](CHANGELOG.md)
+- [v3.88 Change Log](changelog/3.88/CHANGELOG-v3.88.md)
+- [v3.0.0 to v3.87 Change Logs](CHANGELOG.md)
+
+## Testing Phaser
+
+Phaser now includes a testing framework using Jest. To run the tests:
+
+```bash
+npm test
+```
+
+For more information about testing, see the [tests/README.md](tests/README.md) file.
+
+If you'd like to contribute tests, please see the [tests/CONTRIBUTING.md](tests/CONTRIBUTING.md) file for guidelines.
## Have fun!
diff --git a/coverage/clover.xml b/coverage/clover.xml
new file mode 100644
index 0000000000..8f591edf87
--- /dev/null
+++ b/coverage/clover.xml
@@ -0,0 +1,861 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json
new file mode 100644
index 0000000000..2f0a9b0405
--- /dev/null
+++ b/coverage/coverage-final.json
@@ -0,0 +1,28 @@
+{"/Users/normanqian/fractalcamp/phaser/src/core/TimeStep.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/core/TimeStep.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":37}},"1":{"start":{"line":8,"column":15},"end":{"line":8,"column":50}},"2":{"start":{"line":9,"column":11},"end":{"line":9,"column":35}},"3":{"start":{"line":10,"column":28},"end":{"line":10,"column":67}},"4":{"start":{"line":37,"column":15},"end":{"line":882,"column":2}},"5":{"start":{"line":51,"column":8},"end":{"line":51,"column":25}},"6":{"start":{"line":61,"column":8},"end":{"line":61,"column":47}},"7":{"start":{"line":72,"column":8},"end":{"line":72,"column":29}},"8":{"start":{"line":86,"column":8},"end":{"line":86,"column":29}},"9":{"start":{"line":99,"column":8},"end":{"line":99,"column":49}},"10":{"start":{"line":113,"column":8},"end":{"line":113,"column":56}},"11":{"start":{"line":138,"column":8},"end":{"line":138,"column":53}},"12":{"start":{"line":152,"column":8},"end":{"line":152,"column":47}},"13":{"start":{"line":162,"column":8},"end":{"line":162,"column":74}},"14":{"start":{"line":174,"column":8},"end":{"line":174,"column":39}},"15":{"start":{"line":186,"column":8},"end":{"line":186,"column":45}},"16":{"start":{"line":197,"column":8},"end":{"line":197,"column":40}},"17":{"start":{"line":210,"column":8},"end":{"line":210,"column":31}},"18":{"start":{"line":221,"column":8},"end":{"line":221,"column":34}},"19":{"start":{"line":231,"column":8},"end":{"line":231,"column":29}},"20":{"start":{"line":243,"column":8},"end":{"line":243,"column":74}},"21":{"start":{"line":256,"column":8},"end":{"line":256,"column":22}},"22":{"start":{"line":268,"column":8},"end":{"line":268,"column":27}},"23":{"start":{"line":280,"column":8},"end":{"line":280,"column":26}},"24":{"start":{"line":292,"column":8},"end":{"line":292,"column":23}},"25":{"start":{"line":305,"column":8},"end":{"line":305,"column":28}},"26":{"start":{"line":316,"column":8},"end":{"line":316,"column":31}},"27":{"start":{"line":327,"column":8},"end":{"line":327,"column":28}},"28":{"start":{"line":338,"column":8},"end":{"line":338,"column":27}},"29":{"start":{"line":348,"column":8},"end":{"line":348,"column":23}},"30":{"start":{"line":358,"column":8},"end":{"line":358,"column":28}},"31":{"start":{"line":367,"column":8},"end":{"line":367,"column":31}},"32":{"start":{"line":379,"column":8},"end":{"line":379,"column":70}},"33":{"start":{"line":392,"column":8},"end":{"line":392,"column":58}},"34":{"start":{"line":405,"column":8},"end":{"line":405,"column":26}},"35":{"start":{"line":419,"column":8},"end":{"line":419,"column":21}},"36":{"start":{"line":435,"column":8},"end":{"line":435,"column":63}},"37":{"start":{"line":446,"column":8},"end":{"line":446,"column":29}},"38":{"start":{"line":457,"column":8},"end":{"line":457,"column":28}},"39":{"start":{"line":459,"column":8},"end":{"line":459,"column":26}},"40":{"start":{"line":470,"column":8},"end":{"line":470,"column":51}},"41":{"start":{"line":481,"column":8},"end":{"line":481,"column":26}},"42":{"start":{"line":483,"column":8},"end":{"line":483,"column":57}},"43":{"start":{"line":484,"column":8},"end":{"line":484,"column":45}},"44":{"start":{"line":496,"column":18},"end":{"line":496,"column":42}},"45":{"start":{"line":498,"column":8},"end":{"line":498,"column":24}},"46":{"start":{"line":499,"column":8},"end":{"line":499,"column":28}},"47":{"start":{"line":500,"column":8},"end":{"line":500,"column":40}},"48":{"start":{"line":501,"column":8},"end":{"line":501,"column":34}},"49":{"start":{"line":505,"column":8},"end":{"line":508,"column":9}},"50":{"start":{"line":505,"column":21},"end":{"line":505,"column":22}},"51":{"start":{"line":507,"column":12},"end":{"line":507,"column":80}},"52":{"start":{"line":510,"column":8},"end":{"line":510,"column":23}},"53":{"start":{"line":511,"column":8},"end":{"line":511,"column":28}},"54":{"start":{"line":513,"column":8},"end":{"line":513,"column":39}},"55":{"start":{"line":527,"column":8},"end":{"line":530,"column":9}},"56":{"start":{"line":529,"column":12},"end":{"line":529,"column":24}},"57":{"start":{"line":532,"column":8},"end":{"line":532,"column":28}},"58":{"start":{"line":533,"column":8},"end":{"line":533,"column":28}},"59":{"start":{"line":535,"column":8},"end":{"line":538,"column":9}},"60":{"start":{"line":535,"column":21},"end":{"line":535,"column":22}},"61":{"start":{"line":537,"column":12},"end":{"line":537,"column":48}},"62":{"start":{"line":540,"column":8},"end":{"line":540,"column":26}},"63":{"start":{"line":542,"column":8},"end":{"line":542,"column":50}},"64":{"start":{"line":544,"column":8},"end":{"line":544,"column":33}},"65":{"start":{"line":546,"column":19},"end":{"line":546,"column":91}},"66":{"start":{"line":548,"column":8},"end":{"line":548,"column":65}},"67":{"start":{"line":565,"column":18},"end":{"line":565,"column":33}},"68":{"start":{"line":566,"column":22},"end":{"line":566,"column":39}},"69":{"start":{"line":567,"column":18},"end":{"line":567,"column":40}},"70":{"start":{"line":569,"column":8},"end":{"line":574,"column":9}},"71":{"start":{"line":571,"column":12},"end":{"line":571,"column":29}},"72":{"start":{"line":573,"column":12},"end":{"line":573,"column":50}},"73":{"start":{"line":576,"column":8},"end":{"line":585,"column":9}},"74":{"start":{"line":581,"column":12},"end":{"line":581,"column":33}},"75":{"start":{"line":584,"column":12},"end":{"line":584,"column":47}},"76":{"start":{"line":590,"column":8},"end":{"line":590,"column":29}},"77":{"start":{"line":594,"column":8},"end":{"line":594,"column":26}},"78":{"start":{"line":596,"column":8},"end":{"line":599,"column":9}},"79":{"start":{"line":598,"column":12},"end":{"line":598,"column":32}},"80":{"start":{"line":602,"column":18},"end":{"line":602,"column":19}},"81":{"start":{"line":604,"column":8},"end":{"line":607,"column":9}},"82":{"start":{"line":604,"column":21},"end":{"line":604,"column":22}},"83":{"start":{"line":606,"column":12},"end":{"line":606,"column":30}},"84":{"start":{"line":610,"column":8},"end":{"line":610,"column":19}},"85":{"start":{"line":612,"column":8},"end":{"line":612,"column":19}},"86":{"start":{"line":645,"column":8},"end":{"line":645,"column":78}},"87":{"start":{"line":646,"column":8},"end":{"line":646,"column":41}},"88":{"start":{"line":647,"column":8},"end":{"line":647,"column":34}},"89":{"start":{"line":662,"column":8},"end":{"line":662,"column":24}},"90":{"start":{"line":666,"column":20},"end":{"line":666,"column":53}},"91":{"start":{"line":668,"column":8},"end":{"line":668,"column":30}},"92":{"start":{"line":671,"column":8},"end":{"line":671,"column":35}},"93":{"start":{"line":673,"column":8},"end":{"line":676,"column":9}},"94":{"start":{"line":675,"column":12},"end":{"line":675,"column":44}},"95":{"start":{"line":679,"column":8},"end":{"line":679,"column":28}},"96":{"start":{"line":681,"column":8},"end":{"line":684,"column":9}},"97":{"start":{"line":683,"column":12},"end":{"line":683,"column":33}},"98":{"start":{"line":686,"column":8},"end":{"line":686,"column":32}},"99":{"start":{"line":688,"column":8},"end":{"line":693,"column":9}},"100":{"start":{"line":690,"column":12},"end":{"line":690,"column":44}},"101":{"start":{"line":692,"column":12},"end":{"line":692,"column":27}},"102":{"start":{"line":696,"column":8},"end":{"line":696,"column":29}},"103":{"start":{"line":698,"column":8},"end":{"line":698,"column":21}},"104":{"start":{"line":713,"column":8},"end":{"line":713,"column":24}},"105":{"start":{"line":717,"column":20},"end":{"line":717,"column":53}},"106":{"start":{"line":719,"column":8},"end":{"line":719,"column":30}},"107":{"start":{"line":722,"column":8},"end":{"line":722,"column":35}},"108":{"start":{"line":724,"column":8},"end":{"line":727,"column":9}},"109":{"start":{"line":726,"column":12},"end":{"line":726,"column":44}},"110":{"start":{"line":730,"column":8},"end":{"line":730,"column":27}},"111":{"start":{"line":732,"column":8},"end":{"line":735,"column":9}},"112":{"start":{"line":734,"column":12},"end":{"line":734,"column":33}},"113":{"start":{"line":737,"column":8},"end":{"line":737,"column":32}},"114":{"start":{"line":739,"column":8},"end":{"line":739,"column":35}},"115":{"start":{"line":742,"column":8},"end":{"line":742,"column":29}},"116":{"start":{"line":744,"column":8},"end":{"line":744,"column":21}},"117":{"start":{"line":755,"column":18},"end":{"line":755,"column":42}},"118":{"start":{"line":757,"column":8},"end":{"line":764,"column":9}},"119":{"start":{"line":759,"column":12},"end":{"line":759,"column":35}},"120":{"start":{"line":763,"column":12},"end":{"line":763,"column":27}},"121":{"start":{"line":775,"column":8},"end":{"line":780,"column":9}},"122":{"start":{"line":777,"column":12},"end":{"line":777,"column":28}},"123":{"start":{"line":779,"column":12},"end":{"line":779,"column":33}},"124":{"start":{"line":794,"column":8},"end":{"line":794,"column":57}},"125":{"start":{"line":794,"column":38},"end":{"line":794,"column":55}},"126":{"start":{"line":796,"column":18},"end":{"line":796,"column":42}},"127":{"start":{"line":798,"column":8},"end":{"line":805,"column":9}},"128":{"start":{"line":800,"column":12},"end":{"line":800,"column":19}},"129":{"start":{"line":802,"column":13},"end":{"line":805,"column":9}},"130":{"start":{"line":804,"column":12},"end":{"line":804,"column":69}},"131":{"start":{"line":807,"column":19},"end":{"line":807,"column":91}},"132":{"start":{"line":809,"column":8},"end":{"line":809,"column":65}},"133":{"start":{"line":811,"column":8},"end":{"line":811,"column":28}},"134":{"start":{"line":813,"column":8},"end":{"line":813,"column":40}},"135":{"start":{"line":814,"column":8},"end":{"line":814,"column":34}},"136":{"start":{"line":815,"column":8},"end":{"line":815,"column":39}},"137":{"start":{"line":817,"column":8},"end":{"line":817,"column":20}},"138":{"start":{"line":830,"column":8},"end":{"line":830,"column":65}},"139":{"start":{"line":843,"column":8},"end":{"line":843,"column":58}},"140":{"start":{"line":856,"column":8},"end":{"line":856,"column":29}},"141":{"start":{"line":857,"column":8},"end":{"line":857,"column":29}},"142":{"start":{"line":859,"column":8},"end":{"line":859,"column":24}},"143":{"start":{"line":861,"column":8},"end":{"line":861,"column":20}},"144":{"start":{"line":873,"column":8},"end":{"line":873,"column":20}},"145":{"start":{"line":875,"column":8},"end":{"line":875,"column":27}},"146":{"start":{"line":877,"column":8},"end":{"line":877,"column":24}},"147":{"start":{"line":878,"column":8},"end":{"line":878,"column":25}},"148":{"start":{"line":879,"column":8},"end":{"line":879,"column":29}},"149":{"start":{"line":884,"column":0},"end":{"line":884,"column":26}}},"fnMap":{"0":{"name":"TimeStep","decl":{"start":{"line":41,"column":13},"end":{"line":41,"column":21}},"loc":{"start":{"line":42,"column":4},"end":{"line":436,"column":5}},"line":42},"1":{"name":"(anonymous_1)","decl":{"start":{"line":444,"column":10},"end":{"line":444,"column":11}},"loc":{"start":{"line":445,"column":4},"end":{"line":447,"column":5}},"line":445},"2":{"name":"(anonymous_2)","decl":{"start":{"line":455,"column":11},"end":{"line":455,"column":12}},"loc":{"start":{"line":456,"column":4},"end":{"line":460,"column":5}},"line":456},"3":{"name":"(anonymous_3)","decl":{"start":{"line":468,"column":11},"end":{"line":468,"column":12}},"loc":{"start":{"line":469,"column":4},"end":{"line":471,"column":5}},"line":469},"4":{"name":"(anonymous_4)","decl":{"start":{"line":479,"column":12},"end":{"line":479,"column":13}},"loc":{"start":{"line":480,"column":4},"end":{"line":485,"column":5}},"line":480},"5":{"name":"(anonymous_5)","decl":{"start":{"line":494,"column":16},"end":{"line":494,"column":17}},"loc":{"start":{"line":495,"column":4},"end":{"line":514,"column":5}},"line":495},"6":{"name":"(anonymous_6)","decl":{"start":{"line":525,"column":11},"end":{"line":525,"column":12}},"loc":{"start":{"line":526,"column":4},"end":{"line":549,"column":5}},"line":526},"7":{"name":"(anonymous_7)","decl":{"start":{"line":563,"column":17},"end":{"line":563,"column":18}},"loc":{"start":{"line":564,"column":4},"end":{"line":613,"column":5}},"line":564},"8":{"name":"(anonymous_8)","decl":{"start":{"line":643,"column":15},"end":{"line":643,"column":16}},"loc":{"start":{"line":644,"column":4},"end":{"line":648,"column":5}},"line":644},"9":{"name":"(anonymous_9)","decl":{"start":{"line":660,"column":18},"end":{"line":660,"column":19}},"loc":{"start":{"line":661,"column":4},"end":{"line":699,"column":5}},"line":661},"10":{"name":"(anonymous_10)","decl":{"start":{"line":711,"column":10},"end":{"line":711,"column":11}},"loc":{"start":{"line":712,"column":4},"end":{"line":745,"column":5}},"line":712},"11":{"name":"(anonymous_11)","decl":{"start":{"line":753,"column":10},"end":{"line":753,"column":11}},"loc":{"start":{"line":754,"column":4},"end":{"line":765,"column":5}},"line":754},"12":{"name":"(anonymous_12)","decl":{"start":{"line":773,"column":11},"end":{"line":773,"column":12}},"loc":{"start":{"line":774,"column":4},"end":{"line":781,"column":5}},"line":774},"13":{"name":"(anonymous_13)","decl":{"start":{"line":792,"column":10},"end":{"line":792,"column":11}},"loc":{"start":{"line":793,"column":4},"end":{"line":818,"column":5}},"line":793},"14":{"name":"(anonymous_14)","decl":{"start":{"line":828,"column":17},"end":{"line":828,"column":18}},"loc":{"start":{"line":829,"column":4},"end":{"line":831,"column":5}},"line":829},"15":{"name":"(anonymous_15)","decl":{"start":{"line":841,"column":19},"end":{"line":841,"column":20}},"loc":{"start":{"line":842,"column":4},"end":{"line":844,"column":5}},"line":842},"16":{"name":"(anonymous_16)","decl":{"start":{"line":854,"column":10},"end":{"line":854,"column":11}},"loc":{"start":{"line":855,"column":4},"end":{"line":862,"column":5}},"line":855},"17":{"name":"(anonymous_17)","decl":{"start":{"line":871,"column":13},"end":{"line":871,"column":14}},"loc":{"start":{"line":872,"column":4},"end":{"line":880,"column":5}},"line":872}},"branchMap":{"0":{"loc":{"start":{"line":162,"column":26},"end":{"line":162,"column":73}},"type":"cond-expr","locations":[{"start":{"line":162,"column":48},"end":{"line":162,"column":68}},{"start":{"line":162,"column":72},"end":{"line":162,"column":73}}],"line":162},"1":{"loc":{"start":{"line":527,"column":8},"end":{"line":530,"column":9}},"type":"if","locations":[{"start":{"line":527,"column":8},"end":{"line":530,"column":9}},{"start":{},"end":{}}],"line":527},"2":{"loc":{"start":{"line":546,"column":19},"end":{"line":546,"column":91}},"type":"cond-expr","locations":[{"start":{"line":546,"column":40},"end":{"line":546,"column":68}},{"start":{"line":546,"column":71},"end":{"line":546,"column":91}}],"line":546},"3":{"loc":{"start":{"line":569,"column":8},"end":{"line":574,"column":9}},"type":"if","locations":[{"start":{"line":569,"column":8},"end":{"line":574,"column":9}},{"start":{},"end":{}}],"line":569},"4":{"loc":{"start":{"line":569,"column":12},"end":{"line":569,"column":47}},"type":"binary-expr","locations":[{"start":{"line":569,"column":12},"end":{"line":569,"column":30}},{"start":{"line":569,"column":34},"end":{"line":569,"column":47}}],"line":569},"5":{"loc":{"start":{"line":576,"column":8},"end":{"line":585,"column":9}},"type":"if","locations":[{"start":{"line":576,"column":8},"end":{"line":585,"column":9}},{"start":{},"end":{}}],"line":576},"6":{"loc":{"start":{"line":596,"column":8},"end":{"line":599,"column":9}},"type":"if","locations":[{"start":{"line":596,"column":8},"end":{"line":599,"column":9}},{"start":{},"end":{}}],"line":596},"7":{"loc":{"start":{"line":673,"column":8},"end":{"line":676,"column":9}},"type":"if","locations":[{"start":{"line":673,"column":8},"end":{"line":676,"column":9}},{"start":{},"end":{}}],"line":673},"8":{"loc":{"start":{"line":681,"column":8},"end":{"line":684,"column":9}},"type":"if","locations":[{"start":{"line":681,"column":8},"end":{"line":684,"column":9}},{"start":{},"end":{}}],"line":681},"9":{"loc":{"start":{"line":688,"column":8},"end":{"line":693,"column":9}},"type":"if","locations":[{"start":{"line":688,"column":8},"end":{"line":693,"column":9}},{"start":{},"end":{}}],"line":688},"10":{"loc":{"start":{"line":724,"column":8},"end":{"line":727,"column":9}},"type":"if","locations":[{"start":{"line":724,"column":8},"end":{"line":727,"column":9}},{"start":{},"end":{}}],"line":724},"11":{"loc":{"start":{"line":732,"column":8},"end":{"line":735,"column":9}},"type":"if","locations":[{"start":{"line":732,"column":8},"end":{"line":735,"column":9}},{"start":{},"end":{}}],"line":732},"12":{"loc":{"start":{"line":757,"column":8},"end":{"line":764,"column":9}},"type":"if","locations":[{"start":{"line":757,"column":8},"end":{"line":764,"column":9}},{"start":{"line":762,"column":8},"end":{"line":764,"column":9}}],"line":757},"13":{"loc":{"start":{"line":775,"column":8},"end":{"line":780,"column":9}},"type":"if","locations":[{"start":{"line":775,"column":8},"end":{"line":780,"column":9}},{"start":{},"end":{}}],"line":775},"14":{"loc":{"start":{"line":794,"column":8},"end":{"line":794,"column":57}},"type":"if","locations":[{"start":{"line":794,"column":8},"end":{"line":794,"column":57}},{"start":{},"end":{}}],"line":794},"15":{"loc":{"start":{"line":798,"column":8},"end":{"line":805,"column":9}},"type":"if","locations":[{"start":{"line":798,"column":8},"end":{"line":805,"column":9}},{"start":{"line":802,"column":13},"end":{"line":805,"column":9}}],"line":798},"16":{"loc":{"start":{"line":802,"column":13},"end":{"line":805,"column":9}},"type":"if","locations":[{"start":{"line":802,"column":13},"end":{"line":805,"column":9}},{"start":{},"end":{}}],"line":802},"17":{"loc":{"start":{"line":807,"column":19},"end":{"line":807,"column":91}},"type":"cond-expr","locations":[{"start":{"line":807,"column":40},"end":{"line":807,"column":68}},{"start":{"line":807,"column":71},"end":{"line":807,"column":91}}],"line":807}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":7,"6":7,"7":7,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":7,"16":7,"17":7,"18":7,"19":7,"20":7,"21":7,"22":7,"23":7,"24":7,"25":7,"26":7,"27":7,"28":7,"29":7,"30":7,"31":7,"32":7,"33":7,"34":7,"35":7,"36":7,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":3,"45":3,"46":3,"47":3,"48":3,"49":3,"50":3,"51":30,"52":3,"53":3,"54":3,"55":2,"56":0,"57":2,"58":2,"59":2,"60":2,"61":20,"62":2,"63":2,"64":2,"65":2,"66":2,"67":5879,"68":5879,"69":5879,"70":5879,"71":120,"72":120,"73":5879,"74":0,"75":0,"76":5879,"77":5879,"78":5879,"79":587,"80":5879,"81":5879,"82":5879,"83":58790,"84":5879,"85":5879,"86":1,"87":1,"88":1,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":5880,"105":5880,"106":5880,"107":5880,"108":5880,"109":5880,"110":5879,"111":5879,"112":1,"113":5879,"114":5879,"115":1,"116":1,"117":1,"118":1,"119":0,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":0,"129":1,"130":0,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":0,"139":0,"140":1,"141":1,"142":1,"143":1,"144":0,"145":0,"146":0,"147":0,"148":0,"149":1},"f":{"0":7,"1":0,"2":0,"3":0,"4":0,"5":3,"6":2,"7":5879,"8":1,"9":0,"10":5880,"11":1,"12":1,"13":1,"14":0,"15":0,"16":1,"17":0},"b":{"0":[1,6],"1":[0,2],"2":[0,2],"3":[120,5759],"4":[5879,5759],"5":[0,5879],"6":[587,5292],"7":[0,0],"8":[0,0],"9":[0,0],"10":[5880,0],"11":[1,5878],"12":[0,1],"13":[1,0],"14":[1,0],"15":[0,1],"16":[0,1],"17":[0,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"d68a334b13b1f1f91939949c1bd75237f7ec875a"}
+,"/Users/normanqian/fractalcamp/phaser/src/dom/RequestAnimationFrame.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/dom/RequestAnimationFrame.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":37}},"1":{"start":{"line":8,"column":11},"end":{"line":8,"column":35}},"2":{"start":{"line":21,"column":28},"end":{"line":181,"column":2}},"3":{"start":{"line":35,"column":8},"end":{"line":35,"column":31}},"4":{"start":{"line":44,"column":8},"end":{"line":44,"column":29}},"5":{"start":{"line":54,"column":8},"end":{"line":54,"column":34}},"6":{"start":{"line":64,"column":8},"end":{"line":64,"column":30}},"7":{"start":{"line":74,"column":8},"end":{"line":74,"column":23}},"8":{"start":{"line":76,"column":20},"end":{"line":76,"column":24}},"9":{"start":{"line":89,"column":8},"end":{"line":97,"column":10}},"10":{"start":{"line":91,"column":12},"end":{"line":91,"column":33}},"11":{"start":{"line":93,"column":12},"end":{"line":96,"column":13}},"12":{"start":{"line":95,"column":16},"end":{"line":95,"column":69}},"13":{"start":{"line":108,"column":8},"end":{"line":117,"column":10}},"14":{"start":{"line":110,"column":12},"end":{"line":114,"column":13}},"15":{"start":{"line":113,"column":16},"end":{"line":113,"column":78}},"16":{"start":{"line":116,"column":12},"end":{"line":116,"column":53}},"17":{"start":{"line":132,"column":8},"end":{"line":135,"column":9}},"18":{"start":{"line":134,"column":12},"end":{"line":134,"column":19}},"19":{"start":{"line":137,"column":8},"end":{"line":137,"column":33}},"20":{"start":{"line":139,"column":8},"end":{"line":139,"column":44}},"21":{"start":{"line":141,"column":8},"end":{"line":141,"column":27}},"22":{"start":{"line":143,"column":8},"end":{"line":143,"column":30}},"23":{"start":{"line":145,"column":8},"end":{"line":145,"column":126}},"24":{"start":{"line":156,"column":8},"end":{"line":156,"column":31}},"25":{"start":{"line":158,"column":8},"end":{"line":165,"column":9}},"26":{"start":{"line":160,"column":12},"end":{"line":160,"column":41}},"27":{"start":{"line":164,"column":12},"end":{"line":164,"column":56}},"28":{"start":{"line":176,"column":8},"end":{"line":176,"column":20}},"29":{"start":{"line":178,"column":8},"end":{"line":178,"column":29}},"30":{"start":{"line":183,"column":0},"end":{"line":183,"column":39}}},"fnMap":{"0":{"name":"RequestAnimationFrame","decl":{"start":{"line":25,"column":13},"end":{"line":25,"column":34}},"loc":{"start":{"line":26,"column":4},"end":{"line":118,"column":5}},"line":26},"1":{"name":"step","decl":{"start":{"line":89,"column":29},"end":{"line":89,"column":33}},"loc":{"start":{"line":90,"column":8},"end":{"line":97,"column":9}},"line":90},"2":{"name":"stepTimeout","decl":{"start":{"line":108,"column":36},"end":{"line":108,"column":47}},"loc":{"start":{"line":109,"column":8},"end":{"line":117,"column":9}},"line":109},"3":{"name":"(anonymous_3)","decl":{"start":{"line":130,"column":11},"end":{"line":130,"column":12}},"loc":{"start":{"line":131,"column":4},"end":{"line":146,"column":5}},"line":131},"4":{"name":"(anonymous_4)","decl":{"start":{"line":154,"column":10},"end":{"line":154,"column":11}},"loc":{"start":{"line":155,"column":4},"end":{"line":166,"column":5}},"line":155},"5":{"name":"(anonymous_5)","decl":{"start":{"line":174,"column":13},"end":{"line":174,"column":14}},"loc":{"start":{"line":175,"column":4},"end":{"line":179,"column":5}},"line":175}},"branchMap":{"0":{"loc":{"start":{"line":93,"column":12},"end":{"line":96,"column":13}},"type":"if","locations":[{"start":{"line":93,"column":12},"end":{"line":96,"column":13}},{"start":{},"end":{}}],"line":93},"1":{"loc":{"start":{"line":110,"column":12},"end":{"line":114,"column":13}},"type":"if","locations":[{"start":{"line":110,"column":12},"end":{"line":114,"column":13}},{"start":{},"end":{}}],"line":110},"2":{"loc":{"start":{"line":132,"column":8},"end":{"line":135,"column":9}},"type":"if","locations":[{"start":{"line":132,"column":8},"end":{"line":135,"column":9}},{"start":{},"end":{}}],"line":132},"3":{"loc":{"start":{"line":145,"column":25},"end":{"line":145,"column":125}},"type":"cond-expr","locations":[{"start":{"line":145,"column":45},"end":{"line":145,"column":83}},{"start":{"line":145,"column":86},"end":{"line":145,"column":125}}],"line":145},"4":{"loc":{"start":{"line":158,"column":8},"end":{"line":165,"column":9}},"type":"if","locations":[{"start":{"line":158,"column":8},"end":{"line":165,"column":9}},{"start":{"line":163,"column":8},"end":{"line":165,"column":9}}],"line":158}},"s":{"0":1,"1":1,"2":1,"3":7,"4":7,"5":7,"6":7,"7":7,"8":7,"9":7,"10":0,"11":0,"12":0,"13":7,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":1},"f":{"0":7,"1":0,"2":0,"3":0,"4":0,"5":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"304198323faefdea9abc502ae4ced810424a3581"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/const.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/const.js","statementMap":{"0":{"start":{"line":7,"column":17},"end":{"line":72,"column":1}},"1":{"start":{"line":74,"column":0},"end":{"line":74,"column":28}}},"fnMap":{},"branchMap":{},"s":{"0":2,"1":2},"f":{},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"863157720e937c2a6faf017862f68e0194d64871"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/line/GetPoint.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/line/GetPoint.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":37}},"1":{"start":{"line":23,"column":15},"end":{"line":31,"column":1}},"2":{"start":{"line":25,"column":4},"end":{"line":25,"column":49}},"3":{"start":{"line":25,"column":29},"end":{"line":25,"column":47}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":53}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":53}},"6":{"start":{"line":30,"column":4},"end":{"line":30,"column":15}},"7":{"start":{"line":33,"column":0},"end":{"line":33,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":23,"column":15},"end":{"line":23,"column":16}},"loc":{"start":{"line":24,"column":0},"end":{"line":31,"column":1}},"line":24}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":4},"end":{"line":25,"column":49}},"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":25,"column":49}},{"start":{},"end":{}}],"line":25}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":1},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"58a145215223a6ce70f0a8d7b2cf07eeff162197"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/line/GetPoints.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/line/GetPoints.js","statementMap":{"0":{"start":{"line":7,"column":13},"end":{"line":7,"column":32}},"1":{"start":{"line":8,"column":12},"end":{"line":8,"column":37}},"2":{"start":{"line":32,"column":16},"end":{"line":59,"column":1}},"3":{"start":{"line":34,"column":4},"end":{"line":34,"column":40}},"4":{"start":{"line":34,"column":29},"end":{"line":34,"column":38}},"5":{"start":{"line":37,"column":4},"end":{"line":40,"column":5}},"6":{"start":{"line":39,"column":8},"end":{"line":39,"column":43}},"7":{"start":{"line":42,"column":13},"end":{"line":42,"column":20}},"8":{"start":{"line":43,"column":13},"end":{"line":43,"column":20}},"9":{"start":{"line":45,"column":13},"end":{"line":45,"column":20}},"10":{"start":{"line":46,"column":13},"end":{"line":46,"column":20}},"11":{"start":{"line":48,"column":4},"end":{"line":56,"column":5}},"12":{"start":{"line":48,"column":17},"end":{"line":48,"column":18}},"13":{"start":{"line":50,"column":23},"end":{"line":50,"column":35}},"14":{"start":{"line":52,"column":16},"end":{"line":52,"column":41}},"15":{"start":{"line":53,"column":16},"end":{"line":53,"column":41}},"16":{"start":{"line":55,"column":8},"end":{"line":55,"column":34}},"17":{"start":{"line":58,"column":4},"end":{"line":58,"column":15}},"18":{"start":{"line":61,"column":0},"end":{"line":61,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":32,"column":16},"end":{"line":32,"column":17}},"loc":{"start":{"line":33,"column":0},"end":{"line":59,"column":1}},"line":33}},"branchMap":{"0":{"loc":{"start":{"line":34,"column":4},"end":{"line":34,"column":40}},"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":40}},{"start":{},"end":{}}],"line":34},"1":{"loc":{"start":{"line":37,"column":4},"end":{"line":40,"column":5}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":40,"column":5}},{"start":{},"end":{}}],"line":37},"2":{"loc":{"start":{"line":37,"column":8},"end":{"line":37,"column":33}},"type":"binary-expr","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":17}},{"start":{"line":37,"column":21},"end":{"line":37,"column":33}}],"line":37}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":1},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"d439af6316ba9eab52b1a7c7e2db80a6d63d0e00"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/line/Length.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/line/Length.js","statementMap":{"0":{"start":{"line":17,"column":13},"end":{"line":20,"column":1}},"1":{"start":{"line":19,"column":4},"end":{"line":19,"column":108}},"2":{"start":{"line":22,"column":0},"end":{"line":22,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":17,"column":13},"end":{"line":17,"column":14}},"loc":{"start":{"line":18,"column":0},"end":{"line":20,"column":1}},"line":18}},"branchMap":{},"s":{"0":1,"1":0,"2":1},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2bc497a906afae76360c272a1bfcf5dfd6bec3bc"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/line/Line.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/line/Line.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":40}},"1":{"start":{"line":8,"column":15},"end":{"line":8,"column":36}},"2":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"3":{"start":{"line":10,"column":17},"end":{"line":10,"column":36}},"4":{"start":{"line":11,"column":13},"end":{"line":11,"column":32}},"5":{"start":{"line":12,"column":14},"end":{"line":12,"column":43}},"6":{"start":{"line":28,"column":11},"end":{"line":351,"column":2}},"7":{"start":{"line":34,"column":8},"end":{"line":34,"column":41}},"8":{"start":{"line":34,"column":32},"end":{"line":34,"column":39}},"9":{"start":{"line":35,"column":8},"end":{"line":35,"column":41}},"10":{"start":{"line":35,"column":32},"end":{"line":35,"column":39}},"11":{"start":{"line":36,"column":8},"end":{"line":36,"column":41}},"12":{"start":{"line":36,"column":32},"end":{"line":36,"column":39}},"13":{"start":{"line":37,"column":8},"end":{"line":37,"column":41}},"14":{"start":{"line":37,"column":32},"end":{"line":37,"column":39}},"15":{"start":{"line":48,"column":8},"end":{"line":48,"column":36}},"16":{"start":{"line":57,"column":8},"end":{"line":57,"column":21}},"17":{"start":{"line":66,"column":8},"end":{"line":66,"column":21}},"18":{"start":{"line":75,"column":8},"end":{"line":75,"column":21}},"19":{"start":{"line":84,"column":8},"end":{"line":84,"column":21}},"20":{"start":{"line":102,"column":8},"end":{"line":102,"column":48}},"21":{"start":{"line":126,"column":8},"end":{"line":126,"column":59}},"22":{"start":{"line":143,"column":8},"end":{"line":143,"column":35}},"23":{"start":{"line":161,"column":8},"end":{"line":161,"column":41}},"24":{"start":{"line":161,"column":32},"end":{"line":161,"column":39}},"25":{"start":{"line":162,"column":8},"end":{"line":162,"column":41}},"26":{"start":{"line":162,"column":32},"end":{"line":162,"column":39}},"27":{"start":{"line":163,"column":8},"end":{"line":163,"column":41}},"28":{"start":{"line":163,"column":32},"end":{"line":163,"column":39}},"29":{"start":{"line":164,"column":8},"end":{"line":164,"column":41}},"30":{"start":{"line":164,"column":32},"end":{"line":164,"column":39}},"31":{"start":{"line":166,"column":8},"end":{"line":166,"column":21}},"32":{"start":{"line":167,"column":8},"end":{"line":167,"column":21}},"33":{"start":{"line":169,"column":8},"end":{"line":169,"column":21}},"34":{"start":{"line":170,"column":8},"end":{"line":170,"column":21}},"35":{"start":{"line":172,"column":8},"end":{"line":172,"column":20}},"36":{"start":{"line":188,"column":8},"end":{"line":188,"column":26}},"37":{"start":{"line":189,"column":8},"end":{"line":189,"column":26}},"38":{"start":{"line":191,"column":8},"end":{"line":191,"column":24}},"39":{"start":{"line":192,"column":8},"end":{"line":192,"column":24}},"40":{"start":{"line":194,"column":8},"end":{"line":194,"column":20}},"41":{"start":{"line":211,"column":8},"end":{"line":211,"column":57}},"42":{"start":{"line":211,"column":34},"end":{"line":211,"column":55}},"43":{"start":{"line":213,"column":8},"end":{"line":213,"column":35}},"44":{"start":{"line":215,"column":8},"end":{"line":215,"column":20}},"45":{"start":{"line":232,"column":8},"end":{"line":232,"column":57}},"46":{"start":{"line":232,"column":34},"end":{"line":232,"column":55}},"47":{"start":{"line":234,"column":8},"end":{"line":234,"column":35}},"48":{"start":{"line":236,"column":8},"end":{"line":236,"column":20}},"49":{"start":{"line":250,"column":12},"end":{"line":250,"column":46}},"50":{"start":{"line":255,"column":12},"end":{"line":262,"column":13}},"51":{"start":{"line":257,"column":16},"end":{"line":257,"column":32}},"52":{"start":{"line":261,"column":16},"end":{"line":261,"column":32}},"53":{"start":{"line":278,"column":12},"end":{"line":278,"column":46}},"54":{"start":{"line":283,"column":12},"end":{"line":290,"column":13}},"55":{"start":{"line":285,"column":16},"end":{"line":285,"column":32}},"56":{"start":{"line":289,"column":16},"end":{"line":289,"column":32}},"57":{"start":{"line":306,"column":12},"end":{"line":306,"column":46}},"58":{"start":{"line":311,"column":12},"end":{"line":318,"column":13}},"59":{"start":{"line":313,"column":16},"end":{"line":313,"column":32}},"60":{"start":{"line":317,"column":16},"end":{"line":317,"column":32}},"61":{"start":{"line":334,"column":12},"end":{"line":334,"column":46}},"62":{"start":{"line":339,"column":12},"end":{"line":346,"column":13}},"63":{"start":{"line":341,"column":16},"end":{"line":341,"column":32}},"64":{"start":{"line":345,"column":16},"end":{"line":345,"column":32}},"65":{"start":{"line":353,"column":0},"end":{"line":353,"column":22}}},"fnMap":{"0":{"name":"Line","decl":{"start":{"line":32,"column":13},"end":{"line":32,"column":17}},"loc":{"start":{"line":33,"column":4},"end":{"line":85,"column":5}},"line":33},"1":{"name":"(anonymous_1)","decl":{"start":{"line":100,"column":14},"end":{"line":100,"column":15}},"loc":{"start":{"line":101,"column":4},"end":{"line":103,"column":5}},"line":101},"2":{"name":"(anonymous_2)","decl":{"start":{"line":124,"column":15},"end":{"line":124,"column":16}},"loc":{"start":{"line":125,"column":4},"end":{"line":127,"column":5}},"line":125},"3":{"name":"(anonymous_3)","decl":{"start":{"line":141,"column":20},"end":{"line":141,"column":21}},"loc":{"start":{"line":142,"column":4},"end":{"line":144,"column":5}},"line":142},"4":{"name":"(anonymous_4)","decl":{"start":{"line":159,"column":11},"end":{"line":159,"column":12}},"loc":{"start":{"line":160,"column":4},"end":{"line":173,"column":5}},"line":160},"5":{"name":"(anonymous_5)","decl":{"start":{"line":186,"column":20},"end":{"line":186,"column":21}},"loc":{"start":{"line":187,"column":4},"end":{"line":195,"column":5}},"line":187},"6":{"name":"(anonymous_6)","decl":{"start":{"line":209,"column":15},"end":{"line":209,"column":16}},"loc":{"start":{"line":210,"column":4},"end":{"line":216,"column":5}},"line":210},"7":{"name":"(anonymous_7)","decl":{"start":{"line":230,"column":15},"end":{"line":230,"column":16}},"loc":{"start":{"line":231,"column":4},"end":{"line":237,"column":5}},"line":231},"8":{"name":"(anonymous_8)","decl":{"start":{"line":248,"column":13},"end":{"line":248,"column":14}},"loc":{"start":{"line":249,"column":8},"end":{"line":251,"column":9}},"line":249},"9":{"name":"(anonymous_9)","decl":{"start":{"line":253,"column":13},"end":{"line":253,"column":14}},"loc":{"start":{"line":254,"column":8},"end":{"line":263,"column":9}},"line":254},"10":{"name":"(anonymous_10)","decl":{"start":{"line":276,"column":13},"end":{"line":276,"column":14}},"loc":{"start":{"line":277,"column":8},"end":{"line":279,"column":9}},"line":277},"11":{"name":"(anonymous_11)","decl":{"start":{"line":281,"column":13},"end":{"line":281,"column":14}},"loc":{"start":{"line":282,"column":8},"end":{"line":291,"column":9}},"line":282},"12":{"name":"(anonymous_12)","decl":{"start":{"line":304,"column":13},"end":{"line":304,"column":14}},"loc":{"start":{"line":305,"column":8},"end":{"line":307,"column":9}},"line":305},"13":{"name":"(anonymous_13)","decl":{"start":{"line":309,"column":13},"end":{"line":309,"column":14}},"loc":{"start":{"line":310,"column":8},"end":{"line":319,"column":9}},"line":310},"14":{"name":"(anonymous_14)","decl":{"start":{"line":332,"column":13},"end":{"line":332,"column":14}},"loc":{"start":{"line":333,"column":8},"end":{"line":335,"column":9}},"line":333},"15":{"name":"(anonymous_15)","decl":{"start":{"line":337,"column":13},"end":{"line":337,"column":14}},"loc":{"start":{"line":338,"column":8},"end":{"line":347,"column":9}},"line":338}},"branchMap":{"0":{"loc":{"start":{"line":34,"column":8},"end":{"line":34,"column":41}},"type":"if","locations":[{"start":{"line":34,"column":8},"end":{"line":34,"column":41}},{"start":{},"end":{}}],"line":34},"1":{"loc":{"start":{"line":35,"column":8},"end":{"line":35,"column":41}},"type":"if","locations":[{"start":{"line":35,"column":8},"end":{"line":35,"column":41}},{"start":{},"end":{}}],"line":35},"2":{"loc":{"start":{"line":36,"column":8},"end":{"line":36,"column":41}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":36,"column":41}},{"start":{},"end":{}}],"line":36},"3":{"loc":{"start":{"line":37,"column":8},"end":{"line":37,"column":41}},"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":41}},{"start":{},"end":{}}],"line":37},"4":{"loc":{"start":{"line":161,"column":8},"end":{"line":161,"column":41}},"type":"if","locations":[{"start":{"line":161,"column":8},"end":{"line":161,"column":41}},{"start":{},"end":{}}],"line":161},"5":{"loc":{"start":{"line":162,"column":8},"end":{"line":162,"column":41}},"type":"if","locations":[{"start":{"line":162,"column":8},"end":{"line":162,"column":41}},{"start":{},"end":{}}],"line":162},"6":{"loc":{"start":{"line":163,"column":8},"end":{"line":163,"column":41}},"type":"if","locations":[{"start":{"line":163,"column":8},"end":{"line":163,"column":41}},{"start":{},"end":{}}],"line":163},"7":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":41}},"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":41}},{"start":{},"end":{}}],"line":164},"8":{"loc":{"start":{"line":211,"column":8},"end":{"line":211,"column":57}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":211,"column":57}},{"start":{},"end":{}}],"line":211},"9":{"loc":{"start":{"line":232,"column":8},"end":{"line":232,"column":57}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":232,"column":57}},{"start":{},"end":{}}],"line":232},"10":{"loc":{"start":{"line":255,"column":12},"end":{"line":262,"column":13}},"type":"if","locations":[{"start":{"line":255,"column":12},"end":{"line":262,"column":13}},{"start":{"line":260,"column":12},"end":{"line":262,"column":13}}],"line":255},"11":{"loc":{"start":{"line":283,"column":12},"end":{"line":290,"column":13}},"type":"if","locations":[{"start":{"line":283,"column":12},"end":{"line":290,"column":13}},{"start":{"line":288,"column":12},"end":{"line":290,"column":13}}],"line":283},"12":{"loc":{"start":{"line":311,"column":12},"end":{"line":318,"column":13}},"type":"if","locations":[{"start":{"line":311,"column":12},"end":{"line":318,"column":13}},{"start":{"line":316,"column":12},"end":{"line":318,"column":13}}],"line":311},"13":{"loc":{"start":{"line":339,"column":12},"end":{"line":346,"column":13}},"type":"if","locations":[{"start":{"line":339,"column":12},"end":{"line":346,"column":13}},{"start":{"line":344,"column":12},"end":{"line":346,"column":13}}],"line":339}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"42b52897622bd5a9c838f8db92eb4ab275c1a032"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/line/Random.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/line/Random.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":37}},"1":{"start":{"line":22,"column":13},"end":{"line":32,"column":1}},"2":{"start":{"line":24,"column":4},"end":{"line":24,"column":49}},"3":{"start":{"line":24,"column":29},"end":{"line":24,"column":47}},"4":{"start":{"line":26,"column":12},"end":{"line":26,"column":25}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":46}},"6":{"start":{"line":29,"column":4},"end":{"line":29,"column":46}},"7":{"start":{"line":31,"column":4},"end":{"line":31,"column":15}},"8":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":22,"column":13},"end":{"line":22,"column":14}},"loc":{"start":{"line":23,"column":0},"end":{"line":32,"column":1}},"line":23}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":4},"end":{"line":24,"column":49}},"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":24,"column":49}},{"start":{},"end":{}}],"line":24}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":1},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"fa2875ce7122c5f637afd60b2793376add897eba"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/point/Point.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/point/Point.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":40}},"1":{"start":{"line":8,"column":17},"end":{"line":8,"column":36}},"2":{"start":{"line":22,"column":12},"end":{"line":85,"column":2}},"3":{"start":{"line":28,"column":8},"end":{"line":28,"column":39}},"4":{"start":{"line":28,"column":31},"end":{"line":28,"column":37}},"5":{"start":{"line":29,"column":8},"end":{"line":29,"column":39}},"6":{"start":{"line":29,"column":31},"end":{"line":29,"column":37}},"7":{"start":{"line":40,"column":8},"end":{"line":40,"column":37}},"8":{"start":{"line":50,"column":8},"end":{"line":50,"column":19}},"9":{"start":{"line":60,"column":8},"end":{"line":60,"column":19}},"10":{"start":{"line":76,"column":8},"end":{"line":76,"column":39}},"11":{"start":{"line":76,"column":31},"end":{"line":76,"column":37}},"12":{"start":{"line":77,"column":8},"end":{"line":77,"column":39}},"13":{"start":{"line":77,"column":31},"end":{"line":77,"column":37}},"14":{"start":{"line":79,"column":8},"end":{"line":79,"column":19}},"15":{"start":{"line":80,"column":8},"end":{"line":80,"column":19}},"16":{"start":{"line":82,"column":8},"end":{"line":82,"column":20}},"17":{"start":{"line":87,"column":0},"end":{"line":87,"column":23}}},"fnMap":{"0":{"name":"Point","decl":{"start":{"line":26,"column":13},"end":{"line":26,"column":18}},"loc":{"start":{"line":27,"column":4},"end":{"line":61,"column":5}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":74,"column":11},"end":{"line":74,"column":12}},"loc":{"start":{"line":75,"column":4},"end":{"line":83,"column":5}},"line":75}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":8},"end":{"line":28,"column":39}},"type":"if","locations":[{"start":{"line":28,"column":8},"end":{"line":28,"column":39}},{"start":{},"end":{}}],"line":28},"1":{"loc":{"start":{"line":29,"column":8},"end":{"line":29,"column":39}},"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":29,"column":39}},{"start":{},"end":{}}],"line":29},"2":{"loc":{"start":{"line":76,"column":8},"end":{"line":76,"column":39}},"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":39}},{"start":{},"end":{}}],"line":76},"3":{"loc":{"start":{"line":77,"column":8},"end":{"line":77,"column":39}},"type":"if","locations":[{"start":{"line":77,"column":8},"end":{"line":77,"column":39}},{"start":{},"end":{}}],"line":77}},"s":{"0":2,"1":2,"2":2,"3":9,"4":5,"5":9,"6":6,"7":9,"8":9,"9":9,"10":4,"11":1,"12":4,"13":2,"14":4,"15":4,"16":4,"17":2},"f":{"0":9,"1":4},"b":{"0":[5,4],"1":[6,3],"2":[1,3],"3":[2,2]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"dc0f0b150ede9ba06f094679955a1fbc3ba2f3af"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/Contains.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/Contains.js","statementMap":{"0":{"start":{"line":19,"column":15},"end":{"line":27,"column":1}},"1":{"start":{"line":21,"column":4},"end":{"line":24,"column":5}},"2":{"start":{"line":23,"column":8},"end":{"line":23,"column":21}},"3":{"start":{"line":26,"column":4},"end":{"line":26,"column":97}},"4":{"start":{"line":29,"column":0},"end":{"line":29,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":19,"column":15},"end":{"line":19,"column":16}},"loc":{"start":{"line":20,"column":0},"end":{"line":27,"column":1}},"line":20}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":4},"end":{"line":24,"column":5}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":24,"column":5}},{"start":{},"end":{}}],"line":21},"1":{"loc":{"start":{"line":21,"column":8},"end":{"line":21,"column":43}},"type":"binary-expr","locations":[{"start":{"line":21,"column":8},"end":{"line":21,"column":23}},{"start":{"line":21,"column":27},"end":{"line":21,"column":43}}],"line":21},"2":{"loc":{"start":{"line":26,"column":12},"end":{"line":26,"column":95}},"type":"binary-expr","locations":[{"start":{"line":26,"column":12},"end":{"line":26,"column":23}},{"start":{"line":26,"column":27},"end":{"line":26,"column":51}},{"start":{"line":26,"column":55},"end":{"line":26,"column":66}},{"start":{"line":26,"column":70},"end":{"line":26,"column":95}}],"line":26}},"s":{"0":1,"1":9,"2":0,"3":9,"4":1},"f":{"0":9},"b":{"0":[0,9],"1":[9,9],"2":[9,8,7,6]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"3382b50d7371bbbd308a178f10c0c51ce6c5fbf7"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/GetPoint.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/GetPoint.js","statementMap":{"0":{"start":{"line":7,"column":16},"end":{"line":7,"column":38}},"1":{"start":{"line":8,"column":12},"end":{"line":8,"column":37}},"2":{"start":{"line":28,"column":15},"end":{"line":73,"column":1}},"3":{"start":{"line":30,"column":4},"end":{"line":30,"column":49}},"4":{"start":{"line":30,"column":29},"end":{"line":30,"column":47}},"5":{"start":{"line":32,"column":4},"end":{"line":38,"column":5}},"6":{"start":{"line":34,"column":8},"end":{"line":34,"column":28}},"7":{"start":{"line":35,"column":8},"end":{"line":35,"column":28}},"8":{"start":{"line":37,"column":8},"end":{"line":37,"column":19}},"9":{"start":{"line":40,"column":12},"end":{"line":40,"column":43}},"10":{"start":{"line":42,"column":4},"end":{"line":70,"column":5}},"11":{"start":{"line":44,"column":8},"end":{"line":44,"column":50}},"12":{"start":{"line":46,"column":8},"end":{"line":57,"column":9}},"13":{"start":{"line":49,"column":12},"end":{"line":49,"column":40}},"14":{"start":{"line":50,"column":12},"end":{"line":50,"column":37}},"15":{"start":{"line":55,"column":12},"end":{"line":55,"column":32}},"16":{"start":{"line":56,"column":12},"end":{"line":56,"column":61}},"17":{"start":{"line":59,"column":9},"end":{"line":70,"column":5}},"18":{"start":{"line":62,"column":8},"end":{"line":62,"column":32}},"19":{"start":{"line":63,"column":8},"end":{"line":63,"column":28}},"20":{"start":{"line":68,"column":8},"end":{"line":68,"column":32}},"21":{"start":{"line":69,"column":8},"end":{"line":69,"column":52}},"22":{"start":{"line":72,"column":4},"end":{"line":72,"column":15}},"23":{"start":{"line":75,"column":0},"end":{"line":75,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":28,"column":15},"end":{"line":28,"column":16}},"loc":{"start":{"line":29,"column":0},"end":{"line":73,"column":1}},"line":29}},"branchMap":{"0":{"loc":{"start":{"line":30,"column":4},"end":{"line":30,"column":49}},"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":30,"column":49}},{"start":{},"end":{}}],"line":30},"1":{"loc":{"start":{"line":32,"column":4},"end":{"line":38,"column":5}},"type":"if","locations":[{"start":{"line":32,"column":4},"end":{"line":38,"column":5}},{"start":{},"end":{}}],"line":32},"2":{"loc":{"start":{"line":32,"column":8},"end":{"line":32,"column":38}},"type":"binary-expr","locations":[{"start":{"line":32,"column":8},"end":{"line":32,"column":21}},{"start":{"line":32,"column":25},"end":{"line":32,"column":38}}],"line":32},"3":{"loc":{"start":{"line":42,"column":4},"end":{"line":70,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":70,"column":5}},{"start":{"line":59,"column":9},"end":{"line":70,"column":5}}],"line":42},"4":{"loc":{"start":{"line":46,"column":8},"end":{"line":57,"column":9}},"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":57,"column":9}},{"start":{"line":53,"column":8},"end":{"line":57,"column":9}}],"line":46},"5":{"loc":{"start":{"line":59,"column":9},"end":{"line":70,"column":5}},"type":"if","locations":[{"start":{"line":59,"column":9},"end":{"line":70,"column":5}},{"start":{"line":66,"column":4},"end":{"line":70,"column":5}}],"line":59}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":1},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"1fe2c4a36d7825916b62d183e2443a9cc96ef685"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/GetPoints.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/GetPoints.js","statementMap":{"0":{"start":{"line":7,"column":15},"end":{"line":7,"column":36}},"1":{"start":{"line":8,"column":16},"end":{"line":8,"column":38}},"2":{"start":{"line":25,"column":16},"end":{"line":43,"column":1}},"3":{"start":{"line":27,"column":4},"end":{"line":27,"column":40}},"4":{"start":{"line":27,"column":29},"end":{"line":27,"column":38}},"5":{"start":{"line":30,"column":4},"end":{"line":33,"column":5}},"6":{"start":{"line":32,"column":8},"end":{"line":32,"column":51}},"7":{"start":{"line":35,"column":4},"end":{"line":40,"column":5}},"8":{"start":{"line":35,"column":17},"end":{"line":35,"column":18}},"9":{"start":{"line":37,"column":23},"end":{"line":37,"column":35}},"10":{"start":{"line":39,"column":8},"end":{"line":39,"column":48}},"11":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"12":{"start":{"line":45,"column":0},"end":{"line":45,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":25,"column":16},"end":{"line":25,"column":17}},"loc":{"start":{"line":26,"column":0},"end":{"line":43,"column":1}},"line":26}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":4},"end":{"line":27,"column":40}},"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":40}},{"start":{},"end":{}}],"line":27},"1":{"loc":{"start":{"line":30,"column":4},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":33,"column":5}},{"start":{},"end":{}}],"line":30},"2":{"loc":{"start":{"line":30,"column":8},"end":{"line":30,"column":33}},"type":"binary-expr","locations":[{"start":{"line":30,"column":8},"end":{"line":30,"column":17}},{"start":{"line":30,"column":21},"end":{"line":30,"column":33}}],"line":30}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":1},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9887c83d4bf75f9e2c1ba79d51db4217f4455fb7"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/Perimeter.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/Perimeter.js","statementMap":{"0":{"start":{"line":17,"column":16},"end":{"line":20,"column":1}},"1":{"start":{"line":19,"column":4},"end":{"line":19,"column":42}},"2":{"start":{"line":22,"column":0},"end":{"line":22,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":18,"column":0},"end":{"line":20,"column":1}},"line":18}},"branchMap":{},"s":{"0":1,"1":0,"2":1},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"dcdbd85f83b879860ad5da77c78816dee62a62a1"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/Random.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/Random.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":37}},"1":{"start":{"line":22,"column":13},"end":{"line":30,"column":1}},"2":{"start":{"line":24,"column":4},"end":{"line":24,"column":49}},"3":{"start":{"line":24,"column":29},"end":{"line":24,"column":47}},"4":{"start":{"line":26,"column":4},"end":{"line":26,"column":50}},"5":{"start":{"line":27,"column":4},"end":{"line":27,"column":51}},"6":{"start":{"line":29,"column":4},"end":{"line":29,"column":15}},"7":{"start":{"line":32,"column":0},"end":{"line":32,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":22,"column":13},"end":{"line":22,"column":14}},"loc":{"start":{"line":23,"column":0},"end":{"line":30,"column":1}},"line":23}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":4},"end":{"line":24,"column":49}},"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":24,"column":49}},{"start":{},"end":{}}],"line":24}},"s":{"0":1,"1":1,"2":2,"3":1,"4":2,"5":2,"6":2,"7":1},"f":{"0":2},"b":{"0":[1,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"7935aceefeebb72a8cd141eaaf8ed884f5ac690d"}
+,"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/Rectangle.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/geom/rectangle/Rectangle.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":40}},"1":{"start":{"line":8,"column":15},"end":{"line":8,"column":36}},"2":{"start":{"line":9,"column":15},"end":{"line":9,"column":36}},"3":{"start":{"line":10,"column":16},"end":{"line":10,"column":38}},"4":{"start":{"line":11,"column":17},"end":{"line":11,"column":36}},"5":{"start":{"line":12,"column":11},"end":{"line":12,"column":34}},"6":{"start":{"line":13,"column":13},"end":{"line":13,"column":32}},"7":{"start":{"line":29,"column":16},"end":{"line":503,"column":2}},"8":{"start":{"line":35,"column":8},"end":{"line":35,"column":39}},"9":{"start":{"line":35,"column":31},"end":{"line":35,"column":37}},"10":{"start":{"line":36,"column":8},"end":{"line":36,"column":39}},"11":{"start":{"line":36,"column":31},"end":{"line":36,"column":37}},"12":{"start":{"line":37,"column":8},"end":{"line":37,"column":47}},"13":{"start":{"line":37,"column":35},"end":{"line":37,"column":45}},"14":{"start":{"line":38,"column":8},"end":{"line":38,"column":49}},"15":{"start":{"line":38,"column":36},"end":{"line":38,"column":47}},"16":{"start":{"line":49,"column":8},"end":{"line":49,"column":41}},"17":{"start":{"line":59,"column":8},"end":{"line":59,"column":19}},"18":{"start":{"line":69,"column":8},"end":{"line":69,"column":19}},"19":{"start":{"line":79,"column":8},"end":{"line":79,"column":27}},"20":{"start":{"line":89,"column":8},"end":{"line":89,"column":29}},"21":{"start":{"line":105,"column":8},"end":{"line":105,"column":36}},"22":{"start":{"line":127,"column":8},"end":{"line":127,"column":48}},"23":{"start":{"line":146,"column":8},"end":{"line":146,"column":59}},"24":{"start":{"line":163,"column":8},"end":{"line":163,"column":35}},"25":{"start":{"line":181,"column":8},"end":{"line":181,"column":19}},"26":{"start":{"line":182,"column":8},"end":{"line":182,"column":19}},"27":{"start":{"line":183,"column":8},"end":{"line":183,"column":27}},"28":{"start":{"line":184,"column":8},"end":{"line":184,"column":29}},"29":{"start":{"line":186,"column":8},"end":{"line":186,"column":20}},"30":{"start":{"line":199,"column":8},"end":{"line":199,"column":38}},"31":{"start":{"line":215,"column":8},"end":{"line":215,"column":39}},"32":{"start":{"line":215,"column":31},"end":{"line":215,"column":37}},"33":{"start":{"line":217,"column":8},"end":{"line":217,"column":19}},"34":{"start":{"line":218,"column":8},"end":{"line":218,"column":19}},"35":{"start":{"line":220,"column":8},"end":{"line":220,"column":20}},"36":{"start":{"line":236,"column":8},"end":{"line":236,"column":53}},"37":{"start":{"line":236,"column":36},"end":{"line":236,"column":51}},"38":{"start":{"line":238,"column":8},"end":{"line":238,"column":27}},"39":{"start":{"line":239,"column":8},"end":{"line":239,"column":29}},"40":{"start":{"line":241,"column":8},"end":{"line":241,"column":20}},"41":{"start":{"line":254,"column":8},"end":{"line":254,"column":53}},"42":{"start":{"line":271,"column":8},"end":{"line":271,"column":54}},"43":{"start":{"line":271,"column":34},"end":{"line":271,"column":52}},"44":{"start":{"line":273,"column":8},"end":{"line":273,"column":55}},"45":{"start":{"line":275,"column":8},"end":{"line":275,"column":20}},"46":{"start":{"line":292,"column":8},"end":{"line":292,"column":54}},"47":{"start":{"line":292,"column":34},"end":{"line":292,"column":52}},"48":{"start":{"line":294,"column":8},"end":{"line":294,"column":64}},"49":{"start":{"line":296,"column":8},"end":{"line":296,"column":20}},"50":{"start":{"line":313,"column":8},"end":{"line":313,"column":54}},"51":{"start":{"line":313,"column":34},"end":{"line":313,"column":52}},"52":{"start":{"line":315,"column":8},"end":{"line":315,"column":65}},"53":{"start":{"line":317,"column":8},"end":{"line":317,"column":20}},"54":{"start":{"line":334,"column":8},"end":{"line":334,"column":54}},"55":{"start":{"line":334,"column":34},"end":{"line":334,"column":52}},"56":{"start":{"line":336,"column":8},"end":{"line":336,"column":56}},"57":{"start":{"line":338,"column":8},"end":{"line":338,"column":20}},"58":{"start":{"line":353,"column":12},"end":{"line":353,"column":26}},"59":{"start":{"line":358,"column":12},"end":{"line":365,"column":13}},"60":{"start":{"line":360,"column":16},"end":{"line":360,"column":31}},"61":{"start":{"line":364,"column":16},"end":{"line":364,"column":48}},"62":{"start":{"line":367,"column":12},"end":{"line":367,"column":27}},"63":{"start":{"line":384,"column":12},"end":{"line":384,"column":39}},"64":{"start":{"line":389,"column":12},"end":{"line":396,"column":13}},"65":{"start":{"line":391,"column":16},"end":{"line":391,"column":31}},"66":{"start":{"line":395,"column":16},"end":{"line":395,"column":44}},"67":{"start":{"line":413,"column":12},"end":{"line":413,"column":26}},"68":{"start":{"line":418,"column":12},"end":{"line":425,"column":13}},"69":{"start":{"line":420,"column":16},"end":{"line":420,"column":32}},"70":{"start":{"line":424,"column":16},"end":{"line":424,"column":52}},"71":{"start":{"line":427,"column":12},"end":{"line":427,"column":27}},"72":{"start":{"line":444,"column":12},"end":{"line":444,"column":40}},"73":{"start":{"line":449,"column":12},"end":{"line":456,"column":13}},"74":{"start":{"line":451,"column":16},"end":{"line":451,"column":32}},"75":{"start":{"line":455,"column":16},"end":{"line":455,"column":45}},"76":{"start":{"line":472,"column":12},"end":{"line":472,"column":45}},"77":{"start":{"line":477,"column":12},"end":{"line":477,"column":46}},"78":{"start":{"line":493,"column":12},"end":{"line":493,"column":46}},"79":{"start":{"line":498,"column":12},"end":{"line":498,"column":47}},"80":{"start":{"line":505,"column":0},"end":{"line":505,"column":27}}},"fnMap":{"0":{"name":"Rectangle","decl":{"start":{"line":33,"column":13},"end":{"line":33,"column":22}},"loc":{"start":{"line":34,"column":4},"end":{"line":90,"column":5}},"line":34},"1":{"name":"(anonymous_1)","decl":{"start":{"line":103,"column":14},"end":{"line":103,"column":15}},"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"line":104},"2":{"name":"(anonymous_2)","decl":{"start":{"line":125,"column":14},"end":{"line":125,"column":15}},"loc":{"start":{"line":126,"column":4},"end":{"line":128,"column":5}},"line":126},"3":{"name":"(anonymous_3)","decl":{"start":{"line":144,"column":15},"end":{"line":144,"column":16}},"loc":{"start":{"line":145,"column":4},"end":{"line":147,"column":5}},"line":145},"4":{"name":"(anonymous_4)","decl":{"start":{"line":161,"column":20},"end":{"line":161,"column":21}},"loc":{"start":{"line":162,"column":4},"end":{"line":164,"column":5}},"line":162},"5":{"name":"(anonymous_5)","decl":{"start":{"line":179,"column":11},"end":{"line":179,"column":12}},"loc":{"start":{"line":180,"column":4},"end":{"line":187,"column":5}},"line":180},"6":{"name":"(anonymous_6)","decl":{"start":{"line":197,"column":14},"end":{"line":197,"column":15}},"loc":{"start":{"line":198,"column":4},"end":{"line":200,"column":5}},"line":198},"7":{"name":"(anonymous_7)","decl":{"start":{"line":213,"column":17},"end":{"line":213,"column":18}},"loc":{"start":{"line":214,"column":4},"end":{"line":221,"column":5}},"line":214},"8":{"name":"(anonymous_8)","decl":{"start":{"line":234,"column":13},"end":{"line":234,"column":14}},"loc":{"start":{"line":235,"column":4},"end":{"line":242,"column":5}},"line":235},"9":{"name":"(anonymous_9)","decl":{"start":{"line":252,"column":13},"end":{"line":252,"column":14}},"loc":{"start":{"line":253,"column":4},"end":{"line":255,"column":5}},"line":253},"10":{"name":"(anonymous_10)","decl":{"start":{"line":269,"column":14},"end":{"line":269,"column":15}},"loc":{"start":{"line":270,"column":4},"end":{"line":276,"column":5}},"line":270},"11":{"name":"(anonymous_11)","decl":{"start":{"line":290,"column":14},"end":{"line":290,"column":15}},"loc":{"start":{"line":291,"column":4},"end":{"line":297,"column":5}},"line":291},"12":{"name":"(anonymous_12)","decl":{"start":{"line":311,"column":14},"end":{"line":311,"column":15}},"loc":{"start":{"line":312,"column":4},"end":{"line":318,"column":5}},"line":312},"13":{"name":"(anonymous_13)","decl":{"start":{"line":332,"column":14},"end":{"line":332,"column":15}},"loc":{"start":{"line":333,"column":4},"end":{"line":339,"column":5}},"line":333},"14":{"name":"(anonymous_14)","decl":{"start":{"line":351,"column":13},"end":{"line":351,"column":14}},"loc":{"start":{"line":352,"column":8},"end":{"line":354,"column":9}},"line":352},"15":{"name":"(anonymous_15)","decl":{"start":{"line":356,"column":13},"end":{"line":356,"column":14}},"loc":{"start":{"line":357,"column":8},"end":{"line":368,"column":9}},"line":357},"16":{"name":"(anonymous_16)","decl":{"start":{"line":382,"column":13},"end":{"line":382,"column":14}},"loc":{"start":{"line":383,"column":8},"end":{"line":385,"column":9}},"line":383},"17":{"name":"(anonymous_17)","decl":{"start":{"line":387,"column":13},"end":{"line":387,"column":14}},"loc":{"start":{"line":388,"column":8},"end":{"line":397,"column":9}},"line":388},"18":{"name":"(anonymous_18)","decl":{"start":{"line":411,"column":13},"end":{"line":411,"column":14}},"loc":{"start":{"line":412,"column":8},"end":{"line":414,"column":9}},"line":412},"19":{"name":"(anonymous_19)","decl":{"start":{"line":416,"column":13},"end":{"line":416,"column":14}},"loc":{"start":{"line":417,"column":8},"end":{"line":428,"column":9}},"line":417},"20":{"name":"(anonymous_20)","decl":{"start":{"line":442,"column":13},"end":{"line":442,"column":14}},"loc":{"start":{"line":443,"column":8},"end":{"line":445,"column":9}},"line":443},"21":{"name":"(anonymous_21)","decl":{"start":{"line":447,"column":13},"end":{"line":447,"column":14}},"loc":{"start":{"line":448,"column":8},"end":{"line":457,"column":9}},"line":448},"22":{"name":"(anonymous_22)","decl":{"start":{"line":470,"column":13},"end":{"line":470,"column":14}},"loc":{"start":{"line":471,"column":8},"end":{"line":473,"column":9}},"line":471},"23":{"name":"(anonymous_23)","decl":{"start":{"line":475,"column":13},"end":{"line":475,"column":14}},"loc":{"start":{"line":476,"column":8},"end":{"line":478,"column":9}},"line":476},"24":{"name":"(anonymous_24)","decl":{"start":{"line":491,"column":13},"end":{"line":491,"column":14}},"loc":{"start":{"line":492,"column":8},"end":{"line":494,"column":9}},"line":492},"25":{"name":"(anonymous_25)","decl":{"start":{"line":496,"column":13},"end":{"line":496,"column":14}},"loc":{"start":{"line":497,"column":8},"end":{"line":499,"column":9}},"line":497}},"branchMap":{"0":{"loc":{"start":{"line":35,"column":8},"end":{"line":35,"column":39}},"type":"if","locations":[{"start":{"line":35,"column":8},"end":{"line":35,"column":39}},{"start":{},"end":{}}],"line":35},"1":{"loc":{"start":{"line":36,"column":8},"end":{"line":36,"column":39}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":36,"column":39}},{"start":{},"end":{}}],"line":36},"2":{"loc":{"start":{"line":37,"column":8},"end":{"line":37,"column":47}},"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":47}},{"start":{},"end":{}}],"line":37},"3":{"loc":{"start":{"line":38,"column":8},"end":{"line":38,"column":49}},"type":"if","locations":[{"start":{"line":38,"column":8},"end":{"line":38,"column":49}},{"start":{},"end":{}}],"line":38},"4":{"loc":{"start":{"line":215,"column":8},"end":{"line":215,"column":39}},"type":"if","locations":[{"start":{"line":215,"column":8},"end":{"line":215,"column":39}},{"start":{},"end":{}}],"line":215},"5":{"loc":{"start":{"line":236,"column":8},"end":{"line":236,"column":53}},"type":"if","locations":[{"start":{"line":236,"column":8},"end":{"line":236,"column":53}},{"start":{},"end":{}}],"line":236},"6":{"loc":{"start":{"line":254,"column":16},"end":{"line":254,"column":51}},"type":"binary-expr","locations":[{"start":{"line":254,"column":16},"end":{"line":254,"column":31}},{"start":{"line":254,"column":35},"end":{"line":254,"column":51}}],"line":254},"7":{"loc":{"start":{"line":271,"column":8},"end":{"line":271,"column":54}},"type":"if","locations":[{"start":{"line":271,"column":8},"end":{"line":271,"column":54}},{"start":{},"end":{}}],"line":271},"8":{"loc":{"start":{"line":292,"column":8},"end":{"line":292,"column":54}},"type":"if","locations":[{"start":{"line":292,"column":8},"end":{"line":292,"column":54}},{"start":{},"end":{}}],"line":292},"9":{"loc":{"start":{"line":313,"column":8},"end":{"line":313,"column":54}},"type":"if","locations":[{"start":{"line":313,"column":8},"end":{"line":313,"column":54}},{"start":{},"end":{}}],"line":313},"10":{"loc":{"start":{"line":334,"column":8},"end":{"line":334,"column":54}},"type":"if","locations":[{"start":{"line":334,"column":8},"end":{"line":334,"column":54}},{"start":{},"end":{}}],"line":334},"11":{"loc":{"start":{"line":358,"column":12},"end":{"line":365,"column":13}},"type":"if","locations":[{"start":{"line":358,"column":12},"end":{"line":365,"column":13}},{"start":{"line":363,"column":12},"end":{"line":365,"column":13}}],"line":358},"12":{"loc":{"start":{"line":389,"column":12},"end":{"line":396,"column":13}},"type":"if","locations":[{"start":{"line":389,"column":12},"end":{"line":396,"column":13}},{"start":{"line":394,"column":12},"end":{"line":396,"column":13}}],"line":389},"13":{"loc":{"start":{"line":418,"column":12},"end":{"line":425,"column":13}},"type":"if","locations":[{"start":{"line":418,"column":12},"end":{"line":425,"column":13}},{"start":{"line":423,"column":12},"end":{"line":425,"column":13}}],"line":418},"14":{"loc":{"start":{"line":449,"column":12},"end":{"line":456,"column":13}},"type":"if","locations":[{"start":{"line":449,"column":12},"end":{"line":456,"column":13}},{"start":{"line":454,"column":12},"end":{"line":456,"column":13}}],"line":449}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":19,"9":2,"10":19,"11":2,"12":19,"13":2,"14":19,"15":2,"16":19,"17":19,"18":19,"19":19,"20":19,"21":9,"22":0,"23":0,"24":2,"25":2,"26":2,"27":2,"28":2,"29":2,"30":1,"31":2,"32":1,"33":2,"34":2,"35":2,"36":2,"37":1,"38":2,"39":2,"40":2,"41":7,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":1},"f":{"0":19,"1":9,"2":0,"3":0,"4":2,"5":2,"6":1,"7":2,"8":2,"9":7,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0},"b":{"0":[2,17],"1":[2,17],"2":[2,17],"3":[2,17],"4":[1,1],"5":[1,1],"6":[7,4],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"38bc2f2c99793f232a6c0c18986eb5b98bc0d0a8"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/Vector2.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/Vector2.js","statementMap":{"0":{"start":{"line":10,"column":12},"end":{"line":10,"column":37}},"1":{"start":{"line":11,"column":17},"end":{"line":11,"column":47}},"2":{"start":{"line":27,"column":14},"end":{"line":713,"column":2}},"3":{"start":{"line":41,"column":8},"end":{"line":41,"column":19}},"4":{"start":{"line":51,"column":8},"end":{"line":51,"column":19}},"5":{"start":{"line":53,"column":8},"end":{"line":64,"column":9}},"6":{"start":{"line":55,"column":12},"end":{"line":55,"column":30}},"7":{"start":{"line":56,"column":12},"end":{"line":56,"column":30}},"8":{"start":{"line":60,"column":12},"end":{"line":60,"column":43}},"9":{"start":{"line":60,"column":35},"end":{"line":60,"column":41}},"10":{"start":{"line":62,"column":12},"end":{"line":62,"column":28}},"11":{"start":{"line":63,"column":12},"end":{"line":63,"column":28}},"12":{"start":{"line":77,"column":8},"end":{"line":77,"column":43}},"13":{"start":{"line":92,"column":8},"end":{"line":92,"column":28}},"14":{"start":{"line":93,"column":8},"end":{"line":93,"column":28}},"15":{"start":{"line":95,"column":8},"end":{"line":95,"column":20}},"16":{"start":{"line":110,"column":8},"end":{"line":110,"column":28}},"17":{"start":{"line":111,"column":8},"end":{"line":111,"column":28}},"18":{"start":{"line":113,"column":8},"end":{"line":113,"column":20}},"19":{"start":{"line":129,"column":8},"end":{"line":129,"column":39}},"20":{"start":{"line":129,"column":31},"end":{"line":129,"column":37}},"21":{"start":{"line":131,"column":8},"end":{"line":131,"column":19}},"22":{"start":{"line":132,"column":8},"end":{"line":132,"column":19}},"23":{"start":{"line":134,"column":8},"end":{"line":134,"column":20}},"24":{"start":{"line":150,"column":8},"end":{"line":150,"column":30}},"25":{"start":{"line":166,"column":8},"end":{"line":166,"column":43}},"26":{"start":{"line":166,"column":30},"end":{"line":166,"column":41}},"27":{"start":{"line":168,"column":8},"end":{"line":168,"column":44}},"28":{"start":{"line":169,"column":8},"end":{"line":169,"column":44}},"29":{"start":{"line":171,"column":8},"end":{"line":171,"column":20}},"30":{"start":{"line":188,"column":8},"end":{"line":188,"column":54}},"31":{"start":{"line":204,"column":8},"end":{"line":204,"column":86}},"32":{"start":{"line":219,"column":20},"end":{"line":219,"column":46}},"33":{"start":{"line":221,"column":8},"end":{"line":224,"column":9}},"34":{"start":{"line":223,"column":12},"end":{"line":223,"column":33}},"35":{"start":{"line":226,"column":8},"end":{"line":226,"column":21}},"36":{"start":{"line":241,"column":8},"end":{"line":241,"column":53}},"37":{"start":{"line":256,"column":8},"end":{"line":256,"column":24}},"38":{"start":{"line":257,"column":8},"end":{"line":257,"column":24}},"39":{"start":{"line":259,"column":8},"end":{"line":259,"column":20}},"40":{"start":{"line":274,"column":8},"end":{"line":274,"column":24}},"41":{"start":{"line":275,"column":8},"end":{"line":275,"column":24}},"42":{"start":{"line":277,"column":8},"end":{"line":277,"column":20}},"43":{"start":{"line":294,"column":8},"end":{"line":294,"column":24}},"44":{"start":{"line":295,"column":8},"end":{"line":295,"column":24}},"45":{"start":{"line":297,"column":8},"end":{"line":297,"column":20}},"46":{"start":{"line":312,"column":8},"end":{"line":321,"column":9}},"47":{"start":{"line":314,"column":12},"end":{"line":314,"column":28}},"48":{"start":{"line":315,"column":12},"end":{"line":315,"column":28}},"49":{"start":{"line":319,"column":12},"end":{"line":319,"column":23}},"50":{"start":{"line":320,"column":12},"end":{"line":320,"column":23}},"51":{"start":{"line":323,"column":8},"end":{"line":323,"column":20}},"52":{"start":{"line":340,"column":8},"end":{"line":340,"column":24}},"53":{"start":{"line":341,"column":8},"end":{"line":341,"column":24}},"54":{"start":{"line":343,"column":8},"end":{"line":343,"column":20}},"55":{"start":{"line":356,"column":8},"end":{"line":356,"column":25}},"56":{"start":{"line":357,"column":8},"end":{"line":357,"column":25}},"57":{"start":{"line":359,"column":8},"end":{"line":359,"column":20}},"58":{"start":{"line":374,"column":17},"end":{"line":374,"column":31}},"59":{"start":{"line":375,"column":17},"end":{"line":375,"column":31}},"60":{"start":{"line":377,"column":8},"end":{"line":377,"column":44}},"61":{"start":{"line":392,"column":17},"end":{"line":392,"column":31}},"62":{"start":{"line":393,"column":17},"end":{"line":393,"column":31}},"63":{"start":{"line":395,"column":8},"end":{"line":395,"column":33}},"64":{"start":{"line":408,"column":16},"end":{"line":408,"column":22}},"65":{"start":{"line":409,"column":16},"end":{"line":409,"column":22}},"66":{"start":{"line":411,"column":8},"end":{"line":411,"column":40}},"67":{"start":{"line":426,"column":8},"end":{"line":426,"column":46}},"68":{"start":{"line":439,"column":16},"end":{"line":439,"column":22}},"69":{"start":{"line":440,"column":16},"end":{"line":440,"column":22}},"70":{"start":{"line":442,"column":8},"end":{"line":442,"column":29}},"71":{"start":{"line":457,"column":16},"end":{"line":457,"column":22}},"72":{"start":{"line":458,"column":16},"end":{"line":458,"column":22}},"73":{"start":{"line":459,"column":18},"end":{"line":459,"column":31}},"74":{"start":{"line":461,"column":8},"end":{"line":467,"column":9}},"75":{"start":{"line":463,"column":12},"end":{"line":463,"column":37}},"76":{"start":{"line":465,"column":12},"end":{"line":465,"column":29}},"77":{"start":{"line":466,"column":12},"end":{"line":466,"column":29}},"78":{"start":{"line":469,"column":8},"end":{"line":469,"column":20}},"79":{"start":{"line":482,"column":16},"end":{"line":482,"column":22}},"80":{"start":{"line":484,"column":8},"end":{"line":484,"column":29}},"81":{"start":{"line":485,"column":8},"end":{"line":485,"column":19}},"82":{"start":{"line":487,"column":8},"end":{"line":487,"column":20}},"83":{"start":{"line":500,"column":16},"end":{"line":500,"column":22}},"84":{"start":{"line":502,"column":8},"end":{"line":502,"column":24}},"85":{"start":{"line":503,"column":8},"end":{"line":503,"column":24}},"86":{"start":{"line":505,"column":8},"end":{"line":505,"column":20}},"87":{"start":{"line":520,"column":8},"end":{"line":520,"column":47}},"88":{"start":{"line":535,"column":8},"end":{"line":535,"column":47}},"89":{"start":{"line":553,"column":8},"end":{"line":553,"column":39}},"90":{"start":{"line":553,"column":31},"end":{"line":553,"column":37}},"91":{"start":{"line":555,"column":17},"end":{"line":555,"column":23}},"92":{"start":{"line":556,"column":17},"end":{"line":556,"column":23}},"93":{"start":{"line":558,"column":8},"end":{"line":558,"column":39}},"94":{"start":{"line":559,"column":8},"end":{"line":559,"column":39}},"95":{"start":{"line":561,"column":8},"end":{"line":561,"column":20}},"96":{"start":{"line":576,"column":16},"end":{"line":576,"column":22}},"97":{"start":{"line":577,"column":16},"end":{"line":577,"column":22}},"98":{"start":{"line":578,"column":16},"end":{"line":578,"column":23}},"99":{"start":{"line":580,"column":8},"end":{"line":580,"column":44}},"100":{"start":{"line":581,"column":8},"end":{"line":581,"column":44}},"101":{"start":{"line":583,"column":8},"end":{"line":583,"column":20}},"102":{"start":{"line":598,"column":16},"end":{"line":598,"column":22}},"103":{"start":{"line":599,"column":16},"end":{"line":599,"column":22}},"104":{"start":{"line":600,"column":16},"end":{"line":600,"column":23}},"105":{"start":{"line":602,"column":8},"end":{"line":602,"column":45}},"106":{"start":{"line":603,"column":8},"end":{"line":603,"column":45}},"107":{"start":{"line":605,"column":8},"end":{"line":605,"column":20}},"108":{"start":{"line":618,"column":8},"end":{"line":618,"column":19}},"109":{"start":{"line":619,"column":8},"end":{"line":619,"column":19}},"110":{"start":{"line":621,"column":8},"end":{"line":621,"column":20}},"111":{"start":{"line":636,"column":18},"end":{"line":636,"column":31}},"112":{"start":{"line":638,"column":8},"end":{"line":641,"column":9}},"113":{"start":{"line":640,"column":12},"end":{"line":640,"column":34}},"114":{"start":{"line":643,"column":8},"end":{"line":643,"column":20}},"115":{"start":{"line":658,"column":8},"end":{"line":658,"column":44}},"116":{"start":{"line":660,"column":8},"end":{"line":660,"column":65}},"117":{"start":{"line":675,"column":8},"end":{"line":675,"column":43}},"118":{"start":{"line":690,"column":18},"end":{"line":690,"column":33}},"119":{"start":{"line":691,"column":18},"end":{"line":691,"column":33}},"120":{"start":{"line":693,"column":8},"end":{"line":693,"column":82}},"121":{"start":{"line":708,"column":21},"end":{"line":708,"column":49}},"122":{"start":{"line":710,"column":8},"end":{"line":710,"column":44}},"123":{"start":{"line":725,"column":0},"end":{"line":725,"column":29}},"124":{"start":{"line":737,"column":0},"end":{"line":737,"column":34}},"125":{"start":{"line":749,"column":0},"end":{"line":749,"column":34}},"126":{"start":{"line":761,"column":0},"end":{"line":761,"column":32}},"127":{"start":{"line":773,"column":0},"end":{"line":773,"column":33}},"128":{"start":{"line":785,"column":0},"end":{"line":785,"column":32}},"129":{"start":{"line":787,"column":0},"end":{"line":787,"column":25}}},"fnMap":{"0":{"name":"Vector2","decl":{"start":{"line":31,"column":13},"end":{"line":31,"column":20}},"loc":{"start":{"line":32,"column":4},"end":{"line":65,"column":5}},"line":32},"1":{"name":"(anonymous_1)","decl":{"start":{"line":75,"column":11},"end":{"line":75,"column":12}},"loc":{"start":{"line":76,"column":4},"end":{"line":78,"column":5}},"line":76},"2":{"name":"(anonymous_2)","decl":{"start":{"line":90,"column":10},"end":{"line":90,"column":11}},"loc":{"start":{"line":91,"column":4},"end":{"line":96,"column":5}},"line":91},"3":{"name":"(anonymous_3)","decl":{"start":{"line":108,"column":19},"end":{"line":108,"column":20}},"loc":{"start":{"line":109,"column":4},"end":{"line":114,"column":5}},"line":109},"4":{"name":"(anonymous_4)","decl":{"start":{"line":127,"column":9},"end":{"line":127,"column":10}},"loc":{"start":{"line":128,"column":4},"end":{"line":135,"column":5}},"line":128},"5":{"name":"(anonymous_5)","decl":{"start":{"line":148,"column":11},"end":{"line":148,"column":12}},"loc":{"start":{"line":149,"column":4},"end":{"line":151,"column":5}},"line":149},"6":{"name":"(anonymous_6)","decl":{"start":{"line":164,"column":16},"end":{"line":164,"column":17}},"loc":{"start":{"line":165,"column":4},"end":{"line":172,"column":5}},"line":165},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":12},"end":{"line":186,"column":13}},"loc":{"start":{"line":187,"column":4},"end":{"line":189,"column":5}},"line":187},"8":{"name":"(anonymous_8)","decl":{"start":{"line":202,"column":17},"end":{"line":202,"column":18}},"loc":{"start":{"line":203,"column":4},"end":{"line":205,"column":5}},"line":203},"9":{"name":"(anonymous_9)","decl":{"start":{"line":215,"column":11},"end":{"line":215,"column":12}},"loc":{"start":{"line":216,"column":4},"end":{"line":227,"column":5}},"line":216},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":14},"end":{"line":239,"column":15}},"loc":{"start":{"line":240,"column":4},"end":{"line":242,"column":5}},"line":240},"11":{"name":"(anonymous_11)","decl":{"start":{"line":254,"column":9},"end":{"line":254,"column":10}},"loc":{"start":{"line":255,"column":4},"end":{"line":260,"column":5}},"line":255},"12":{"name":"(anonymous_12)","decl":{"start":{"line":272,"column":14},"end":{"line":272,"column":15}},"loc":{"start":{"line":273,"column":4},"end":{"line":278,"column":5}},"line":273},"13":{"name":"(anonymous_13)","decl":{"start":{"line":292,"column":14},"end":{"line":292,"column":15}},"loc":{"start":{"line":293,"column":4},"end":{"line":298,"column":5}},"line":293},"14":{"name":"(anonymous_14)","decl":{"start":{"line":310,"column":11},"end":{"line":310,"column":12}},"loc":{"start":{"line":311,"column":4},"end":{"line":324,"column":5}},"line":311},"15":{"name":"(anonymous_15)","decl":{"start":{"line":338,"column":12},"end":{"line":338,"column":13}},"loc":{"start":{"line":339,"column":4},"end":{"line":344,"column":5}},"line":339},"16":{"name":"(anonymous_16)","decl":{"start":{"line":354,"column":12},"end":{"line":354,"column":13}},"loc":{"start":{"line":355,"column":4},"end":{"line":360,"column":5}},"line":355},"17":{"name":"(anonymous_17)","decl":{"start":{"line":372,"column":14},"end":{"line":372,"column":15}},"loc":{"start":{"line":373,"column":4},"end":{"line":378,"column":5}},"line":373},"18":{"name":"(anonymous_18)","decl":{"start":{"line":390,"column":16},"end":{"line":390,"column":17}},"loc":{"start":{"line":391,"column":4},"end":{"line":396,"column":5}},"line":391},"19":{"name":"(anonymous_19)","decl":{"start":{"line":406,"column":12},"end":{"line":406,"column":13}},"loc":{"start":{"line":407,"column":4},"end":{"line":412,"column":5}},"line":407},"20":{"name":"(anonymous_20)","decl":{"start":{"line":424,"column":15},"end":{"line":424,"column":16}},"loc":{"start":{"line":425,"column":4},"end":{"line":427,"column":5}},"line":425},"21":{"name":"(anonymous_21)","decl":{"start":{"line":437,"column":14},"end":{"line":437,"column":15}},"loc":{"start":{"line":438,"column":4},"end":{"line":443,"column":5}},"line":438},"22":{"name":"(anonymous_22)","decl":{"start":{"line":455,"column":15},"end":{"line":455,"column":16}},"loc":{"start":{"line":456,"column":4},"end":{"line":470,"column":5}},"line":456},"23":{"name":"(anonymous_23)","decl":{"start":{"line":480,"column":24},"end":{"line":480,"column":25}},"loc":{"start":{"line":481,"column":4},"end":{"line":488,"column":5}},"line":481},"24":{"name":"(anonymous_24)","decl":{"start":{"line":498,"column":23},"end":{"line":498,"column":24}},"loc":{"start":{"line":499,"column":4},"end":{"line":506,"column":5}},"line":499},"25":{"name":"(anonymous_25)","decl":{"start":{"line":518,"column":9},"end":{"line":518,"column":10}},"loc":{"start":{"line":519,"column":4},"end":{"line":521,"column":5}},"line":519},"26":{"name":"(anonymous_26)","decl":{"start":{"line":533,"column":11},"end":{"line":533,"column":12}},"loc":{"start":{"line":534,"column":4},"end":{"line":536,"column":5}},"line":534},"27":{"name":"(anonymous_27)","decl":{"start":{"line":551,"column":10},"end":{"line":551,"column":11}},"loc":{"start":{"line":552,"column":4},"end":{"line":562,"column":5}},"line":552},"28":{"name":"(anonymous_28)","decl":{"start":{"line":574,"column":19},"end":{"line":574,"column":20}},"loc":{"start":{"line":575,"column":4},"end":{"line":584,"column":5}},"line":575},"29":{"name":"(anonymous_29)","decl":{"start":{"line":596,"column":19},"end":{"line":596,"column":20}},"loc":{"start":{"line":597,"column":4},"end":{"line":606,"column":5}},"line":597},"30":{"name":"(anonymous_30)","decl":{"start":{"line":616,"column":11},"end":{"line":616,"column":12}},"loc":{"start":{"line":617,"column":4},"end":{"line":622,"column":5}},"line":617},"31":{"name":"(anonymous_31)","decl":{"start":{"line":634,"column":11},"end":{"line":634,"column":12}},"loc":{"start":{"line":635,"column":4},"end":{"line":644,"column":5}},"line":635},"32":{"name":"(anonymous_32)","decl":{"start":{"line":656,"column":13},"end":{"line":656,"column":14}},"loc":{"start":{"line":657,"column":4},"end":{"line":661,"column":5}},"line":657},"33":{"name":"(anonymous_33)","decl":{"start":{"line":673,"column":12},"end":{"line":673,"column":13}},"loc":{"start":{"line":674,"column":4},"end":{"line":676,"column":5}},"line":674},"34":{"name":"(anonymous_34)","decl":{"start":{"line":688,"column":12},"end":{"line":688,"column":13}},"loc":{"start":{"line":689,"column":4},"end":{"line":694,"column":5}},"line":689},"35":{"name":"(anonymous_35)","decl":{"start":{"line":706,"column":13},"end":{"line":706,"column":14}},"loc":{"start":{"line":707,"column":4},"end":{"line":711,"column":5}},"line":707}},"branchMap":{"0":{"loc":{"start":{"line":53,"column":8},"end":{"line":64,"column":9}},"type":"if","locations":[{"start":{"line":53,"column":8},"end":{"line":64,"column":9}},{"start":{"line":59,"column":8},"end":{"line":64,"column":9}}],"line":53},"1":{"loc":{"start":{"line":55,"column":21},"end":{"line":55,"column":29}},"type":"binary-expr","locations":[{"start":{"line":55,"column":21},"end":{"line":55,"column":24}},{"start":{"line":55,"column":28},"end":{"line":55,"column":29}}],"line":55},"2":{"loc":{"start":{"line":56,"column":21},"end":{"line":56,"column":29}},"type":"binary-expr","locations":[{"start":{"line":56,"column":21},"end":{"line":56,"column":24}},{"start":{"line":56,"column":28},"end":{"line":56,"column":29}}],"line":56},"3":{"loc":{"start":{"line":60,"column":12},"end":{"line":60,"column":43}},"type":"if","locations":[{"start":{"line":60,"column":12},"end":{"line":60,"column":43}},{"start":{},"end":{}}],"line":60},"4":{"loc":{"start":{"line":62,"column":21},"end":{"line":62,"column":27}},"type":"binary-expr","locations":[{"start":{"line":62,"column":21},"end":{"line":62,"column":22}},{"start":{"line":62,"column":26},"end":{"line":62,"column":27}}],"line":62},"5":{"loc":{"start":{"line":63,"column":21},"end":{"line":63,"column":27}},"type":"binary-expr","locations":[{"start":{"line":63,"column":21},"end":{"line":63,"column":22}},{"start":{"line":63,"column":26},"end":{"line":63,"column":27}}],"line":63},"6":{"loc":{"start":{"line":92,"column":17},"end":{"line":92,"column":27}},"type":"binary-expr","locations":[{"start":{"line":92,"column":17},"end":{"line":92,"column":22}},{"start":{"line":92,"column":26},"end":{"line":92,"column":27}}],"line":92},"7":{"loc":{"start":{"line":93,"column":17},"end":{"line":93,"column":27}},"type":"binary-expr","locations":[{"start":{"line":93,"column":17},"end":{"line":93,"column":22}},{"start":{"line":93,"column":26},"end":{"line":93,"column":27}}],"line":93},"8":{"loc":{"start":{"line":110,"column":17},"end":{"line":110,"column":27}},"type":"binary-expr","locations":[{"start":{"line":110,"column":17},"end":{"line":110,"column":22}},{"start":{"line":110,"column":26},"end":{"line":110,"column":27}}],"line":110},"9":{"loc":{"start":{"line":111,"column":17},"end":{"line":111,"column":27}},"type":"binary-expr","locations":[{"start":{"line":111,"column":17},"end":{"line":111,"column":22}},{"start":{"line":111,"column":26},"end":{"line":111,"column":27}}],"line":111},"10":{"loc":{"start":{"line":129,"column":8},"end":{"line":129,"column":39}},"type":"if","locations":[{"start":{"line":129,"column":8},"end":{"line":129,"column":39}},{"start":{},"end":{}}],"line":129},"11":{"loc":{"start":{"line":166,"column":8},"end":{"line":166,"column":43}},"type":"if","locations":[{"start":{"line":166,"column":8},"end":{"line":166,"column":43}},{"start":{},"end":{}}],"line":166},"12":{"loc":{"start":{"line":188,"column":16},"end":{"line":188,"column":52}},"type":"binary-expr","locations":[{"start":{"line":188,"column":17},"end":{"line":188,"column":31}},{"start":{"line":188,"column":37},"end":{"line":188,"column":51}}],"line":188},"13":{"loc":{"start":{"line":204,"column":16},"end":{"line":204,"column":84}},"type":"binary-expr","locations":[{"start":{"line":204,"column":16},"end":{"line":204,"column":48}},{"start":{"line":204,"column":52},"end":{"line":204,"column":84}}],"line":204},"14":{"loc":{"start":{"line":221,"column":8},"end":{"line":224,"column":9}},"type":"if","locations":[{"start":{"line":221,"column":8},"end":{"line":224,"column":9}},{"start":{},"end":{}}],"line":221},"15":{"loc":{"start":{"line":312,"column":8},"end":{"line":321,"column":9}},"type":"if","locations":[{"start":{"line":312,"column":8},"end":{"line":321,"column":9}},{"start":{"line":318,"column":8},"end":{"line":321,"column":9}}],"line":312},"16":{"loc":{"start":{"line":461,"column":8},"end":{"line":467,"column":9}},"type":"if","locations":[{"start":{"line":461,"column":8},"end":{"line":467,"column":9}},{"start":{},"end":{}}],"line":461},"17":{"loc":{"start":{"line":553,"column":8},"end":{"line":553,"column":39}},"type":"if","locations":[{"start":{"line":553,"column":8},"end":{"line":553,"column":39}},{"start":{},"end":{}}],"line":553},"18":{"loc":{"start":{"line":638,"column":8},"end":{"line":641,"column":9}},"type":"if","locations":[{"start":{"line":638,"column":8},"end":{"line":641,"column":9}},{"start":{},"end":{}}],"line":638},"19":{"loc":{"start":{"line":638,"column":12},"end":{"line":638,"column":28}},"type":"binary-expr","locations":[{"start":{"line":638,"column":12},"end":{"line":638,"column":15}},{"start":{"line":638,"column":19},"end":{"line":638,"column":28}}],"line":638}},"s":{"0":2,"1":2,"2":2,"3":37,"4":37,"5":37,"6":1,"7":1,"8":36,"9":7,"10":36,"11":36,"12":1,"13":2,"14":2,"15":2,"16":0,"17":0,"18":0,"19":2,"20":1,"21":2,"22":2,"23":2,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":2,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":0,"50":0,"51":1,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":2,"65":2,"66":2,"67":0,"68":0,"69":0,"70":0,"71":2,"72":2,"73":2,"74":2,"75":1,"76":1,"77":1,"78":2,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":2,"124":2,"125":2,"126":2,"127":2,"128":2,"129":2},"f":{"0":37,"1":1,"2":2,"3":0,"4":2,"5":0,"6":0,"7":2,"8":0,"9":0,"10":0,"11":1,"12":1,"13":1,"14":1,"15":0,"16":0,"17":0,"18":0,"19":2,"20":0,"21":0,"22":2,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0},"b":{"0":[1,36],"1":[1,0],"2":[1,0],"3":[7,29],"4":[36,11],"5":[36,11],"6":[2,1],"7":[2,1],"8":[0,0],"9":[0,0],"10":[1,1],"11":[0,0],"12":[2,2],"13":[0,0],"14":[0,0],"15":[1,0],"16":[1,1],"17":[0,0],"18":[0,0],"19":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"7a610315ca68d7df0d50c52d77bab7d656c494bf"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/Wrap.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/Wrap.js","statementMap":{"0":{"start":{"line":19,"column":11},"end":{"line":24,"column":1}},"1":{"start":{"line":21,"column":16},"end":{"line":21,"column":25}},"2":{"start":{"line":23,"column":4},"end":{"line":23,"column":63}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":19,"column":11},"end":{"line":19,"column":12}},"loc":{"start":{"line":20,"column":0},"end":{"line":24,"column":1}},"line":20}},"branchMap":{},"s":{"0":1,"1":22,"2":22,"3":1},"f":{"0":22},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"b32dc0b795be7b6edd1015815b98d4324a05bd0c"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/angle/Between.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/angle/Between.js","statementMap":{"0":{"start":{"line":20,"column":14},"end":{"line":23,"column":1}},"1":{"start":{"line":22,"column":4},"end":{"line":22,"column":40}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":20,"column":14},"end":{"line":20,"column":15}},"loc":{"start":{"line":21,"column":0},"end":{"line":23,"column":1}},"line":21}},"branchMap":{},"s":{"0":1,"1":5,"2":1},"f":{"0":5},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"32265cb26530767161a02581d716f696c1c9e516"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/angle/Normalize.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/angle/Normalize.js","statementMap":{"0":{"start":{"line":17,"column":16},"end":{"line":29,"column":1}},"1":{"start":{"line":19,"column":4},"end":{"line":19,"column":34}},"2":{"start":{"line":21,"column":4},"end":{"line":28,"column":5}},"3":{"start":{"line":23,"column":8},"end":{"line":23,"column":21}},"4":{"start":{"line":27,"column":8},"end":{"line":27,"column":35}},"5":{"start":{"line":31,"column":0},"end":{"line":31,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":18,"column":0},"end":{"line":29,"column":1}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":4},"end":{"line":28,"column":5}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":28,"column":5}},{"start":{"line":26,"column":4},"end":{"line":28,"column":5}}],"line":21}},"s":{"0":1,"1":13,"2":13,"3":11,"4":2,"5":1},"f":{"0":13},"b":{"0":[11,2]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"766107ee763c9023cb6ecffe8f48ec9f331c33f1"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/angle/Reverse.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/angle/Reverse.js","statementMap":{"0":{"start":{"line":7,"column":16},"end":{"line":7,"column":38}},"1":{"start":{"line":19,"column":14},"end":{"line":22,"column":1}},"2":{"start":{"line":21,"column":4},"end":{"line":21,"column":38}},"3":{"start":{"line":24,"column":0},"end":{"line":24,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":19,"column":14},"end":{"line":19,"column":15}},"loc":{"start":{"line":20,"column":0},"end":{"line":22,"column":1}},"line":20}},"branchMap":{},"s":{"0":1,"1":1,"2":4,"3":1},"f":{"0":4},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"8e85426091b148f1a5eeeb9d0bca7d33d0c7b7af"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/angle/Wrap.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/angle/Wrap.js","statementMap":{"0":{"start":{"line":7,"column":15},"end":{"line":7,"column":33}},"1":{"start":{"line":21,"column":11},"end":{"line":24,"column":1}},"2":{"start":{"line":23,"column":4},"end":{"line":23,"column":46}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":21,"column":11},"end":{"line":21,"column":12}},"loc":{"start":{"line":22,"column":0},"end":{"line":24,"column":1}},"line":22}},"branchMap":{},"s":{"0":1,"1":1,"2":10,"3":1},"f":{"0":10},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"433ae7baa13b5cbd6caf3ce0338474ddbff94c5b"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/angle/WrapDegrees.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/angle/WrapDegrees.js","statementMap":{"0":{"start":{"line":7,"column":11},"end":{"line":7,"column":29}},"1":{"start":{"line":21,"column":18},"end":{"line":24,"column":1}},"2":{"start":{"line":23,"column":4},"end":{"line":23,"column":34}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":21,"column":18},"end":{"line":21,"column":19}},"loc":{"start":{"line":22,"column":0},"end":{"line":24,"column":1}},"line":22}},"branchMap":{},"s":{"0":1,"1":1,"2":12,"3":1},"f":{"0":12},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"180f385d898bb46d49c6fe03894c7ce35db7a792"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/fuzzy/Equal.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/fuzzy/Equal.js","statementMap":{"0":{"start":{"line":21,"column":12},"end":{"line":26,"column":1}},"1":{"start":{"line":23,"column":4},"end":{"line":23,"column":52}},"2":{"start":{"line":23,"column":33},"end":{"line":23,"column":50}},"3":{"start":{"line":25,"column":4},"end":{"line":25,"column":37}},"4":{"start":{"line":28,"column":0},"end":{"line":28,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":21,"column":12},"end":{"line":21,"column":13}},"loc":{"start":{"line":22,"column":0},"end":{"line":26,"column":1}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":4},"end":{"line":23,"column":52}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":23,"column":52}},{"start":{},"end":{}}],"line":23}},"s":{"0":2,"1":0,"2":0,"3":0,"4":2},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5d58582f2bd26dd1d92e0c2b4c22d93cad20d2e2"}
+,"/Users/normanqian/fractalcamp/phaser/src/math/random-data-generator/RandomDataGenerator.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/math/random-data-generator/RandomDataGenerator.js","statementMap":{"0":{"start":{"line":7,"column":12},"end":{"line":7,"column":40}},"1":{"start":{"line":29,"column":26},"end":{"line":502,"column":2}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":89}},"3":{"start":{"line":35,"column":35},"end":{"line":35,"column":87}},"4":{"start":{"line":46,"column":8},"end":{"line":46,"column":19}},"5":{"start":{"line":57,"column":8},"end":{"line":57,"column":20}},"6":{"start":{"line":68,"column":8},"end":{"line":68,"column":20}},"7":{"start":{"line":79,"column":8},"end":{"line":79,"column":20}},"8":{"start":{"line":90,"column":8},"end":{"line":90,"column":19}},"9":{"start":{"line":99,"column":8},"end":{"line":99,"column":31}},"10":{"start":{"line":101,"column":8},"end":{"line":104,"column":9}},"11":{"start":{"line":103,"column":12},"end":{"line":103,"column":29}},"12":{"start":{"line":118,"column":16},"end":{"line":118,"column":67}},"13":{"start":{"line":120,"column":8},"end":{"line":120,"column":23}},"14":{"start":{"line":121,"column":8},"end":{"line":121,"column":26}},"15":{"start":{"line":122,"column":8},"end":{"line":122,"column":26}},"16":{"start":{"line":123,"column":8},"end":{"line":123,"column":29}},"17":{"start":{"line":125,"column":8},"end":{"line":125,"column":23}},"18":{"start":{"line":142,"column":16},"end":{"line":142,"column":22}},"19":{"start":{"line":144,"column":8},"end":{"line":144,"column":31}},"20":{"start":{"line":146,"column":8},"end":{"line":156,"column":9}},"21":{"start":{"line":146,"column":21},"end":{"line":146,"column":22}},"22":{"start":{"line":148,"column":12},"end":{"line":148,"column":36}},"23":{"start":{"line":149,"column":12},"end":{"line":149,"column":40}},"24":{"start":{"line":150,"column":12},"end":{"line":150,"column":24}},"25":{"start":{"line":151,"column":12},"end":{"line":151,"column":19}},"26":{"start":{"line":152,"column":12},"end":{"line":152,"column":19}},"27":{"start":{"line":153,"column":12},"end":{"line":153,"column":24}},"28":{"start":{"line":154,"column":12},"end":{"line":154,"column":19}},"29":{"start":{"line":155,"column":12},"end":{"line":155,"column":33}},"30":{"start":{"line":158,"column":8},"end":{"line":158,"column":19}},"31":{"start":{"line":160,"column":8},"end":{"line":160,"column":50}},"32":{"start":{"line":173,"column":8},"end":{"line":180,"column":9}},"33":{"start":{"line":175,"column":12},"end":{"line":175,"column":30}},"34":{"start":{"line":179,"column":12},"end":{"line":179,"column":28}},"35":{"start":{"line":196,"column":8},"end":{"line":196,"column":28}},"36":{"start":{"line":197,"column":8},"end":{"line":197,"column":33}},"37":{"start":{"line":198,"column":8},"end":{"line":198,"column":33}},"38":{"start":{"line":199,"column":8},"end":{"line":199,"column":33}},"39":{"start":{"line":200,"column":8},"end":{"line":200,"column":19}},"40":{"start":{"line":202,"column":8},"end":{"line":205,"column":9}},"41":{"start":{"line":204,"column":12},"end":{"line":204,"column":19}},"42":{"start":{"line":208,"column":8},"end":{"line":218,"column":9}},"43":{"start":{"line":208,"column":21},"end":{"line":208,"column":22}},"44":{"start":{"line":210,"column":23},"end":{"line":210,"column":31}},"45":{"start":{"line":212,"column":12},"end":{"line":212,"column":39}},"46":{"start":{"line":213,"column":12},"end":{"line":213,"column":39}},"47":{"start":{"line":214,"column":12},"end":{"line":214,"column":39}},"48":{"start":{"line":215,"column":12},"end":{"line":215,"column":39}},"49":{"start":{"line":216,"column":12},"end":{"line":216,"column":39}},"50":{"start":{"line":217,"column":12},"end":{"line":217,"column":39}},"51":{"start":{"line":232,"column":8},"end":{"line":232,"column":40}},"52":{"start":{"line":246,"column":8},"end":{"line":246,"column":81}},"53":{"start":{"line":259,"column":8},"end":{"line":259,"column":44}},"54":{"start":{"line":275,"column":8},"end":{"line":275,"column":68}},"55":{"start":{"line":292,"column":8},"end":{"line":292,"column":68}},"56":{"start":{"line":308,"column":8},"end":{"line":308,"column":47}},"57":{"start":{"line":321,"column":8},"end":{"line":321,"column":37}},"58":{"start":{"line":334,"column":16},"end":{"line":334,"column":18}},"59":{"start":{"line":335,"column":16},"end":{"line":335,"column":18}},"60":{"start":{"line":337,"column":8},"end":{"line":340,"column":9}},"61":{"start":{"line":342,"column":8},"end":{"line":342,"column":17}},"62":{"start":{"line":361,"column":8},"end":{"line":361,"column":63}},"63":{"start":{"line":374,"column":8},"end":{"line":374,"column":37}},"64":{"start":{"line":393,"column":8},"end":{"line":393,"column":80}},"65":{"start":{"line":409,"column":8},"end":{"line":409,"column":75}},"66":{"start":{"line":422,"column":8},"end":{"line":422,"column":46}},"67":{"start":{"line":435,"column":8},"end":{"line":435,"column":55}},"68":{"start":{"line":460,"column":8},"end":{"line":468,"column":9}},"69":{"start":{"line":462,"column":12},"end":{"line":462,"column":37}},"70":{"start":{"line":464,"column":12},"end":{"line":464,"column":42}},"71":{"start":{"line":465,"column":12},"end":{"line":465,"column":43}},"72":{"start":{"line":466,"column":12},"end":{"line":466,"column":43}},"73":{"start":{"line":467,"column":12},"end":{"line":467,"column":43}},"74":{"start":{"line":470,"column":8},"end":{"line":470,"column":71}},"75":{"start":{"line":488,"column":18},"end":{"line":488,"column":34}},"76":{"start":{"line":490,"column":8},"end":{"line":497,"column":9}},"77":{"start":{"line":490,"column":21},"end":{"line":490,"column":24}},"78":{"start":{"line":492,"column":30},"end":{"line":492,"column":63}},"79":{"start":{"line":493,"column":30},"end":{"line":493,"column":48}},"80":{"start":{"line":495,"column":12},"end":{"line":495,"column":42}},"81":{"start":{"line":496,"column":12},"end":{"line":496,"column":35}},"82":{"start":{"line":499,"column":8},"end":{"line":499,"column":21}},"83":{"start":{"line":504,"column":0},"end":{"line":504,"column":37}}},"fnMap":{"0":{"name":"RandomDataGenerator","decl":{"start":{"line":33,"column":13},"end":{"line":33,"column":32}},"loc":{"start":{"line":34,"column":4},"end":{"line":105,"column":5}},"line":34},"1":{"name":"(anonymous_1)","decl":{"start":{"line":116,"column":9},"end":{"line":116,"column":10}},"loc":{"start":{"line":117,"column":4},"end":{"line":126,"column":5}},"line":117},"2":{"name":"(anonymous_2)","decl":{"start":{"line":139,"column":10},"end":{"line":139,"column":11}},"loc":{"start":{"line":140,"column":4},"end":{"line":161,"column":5}},"line":140},"3":{"name":"(anonymous_3)","decl":{"start":{"line":171,"column":10},"end":{"line":171,"column":11}},"loc":{"start":{"line":172,"column":4},"end":{"line":181,"column":5}},"line":172},"4":{"name":"(anonymous_4)","decl":{"start":{"line":193,"column":9},"end":{"line":193,"column":10}},"loc":{"start":{"line":194,"column":4},"end":{"line":219,"column":5}},"line":194},"5":{"name":"(anonymous_5)","decl":{"start":{"line":229,"column":13},"end":{"line":229,"column":14}},"loc":{"start":{"line":230,"column":4},"end":{"line":233,"column":5}},"line":230},"6":{"name":"(anonymous_6)","decl":{"start":{"line":243,"column":10},"end":{"line":243,"column":11}},"loc":{"start":{"line":244,"column":4},"end":{"line":247,"column":5}},"line":244},"7":{"name":"(anonymous_7)","decl":{"start":{"line":257,"column":10},"end":{"line":257,"column":11}},"loc":{"start":{"line":258,"column":4},"end":{"line":260,"column":5}},"line":258},"8":{"name":"(anonymous_8)","decl":{"start":{"line":273,"column":20},"end":{"line":273,"column":21}},"loc":{"start":{"line":274,"column":4},"end":{"line":276,"column":5}},"line":274},"9":{"name":"(anonymous_9)","decl":{"start":{"line":290,"column":13},"end":{"line":290,"column":14}},"loc":{"start":{"line":291,"column":4},"end":{"line":293,"column":5}},"line":291},"10":{"name":"(anonymous_10)","decl":{"start":{"line":306,"column":17},"end":{"line":306,"column":18}},"loc":{"start":{"line":307,"column":4},"end":{"line":309,"column":5}},"line":307},"11":{"name":"(anonymous_11)","decl":{"start":{"line":319,"column":12},"end":{"line":319,"column":13}},"loc":{"start":{"line":320,"column":4},"end":{"line":322,"column":5}},"line":320},"12":{"name":"(anonymous_12)","decl":{"start":{"line":332,"column":10},"end":{"line":332,"column":11}},"loc":{"start":{"line":333,"column":4},"end":{"line":343,"column":5}},"line":333},"13":{"name":"(anonymous_13)","decl":{"start":{"line":359,"column":10},"end":{"line":359,"column":11}},"loc":{"start":{"line":360,"column":4},"end":{"line":362,"column":5}},"line":360},"14":{"name":"(anonymous_14)","decl":{"start":{"line":372,"column":10},"end":{"line":372,"column":11}},"loc":{"start":{"line":373,"column":4},"end":{"line":375,"column":5}},"line":373},"15":{"name":"(anonymous_15)","decl":{"start":{"line":391,"column":18},"end":{"line":391,"column":19}},"loc":{"start":{"line":392,"column":4},"end":{"line":394,"column":5}},"line":392},"16":{"name":"(anonymous_16)","decl":{"start":{"line":407,"column":15},"end":{"line":407,"column":16}},"loc":{"start":{"line":408,"column":4},"end":{"line":410,"column":5}},"line":408},"17":{"name":"(anonymous_17)","decl":{"start":{"line":420,"column":11},"end":{"line":420,"column":12}},"loc":{"start":{"line":421,"column":4},"end":{"line":423,"column":5}},"line":421},"18":{"name":"(anonymous_18)","decl":{"start":{"line":433,"column":14},"end":{"line":433,"column":15}},"loc":{"start":{"line":434,"column":4},"end":{"line":436,"column":5}},"line":434},"19":{"name":"(anonymous_19)","decl":{"start":{"line":458,"column":11},"end":{"line":458,"column":12}},"loc":{"start":{"line":459,"column":4},"end":{"line":471,"column":5}},"line":459},"20":{"name":"(anonymous_20)","decl":{"start":{"line":486,"column":13},"end":{"line":486,"column":14}},"loc":{"start":{"line":487,"column":4},"end":{"line":500,"column":5}},"line":487}},"branchMap":{"0":{"loc":{"start":{"line":35,"column":8},"end":{"line":35,"column":89}},"type":"if","locations":[{"start":{"line":35,"column":8},"end":{"line":35,"column":89}},{"start":{},"end":{}}],"line":35},"1":{"loc":{"start":{"line":101,"column":8},"end":{"line":104,"column":9}},"type":"if","locations":[{"start":{"line":101,"column":8},"end":{"line":104,"column":9}},{"start":{},"end":{}}],"line":101},"2":{"loc":{"start":{"line":173,"column":8},"end":{"line":180,"column":9}},"type":"if","locations":[{"start":{"line":173,"column":8},"end":{"line":180,"column":9}},{"start":{"line":178,"column":8},"end":{"line":180,"column":9}}],"line":173},"3":{"loc":{"start":{"line":202,"column":8},"end":{"line":205,"column":9}},"type":"if","locations":[{"start":{"line":202,"column":8},"end":{"line":205,"column":9}},{"start":{},"end":{}}],"line":202},"4":{"loc":{"start":{"line":208,"column":24},"end":{"line":208,"column":62}},"type":"binary-expr","locations":[{"start":{"line":208,"column":24},"end":{"line":208,"column":40}},{"start":{"line":208,"column":45},"end":{"line":208,"column":61}}],"line":208},"5":{"loc":{"start":{"line":337,"column":40},"end":{"line":337,"column":130}},"type":"cond-expr","locations":[{"start":{"line":337,"column":61},"end":{"line":337,"column":124}},{"start":{"line":337,"column":127},"end":{"line":337,"column":130}}],"line":337},"6":{"loc":{"start":{"line":337,"column":62},"end":{"line":337,"column":110}},"type":"cond-expr","locations":[{"start":{"line":337,"column":71},"end":{"line":337,"column":106}},{"start":{"line":337,"column":109},"end":{"line":337,"column":110}}],"line":337},"7":{"loc":{"start":{"line":337,"column":90},"end":{"line":337,"column":105}},"type":"cond-expr","locations":[{"start":{"line":337,"column":99},"end":{"line":337,"column":101}},{"start":{"line":337,"column":104},"end":{"line":337,"column":105}}],"line":337},"8":{"loc":{"start":{"line":409,"column":32},"end":{"line":409,"column":51}},"type":"binary-expr","locations":[{"start":{"line":409,"column":32},"end":{"line":409,"column":35}},{"start":{"line":409,"column":39},"end":{"line":409,"column":51}}],"line":409},"9":{"loc":{"start":{"line":409,"column":53},"end":{"line":409,"column":73}},"type":"binary-expr","locations":[{"start":{"line":409,"column":53},"end":{"line":409,"column":56}},{"start":{"line":409,"column":60},"end":{"line":409,"column":73}}],"line":409},"10":{"loc":{"start":{"line":460,"column":8},"end":{"line":468,"column":9}},"type":"if","locations":[{"start":{"line":460,"column":8},"end":{"line":468,"column":9}},{"start":{},"end":{}}],"line":460},"11":{"loc":{"start":{"line":460,"column":12},"end":{"line":460,"column":61}},"type":"binary-expr","locations":[{"start":{"line":460,"column":12},"end":{"line":460,"column":37}},{"start":{"line":460,"column":41},"end":{"line":460,"column":61}}],"line":460}},"s":{"0":1,"1":1,"2":12,"3":1,"4":12,"5":12,"6":12,"7":12,"8":12,"9":12,"10":12,"11":12,"12":230,"13":230,"14":230,"15":230,"16":230,"17":230,"18":72,"19":72,"20":72,"21":72,"22":282,"23":282,"24":282,"25":282,"26":282,"27":282,"28":282,"29":282,"30":72,"31":72,"32":12,"33":0,"34":12,"35":12,"36":12,"37":12,"38":12,"39":12,"40":12,"41":0,"42":12,"43":12,"44":12,"45":12,"46":12,"47":12,"48":12,"49":12,"50":12,"51":10,"52":110,"53":0,"54":30,"55":10,"56":50,"57":10,"58":1,"59":1,"60":1,"61":1,"62":20,"63":10,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":1,"76":1,"77":1,"78":9,"79":9,"80":9,"81":9,"82":1,"83":1},"f":{"0":12,"1":230,"2":72,"3":12,"4":12,"5":10,"6":110,"7":0,"8":30,"9":10,"10":50,"11":10,"12":1,"13":20,"14":10,"15":0,"16":0,"17":0,"18":0,"19":0,"20":1},"b":{"0":[1,11],"1":[12,0],"2":[0,12],"3":[0,12],"4":[24,12],"5":[32,4],"6":[31,1],"7":[30,1],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e54014712ed0659ad90964d7cbf509525c91736b"}
+,"/Users/normanqian/fractalcamp/phaser/src/utils/Class.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/utils/Class.js","statementMap":{"0":{"start":{"line":11,"column":4},"end":{"line":11,"column":104}},"1":{"start":{"line":19,"column":14},"end":{"line":19,"column":98}},"2":{"start":{"line":21,"column":4},"end":{"line":24,"column":5}},"3":{"start":{"line":23,"column":8},"end":{"line":23,"column":24}},"4":{"start":{"line":27,"column":4},"end":{"line":44,"column":5}},"5":{"start":{"line":29,"column":8},"end":{"line":32,"column":9}},"6":{"start":{"line":31,"column":12},"end":{"line":31,"column":34}},"7":{"start":{"line":34,"column":8},"end":{"line":37,"column":9}},"8":{"start":{"line":36,"column":12},"end":{"line":36,"column":36}},"9":{"start":{"line":39,"column":8},"end":{"line":39,"column":19}},"10":{"start":{"line":43,"column":8},"end":{"line":43,"column":21}},"11":{"start":{"line":49,"column":15},"end":{"line":49,"column":54}},"12":{"start":{"line":51,"column":4},"end":{"line":54,"column":5}},"13":{"start":{"line":53,"column":8},"end":{"line":53,"column":21}},"14":{"start":{"line":56,"column":4},"end":{"line":59,"column":5}},"15":{"start":{"line":58,"column":8},"end":{"line":58,"column":26}},"16":{"start":{"line":61,"column":4},"end":{"line":64,"column":5}},"17":{"start":{"line":63,"column":8},"end":{"line":63,"column":20}},"18":{"start":{"line":66,"column":4},"end":{"line":66,"column":17}},"19":{"start":{"line":81,"column":4},"end":{"line":118,"column":5}},"20":{"start":{"line":83,"column":8},"end":{"line":86,"column":9}},"21":{"start":{"line":85,"column":12},"end":{"line":85,"column":21}},"22":{"start":{"line":88,"column":18},"end":{"line":88,"column":63}},"23":{"start":{"line":90,"column":8},"end":{"line":117,"column":9}},"24":{"start":{"line":94,"column":25},"end":{"line":94,"column":39}},"25":{"start":{"line":96,"column":12},"end":{"line":110,"column":13}},"26":{"start":{"line":99,"column":16},"end":{"line":102,"column":17}},"27":{"start":{"line":101,"column":20},"end":{"line":101,"column":29}},"28":{"start":{"line":109,"column":16},"end":{"line":109,"column":119}},"29":{"start":{"line":112,"column":12},"end":{"line":112,"column":58}},"30":{"start":{"line":116,"column":12},"end":{"line":116,"column":46}},"31":{"start":{"line":131,"column":4},"end":{"line":134,"column":5}},"32":{"start":{"line":133,"column":8},"end":{"line":133,"column":15}},"33":{"start":{"line":136,"column":4},"end":{"line":139,"column":5}},"34":{"start":{"line":138,"column":8},"end":{"line":138,"column":28}},"35":{"start":{"line":141,"column":4},"end":{"line":144,"column":5}},"36":{"start":{"line":141,"column":17},"end":{"line":141,"column":18}},"37":{"start":{"line":143,"column":8},"end":{"line":143,"column":58}},"38":{"start":{"line":175,"column":4},"end":{"line":178,"column":5}},"39":{"start":{"line":177,"column":8},"end":{"line":177,"column":24}},"40":{"start":{"line":184,"column":4},"end":{"line":210,"column":5}},"41":{"start":{"line":186,"column":8},"end":{"line":189,"column":9}},"42":{"start":{"line":188,"column":12},"end":{"line":188,"column":61}},"43":{"start":{"line":191,"column":8},"end":{"line":191,"column":43}},"44":{"start":{"line":196,"column":8},"end":{"line":196,"column":37}},"45":{"start":{"line":198,"column":9},"end":{"line":210,"column":5}},"46":{"start":{"line":200,"column":19},"end":{"line":200,"column":37}},"47":{"start":{"line":202,"column":8},"end":{"line":205,"column":10}},"48":{"start":{"line":204,"column":12},"end":{"line":204,"column":40}},"49":{"start":{"line":209,"column":8},"end":{"line":209,"column":36}},"50":{"start":{"line":212,"column":4},"end":{"line":226,"column":5}},"51":{"start":{"line":214,"column":8},"end":{"line":214,"column":75}},"52":{"start":{"line":215,"column":8},"end":{"line":215,"column":54}},"53":{"start":{"line":219,"column":8},"end":{"line":219,"column":37}},"54":{"start":{"line":221,"column":8},"end":{"line":221,"column":34}},"55":{"start":{"line":225,"column":8},"end":{"line":225,"column":54}},"56":{"start":{"line":229,"column":17},"end":{"line":229,"column":21}},"57":{"start":{"line":231,"column":4},"end":{"line":235,"column":5}},"58":{"start":{"line":233,"column":8},"end":{"line":233,"column":35}},"59":{"start":{"line":234,"column":8},"end":{"line":234,"column":33}},"60":{"start":{"line":238,"column":4},"end":{"line":238,"column":30}},"61":{"start":{"line":241,"column":4},"end":{"line":241,"column":50}},"62":{"start":{"line":243,"column":4},"end":{"line":243,"column":22}},"63":{"start":{"line":246,"column":0},"end":{"line":246,"column":22}},"64":{"start":{"line":247,"column":0},"end":{"line":247,"column":20}},"65":{"start":{"line":248,"column":0},"end":{"line":248,"column":27}},"66":{"start":{"line":250,"column":0},"end":{"line":250,"column":23}}},"fnMap":{"0":{"name":"hasGetterOrSetter","decl":{"start":{"line":9,"column":9},"end":{"line":9,"column":26}},"loc":{"start":{"line":10,"column":0},"end":{"line":12,"column":1}},"line":10},"1":{"name":"getProperty","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":20}},"loc":{"start":{"line":15,"column":0},"end":{"line":45,"column":1}},"line":15},"2":{"name":"hasNonConfigurable","decl":{"start":{"line":47,"column":9},"end":{"line":47,"column":27}},"loc":{"start":{"line":48,"column":0},"end":{"line":67,"column":1}},"line":48},"3":{"name":"extend","decl":{"start":{"line":79,"column":9},"end":{"line":79,"column":15}},"loc":{"start":{"line":80,"column":0},"end":{"line":119,"column":1}},"line":80},"4":{"name":"mixin","decl":{"start":{"line":129,"column":9},"end":{"line":129,"column":14}},"loc":{"start":{"line":130,"column":0},"end":{"line":145,"column":1}},"line":130},"5":{"name":"Class","decl":{"start":{"line":173,"column":9},"end":{"line":173,"column":14}},"loc":{"start":{"line":174,"column":0},"end":{"line":244,"column":1}},"line":174},"6":{"name":"(anonymous_6)","decl":{"start":{"line":202,"column":21},"end":{"line":202,"column":22}},"loc":{"start":{"line":203,"column":8},"end":{"line":205,"column":9}},"line":203},"7":{"name":"(anonymous_7)","decl":{"start":{"line":209,"column":21},"end":{"line":209,"column":22}},"loc":{"start":{"line":209,"column":33},"end":{"line":209,"column":35}},"line":209}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":11},"end":{"line":11,"column":103}},"type":"binary-expr","locations":[{"start":{"line":11,"column":12},"end":{"line":11,"column":21}},{"start":{"line":11,"column":25},"end":{"line":11,"column":54}},{"start":{"line":11,"column":60},"end":{"line":11,"column":69}},{"start":{"line":11,"column":73},"end":{"line":11,"column":102}}],"line":11},"1":{"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":98}},"type":"cond-expr","locations":[{"start":{"line":19,"column":36},"end":{"line":19,"column":49}},{"start":{"line":19,"column":52},"end":{"line":19,"column":98}}],"line":19},"2":{"loc":{"start":{"line":21,"column":4},"end":{"line":24,"column":5}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":24,"column":5}},{"start":{},"end":{}}],"line":21},"3":{"loc":{"start":{"line":21,"column":8},"end":{"line":21,"column":72}},"type":"binary-expr","locations":[{"start":{"line":21,"column":8},"end":{"line":21,"column":26}},{"start":{"line":21,"column":30},"end":{"line":21,"column":39}},{"start":{"line":21,"column":43},"end":{"line":21,"column":72}}],"line":21},"4":{"loc":{"start":{"line":27,"column":4},"end":{"line":44,"column":5}},"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":44,"column":5}},{"start":{"line":42,"column":4},"end":{"line":44,"column":5}}],"line":27},"5":{"loc":{"start":{"line":27,"column":8},"end":{"line":27,"column":37}},"type":"binary-expr","locations":[{"start":{"line":27,"column":8},"end":{"line":27,"column":11}},{"start":{"line":27,"column":15},"end":{"line":27,"column":37}}],"line":27},"6":{"loc":{"start":{"line":29,"column":8},"end":{"line":32,"column":9}},"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":32,"column":9}},{"start":{},"end":{}}],"line":29},"7":{"loc":{"start":{"line":34,"column":8},"end":{"line":37,"column":9}},"type":"if","locations":[{"start":{"line":34,"column":8},"end":{"line":37,"column":9}},{"start":{},"end":{}}],"line":34},"8":{"loc":{"start":{"line":51,"column":4},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":54,"column":5}},{"start":{},"end":{}}],"line":51},"9":{"loc":{"start":{"line":56,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":59,"column":5}},{"start":{},"end":{}}],"line":56},"10":{"loc":{"start":{"line":56,"column":8},"end":{"line":56,"column":52}},"type":"binary-expr","locations":[{"start":{"line":56,"column":8},"end":{"line":56,"column":18}},{"start":{"line":56,"column":22},"end":{"line":56,"column":52}}],"line":56},"11":{"loc":{"start":{"line":61,"column":4},"end":{"line":64,"column":5}},"type":"if","locations":[{"start":{"line":61,"column":4},"end":{"line":64,"column":5}},{"start":{},"end":{}}],"line":61},"12":{"loc":{"start":{"line":83,"column":8},"end":{"line":86,"column":9}},"type":"if","locations":[{"start":{"line":83,"column":8},"end":{"line":86,"column":9}},{"start":{},"end":{}}],"line":83},"13":{"loc":{"start":{"line":90,"column":8},"end":{"line":117,"column":9}},"type":"if","locations":[{"start":{"line":90,"column":8},"end":{"line":117,"column":9}},{"start":{"line":115,"column":8},"end":{"line":117,"column":9}}],"line":90},"14":{"loc":{"start":{"line":94,"column":25},"end":{"line":94,"column":39}},"type":"binary-expr","locations":[{"start":{"line":94,"column":25},"end":{"line":94,"column":31}},{"start":{"line":94,"column":35},"end":{"line":94,"column":39}}],"line":94},"15":{"loc":{"start":{"line":96,"column":12},"end":{"line":110,"column":13}},"type":"if","locations":[{"start":{"line":96,"column":12},"end":{"line":110,"column":13}},{"start":{},"end":{}}],"line":96},"16":{"loc":{"start":{"line":99,"column":16},"end":{"line":102,"column":17}},"type":"if","locations":[{"start":{"line":99,"column":16},"end":{"line":102,"column":17}},{"start":{},"end":{}}],"line":99},"17":{"loc":{"start":{"line":131,"column":4},"end":{"line":134,"column":5}},"type":"if","locations":[{"start":{"line":131,"column":4},"end":{"line":134,"column":5}},{"start":{},"end":{}}],"line":131},"18":{"loc":{"start":{"line":136,"column":4},"end":{"line":139,"column":5}},"type":"if","locations":[{"start":{"line":136,"column":4},"end":{"line":139,"column":5}},{"start":{},"end":{}}],"line":136},"19":{"loc":{"start":{"line":143,"column":24},"end":{"line":143,"column":56}},"type":"binary-expr","locations":[{"start":{"line":143,"column":24},"end":{"line":143,"column":43}},{"start":{"line":143,"column":47},"end":{"line":143,"column":56}}],"line":143},"20":{"loc":{"start":{"line":175,"column":4},"end":{"line":178,"column":5}},"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":178,"column":5}},{"start":{},"end":{}}],"line":175},"21":{"loc":{"start":{"line":184,"column":4},"end":{"line":210,"column":5}},"type":"if","locations":[{"start":{"line":184,"column":4},"end":{"line":210,"column":5}},{"start":{"line":198,"column":9},"end":{"line":210,"column":5}}],"line":184},"22":{"loc":{"start":{"line":186,"column":8},"end":{"line":189,"column":9}},"type":"if","locations":[{"start":{"line":186,"column":8},"end":{"line":189,"column":9}},{"start":{},"end":{}}],"line":186},"23":{"loc":{"start":{"line":198,"column":9},"end":{"line":210,"column":5}},"type":"if","locations":[{"start":{"line":198,"column":9},"end":{"line":210,"column":5}},{"start":{"line":208,"column":4},"end":{"line":210,"column":5}}],"line":198},"24":{"loc":{"start":{"line":212,"column":4},"end":{"line":226,"column":5}},"type":"if","locations":[{"start":{"line":212,"column":4},"end":{"line":226,"column":5}},{"start":{"line":224,"column":4},"end":{"line":226,"column":5}}],"line":212},"25":{"loc":{"start":{"line":231,"column":4},"end":{"line":235,"column":5}},"type":"if","locations":[{"start":{"line":231,"column":4},"end":{"line":235,"column":5}},{"start":{},"end":{}}],"line":231}},"s":{"0":142,"1":142,"2":142,"3":0,"4":142,"5":10,"6":10,"7":10,"8":10,"9":10,"10":132,"11":10,"12":10,"13":10,"14":0,"15":0,"16":0,"17":0,"18":0,"19":9,"20":142,"21":0,"22":142,"23":142,"24":10,"25":10,"26":0,"27":0,"28":0,"29":10,"30":132,"31":9,"32":9,"33":0,"34":0,"35":0,"36":0,"37":0,"38":9,"39":0,"40":9,"41":9,"42":0,"43":9,"44":9,"45":0,"46":0,"47":0,"48":0,"49":0,"50":9,"51":0,"52":0,"53":0,"54":0,"55":9,"56":9,"57":9,"58":0,"59":0,"60":9,"61":9,"62":9,"63":5,"64":5,"65":5,"66":5},"f":{"0":142,"1":142,"2":10,"3":9,"4":9,"5":9,"6":0,"7":0},"b":{"0":[142,10,132,0],"1":[142,0],"2":[0,142],"3":[142,0,0],"4":[10,132],"5":[142,142],"6":[10,0],"7":[10,0],"8":[10,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,142],"13":[10,132],"14":[10,10],"15":[0,10],"16":[0,0],"17":[9,0],"18":[0,0],"19":[0,0],"20":[0,9],"21":[9,0],"22":[0,9],"23":[0,0],"24":[0,9],"25":[0,9]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"7711c45abfd745a9fb136e0cfd8b86ef20170276"}
+,"/Users/normanqian/fractalcamp/phaser/src/utils/NOOP.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/utils/NOOP.js","statementMap":{"0":{"start":{"line":16,"column":11},"end":{"line":19,"column":1}},"1":{"start":{"line":21,"column":0},"end":{"line":21,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":11},"end":{"line":16,"column":12}},"loc":{"start":{"line":17,"column":0},"end":{"line":19,"column":1}},"line":17}},"branchMap":{},"s":{"0":1,"1":1},"f":{"0":1},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"3daa869397b71db92d215eb3ba9694d83c41d4ea"}
+,"/Users/normanqian/fractalcamp/phaser/src/utils/object/GetValue.js": {"path":"/Users/normanqian/fractalcamp/phaser/src/utils/object/GetValue.js","statementMap":{"0":{"start":{"line":43,"column":15},"end":{"line":110,"column":1}},"1":{"start":{"line":45,"column":4},"end":{"line":109,"column":5}},"2":{"start":{"line":47,"column":8},"end":{"line":47,"column":28}},"3":{"start":{"line":49,"column":9},"end":{"line":109,"column":5}},"4":{"start":{"line":51,"column":8},"end":{"line":51,"column":27}},"5":{"start":{"line":53,"column":9},"end":{"line":109,"column":5}},"6":{"start":{"line":55,"column":8},"end":{"line":55,"column":30}},"7":{"start":{"line":57,"column":9},"end":{"line":109,"column":5}},"8":{"start":{"line":59,"column":19},"end":{"line":59,"column":33}},"9":{"start":{"line":60,"column":22},"end":{"line":60,"column":28}},"10":{"start":{"line":61,"column":22},"end":{"line":61,"column":31}},"11":{"start":{"line":62,"column":21},"end":{"line":62,"column":33}},"12":{"start":{"line":63,"column":21},"end":{"line":63,"column":33}},"13":{"start":{"line":64,"column":26},"end":{"line":64,"column":30}},"14":{"start":{"line":65,"column":26},"end":{"line":65,"column":30}},"15":{"start":{"line":68,"column":8},"end":{"line":91,"column":9}},"16":{"start":{"line":68,"column":21},"end":{"line":68,"column":22}},"17":{"start":{"line":70,"column":12},"end":{"line":79,"column":13}},"18":{"start":{"line":73,"column":16},"end":{"line":73,"column":42}},"19":{"start":{"line":74,"column":16},"end":{"line":74,"column":43}},"20":{"start":{"line":78,"column":16},"end":{"line":78,"column":36}},"21":{"start":{"line":81,"column":12},"end":{"line":90,"column":13}},"22":{"start":{"line":84,"column":16},"end":{"line":84,"column":42}},"23":{"start":{"line":85,"column":16},"end":{"line":85,"column":43}},"24":{"start":{"line":89,"column":16},"end":{"line":89,"column":36}},"25":{"start":{"line":93,"column":8},"end":{"line":104,"column":9}},"26":{"start":{"line":95,"column":12},"end":{"line":95,"column":26}},"27":{"start":{"line":97,"column":13},"end":{"line":104,"column":9}},"28":{"start":{"line":99,"column":12},"end":{"line":99,"column":26}},"29":{"start":{"line":103,"column":12},"end":{"line":103,"column":32}},"30":{"start":{"line":108,"column":8},"end":{"line":108,"column":28}},"31":{"start":{"line":112,"column":0},"end":{"line":112,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":43,"column":15},"end":{"line":43,"column":16}},"loc":{"start":{"line":44,"column":0},"end":{"line":110,"column":1}},"line":44}},"branchMap":{"0":{"loc":{"start":{"line":45,"column":4},"end":{"line":109,"column":5}},"type":"if","locations":[{"start":{"line":45,"column":4},"end":{"line":109,"column":5}},{"start":{"line":49,"column":9},"end":{"line":109,"column":5}}],"line":45},"1":{"loc":{"start":{"line":45,"column":8},"end":{"line":45,"column":61}},"type":"binary-expr","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":16}},{"start":{"line":45,"column":20},"end":{"line":45,"column":30}},{"start":{"line":45,"column":35},"end":{"line":45,"column":61}}],"line":45},"2":{"loc":{"start":{"line":49,"column":9},"end":{"line":109,"column":5}},"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":109,"column":5}},{"start":{"line":53,"column":9},"end":{"line":109,"column":5}}],"line":49},"3":{"loc":{"start":{"line":49,"column":13},"end":{"line":49,"column":49}},"type":"binary-expr","locations":[{"start":{"line":49,"column":13},"end":{"line":49,"column":19}},{"start":{"line":49,"column":23},"end":{"line":49,"column":49}}],"line":49},"4":{"loc":{"start":{"line":53,"column":9},"end":{"line":109,"column":5}},"type":"if","locations":[{"start":{"line":53,"column":9},"end":{"line":109,"column":5}},{"start":{"line":57,"column":9},"end":{"line":109,"column":5}}],"line":53},"5":{"loc":{"start":{"line":53,"column":13},"end":{"line":53,"column":55}},"type":"binary-expr","locations":[{"start":{"line":53,"column":13},"end":{"line":53,"column":22}},{"start":{"line":53,"column":26},"end":{"line":53,"column":55}}],"line":53},"6":{"loc":{"start":{"line":57,"column":9},"end":{"line":109,"column":5}},"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":109,"column":5}},{"start":{"line":107,"column":4},"end":{"line":109,"column":5}}],"line":57},"7":{"loc":{"start":{"line":70,"column":12},"end":{"line":79,"column":13}},"type":"if","locations":[{"start":{"line":70,"column":12},"end":{"line":79,"column":13}},{"start":{"line":77,"column":12},"end":{"line":79,"column":13}}],"line":70},"8":{"loc":{"start":{"line":70,"column":16},"end":{"line":70,"column":58}},"type":"binary-expr","locations":[{"start":{"line":70,"column":16},"end":{"line":70,"column":23}},{"start":{"line":70,"column":27},"end":{"line":70,"column":58}}],"line":70},"9":{"loc":{"start":{"line":81,"column":12},"end":{"line":90,"column":13}},"type":"if","locations":[{"start":{"line":81,"column":12},"end":{"line":90,"column":13}},{"start":{"line":88,"column":12},"end":{"line":90,"column":13}}],"line":81},"10":{"loc":{"start":{"line":81,"column":16},"end":{"line":81,"column":58}},"type":"binary-expr","locations":[{"start":{"line":81,"column":16},"end":{"line":81,"column":23}},{"start":{"line":81,"column":27},"end":{"line":81,"column":58}}],"line":81},"11":{"loc":{"start":{"line":93,"column":8},"end":{"line":104,"column":9}},"type":"if","locations":[{"start":{"line":93,"column":8},"end":{"line":104,"column":9}},{"start":{"line":97,"column":13},"end":{"line":104,"column":9}}],"line":93},"12":{"loc":{"start":{"line":97,"column":13},"end":{"line":104,"column":9}},"type":"if","locations":[{"start":{"line":97,"column":13},"end":{"line":104,"column":9}},{"start":{"line":102,"column":8},"end":{"line":104,"column":9}}],"line":97}},"s":{"0":1,"1":49,"2":0,"3":49,"4":3,"5":46,"6":0,"7":46,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":46,"31":1},"f":{"0":49},"b":{"0":[0,49],"1":[49,0,49],"2":[3,46],"3":[49,49],"4":[0,46],"5":[46,0],"6":[0,46],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"6bf77e7bc881767f40c8334373ced722dc3e84d0"}
+}
diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css
new file mode 100644
index 0000000000..f418035b46
--- /dev/null
+++ b/coverage/lcov-report/base.css
@@ -0,0 +1,224 @@
+body, html {
+ margin:0; padding: 0;
+ height: 100%;
+}
+body {
+ font-family: Helvetica Neue, Helvetica, Arial;
+ font-size: 14px;
+ color:#333;
+}
+.small { font-size: 12px; }
+*, *:after, *:before {
+ -webkit-box-sizing:border-box;
+ -moz-box-sizing:border-box;
+ box-sizing:border-box;
+ }
+h1 { font-size: 20px; margin: 0;}
+h2 { font-size: 14px; }
+pre {
+ font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ margin: 0;
+ padding: 0;
+ -moz-tab-size: 2;
+ -o-tab-size: 2;
+ tab-size: 2;
+}
+a { color:#0074D9; text-decoration:none; }
+a:hover { text-decoration:underline; }
+.strong { font-weight: bold; }
+.space-top1 { padding: 10px 0 0 0; }
+.pad2y { padding: 20px 0; }
+.pad1y { padding: 10px 0; }
+.pad2x { padding: 0 20px; }
+.pad2 { padding: 20px; }
+.pad1 { padding: 10px; }
+.space-left2 { padding-left:55px; }
+.space-right2 { padding-right:20px; }
+.center { text-align:center; }
+.clearfix { display:block; }
+.clearfix:after {
+ content:'';
+ display:block;
+ height:0;
+ clear:both;
+ visibility:hidden;
+ }
+.fl { float: left; }
+@media only screen and (max-width:640px) {
+ .col3 { width:100%; max-width:100%; }
+ .hide-mobile { display:none!important; }
+}
+
+.quiet {
+ color: #7f7f7f;
+ color: rgba(0,0,0,0.5);
+}
+.quiet a { opacity: 0.7; }
+
+.fraction {
+ font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
+ font-size: 10px;
+ color: #555;
+ background: #E8E8E8;
+ padding: 4px 5px;
+ border-radius: 3px;
+ vertical-align: middle;
+}
+
+div.path a:link, div.path a:visited { color: #333; }
+table.coverage {
+ border-collapse: collapse;
+ margin: 10px 0 0 0;
+ padding: 0;
+}
+
+table.coverage td {
+ margin: 0;
+ padding: 0;
+ vertical-align: top;
+}
+table.coverage td.line-count {
+ text-align: right;
+ padding: 0 5px 0 20px;
+}
+table.coverage td.line-coverage {
+ text-align: right;
+ padding-right: 10px;
+ min-width:20px;
+}
+
+table.coverage td span.cline-any {
+ display: inline-block;
+ padding: 0 5px;
+ width: 100%;
+}
+.missing-if-branch {
+ display: inline-block;
+ margin-right: 5px;
+ border-radius: 3px;
+ position: relative;
+ padding: 0 4px;
+ background: #333;
+ color: yellow;
+}
+
+.skip-if-branch {
+ display: none;
+ margin-right: 10px;
+ position: relative;
+ padding: 0 4px;
+ background: #ccc;
+ color: white;
+}
+.missing-if-branch .typ, .skip-if-branch .typ {
+ color: inherit !important;
+}
+.coverage-summary {
+ border-collapse: collapse;
+ width: 100%;
+}
+.coverage-summary tr { border-bottom: 1px solid #bbb; }
+.keyline-all { border: 1px solid #ddd; }
+.coverage-summary td, .coverage-summary th { padding: 10px; }
+.coverage-summary tbody { border: 1px solid #bbb; }
+.coverage-summary td { border-right: 1px solid #bbb; }
+.coverage-summary td:last-child { border-right: none; }
+.coverage-summary th {
+ text-align: left;
+ font-weight: normal;
+ white-space: nowrap;
+}
+.coverage-summary th.file { border-right: none !important; }
+.coverage-summary th.pct { }
+.coverage-summary th.pic,
+.coverage-summary th.abs,
+.coverage-summary td.pct,
+.coverage-summary td.abs { text-align: right; }
+.coverage-summary td.file { white-space: nowrap; }
+.coverage-summary td.pic { min-width: 120px !important; }
+.coverage-summary tfoot td { }
+
+.coverage-summary .sorter {
+ height: 10px;
+ width: 7px;
+ display: inline-block;
+ margin-left: 0.5em;
+ background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
+}
+.coverage-summary .sorted .sorter {
+ background-position: 0 -20px;
+}
+.coverage-summary .sorted-desc .sorter {
+ background-position: 0 -10px;
+}
+.status-line { height: 10px; }
+/* yellow */
+.cbranch-no { background: yellow !important; color: #111; }
+/* dark red */
+.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
+.low .chart { border:1px solid #C21F39 }
+.highlighted,
+.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
+ background: #C21F39 !important;
+}
+/* medium red */
+.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
+/* light red */
+.low, .cline-no { background:#FCE1E5 }
+/* light green */
+.high, .cline-yes { background:rgb(230,245,208) }
+/* medium green */
+.cstat-yes { background:rgb(161,215,106) }
+/* dark green */
+.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
+.high .chart { border:1px solid rgb(77,146,33) }
+/* dark yellow (gold) */
+.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
+.medium .chart { border:1px solid #f9cd0b; }
+/* light yellow */
+.medium { background: #fff4c2; }
+
+.cstat-skip { background: #ddd; color: #111; }
+.fstat-skip { background: #ddd; color: #111 !important; }
+.cbranch-skip { background: #ddd !important; color: #111; }
+
+span.cline-neutral { background: #eaeaea; }
+
+.coverage-summary td.empty {
+ opacity: .5;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ line-height: 1;
+ color: #888;
+}
+
+.cover-fill, .cover-empty {
+ display:inline-block;
+ height: 12px;
+}
+.chart {
+ line-height: 0;
+}
+.cover-empty {
+ background: white;
+}
+.cover-full {
+ border-right: none !important;
+}
+pre.prettyprint {
+ border: none !important;
+ padding: 0 !important;
+ margin: 0 !important;
+}
+.com { color: #999 !important; }
+.ignore-none { color: #999; font-weight: normal; }
+
+.wrapper {
+ min-height: 100%;
+ height: auto !important;
+ height: 100%;
+ margin: 0 auto -48px;
+}
+.footer, .push {
+ height: 48px;
+}
diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js
new file mode 100644
index 0000000000..cc12130231
--- /dev/null
+++ b/coverage/lcov-report/block-navigation.js
@@ -0,0 +1,87 @@
+/* eslint-disable */
+var jumpToCode = (function init() {
+ // Classes of code we would like to highlight in the file view
+ var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
+
+ // Elements to highlight in the file listing view
+ var fileListingElements = ['td.pct.low'];
+
+ // We don't want to select elements that are direct descendants of another match
+ var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
+
+ // Selecter that finds elements on the page to which we can jump
+ var selector =
+ fileListingElements.join(', ') +
+ ', ' +
+ notSelector +
+ missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
+
+ // The NodeList of matching elements
+ var missingCoverageElements = document.querySelectorAll(selector);
+
+ var currentIndex;
+
+ function toggleClass(index) {
+ missingCoverageElements
+ .item(currentIndex)
+ .classList.remove('highlighted');
+ missingCoverageElements.item(index).classList.add('highlighted');
+ }
+
+ function makeCurrent(index) {
+ toggleClass(index);
+ currentIndex = index;
+ missingCoverageElements.item(index).scrollIntoView({
+ behavior: 'smooth',
+ block: 'center',
+ inline: 'center'
+ });
+ }
+
+ function goToPrevious() {
+ var nextIndex = 0;
+ if (typeof currentIndex !== 'number' || currentIndex === 0) {
+ nextIndex = missingCoverageElements.length - 1;
+ } else if (missingCoverageElements.length > 1) {
+ nextIndex = currentIndex - 1;
+ }
+
+ makeCurrent(nextIndex);
+ }
+
+ function goToNext() {
+ var nextIndex = 0;
+
+ if (
+ typeof currentIndex === 'number' &&
+ currentIndex < missingCoverageElements.length - 1
+ ) {
+ nextIndex = currentIndex + 1;
+ }
+
+ makeCurrent(nextIndex);
+ }
+
+ return function jump(event) {
+ if (
+ document.getElementById('fileSearch') === document.activeElement &&
+ document.activeElement != null
+ ) {
+ // if we're currently focused on the search input, we don't want to navigate
+ return;
+ }
+
+ switch (event.which) {
+ case 78: // n
+ case 74: // j
+ goToNext();
+ break;
+ case 66: // b
+ case 75: // k
+ case 80: // p
+ goToPrevious();
+ break;
+ }
+ };
+})();
+window.addEventListener('keydown', jumpToCode);
diff --git a/coverage/lcov-report/core/TimeStep.js.html b/coverage/lcov-report/core/TimeStep.js.html
new file mode 100644
index 0000000000..cee9a58106
--- /dev/null
+++ b/coverage/lcov-report/core/TimeStep.js.html
@@ -0,0 +1,2737 @@
+
+
+
+
+
+ Code coverage report for core/TimeStep.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 76.66%
+ Statements
+ 115/150
+
+
+
+
+ 55.55%
+ Branches
+ 20/36
+
+
+
+
+ 55.55%
+ Functions
+ 10/18
+
+
+
+
+ 76.02%
+ Lines
+ 111/146
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+
+
+
+
+
+1x
+1x
+1x
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3x
+
+3x
+3x
+3x
+3x
+
+
+
+3x
+
+30x
+
+
+3x
+3x
+
+3x
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+2x
+2x
+
+2x
+
+20x
+
+
+2x
+
+2x
+
+2x
+
+2x
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5879x
+5879x
+5879x
+
+5879x
+
+120x
+
+120x
+
+
+5879x
+
+
+
+
+
+
+
+
+
+
+
+
+
+5879x
+
+
+
+5879x
+
+5879x
+
+587x
+
+
+
+5879x
+
+5879x
+
+58790x
+
+
+
+5879x
+
+5879x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+1x
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5880x
+
+
+
+5880x
+
+5880x
+
+
+5880x
+
+5880x
+
+5880x
+
+
+
+5879x
+
+5879x
+
+1x
+
+
+5879x
+
+5879x
+
+
+1x
+
+1x
+
+
+
+
+
+
+
+
+
+
+1x
+
+1x
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+1x
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+1x
+
+1x
+
+
+
+1x
+
+
+
+
+1x
+
+1x
+
+1x
+
+1x
+1x
+1x
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+1x
+
+1x
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Class = require('../utils/Class');
+var GetValue = require('../utils/object/GetValue');
+var NOOP = require('../utils/NOOP');
+var RequestAnimationFrame = require('../dom/RequestAnimationFrame');
+
+// http://www.testufo.com/#test=animation-time-graph
+
+/**
+ * @classdesc
+ * The core runner class that Phaser uses to handle the game loop. It can use either Request Animation Frame,
+ * or SetTimeout, based on browser support and config settings, to create a continuous loop within the browser.
+ *
+ * Each time the loop fires, `TimeStep.step` is called and this is then passed onto the core Game update loop,
+ * it is the core heartbeat of your game. It will fire as often as Request Animation Frame is capable of handling
+ * on the target device.
+ *
+ * Note that there are lots of situations where a browser will stop updating your game. Such as if the player
+ * switches tabs, or covers up the browser window with another application. In these cases, the 'heartbeat'
+ * of your game will pause, and only resume when focus is returned to it by the player. There is no way to avoid
+ * this situation, all you can do is use the visibility events the browser, and Phaser, provide to detect when
+ * it has happened and then gracefully recover.
+ *
+ * @class TimeStep
+ * @memberof Phaser.Core
+ * @constructor
+ * @since 3.0.0
+ *
+ * @param {Phaser.Game} game - A reference to the Phaser.Game instance that owns this Time Step.
+ * @param {Phaser.Types.Core.FPSConfig} config
+ */
+var TimeStep = new Class({
+
+ initialize:
+
+ function TimeStep (game, config)
+ {
+ /**
+ * A reference to the Phaser.Game instance.
+ *
+ * @name Phaser.Core.TimeStep#game
+ * @type {Phaser.Game}
+ * @readonly
+ * @since 3.0.0
+ */
+ this.game = game;
+
+ /**
+ * The Request Animation Frame DOM Event handler.
+ *
+ * @name Phaser.Core.TimeStep#raf
+ * @type {Phaser.DOM.RequestAnimationFrame}
+ * @readonly
+ * @since 3.0.0
+ */
+ this.raf = new RequestAnimationFrame();
+
+ /**
+ * A flag that is set once the TimeStep has started running and toggled when it stops.
+ *
+ * @name Phaser.Core.TimeStep#started
+ * @type {boolean}
+ * @readonly
+ * @default false
+ * @since 3.0.0
+ */
+ this.started = false;
+
+ /**
+ * A flag that is set once the TimeStep has started running and toggled when it stops.
+ * The difference between this value and `started` is that `running` is toggled when
+ * the TimeStep is sent to sleep, where-as `started` remains `true`, only changing if
+ * the TimeStep is actually stopped, not just paused.
+ *
+ * @name Phaser.Core.TimeStep#running
+ * @type {boolean}
+ * @readonly
+ * @default false
+ * @since 3.0.0
+ */
+ this.running = false;
+
+ /**
+ * The minimum fps rate you want the Time Step to run at.
+ *
+ * Setting this cannot guarantee the browser runs at this rate, it merely influences
+ * the internal timing values to help the Timestep know when it has gone out of sync.
+ *
+ * @name Phaser.Core.TimeStep#minFps
+ * @type {number}
+ * @default 5
+ * @since 3.0.0
+ */
+ this.minFps = GetValue(config, 'min', 5);
+
+ /**
+ * The target fps rate for the Time Step to run at.
+ *
+ * Setting this value will not actually change the speed at which the browser runs, that is beyond
+ * the control of Phaser. Instead, it allows you to determine performance issues and if the Time Step
+ * is spiraling out of control.
+ *
+ * @name Phaser.Core.TimeStep#targetFps
+ * @type {number}
+ * @default 60
+ * @since 3.0.0
+ */
+ this.targetFps = GetValue(config, 'target', 60);
+
+ /**
+ * Enforce a frame rate limit. This forces how often the Game step will run. By default it is zero,
+ * which means it will run at whatever limit the browser (via RequestAnimationFrame) can handle, which
+ * is the optimum rate for fast-action or responsive games.
+ *
+ * However, if you are building a non-game app, like a graphics generator, or low-intensity game that doesn't
+ * require 60fps, then you can lower the step rate via this Game Config value:
+ *
+ * ```js
+ * fps: {
+ * limit: 30
+ * }
+ * ```
+ *
+ * Setting this _beyond_ the rate of RequestAnimationFrame will make no difference at all.
+ *
+ * Use it purely to _restrict_ updates in low-intensity situations only.
+ *
+ * @name Phaser.Core.TimeStep#fpsLimit
+ * @type {number}
+ * @default 0
+ * @since 3.60.0
+ */
+ this.fpsLimit = GetValue(config, 'limit', 0);
+
+ /**
+ * Is the FPS rate limited?
+ *
+ * This is set by setting the Game Config `limit` value to a value above zero.
+ *
+ * Consider this property as read-only.
+ *
+ * @name Phaser.Core.TimeStep#hasFpsLimit
+ * @type {boolean}
+ * @default false
+ * @since 3.60.0
+ */
+ this.hasFpsLimit = (this.fpsLimit > 0);
+
+ /**
+ * Internal value holding the fps rate limit in ms.
+ *
+ * @name Phaser.Core.TimeStep#_limitRate
+ * @type {number}
+ * @private
+ * @since 3.60.0
+ */
+ this._limitRate = (this.hasFpsLimit) ? (1000 / this.fpsLimit) : 0;
+
+ /**
+ * The minimum fps value in ms.
+ *
+ * Defaults to 200ms between frames (i.e. super slow!)
+ *
+ * @name Phaser.Core.TimeStep#_min
+ * @type {number}
+ * @private
+ * @since 3.0.0
+ */
+ this._min = 1000 / this.minFps;
+
+ /**
+ * The target fps value in ms.
+ *
+ * Defaults to 16.66ms between frames (i.e. normal)
+ *
+ * @name Phaser.Core.TimeStep#_target
+ * @type {number}
+ * @private
+ * @since 3.0.0
+ */
+ this._target = 1000 / this.targetFps;
+
+ /**
+ * An exponential moving average of the frames per second.
+ *
+ * @name Phaser.Core.TimeStep#actualFps
+ * @type {number}
+ * @readonly
+ * @default 60
+ * @since 3.0.0
+ */
+ this.actualFps = this.targetFps;
+
+ /**
+ * The time at which the next fps rate update will take place.
+ *
+ * When an fps update happens, the `framesThisSecond` value is reset.
+ *
+ * @name Phaser.Core.TimeStep#nextFpsUpdate
+ * @type {number}
+ * @readonly
+ * @default 0
+ * @since 3.0.0
+ */
+ this.nextFpsUpdate = 0;
+
+ /**
+ * The number of frames processed this second.
+ *
+ * @name Phaser.Core.TimeStep#framesThisSecond
+ * @type {number}
+ * @readonly
+ * @default 0
+ * @since 3.0.0
+ */
+ this.framesThisSecond = 0;
+
+ /**
+ * A callback to be invoked each time the TimeStep steps.
+ *
+ * @name Phaser.Core.TimeStep#callback
+ * @type {Phaser.Types.Core.TimeStepCallback}
+ * @default NOOP
+ * @since 3.0.0
+ */
+ this.callback = NOOP;
+
+ /**
+ * You can force the TimeStep to use SetTimeOut instead of Request Animation Frame by setting
+ * the `forceSetTimeOut` property to `true` in the Game Configuration object. It cannot be changed at run-time.
+ *
+ * @name Phaser.Core.TimeStep#forceSetTimeOut
+ * @type {boolean}
+ * @readonly
+ * @default false
+ * @since 3.0.0
+ */
+ this.forceSetTimeOut = GetValue(config, 'forceSetTimeOut', false);
+
+ /**
+ * The time, updated each step by adding the elapsed delta time to the previous value.
+ *
+ * This differs from the `TimeStep.now` value, which is the high resolution time value
+ * as provided by Request Animation Frame.
+ *
+ * @name Phaser.Core.TimeStep#time
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.time = 0;
+
+ /**
+ * The time at which the game started running.
+ *
+ * This value is adjusted if the game is then paused and resumes.
+ *
+ * @name Phaser.Core.TimeStep#startTime
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.startTime = 0;
+
+ /**
+ * The time of the previous step.
+ *
+ * This is typically a high resolution timer value, as provided by Request Animation Frame.
+ *
+ * @name Phaser.Core.TimeStep#lastTime
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.lastTime = 0;
+
+ /**
+ * The current frame the game is on. This counter is incremented once every game step, regardless of how much
+ * time has passed and is unaffected by delta smoothing.
+ *
+ * @name Phaser.Core.TimeStep#frame
+ * @type {number}
+ * @readonly
+ * @default 0
+ * @since 3.0.0
+ */
+ this.frame = 0;
+
+ /**
+ * Is the browser currently considered in focus by the Page Visibility API?
+ *
+ * This value is set in the `blur` method, which is called automatically by the Game instance.
+ *
+ * @name Phaser.Core.TimeStep#inFocus
+ * @type {boolean}
+ * @readonly
+ * @default true
+ * @since 3.0.0
+ */
+ this.inFocus = true;
+
+ /**
+ * The duration of the most recent game pause, if any, in ms.
+ *
+ * @name Phaser.Core.TimeStep#pauseDuration
+ * @type {number}
+ * @readonly
+ * @default 0
+ * @since 3.85.0
+ */
+ this.pauseDuration = 0;
+
+ /**
+ * The timestamp at which the game became paused, as determined by the Page Visibility API.
+ *
+ * @name Phaser.Core.TimeStep#_pauseTime
+ * @type {number}
+ * @private
+ * @default 0
+ * @since 3.0.0
+ */
+ this._pauseTime = 0;
+
+ /**
+ * An internal counter to allow for the browser 'cooling down' after coming back into focus.
+ *
+ * @name Phaser.Core.TimeStep#_coolDown
+ * @type {number}
+ * @private
+ * @default 0
+ * @since 3.0.0
+ */
+ this._coolDown = 0;
+
+ /**
+ * The delta time, in ms, since the last game step. This is a clamped and smoothed average value.
+ *
+ * @name Phaser.Core.TimeStep#delta
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.delta = 0;
+
+ /**
+ * Internal index of the delta history position.
+ *
+ * @name Phaser.Core.TimeStep#deltaIndex
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.deltaIndex = 0;
+
+ /**
+ * Internal array holding the previous delta values, used for delta smoothing.
+ *
+ * @name Phaser.Core.TimeStep#deltaHistory
+ * @type {number[]}
+ * @since 3.0.0
+ */
+ this.deltaHistory = [];
+
+ /**
+ * The maximum number of delta values that are retained in order to calculate a smoothed moving average.
+ *
+ * This can be changed in the Game Config via the `fps.deltaHistory` property. The default is 10.
+ *
+ * @name Phaser.Core.TimeStep#deltaSmoothingMax
+ * @type {number}
+ * @default 10
+ * @since 3.0.0
+ */
+ this.deltaSmoothingMax = GetValue(config, 'deltaHistory', 10);
+
+ /**
+ * The number of frames that the cooldown is set to after the browser panics over the FPS rate, usually
+ * as a result of switching tabs and regaining focus.
+ *
+ * This can be changed in the Game Config via the `fps.panicMax` property. The default is 120.
+ *
+ * @name Phaser.Core.TimeStep#panicMax
+ * @type {number}
+ * @default 120
+ * @since 3.0.0
+ */
+ this.panicMax = GetValue(config, 'panicMax', 120);
+
+ /**
+ * The actual elapsed time in ms between one update and the next.
+ *
+ * Unlike with `delta`, no smoothing, capping, or averaging is applied to this value.
+ * So please be careful when using this value in math calculations.
+ *
+ * @name Phaser.Core.TimeStep#rawDelta
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.rawDelta = 0;
+
+ /**
+ * The time, set at the start of the current step.
+ *
+ * This is typically a high resolution timer value, as provided by Request Animation Frame.
+ *
+ * This can differ from the `time` value in that it isn't calculated based on the delta value.
+ *
+ * @name Phaser.Core.TimeStep#now
+ * @type {number}
+ * @default 0
+ * @since 3.18.0
+ */
+ this.now = 0;
+
+ /**
+ * Apply smoothing to the delta value used within Phasers internal calculations?
+ *
+ * This can be changed in the Game Config via the `fps.smoothStep` property. The default is `true`.
+ *
+ * Smoothing helps settle down the delta values after browser tab switches, or other situations
+ * which could cause significant delta spikes or dips. By default it has been enabled in Phaser 3
+ * since the first version, but is now exposed under this property (and the corresponding game config
+ * `smoothStep` value), to allow you to easily disable it, should you require.
+ *
+ * @name Phaser.Core.TimeStep#smoothStep
+ * @type {boolean}
+ * @since 3.22.0
+ */
+ this.smoothStep = GetValue(config, 'smoothStep', true);
+ },
+
+ /**
+ * Called by the Game instance when the DOM window.onBlur event triggers.
+ *
+ * @method Phaser.Core.TimeStep#blur
+ * @since 3.0.0
+ */
+ blur: fu nction ()
+ {
+ this.inFocus = false;
+ },
+
+ /**
+ * Called by the Game instance when the DOM window.onFocus event triggers.
+ *
+ * @method Phaser.Core.TimeStep#focus
+ * @since 3.0.0
+ */
+ focus: fu nction ()
+ {
+ this.inFocus = true;
+
+ this.resetDelta();
+ },
+
+ /**
+ * Called when the visibility API says the game is 'hidden' (tab switch out of view, etc)
+ *
+ * @method Phaser.Core.TimeStep#pause
+ * @since 3.0.0
+ */
+ pause: fu nction ()
+ {
+ this._pauseTime = window.performance.now();
+ },
+
+ /**
+ * Called when the visibility API says the game is 'visible' again (tab switch back into view, etc)
+ *
+ * @method Phaser.Core.TimeStep#resume
+ * @since 3.0.0
+ */
+ resume: fu nction ()
+ {
+ this.resetDelta();
+
+ this.pauseDuration = this.time - this._pauseTime;
+ this.startTime += this.pauseDuration;
+ },
+
+ /**
+ * Resets the time, lastTime, fps averages and delta history.
+ * Called automatically when a browser sleeps them resumes.
+ *
+ * @method Phaser.Core.TimeStep#resetDelta
+ * @since 3.0.0
+ */
+ resetDelta: function ()
+ {
+ var now = window.performance.now();
+
+ this.time = now;
+ this.lastTime = now;
+ this.nextFpsUpdate = now + 1000;
+ this.framesThisSecond = 0;
+
+ // Pre-populate smoothing array
+
+ for (var i = 0; i < this.deltaSmoothingMax; i++)
+ {
+ this.deltaHistory[i] = Math.min(this._target, this.deltaHistory[i]);
+ }
+
+ this.delta = 0;
+ this.deltaIndex = 0;
+
+ this._coolDown = this.panicMax;
+ },
+
+ /**
+ * Starts the Time Step running, if it is not already doing so.
+ * Called automatically by the Game Boot process.
+ *
+ * @method Phaser.Core.TimeStep#start
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Core.TimeStepCallback} callback - The callback to be invoked each time the Time Step steps.
+ */
+ start: function (callback)
+ {
+ I if (this.started)
+ {
+ return this;
+ }
+
+ this.started = true;
+ this.running = true;
+
+ for (var i = 0; i < this.deltaSmoothingMax; i++)
+ {
+ this.deltaHistory[i] = this._target;
+ }
+
+ this.resetDelta();
+
+ this.startTime = window.performance.now();
+
+ this.callback = callback;
+
+ var step = (this.hasFpsLimit) ? this.stepLimitFPS.bind(this) : this.step.bind(this);
+
+ this.raf.start(step, this.forceSetTimeOut, this._target);
+ },
+
+ /**
+ * Takes the delta value and smooths it based on the previous frames.
+ *
+ * Called automatically as part of the step.
+ *
+ * @method Phaser.Core.TimeStep#smoothDelta
+ * @since 3.60.0
+ *
+ * @param {number} delta - The delta value for this step.
+ *
+ * @return {number} The smoothed delta value.
+ */
+ smoothDelta: function (delta)
+ {
+ var idx = this.deltaIndex;
+ var history = this.deltaHistory;
+ var max = this.deltaSmoothingMax;
+
+ if (this._coolDown > 0 || !this.inFocus)
+ {
+ this._coolDown--;
+
+ delta = Math.min(delta, this._target);
+ }
+
+ I if (delta > this._min)
+ {
+ // Probably super bad start time or browser tab context loss,
+ // so use the last 'sane' delta value
+
+ delta = history[idx];
+
+ // Clamp delta to min (in case history has become corrupted somehow)
+ delta = Math.min(delta, this._min);
+ }
+
+ // Smooth out the delta over the previous X frames
+
+ // add the delta to the smoothing array
+ history[idx] = delta;
+
+ // adjusts the delta history array index based on the smoothing count
+ // this stops the array growing beyond the size of deltaSmoothingMax
+ this.deltaIndex++;
+
+ if (this.deltaIndex >= max)
+ {
+ this.deltaIndex = 0;
+ }
+
+ // Loop the history array, adding the delta values together
+ var avg = 0;
+
+ for (var i = 0; i < max; i++)
+ {
+ avg += history[i];
+ }
+
+ // Then divide by the array length to get the average delta
+ avg /= max;
+
+ return avg;
+ },
+
+ /**
+ * Update the estimate of the frame rate, `fps`. Every second, the number
+ * of frames that occurred in that second are included in an exponential
+ * moving average of all frames per second, with an alpha of 0.25. This
+ * means that more recent seconds affect the estimated frame rate more than
+ * older seconds.
+ *
+ * When a browser window is NOT minimized, but is covered up (i.e. you're using
+ * another app which has spawned a window over the top of the browser), then it
+ * will start to throttle the raf callback time. It waits for a while, and then
+ * starts to drop the frame rate at 1 frame per second until it's down to just over 1fps.
+ * So if the game was running at 60fps, and the player opens a new window, then
+ * after 60 seconds (+ the 'buffer time') it'll be down to 1fps, so rafin'g at 1Hz.
+ *
+ * When they make the game visible again, the frame rate is increased at a rate of
+ * approx. 8fps, back up to 60fps (or the max it can obtain)
+ *
+ * There is no easy way to determine if this drop in frame rate is because the
+ * browser is throttling raf, or because the game is struggling with performance
+ * because you're asking it to do too much on the device.
+ *
+ * Compute the new exponential moving average with an alpha of 0.25.
+ *
+ * @method Phaser.Core.TimeStep#updateFPS
+ * @since 3.60.0
+ *
+ * @param {number} time - The timestamp passed in from RequestAnimationFrame or setTimeout.
+ */
+ updateFPS: function (time)
+ {
+ this.actualFps = 0.25 * this.framesThisSecond + 0.75 * this.actualFps;
+ this.nextFpsUpdate = time + 1000;
+ this.framesThisSecond = 0;
+ },
+
+ /**
+ * The main step method with an fps limiter. This is called each time the browser updates, either by Request Animation Frame,
+ * or by Set Timeout. It is responsible for calculating the delta values, frame totals, cool down history and more.
+ * You generally should never call this method directly.
+ *
+ * @method Phaser.Core.TimeStep#stepLimitFPS
+ * @since 3.60.0
+ *
+ * @param {number} time - The timestamp passed in from RequestAnimationFrame or setTimeout.
+ */
+ stepLimitFPS: fu nction (time)
+ {
+ this.now = time;
+
+ // delta time (time is in ms)
+ // Math.max because Chrome will sometimes give negative deltas
+ var delta = Math.max(0, time - this.lastTime);
+
+ this.rawDelta = delta;
+
+ // Real-world timer advance
+ this.time += this.rawDelta;
+
+ if (this.smoothStep)
+ {
+ delta = this.smoothDelta(delta);
+ }
+
+ // Set as the world delta value (after smoothing, if applied)
+ this.delta += delta;
+
+ if (time >= this.nextFpsUpdate)
+ {
+ this.updateFPS(time);
+ }
+
+ this.framesThisSecond++;
+
+ if (this.delta >= this._limitRate)
+ {
+ this.callback(time, this.delta);
+
+ this.delta = 0;
+ }
+
+ // Shift time value over
+ this.lastTime = time;
+
+ this.frame++;
+ },
+
+ /**
+ * The main step method. This is called each time the browser updates, either by Request Animation Frame,
+ * or by Set Timeout. It is responsible for calculating the delta values, frame totals, cool down history and more.
+ * You generally should never call this method directly.
+ *
+ * @method Phaser.Core.TimeStep#step
+ * @since 3.0.0
+ *
+ * @param {number} time - The timestamp passed in from RequestAnimationFrame or setTimeout.
+ */
+ step: function (time)
+ {
+ this.now = time;
+
+ // delta time (time is in ms)
+ // Math.max because Chrome will sometimes give negative deltas
+ var delta = Math.max(0, time - this.lastTime);
+
+ this.rawDelta = delta;
+
+ // Real-world timer advance
+ this.time += this.rawDelta;
+
+ E if (this.smoothStep)
+ {
+ delta = this.smoothDelta(delta);
+ }
+
+ // Set as the world delta value (after smoothing, if applied)
+ this.delta = delta;
+
+ if (time >= this.nextFpsUpdate)
+ {
+ this.updateFPS(time);
+ }
+
+ this.framesThisSecond++;
+
+ this.callback(time, delta);
+
+ // Shift time value over
+ this.lastTime = time;
+
+ this.frame++;
+ },
+
+ /**
+ * Manually calls `TimeStep.step`.
+ *
+ * @method Phaser.Core.TimeStep#tick
+ * @since 3.0.0
+ */
+ tick: function ()
+ {
+ var now = window.performance.now();
+
+ I if (this.hasFpsLimit)
+ {
+ this.stepLimitFPS(now);
+ }
+ else
+ {
+ this.step(now);
+ }
+ },
+
+ /**
+ * Sends the TimeStep to sleep, stopping Request Animation Frame (or SetTimeout) and toggling the `running` flag to false.
+ *
+ * @method Phaser.Core.TimeStep#sleep
+ * @since 3.0.0
+ */
+ sleep: function ()
+ {
+ E if (this.running)
+ {
+ this.raf.stop();
+
+ this.running = false;
+ }
+ },
+
+ /**
+ * Wakes-up the TimeStep, restarting Request Animation Frame (or SetTimeout) and toggling the `running` flag to true.
+ * The `seamless` argument controls if the wake-up should adjust the start time or not.
+ *
+ * @method Phaser.Core.TimeStep#wake
+ * @since 3.0.0
+ *
+ * @param {boolean} [seamless=false] - Adjust the startTime based on the lastTime values.
+ */
+ wake: function (seamless)
+ {
+ E if (seamless === undefined) { seamless = false; }
+
+ var now = window.performance.now();
+
+ I if (this.running)
+ {
+ return;
+ }
+ else I if (seamless)
+ {
+ this.startTime += -this.lastTime + (this.lastTime + now);
+ }
+
+ var step = (this.hasFpsLimit) ? this.stepLimitFPS.bind(this) : this.step.bind(this);
+
+ this.raf.start(step, this.forceSetTimeOut, this._target);
+
+ this.running = true;
+
+ this.nextFpsUpdate = now + 1000;
+ this.framesThisSecond = 0;
+ this.fpsLimitTriggered = false;
+
+ this.tick();
+ },
+
+ /**
+ * Gets the duration which the game has been running, in seconds.
+ *
+ * @method Phaser.Core.TimeStep#getDuration
+ * @since 3.17.0
+ *
+ * @return {number} The duration in seconds.
+ */
+ getDuration: fu nction ()
+ {
+ return Math.round(this.lastTime - this.startTime) / 1000;
+ },
+
+ /**
+ * Gets the duration which the game has been running, in ms.
+ *
+ * @method Phaser.Core.TimeStep#getDurationMS
+ * @since 3.17.0
+ *
+ * @return {number} The duration in ms.
+ */
+ getDurationMS: fu nction ()
+ {
+ return Math.round(this.lastTime - this.startTime);
+ },
+
+ /**
+ * Stops the TimeStep running.
+ *
+ * @method Phaser.Core.TimeStep#stop
+ * @since 3.0.0
+ *
+ * @return {this} The TimeStep object.
+ */
+ stop: function ()
+ {
+ this.running = false;
+ this.started = false;
+
+ this.raf.stop();
+
+ return this;
+ },
+
+ /**
+ * Destroys the TimeStep. This will stop Request Animation Frame, stop the step, clear the callbacks and null
+ * any objects.
+ *
+ * @method Phaser.Core.TimeStep#destroy
+ * @since 3.0.0
+ */
+ destroy: fu nction ()
+ {
+ this.stop();
+
+ this.raf.destroy();
+
+ this.raf = null;
+ this.game = null;
+ this.callback = null;
+ }
+
+});
+
+module.exports = TimeStep;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/core/index.html b/coverage/lcov-report/core/index.html
new file mode 100644
index 0000000000..fc878a4651
--- /dev/null
+++ b/coverage/lcov-report/core/index.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+ Code coverage report for core
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 76.66%
+ Statements
+ 115/150
+
+
+
+
+ 55.55%
+ Branches
+ 20/36
+
+
+
+
+ 55.55%
+ Functions
+ 10/18
+
+
+
+
+ 76.02%
+ Lines
+ 111/146
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ TimeStep.js
+
+
+
+ 76.66%
+ 115/150
+ 55.55%
+ 20/36
+ 55.55%
+ 10/18
+ 76.02%
+ 111/146
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/dom/RequestAnimationFrame.js.html b/coverage/lcov-report/dom/RequestAnimationFrame.js.html
new file mode 100644
index 0000000000..a43039f4a4
--- /dev/null
+++ b/coverage/lcov-report/dom/RequestAnimationFrame.js.html
@@ -0,0 +1,634 @@
+
+
+
+
+
+ Code coverage report for dom/RequestAnimationFrame.js
+
+
+
+
+
+
+
+
+
+
+
+
All files / dom RequestAnimationFrame.js
+
+
+
+ 38.7%
+ Statements
+ 12/31
+
+
+
+
+ 0%
+ Branches
+ 0/10
+
+
+
+
+ 16.66%
+ Functions
+ 1/6
+
+
+
+
+ 38.7%
+ Lines
+ 12/31
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+
+
+
+
+
+1x
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+7x
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Class = require('../utils/Class');
+var NOOP = require('../utils/NOOP');
+
+/**
+ * @classdesc
+ * Abstracts away the use of RAF or setTimeOut for the core game update loop.
+ *
+ * This is invoked automatically by the Phaser.Game instance.
+ *
+ * @class RequestAnimationFrame
+ * @memberof Phaser.DOM
+ * @constructor
+ * @since 3.0.0
+ */
+var RequestAnimationFrame = new Class({
+
+ initialize:
+
+ function RequestAnimationFrame ()
+ {
+ /**
+ * True if RequestAnimationFrame is running, otherwise false.
+ *
+ * @name Phaser.DOM.RequestAnimationFrame#isRunning
+ * @type {boolean}
+ * @default false
+ * @since 3.0.0
+ */
+ this.isRunning = false;
+
+ /**
+ * The callback to be invoked each step.
+ *
+ * @name Phaser.DOM.RequestAnimationFrame#callback
+ * @type {FrameRequestCallback}
+ * @since 3.0.0
+ */
+ this.callback = NOOP;
+
+ /**
+ * True if the step is using setTimeout instead of RAF.
+ *
+ * @name Phaser.DOM.RequestAnimationFrame#isSetTimeOut
+ * @type {boolean}
+ * @default false
+ * @since 3.0.0
+ */
+ this.isSetTimeOut = false;
+
+ /**
+ * The setTimeout or RAF callback ID used when canceling them.
+ *
+ * @name Phaser.DOM.RequestAnimationFrame#timeOutID
+ * @type {?number}
+ * @default null
+ * @since 3.0.0
+ */
+ this.timeOutID = null;
+
+ /**
+ * The delay rate in ms for setTimeOut.
+ *
+ * @name Phaser.DOM.RequestAnimationFrame#delay
+ * @type {number}
+ * @default 0
+ * @since 3.60.0
+ */
+ this.delay = 0;
+
+ var _this = this;
+
+ /**
+ * The RAF step function.
+ *
+ * Invokes the callback and schedules another call to requestAnimationFrame.
+ *
+ * @name Phaser.DOM.RequestAnimationFrame#step
+ * @type {FrameRequestCallback}
+ * @since 3.0.0
+ *
+ * @param {number} time - The timestamp passed in from RequestAnimationFrame.
+ */
+ this.step = function step (time)
+ {
+ _this.callback(time);
+
+ if (_this.isRunning)
+ {
+ _this.timeOutID = window.requestAnimationFrame(step);
+ }
+ };
+
+ /**
+ * The SetTimeout step function.
+ *
+ * Invokes the callback and schedules another call to setTimeout.
+ *
+ * @name Phaser.DOM.RequestAnimationFrame#stepTimeout
+ * @type {function}
+ * @since 3.0.0
+ */
+ this.stepTimeout = function stepTimeout ()
+ {
+ if (_this.isRunning)
+ {
+ // Make the next request before the callback, so that timing is maintained
+ _this.timeOutID = window.setTimeout(stepTimeout, _this.delay);
+ }
+
+ _this.callback(window.performance.now());
+ };
+ },
+
+ /**
+ * Starts the requestAnimationFrame or setTimeout process running.
+ *
+ * @method Phaser.DOM.RequestAnimationFrame#start
+ * @since 3.0.0
+ *
+ * @param {FrameRequestCallback} callback - The callback to invoke each step.
+ * @param {boolean} forceSetTimeOut - Should it use SetTimeout, even if RAF is available?
+ * @param {number} delay - The setTimeout delay rate in ms.
+ */
+ start: fu nction (callback, forceSetTimeOut, delay)
+ {
+ if (this.isRunning)
+ {
+ return;
+ }
+
+ this.callback = callback;
+
+ this.isSetTimeOut = forceSetTimeOut;
+
+ this.delay = delay;
+
+ this.isRunning = true;
+
+ this.timeOutID = (forceSetTimeOut) ? window.setTimeout(this.stepTimeout, 0) : window.requestAnimationFrame(this.step);
+ },
+
+ /**
+ * Stops the requestAnimationFrame or setTimeout from running.
+ *
+ * @method Phaser.DOM.RequestAnimationFrame#stop
+ * @since 3.0.0
+ */
+ stop: fu nction ()
+ {
+ this.isRunning = false;
+
+ if (this.isSetTimeOut)
+ {
+ clearTimeout(this.timeOutID);
+ }
+ else
+ {
+ window.cancelAnimationFrame(this.timeOutID);
+ }
+ },
+
+ /**
+ * Stops the step from running and clears the callback reference.
+ *
+ * @method Phaser.DOM.RequestAnimationFrame#destroy
+ * @since 3.0.0
+ */
+ destroy: fu nction ()
+ {
+ this.stop();
+
+ this.callback = NOOP;
+ }
+
+});
+
+module.exports = RequestAnimationFrame;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/dom/index.html b/coverage/lcov-report/dom/index.html
new file mode 100644
index 0000000000..dda022e217
--- /dev/null
+++ b/coverage/lcov-report/dom/index.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+ Code coverage report for dom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 38.7%
+ Statements
+ 12/31
+
+
+
+
+ 0%
+ Branches
+ 0/10
+
+
+
+
+ 16.66%
+ Functions
+ 1/6
+
+
+
+
+ 38.7%
+ Lines
+ 12/31
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ RequestAnimationFrame.js
+
+
+
+ 38.7%
+ 12/31
+ 0%
+ 0/10
+ 16.66%
+ 1/6
+ 38.7%
+ 12/31
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/favicon.png b/coverage/lcov-report/favicon.png
new file mode 100644
index 0000000000..c1525b811a
Binary files /dev/null and b/coverage/lcov-report/favicon.png differ
diff --git a/coverage/lcov-report/geom/const.js.html b/coverage/lcov-report/geom/const.js.html
new file mode 100644
index 0000000000..c14890f5f8
--- /dev/null
+++ b/coverage/lcov-report/geom/const.js.html
@@ -0,0 +1,307 @@
+
+
+
+
+
+ Code coverage report for geom/const.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 2/2
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 100%
+ Functions
+ 0/0
+
+
+
+
+ 100%
+ Lines
+ 2/2
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var GEOM_CONST = {
+
+ /**
+ * A Circle Geometry object type.
+ *
+ * @name Phaser.Geom.CIRCLE
+ * @type {number}
+ * @since 3.19.0
+ */
+ CIRCLE: 0,
+
+ /**
+ * An Ellipse Geometry object type.
+ *
+ * @name Phaser.Geom.ELLIPSE
+ * @type {number}
+ * @since 3.19.0
+ */
+ ELLIPSE: 1,
+
+ /**
+ * A Line Geometry object type.
+ *
+ * @name Phaser.Geom.LINE
+ * @type {number}
+ * @since 3.19.0
+ */
+ LINE: 2,
+
+ /**
+ * A Point Geometry object type.
+ *
+ * @name Phaser.Geom.POINT
+ * @type {number}
+ * @since 3.19.0
+ */
+ POINT: 3,
+
+ /**
+ * A Polygon Geometry object type.
+ *
+ * @name Phaser.Geom.POLYGON
+ * @type {number}
+ * @since 3.19.0
+ */
+ POLYGON: 4,
+
+ /**
+ * A Rectangle Geometry object type.
+ *
+ * @name Phaser.Geom.RECTANGLE
+ * @type {number}
+ * @since 3.19.0
+ */
+ RECTANGLE: 5,
+
+ /**
+ * A Triangle Geometry object type.
+ *
+ * @name Phaser.Geom.TRIANGLE
+ * @type {number}
+ * @since 3.19.0
+ */
+ TRIANGLE: 6
+
+};
+
+module.exports = GEOM_CONST;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/index.html b/coverage/lcov-report/geom/index.html
new file mode 100644
index 0000000000..e63f23503c
--- /dev/null
+++ b/coverage/lcov-report/geom/index.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+ Code coverage report for geom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 2/2
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 100%
+ Functions
+ 0/0
+
+
+
+
+ 100%
+ Lines
+ 2/2
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ const.js
+
+
+
+ 100%
+ 2/2
+ 100%
+ 0/0
+ 100%
+ 0/0
+ 100%
+ 2/2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/line/GetPoint.js.html b/coverage/lcov-report/geom/line/GetPoint.js.html
new file mode 100644
index 0000000000..0e5e69db14
--- /dev/null
+++ b/coverage/lcov-report/geom/line/GetPoint.js.html
@@ -0,0 +1,184 @@
+
+
+
+
+
+ Code coverage report for geom/line/GetPoint.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 37.5%
+ Statements
+ 3/8
+
+
+
+
+ 0%
+ Branches
+ 0/2
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 42.85%
+ Lines
+ 3/7
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Point = require('../point/Point');
+
+/**
+ * Get a point on a line that's a given percentage along its length.
+ *
+ * @function Phaser.Geom.Line.GetPoint
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point} O - [out,$return]
+ *
+ * @param {Phaser.Geom.Line} line - The line.
+ * @param {number} position - A value between 0 and 1, where 0 is the start, 0.5 is the middle and 1 is the end of the line.
+ * @param {(Phaser.Geom.Point|object)} [out] - An optional point, or point-like object, to store the coordinates of the point on the line.
+ *
+ * @return {(Phaser.Geom.Point|object)} The point on the line.
+ */
+var GetPoint = fu nction (line, position, out)
+{
+ if (out === undefined) { out = new Point(); }
+
+ out.x = line.x1 + (line.x2 - line.x1) * position;
+ out.y = line.y1 + (line.y2 - line.y1) * position;
+
+ return out;
+};
+
+module.exports = GetPoint;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/line/GetPoints.js.html b/coverage/lcov-report/geom/line/GetPoints.js.html
new file mode 100644
index 0000000000..9daf904fda
--- /dev/null
+++ b/coverage/lcov-report/geom/line/GetPoints.js.html
@@ -0,0 +1,268 @@
+
+
+
+
+
+ Code coverage report for geom/line/GetPoints.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 21.05%
+ Statements
+ 4/19
+
+
+
+
+ 0%
+ Branches
+ 0/6
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 23.52%
+ Lines
+ 4/17
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+
+
+
+
+
+1x
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Length = require('./Length');
+var Point = require('../point/Point');
+
+/**
+ * Get a number of points along a line's length.
+ *
+ * Provide a `quantity` to get an exact number of points along the line.
+ *
+ * Provide a `stepRate` to ensure a specific distance between each point on the line. Set `quantity` to `0` when
+ * providing a `stepRate`.
+ *
+ * See also `GetEasedPoints` for a way to distribute the points across the line according to an ease type or input function.
+ *
+ * @function Phaser.Geom.Line.GetPoints
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point[]} O - [out,$return]
+ *
+ * @param {Phaser.Geom.Line} line - The line.
+ * @param {number} quantity - The number of points to place on the line. Set to `0` to use `stepRate` instead.
+ * @param {number} [stepRate] - The distance between each point on the line. When set, `quantity` is implied and should be set to `0`.
+ * @param {(array|Phaser.Geom.Point[])} [out] - An optional array of Points, or point-like objects, to store the coordinates of the points on the line.
+ *
+ * @return {(array|Phaser.Geom.Point[])} An array of Points, or point-like objects, containing the coordinates of the points on the line.
+ */
+var GetPoints = fu nction (line, quantity, stepRate, out)
+{
+ if (out === undefined) { out = []; }
+
+ // If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.
+ if (!quantity && stepRate > 0)
+ {
+ quantity = Length(line) / stepRate;
+ }
+
+ var x1 = line.x1;
+ var y1 = line.y1;
+
+ var x2 = line.x2;
+ var y2 = line.y2;
+
+ for (var i = 0; i < quantity; i++)
+ {
+ var position = i / quantity;
+
+ var x = x1 + (x2 - x1) * position;
+ var y = y1 + (y2 - y1) * position;
+
+ out.push(new Point(x, y));
+ }
+
+ return out;
+};
+
+module.exports = GetPoints;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/line/Length.js.html b/coverage/lcov-report/geom/line/Length.js.html
new file mode 100644
index 0000000000..88d30247f4
--- /dev/null
+++ b/coverage/lcov-report/geom/line/Length.js.html
@@ -0,0 +1,151 @@
+
+
+
+
+
+ Code coverage report for geom/line/Length.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 66.66%
+ Statements
+ 2/3
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 66.66%
+ Lines
+ 2/3
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+/**
+ * Calculate the length of the given line.
+ *
+ * @function Phaser.Geom.Line.Length
+ * @since 3.0.0
+ *
+ * @param {Phaser.Geom.Line} line - The line to calculate the length of.
+ *
+ * @return {number} The length of the line.
+ */
+var Length = fu nction (line)
+{
+ return Math.sqrt((line.x2 - line.x1) * (line.x2 - line.x1) + (line.y2 - line.y1) * (line.y2 - line.y1));
+};
+
+module.exports = Length;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/line/Line.js.html b/coverage/lcov-report/geom/line/Line.js.html
new file mode 100644
index 0000000000..fb77c404ff
--- /dev/null
+++ b/coverage/lcov-report/geom/line/Line.js.html
@@ -0,0 +1,1144 @@
+
+
+
+
+
+ Code coverage report for geom/line/Line.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12.12%
+ Statements
+ 8/66
+
+
+
+
+ 0%
+ Branches
+ 0/28
+
+
+
+
+ 0%
+ Functions
+ 0/16
+
+
+
+
+ 14.28%
+ Lines
+ 8/56
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+
+
+
+
+
+1x
+1x
+1x
+1x
+1x
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Class = require('../../utils/Class');
+var GetPoint = require('./GetPoint');
+var GetPoints = require('./GetPoints');
+var GEOM_CONST = require('../const');
+var Random = require('./Random');
+var Vector2 = require('../../math/Vector2');
+
+/**
+ * @classdesc
+ * Defines a Line segment, a part of a line between two endpoints.
+ *
+ * @class Line
+ * @memberof Phaser.Geom
+ * @constructor
+ * @since 3.0.0
+ *
+ * @param {number} [x1=0] - The x coordinate of the lines starting point.
+ * @param {number} [y1=0] - The y coordinate of the lines starting point.
+ * @param {number} [x2=0] - The x coordinate of the lines ending point.
+ * @param {number} [y2=0] - The y coordinate of the lines ending point.
+ */
+var Line = new Class({
+
+ initialize:
+
+ function Line (x1, y1, x2, y2)
+ {
+ if (x1 === undefined) { x1 = 0; }
+ if (y1 === undefined) { y1 = 0; }
+ if (x2 === undefined) { x2 = 0; }
+ if (y2 === undefined) { y2 = 0; }
+
+ /**
+ * The geometry constant type of this object: `GEOM_CONST.LINE`.
+ * Used for fast type comparisons.
+ *
+ * @name Phaser.Geom.Line#type
+ * @type {number}
+ * @readonly
+ * @since 3.19.0
+ */
+ this.type = GEOM_CONST.LINE;
+
+ /**
+ * The x coordinate of the lines starting point.
+ *
+ * @name Phaser.Geom.Line#x1
+ * @type {number}
+ * @since 3.0.0
+ */
+ this.x1 = x1;
+
+ /**
+ * The y coordinate of the lines starting point.
+ *
+ * @name Phaser.Geom.Line#y1
+ * @type {number}
+ * @since 3.0.0
+ */
+ this.y1 = y1;
+
+ /**
+ * The x coordinate of the lines ending point.
+ *
+ * @name Phaser.Geom.Line#x2
+ * @type {number}
+ * @since 3.0.0
+ */
+ this.x2 = x2;
+
+ /**
+ * The y coordinate of the lines ending point.
+ *
+ * @name Phaser.Geom.Line#y2
+ * @type {number}
+ * @since 3.0.0
+ */
+ this.y2 = y2;
+ },
+
+ /**
+ * Get a point on a line that's a given percentage along its length.
+ *
+ * @method Phaser.Geom.Line#getPoint
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point} O - [output,$return]
+ *
+ * @param {number} position - A value between 0 and 1, where 0 is the start, 0.5 is the middle and 1 is the end of the line.
+ * @param {(Phaser.Geom.Point|object)} [output] - An optional point, or point-like object, to store the coordinates of the point on the line.
+ *
+ * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point on the line.
+ */
+ getPoint: fu nction (position, output)
+ {
+ return GetPoint(this, position, output);
+ },
+
+ /**
+ * Get a number of points along a line's length.
+ *
+ * Provide a `quantity` to get an exact number of points along the line.
+ *
+ * Provide a `stepRate` to ensure a specific distance between each point on the line. Set `quantity` to `0` when
+ * providing a `stepRate`.
+ *
+ * @method Phaser.Geom.Line#getPoints
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point[]} O - [output,$return]
+ *
+ * @param {number} quantity - The number of points to place on the line. Set to `0` to use `stepRate` instead.
+ * @param {number} [stepRate] - The distance between each point on the line. When set, `quantity` is implied and should be set to `0`.
+ * @param {(array|Phaser.Geom.Point[])} [output] - An optional array of Points, or point-like objects, to store the coordinates of the points on the line.
+ *
+ * @return {(array|Phaser.Geom.Point[])} An array of Points, or point-like objects, containing the coordinates of the points on the line.
+ */
+ getPoints: fu nction (quantity, stepRate, output)
+ {
+ return GetPoints(this, quantity, stepRate, output);
+ },
+
+ /**
+ * Get a random Point on the Line.
+ *
+ * @method Phaser.Geom.Line#getRandomPoint
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point} O - [point,$return]
+ *
+ * @param {(Phaser.Geom.Point|object)} [point] - An instance of a Point to be modified.
+ *
+ * @return {Phaser.Geom.Point} A random Point on the Line.
+ */
+ getRandomPoint: fu nction (point)
+ {
+ return Random(this, point);
+ },
+
+ /**
+ * Set new coordinates for the line endpoints.
+ *
+ * @method Phaser.Geom.Line#setTo
+ * @since 3.0.0
+ *
+ * @param {number} [x1=0] - The x coordinate of the lines starting point.
+ * @param {number} [y1=0] - The y coordinate of the lines starting point.
+ * @param {number} [x2=0] - The x coordinate of the lines ending point.
+ * @param {number} [y2=0] - The y coordinate of the lines ending point.
+ *
+ * @return {this} This Line object.
+ */
+ setTo: fu nction (x1, y1, x2, y2)
+ {
+ if (x1 === undefined) { x1 = 0; }
+ if (y1 === undefined) { y1 = 0; }
+ if (x2 === undefined) { x2 = 0; }
+ if (y2 === undefined) { y2 = 0; }
+
+ this.x1 = x1;
+ this.y1 = y1;
+
+ this.x2 = x2;
+ this.y2 = y2;
+
+ return this;
+ },
+
+ /**
+ * Sets this Line to match the x/y coordinates of the two given Vector2Like objects.
+ *
+ * @method Phaser.Geom.Line#setFromObjects
+ * @since 3.70.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} start - Any object with public `x` and `y` properties, whose values will be assigned to the x1/y1 components of this Line.
+ * @param {Phaser.Types.Math.Vector2Like} end - Any object with public `x` and `y` properties, whose values will be assigned to the x2/y2 components of this Line.
+ *
+ * @return {this} This Line object.
+ */
+ setFromObjects: fu nction (start, end)
+ {
+ this.x1 = start.x;
+ this.y1 = start.y;
+
+ this.x2 = end.x;
+ this.y2 = end.y;
+
+ return this;
+ },
+
+ /**
+ * Returns a Vector2 object that corresponds to the start of this Line.
+ *
+ * @method Phaser.Geom.Line#getPointA
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Math.Vector2} O - [vec2,$return]
+ *
+ * @param {Phaser.Math.Vector2} [vec2] - A Vector2 object to set the results in. If `undefined` a new Vector2 will be created.
+ *
+ * @return {Phaser.Math.Vector2} A Vector2 object that corresponds to the start of this Line.
+ */
+ getPointA: fu nction (vec2)
+ {
+ if (vec2 === undefined) { vec2 = new Vector2(); }
+
+ vec2.set(this.x1, this.y1);
+
+ return vec2;
+ },
+
+ /**
+ * Returns a Vector2 object that corresponds to the end of this Line.
+ *
+ * @method Phaser.Geom.Line#getPointB
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Math.Vector2} O - [vec2,$return]
+ *
+ * @param {Phaser.Math.Vector2} [vec2] - A Vector2 object to set the results in. If `undefined` a new Vector2 will be created.
+ *
+ * @return {Phaser.Math.Vector2} A Vector2 object that corresponds to the end of this Line.
+ */
+ getPointB: fu nction (vec2)
+ {
+ if (vec2 === undefined) { vec2 = new Vector2(); }
+
+ vec2.set(this.x2, this.y2);
+
+ return vec2;
+ },
+
+ /**
+ * The left position of the Line.
+ *
+ * @name Phaser.Geom.Line#left
+ * @type {number}
+ * @since 3.0.0
+ */
+ left: {
+
+ get: fu nction ()
+ {
+ return Math.min(this.x1, this.x2);
+ },
+
+ set: fu nction (value)
+ {
+ if (this.x1 <= this.x2)
+ {
+ this.x1 = value;
+ }
+ else
+ {
+ this.x2 = value;
+ }
+ }
+
+ },
+
+ /**
+ * The right position of the Line.
+ *
+ * @name Phaser.Geom.Line#right
+ * @type {number}
+ * @since 3.0.0
+ */
+ right: {
+
+ get: fu nction ()
+ {
+ return Math.max(this.x1, this.x2);
+ },
+
+ set: fu nction (value)
+ {
+ if (this.x1 > this.x2)
+ {
+ this.x1 = value;
+ }
+ else
+ {
+ this.x2 = value;
+ }
+ }
+
+ },
+
+ /**
+ * The top position of the Line.
+ *
+ * @name Phaser.Geom.Line#top
+ * @type {number}
+ * @since 3.0.0
+ */
+ top: {
+
+ get: fu nction ()
+ {
+ return Math.min(this.y1, this.y2);
+ },
+
+ set: fu nction (value)
+ {
+ if (this.y1 <= this.y2)
+ {
+ this.y1 = value;
+ }
+ else
+ {
+ this.y2 = value;
+ }
+ }
+
+ },
+
+ /**
+ * The bottom position of the Line.
+ *
+ * @name Phaser.Geom.Line#bottom
+ * @type {number}
+ * @since 3.0.0
+ */
+ bottom: {
+
+ get: fu nction ()
+ {
+ return Math.max(this.y1, this.y2);
+ },
+
+ set: fu nction (value)
+ {
+ if (this.y1 > this.y2)
+ {
+ this.y1 = value;
+ }
+ else
+ {
+ this.y2 = value;
+ }
+ }
+
+ }
+
+});
+
+module.exports = Line;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/line/Random.js.html b/coverage/lcov-report/geom/line/Random.js.html
new file mode 100644
index 0000000000..04922e784d
--- /dev/null
+++ b/coverage/lcov-report/geom/line/Random.js.html
@@ -0,0 +1,187 @@
+
+
+
+
+
+ Code coverage report for geom/line/Random.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 33.33%
+ Statements
+ 3/9
+
+
+
+
+ 0%
+ Branches
+ 0/2
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 37.5%
+ Lines
+ 3/8
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Point = require('../point/Point');
+
+/**
+ * Returns a random point on a given Line.
+ *
+ * @function Phaser.Geom.Line.Random
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point} O - [out,$return]
+ *
+ * @param {Phaser.Geom.Line} line - The Line to calculate the random Point on.
+ * @param {(Phaser.Geom.Point|object)} [out] - An instance of a Point to be modified.
+ *
+ * @return {(Phaser.Geom.Point|object)} A random Point on the Line.
+ */
+var Random = fu nction (line, out)
+{
+ if (out === undefined) { out = new Point(); }
+
+ var t = Math.random();
+
+ out.x = line.x1 + t * (line.x2 - line.x1);
+ out.y = line.y1 + t * (line.y2 - line.y1);
+
+ return out;
+};
+
+module.exports = Random;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/line/index.html b/coverage/lcov-report/geom/line/index.html
new file mode 100644
index 0000000000..cbf772ffb2
--- /dev/null
+++ b/coverage/lcov-report/geom/line/index.html
@@ -0,0 +1,176 @@
+
+
+
+
+
+ Code coverage report for geom/line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 19.04%
+ Statements
+ 20/105
+
+
+
+
+ 0%
+ Branches
+ 0/38
+
+
+
+
+ 0%
+ Functions
+ 0/20
+
+
+
+
+ 21.97%
+ Lines
+ 20/91
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ GetPoint.js
+
+
+
+ 37.5%
+ 3/8
+ 0%
+ 0/2
+ 0%
+ 0/1
+ 42.85%
+ 3/7
+
+
+
+ GetPoints.js
+
+
+
+ 21.05%
+ 4/19
+ 0%
+ 0/6
+ 0%
+ 0/1
+ 23.52%
+ 4/17
+
+
+
+ Length.js
+
+
+
+ 66.66%
+ 2/3
+ 100%
+ 0/0
+ 0%
+ 0/1
+ 66.66%
+ 2/3
+
+
+
+ Line.js
+
+
+
+ 12.12%
+ 8/66
+ 0%
+ 0/28
+ 0%
+ 0/16
+ 14.28%
+ 8/56
+
+
+
+ Random.js
+
+
+
+ 33.33%
+ 3/9
+ 0%
+ 0/2
+ 0%
+ 0/1
+ 37.5%
+ 3/8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/point/Point.js.html b/coverage/lcov-report/geom/point/Point.js.html
new file mode 100644
index 0000000000..9ce75cf142
--- /dev/null
+++ b/coverage/lcov-report/geom/point/Point.js.html
@@ -0,0 +1,346 @@
+
+
+
+
+
+ Code coverage report for geom/point/Point.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 18/18
+
+
+
+
+ 100%
+ Branches
+ 8/8
+
+
+
+
+ 100%
+ Functions
+ 2/2
+
+
+
+
+ 100%
+ Lines
+ 14/14
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+
+
+
+
+
+2x
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+9x
+9x
+
+
+
+
+
+
+
+
+
+
+9x
+
+
+
+
+
+
+
+
+
+9x
+
+
+
+
+
+
+
+
+
+9x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4x
+4x
+
+4x
+4x
+
+4x
+
+
+
+
+2x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Class = require('../../utils/Class');
+var GEOM_CONST = require('../const');
+
+/**
+ * @classdesc
+ * Defines a Point in 2D space, with an x and y component.
+ *
+ * @class Point
+ * @memberof Phaser.Geom
+ * @constructor
+ * @since 3.0.0
+ *
+ * @param {number} [x=0] - The x coordinate of this Point.
+ * @param {number} [y=x] - The y coordinate of this Point.
+ */
+var Point = new Class({
+
+ initialize:
+
+ function Point (x, y)
+ {
+ if (x === undefined) { x = 0; }
+ if (y === undefined) { y = x; }
+
+ /**
+ * The geometry constant type of this object: `GEOM_CONST.POINT`.
+ * Used for fast type comparisons.
+ *
+ * @name Phaser.Geom.Point#type
+ * @type {number}
+ * @readonly
+ * @since 3.19.0
+ */
+ this.type = GEOM_CONST.POINT;
+
+ /**
+ * The x coordinate of this Point.
+ *
+ * @name Phaser.Geom.Point#x
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.x = x;
+
+ /**
+ * The y coordinate of this Point.
+ *
+ * @name Phaser.Geom.Point#y
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.y = y;
+ },
+
+ /**
+ * Set the x and y coordinates of the point to the given values.
+ *
+ * @method Phaser.Geom.Point#setTo
+ * @since 3.0.0
+ *
+ * @param {number} [x=0] - The x coordinate of this Point.
+ * @param {number} [y=x] - The y coordinate of this Point.
+ *
+ * @return {this} This Point object.
+ */
+ setTo: function (x, y)
+ {
+ if (x === undefined) { x = 0; }
+ if (y === undefined) { y = x; }
+
+ this.x = x;
+ this.y = y;
+
+ return this;
+ }
+
+});
+
+module.exports = Point;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/point/index.html b/coverage/lcov-report/geom/point/index.html
new file mode 100644
index 0000000000..a2055e556c
--- /dev/null
+++ b/coverage/lcov-report/geom/point/index.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+ Code coverage report for geom/point
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 18/18
+
+
+
+
+ 100%
+ Branches
+ 8/8
+
+
+
+
+ 100%
+ Functions
+ 2/2
+
+
+
+
+ 100%
+ Lines
+ 14/14
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ Point.js
+
+
+
+ 100%
+ 18/18
+ 100%
+ 8/8
+ 100%
+ 2/2
+ 100%
+ 14/14
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/rectangle/Contains.js.html b/coverage/lcov-report/geom/rectangle/Contains.js.html
new file mode 100644
index 0000000000..d31b25bd6b
--- /dev/null
+++ b/coverage/lcov-report/geom/rectangle/Contains.js.html
@@ -0,0 +1,172 @@
+
+
+
+
+
+ Code coverage report for geom/rectangle/Contains.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 80%
+ Statements
+ 4/5
+
+
+
+
+ 87.5%
+ Branches
+ 7/8
+
+
+
+
+ 100%
+ Functions
+ 1/1
+
+
+
+
+ 80%
+ Lines
+ 4/5
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+9x
+
+
+
+
+9x
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+/**
+ * Checks if a given point is inside a Rectangle's bounds.
+ *
+ * @function Phaser.Geom.Rectangle.Contains
+ * @since 3.0.0
+ *
+ * @param {Phaser.Geom.Rectangle} rect - The Rectangle to check.
+ * @param {number} x - The X coordinate of the point to check.
+ * @param {number} y - The Y coordinate of the point to check.
+ *
+ * @return {boolean} `true` if the point is within the Rectangle's bounds, otherwise `false`.
+ */
+var Contains = function (rect, x, y)
+{
+ I if (rect.width <= 0 || rect.height <= 0)
+ {
+ return false;
+ }
+
+ return (rect.x <= x && rect.x + rect.width >= x && rect.y <= y && rect.y + rect.height >= y);
+};
+
+module.exports = Contains;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/rectangle/GetPoint.js.html b/coverage/lcov-report/geom/rectangle/GetPoint.js.html
new file mode 100644
index 0000000000..8362e0b07a
--- /dev/null
+++ b/coverage/lcov-report/geom/rectangle/GetPoint.js.html
@@ -0,0 +1,310 @@
+
+
+
+
+
+ Code coverage report for geom/rectangle/GetPoint.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 16.66%
+ Statements
+ 4/24
+
+
+
+
+ 0%
+ Branches
+ 0/12
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 17.39%
+ Lines
+ 4/23
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+
+
+
+
+
+1x
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Perimeter = require('./Perimeter');
+var Point = require('../point/Point');
+
+/**
+ * Calculates the coordinates of a point at a certain `position` on the Rectangle's perimeter.
+ *
+ * The `position` is a fraction between 0 and 1 which defines how far into the perimeter the point is.
+ *
+ * A value of 0 or 1 returns the point at the top left corner of the rectangle, while a value of 0.5 returns the point at the bottom right corner of the rectangle. Values between 0 and 0.5 are on the top or the right side and values between 0.5 and 1 are on the bottom or the left side.
+ *
+ * @function Phaser.Geom.Rectangle.GetPoint
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point} O - [out,$return]
+ *
+ * @param {Phaser.Geom.Rectangle} rectangle - The Rectangle to get the perimeter point from.
+ * @param {number} position - The normalized distance into the Rectangle's perimeter to return.
+ * @param {(Phaser.Geom.Point|object)} [out] - An object to update with the `x` and `y` coordinates of the point.
+ *
+ * @return {Phaser.Geom.Point} The updated `output` object, or a new Point if no `output` object was given.
+ */
+var GetPoint = fu nction (rectangle, position, out)
+{
+ if (out === undefined) { out = new Point(); }
+
+ if (position <= 0 || position >= 1)
+ {
+ out.x = rectangle.x;
+ out.y = rectangle.y;
+
+ return out;
+ }
+
+ var p = Perimeter(rectangle) * position;
+
+ if (position > 0.5)
+ {
+ p -= (rectangle.width + rectangle.height);
+
+ if (p <= rectangle.width)
+ {
+ // Face 3
+ out.x = rectangle.right - p;
+ out.y = rectangle.bottom;
+ }
+ else
+ {
+ // Face 4
+ out.x = rectangle.x;
+ out.y = rectangle.bottom - (p - rectangle.width);
+ }
+ }
+ else if (p <= rectangle.width)
+ {
+ // Face 1
+ out.x = rectangle.x + p;
+ out.y = rectangle.y;
+ }
+ else
+ {
+ // Face 2
+ out.x = rectangle.right;
+ out.y = rectangle.y + (p - rectangle.width);
+ }
+
+ return out;
+};
+
+module.exports = GetPoint;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/rectangle/GetPoints.js.html b/coverage/lcov-report/geom/rectangle/GetPoints.js.html
new file mode 100644
index 0000000000..eb390a4bfb
--- /dev/null
+++ b/coverage/lcov-report/geom/rectangle/GetPoints.js.html
@@ -0,0 +1,220 @@
+
+
+
+
+
+ Code coverage report for geom/rectangle/GetPoints.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 30.76%
+ Statements
+ 4/13
+
+
+
+
+ 0%
+ Branches
+ 0/6
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 36.36%
+ Lines
+ 4/11
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+
+
+
+
+
+1x
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var GetPoint = require('./GetPoint');
+var Perimeter = require('./Perimeter');
+
+/**
+ * Return an array of points from the perimeter of the rectangle, each spaced out based on the quantity or step required.
+ *
+ * @function Phaser.Geom.Rectangle.GetPoints
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point[]} O - [out,$return]
+ *
+ * @param {Phaser.Geom.Rectangle} rectangle - The Rectangle object to get the points from.
+ * @param {number} step - Step between points. Used to calculate the number of points to return when quantity is falsey. Ignored if quantity is positive.
+ * @param {number} quantity - The number of evenly spaced points from the rectangles perimeter to return. If falsey, step param will be used to calculate the number of points.
+ * @param {(array|Phaser.Geom.Point[])} [out] - An optional array to store the points in.
+ *
+ * @return {(array|Phaser.Geom.Point[])} An array of Points from the perimeter of the rectangle.
+ */
+var GetPoints = fu nction (rectangle, quantity, stepRate, out)
+{
+ if (out === undefined) { out = []; }
+
+ // If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.
+ if (!quantity && stepRate > 0)
+ {
+ quantity = Perimeter(rectangle) / stepRate;
+ }
+
+ for (var i = 0; i < quantity; i++)
+ {
+ var position = i / quantity;
+
+ out.push(GetPoint(rectangle, position));
+ }
+
+ return out;
+};
+
+module.exports = GetPoints;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/rectangle/Perimeter.js.html b/coverage/lcov-report/geom/rectangle/Perimeter.js.html
new file mode 100644
index 0000000000..d8c52721f3
--- /dev/null
+++ b/coverage/lcov-report/geom/rectangle/Perimeter.js.html
@@ -0,0 +1,151 @@
+
+
+
+
+
+ Code coverage report for geom/rectangle/Perimeter.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 66.66%
+ Statements
+ 2/3
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 66.66%
+ Lines
+ 2/3
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+/**
+ * Calculates the perimeter of a Rectangle.
+ *
+ * @function Phaser.Geom.Rectangle.Perimeter
+ * @since 3.0.0
+ *
+ * @param {Phaser.Geom.Rectangle} rect - The Rectangle to use.
+ *
+ * @return {number} The perimeter of the Rectangle, equal to `(width * 2) + (height * 2)`.
+ */
+var Perimeter = fu nction (rect)
+{
+ return 2 * (rect.width + rect.height);
+};
+
+module.exports = Perimeter;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/rectangle/Random.js.html b/coverage/lcov-report/geom/rectangle/Random.js.html
new file mode 100644
index 0000000000..c64b03a0e2
--- /dev/null
+++ b/coverage/lcov-report/geom/rectangle/Random.js.html
@@ -0,0 +1,181 @@
+
+
+
+
+
+ Code coverage report for geom/rectangle/Random.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 8/8
+
+
+
+
+ 100%
+ Branches
+ 2/2
+
+
+
+
+ 100%
+ Functions
+ 1/1
+
+
+
+
+ 100%
+ Lines
+ 7/7
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+2x
+
+2x
+2x
+
+2x
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Point = require('../point/Point');
+
+/**
+ * Returns a random point within a Rectangle.
+ *
+ * @function Phaser.Geom.Rectangle.Random
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point} O - [out,$return]
+ *
+ * @param {Phaser.Geom.Rectangle} rect - The Rectangle to return a point from.
+ * @param {Phaser.Geom.Point} out - The object to update with the point's coordinates.
+ *
+ * @return {Phaser.Geom.Point} The modified `out` object, or a new Point if none was provided.
+ */
+var Random = function (rect, out)
+{
+ if (out === undefined) { out = new Point(); }
+
+ out.x = rect.x + (Math.random() * rect.width);
+ out.y = rect.y + (Math.random() * rect.height);
+
+ return out;
+};
+
+module.exports = Random;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/rectangle/Rectangle.js.html b/coverage/lcov-report/geom/rectangle/Rectangle.js.html
new file mode 100644
index 0000000000..ddafe6dd68
--- /dev/null
+++ b/coverage/lcov-report/geom/rectangle/Rectangle.js.html
@@ -0,0 +1,1600 @@
+
+
+
+
+
+ Code coverage report for geom/rectangle/Rectangle.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 50.61%
+ Statements
+ 41/81
+
+
+
+
+ 46.66%
+ Branches
+ 14/30
+
+
+
+
+ 30.76%
+ Functions
+ 8/26
+
+
+
+
+ 49.29%
+ Lines
+ 35/71
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+
+
+
+
+
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+19x
+19x
+19x
+19x
+
+
+
+
+
+
+
+
+
+
+19x
+
+
+
+
+
+
+
+
+
+19x
+
+
+
+
+
+
+
+
+
+19x
+
+
+
+
+
+
+
+
+
+19x
+
+
+
+
+
+
+
+
+
+19x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+2x
+2x
+2x
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+2x
+2x
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+2x
+2x
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+7x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Class = require('../../utils/Class');
+var Contains = require('./Contains');
+var GetPoint = require('./GetPoint');
+var GetPoints = require('./GetPoints');
+var GEOM_CONST = require('../const');
+var Line = require('../line/Line');
+var Random = require('./Random');
+
+/**
+ * @classdesc
+ * Encapsulates a 2D rectangle defined by its corner point in the top-left and its extends in x (width) and y (height)
+ *
+ * @class Rectangle
+ * @memberof Phaser.Geom
+ * @constructor
+ * @since 3.0.0
+ *
+ * @param {number} [x=0] - The X coordinate of the top left corner of the Rectangle.
+ * @param {number} [y=0] - The Y coordinate of the top left corner of the Rectangle.
+ * @param {number} [width=0] - The width of the Rectangle.
+ * @param {number} [height=0] - The height of the Rectangle.
+ */
+var Rectangle = new Class({
+
+ initialize:
+
+ function Rectangle (x, y, width, height)
+ {
+ if (x === undefined) { x = 0; }
+ if (y === undefined) { y = 0; }
+ if (width === undefined) { width = 0; }
+ if (height === undefined) { height = 0; }
+
+ /**
+ * The geometry constant type of this object: `GEOM_CONST.RECTANGLE`.
+ * Used for fast type comparisons.
+ *
+ * @name Phaser.Geom.Rectangle#type
+ * @type {number}
+ * @readonly
+ * @since 3.19.0
+ */
+ this.type = GEOM_CONST.RECTANGLE;
+
+ /**
+ * The X coordinate of the top left corner of the Rectangle.
+ *
+ * @name Phaser.Geom.Rectangle#x
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.x = x;
+
+ /**
+ * The Y coordinate of the top left corner of the Rectangle.
+ *
+ * @name Phaser.Geom.Rectangle#y
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.y = y;
+
+ /**
+ * The width of the Rectangle, i.e. the distance between its left side (defined by `x`) and its right side.
+ *
+ * @name Phaser.Geom.Rectangle#width
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.width = width;
+
+ /**
+ * The height of the Rectangle, i.e. the distance between its top side (defined by `y`) and its bottom side.
+ *
+ * @name Phaser.Geom.Rectangle#height
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.height = height;
+ },
+
+ /**
+ * Checks if the given point is inside the Rectangle's bounds.
+ *
+ * @method Phaser.Geom.Rectangle#contains
+ * @since 3.0.0
+ *
+ * @param {number} x - The X coordinate of the point to check.
+ * @param {number} y - The Y coordinate of the point to check.
+ *
+ * @return {boolean} `true` if the point is within the Rectangle's bounds, otherwise `false`.
+ */
+ contains: function (x, y)
+ {
+ return Contains(this, x, y);
+ },
+
+ /**
+ * Calculates the coordinates of a point at a certain `position` on the Rectangle's perimeter.
+ *
+ * The `position` is a fraction between 0 and 1 which defines how far into the perimeter the point is.
+ *
+ * A value of 0 or 1 returns the point at the top left corner of the rectangle, while a value of 0.5 returns the point at the bottom right corner of the rectangle. Values between 0 and 0.5 are on the top or the right side and values between 0.5 and 1 are on the bottom or the left side.
+ *
+ * @method Phaser.Geom.Rectangle#getPoint
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point} O - [output,$return]
+ *
+ * @param {number} position - The normalized distance into the Rectangle's perimeter to return.
+ * @param {(Phaser.Geom.Point|object)} [output] - An object to update with the `x` and `y` coordinates of the point.
+ *
+ * @return {(Phaser.Geom.Point|object)} The updated `output` object, or a new Point if no `output` object was given.
+ */
+ getPoint: fu nction (position, output)
+ {
+ return GetPoint(this, position, output);
+ },
+
+ /**
+ * Returns an array of points from the perimeter of the Rectangle, each spaced out based on the quantity or step required.
+ *
+ * @method Phaser.Geom.Rectangle#getPoints
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point[]} O - [output,$return]
+ *
+ * @param {number} quantity - The number of points to return. Set to `false` or 0 to return an arbitrary number of points (`perimeter / stepRate`) evenly spaced around the Rectangle based on the `stepRate`.
+ * @param {number} [stepRate] - If `quantity` is 0, determines the normalized distance between each returned point.
+ * @param {(array|Phaser.Geom.Point[])} [output] - An array to which to append the points.
+ *
+ * @return {(array|Phaser.Geom.Point[])} The modified `output` array, or a new array if none was provided.
+ */
+ getPoints: fu nction (quantity, stepRate, output)
+ {
+ return GetPoints(this, quantity, stepRate, output);
+ },
+
+ /**
+ * Returns a random point within the Rectangle's bounds.
+ *
+ * @method Phaser.Geom.Rectangle#getRandomPoint
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Point} O - [point,$return]
+ *
+ * @param {Phaser.Geom.Point} [point] - The object in which to store the `x` and `y` coordinates of the point.
+ *
+ * @return {Phaser.Geom.Point} The updated `point`, or a new Point if none was provided.
+ */
+ getRandomPoint: function (point)
+ {
+ return Random(this, point);
+ },
+
+ /**
+ * Sets the position, width, and height of the Rectangle.
+ *
+ * @method Phaser.Geom.Rectangle#setTo
+ * @since 3.0.0
+ *
+ * @param {number} x - The X coordinate of the top left corner of the Rectangle.
+ * @param {number} y - The Y coordinate of the top left corner of the Rectangle.
+ * @param {number} width - The width of the Rectangle.
+ * @param {number} height - The height of the Rectangle.
+ *
+ * @return {this} This Rectangle object.
+ */
+ setTo: function (x, y, width, height)
+ {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+
+ return this;
+ },
+
+ /**
+ * Resets the position, width, and height of the Rectangle to 0.
+ *
+ * @method Phaser.Geom.Rectangle#setEmpty
+ * @since 3.0.0
+ *
+ * @return {this} This Rectangle object.
+ */
+ setEmpty: function ()
+ {
+ return this.setTo(0, 0, 0, 0);
+ },
+
+ /**
+ * Sets the position of the Rectangle.
+ *
+ * @method Phaser.Geom.Rectangle#setPosition
+ * @since 3.0.0
+ *
+ * @param {number} x - The X coordinate of the top left corner of the Rectangle.
+ * @param {number} [y=x] - The Y coordinate of the top left corner of the Rectangle.
+ *
+ * @return {this} This Rectangle object.
+ */
+ setPosition: function (x, y)
+ {
+ if (y === undefined) { y = x; }
+
+ this.x = x;
+ this.y = y;
+
+ return this;
+ },
+
+ /**
+ * Sets the width and height of the Rectangle.
+ *
+ * @method Phaser.Geom.Rectangle#setSize
+ * @since 3.0.0
+ *
+ * @param {number} width - The width to set the Rectangle to.
+ * @param {number} [height=width] - The height to set the Rectangle to.
+ *
+ * @return {this} This Rectangle object.
+ */
+ setSize: function (width, height)
+ {
+ if (height === undefined) { height = width; }
+
+ this.width = width;
+ this.height = height;
+
+ return this;
+ },
+
+ /**
+ * Determines if the Rectangle is empty. A Rectangle is empty if its width or height is less than or equal to 0.
+ *
+ * @method Phaser.Geom.Rectangle#isEmpty
+ * @since 3.0.0
+ *
+ * @return {boolean} `true` if the Rectangle is empty. A Rectangle object is empty if its width or height is less than or equal to 0.
+ */
+ isEmpty: function ()
+ {
+ return (this.width <= 0 || this.height <= 0);
+ },
+
+ /**
+ * Returns a Line object that corresponds to the top of this Rectangle.
+ *
+ * @method Phaser.Geom.Rectangle#getLineA
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Line} O - [line,$return]
+ *
+ * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.
+ *
+ * @return {Phaser.Geom.Line} A Line object that corresponds to the top of this Rectangle.
+ */
+ getLineA: fu nction (line)
+ {
+ if (line === undefined) { line = new Line(); }
+
+ line.setTo(this.x, this.y, this.right, this.y);
+
+ return line;
+ },
+
+ /**
+ * Returns a Line object that corresponds to the right of this Rectangle.
+ *
+ * @method Phaser.Geom.Rectangle#getLineB
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Line} O - [line,$return]
+ *
+ * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.
+ *
+ * @return {Phaser.Geom.Line} A Line object that corresponds to the right of this Rectangle.
+ */
+ getLineB: fu nction (line)
+ {
+ if (line === undefined) { line = new Line(); }
+
+ line.setTo(this.right, this.y, this.right, this.bottom);
+
+ return line;
+ },
+
+ /**
+ * Returns a Line object that corresponds to the bottom of this Rectangle.
+ *
+ * @method Phaser.Geom.Rectangle#getLineC
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Line} O - [line,$return]
+ *
+ * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.
+ *
+ * @return {Phaser.Geom.Line} A Line object that corresponds to the bottom of this Rectangle.
+ */
+ getLineC: fu nction (line)
+ {
+ if (line === undefined) { line = new Line(); }
+
+ line.setTo(this.right, this.bottom, this.x, this.bottom);
+
+ return line;
+ },
+
+ /**
+ * Returns a Line object that corresponds to the left of this Rectangle.
+ *
+ * @method Phaser.Geom.Rectangle#getLineD
+ * @since 3.0.0
+ *
+ * @generic {Phaser.Geom.Line} O - [line,$return]
+ *
+ * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.
+ *
+ * @return {Phaser.Geom.Line} A Line object that corresponds to the left of this Rectangle.
+ */
+ getLineD: fu nction (line)
+ {
+ if (line === undefined) { line = new Line(); }
+
+ line.setTo(this.x, this.bottom, this.x, this.y);
+
+ return line;
+ },
+
+ /**
+ * The x coordinate of the left of the Rectangle.
+ * Changing the left property of a Rectangle object has no effect on the y and height properties. However it does affect the width property, whereas changing the x value does not affect the width property.
+ *
+ * @name Phaser.Geom.Rectangle#left
+ * @type {number}
+ * @since 3.0.0
+ */
+ left: {
+
+ get: fu nction ()
+ {
+ return this.x;
+ },
+
+ set: fu nction (value)
+ {
+ if (value >= this.right)
+ {
+ this.width = 0;
+ }
+ else
+ {
+ this.width = this.right - value;
+ }
+
+ this.x = value;
+ }
+
+ },
+
+ /**
+ * The sum of the x and width properties.
+ * Changing the right property of a Rectangle object has no effect on the x, y and height properties, however it does affect the width property.
+ *
+ * @name Phaser.Geom.Rectangle#right
+ * @type {number}
+ * @since 3.0.0
+ */
+ right: {
+
+ get: fu nction ()
+ {
+ return this.x + this.width;
+ },
+
+ set: fu nction (value)
+ {
+ if (value <= this.x)
+ {
+ this.width = 0;
+ }
+ else
+ {
+ this.width = value - this.x;
+ }
+ }
+
+ },
+
+ /**
+ * The y coordinate of the top of the Rectangle. Changing the top property of a Rectangle object has no effect on the x and width properties.
+ * However it does affect the height property, whereas changing the y value does not affect the height property.
+ *
+ * @name Phaser.Geom.Rectangle#top
+ * @type {number}
+ * @since 3.0.0
+ */
+ top: {
+
+ get: fu nction ()
+ {
+ return this.y;
+ },
+
+ set: fu nction (value)
+ {
+ if (value >= this.bottom)
+ {
+ this.height = 0;
+ }
+ else
+ {
+ this.height = (this.bottom - value);
+ }
+
+ this.y = value;
+ }
+
+ },
+
+ /**
+ * The sum of the y and height properties.
+ * Changing the bottom property of a Rectangle object has no effect on the x, y and width properties, but does change the height property.
+ *
+ * @name Phaser.Geom.Rectangle#bottom
+ * @type {number}
+ * @since 3.0.0
+ */
+ bottom: {
+
+ get: fu nction ()
+ {
+ return this.y + this.height;
+ },
+
+ set: fu nction (value)
+ {
+ if (value <= this.y)
+ {
+ this.height = 0;
+ }
+ else
+ {
+ this.height = value - this.y;
+ }
+ }
+
+ },
+
+ /**
+ * The x coordinate of the center of the Rectangle.
+ *
+ * @name Phaser.Geom.Rectangle#centerX
+ * @type {number}
+ * @since 3.0.0
+ */
+ centerX: {
+
+ get: fu nction ()
+ {
+ return this.x + (this.width / 2);
+ },
+
+ set: fu nction (value)
+ {
+ this.x = value - (this.width / 2);
+ }
+
+ },
+
+ /**
+ * The y coordinate of the center of the Rectangle.
+ *
+ * @name Phaser.Geom.Rectangle#centerY
+ * @type {number}
+ * @since 3.0.0
+ */
+ centerY: {
+
+ get: fu nction ()
+ {
+ return this.y + (this.height / 2);
+ },
+
+ set: fu nction (value)
+ {
+ this.y = value - (this.height / 2);
+ }
+
+ }
+
+});
+
+module.exports = Rectangle;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/geom/rectangle/index.html b/coverage/lcov-report/geom/rectangle/index.html
new file mode 100644
index 0000000000..f32c85a9ec
--- /dev/null
+++ b/coverage/lcov-report/geom/rectangle/index.html
@@ -0,0 +1,191 @@
+
+
+
+
+
+ Code coverage report for geom/rectangle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 47.01%
+ Statements
+ 63/134
+
+
+
+
+ 39.65%
+ Branches
+ 23/58
+
+
+
+
+ 32.25%
+ Functions
+ 10/31
+
+
+
+
+ 46.66%
+ Lines
+ 56/120
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ Contains.js
+
+
+
+ 80%
+ 4/5
+ 87.5%
+ 7/8
+ 100%
+ 1/1
+ 80%
+ 4/5
+
+
+
+ GetPoint.js
+
+
+
+ 16.66%
+ 4/24
+ 0%
+ 0/12
+ 0%
+ 0/1
+ 17.39%
+ 4/23
+
+
+
+ GetPoints.js
+
+
+
+ 30.76%
+ 4/13
+ 0%
+ 0/6
+ 0%
+ 0/1
+ 36.36%
+ 4/11
+
+
+
+ Perimeter.js
+
+
+
+ 66.66%
+ 2/3
+ 100%
+ 0/0
+ 0%
+ 0/1
+ 66.66%
+ 2/3
+
+
+
+ Random.js
+
+
+
+ 100%
+ 8/8
+ 100%
+ 2/2
+ 100%
+ 1/1
+ 100%
+ 7/7
+
+
+
+ Rectangle.js
+
+
+
+ 50.61%
+ 41/81
+ 46.66%
+ 14/30
+ 30.76%
+ 8/26
+ 49.29%
+ 35/71
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html
new file mode 100644
index 0000000000..b6b7041760
--- /dev/null
+++ b/coverage/lcov-report/index.html
@@ -0,0 +1,281 @@
+
+
+
+
+
+ Code coverage report for All files
+
+
+
+
+
+
+
+
+
+
+
+
All files
+
+
+
+ 54.64%
+ Statements
+ 429/785
+
+
+
+
+ 40.66%
+ Branches
+ 122/300
+
+
+
+
+ 41.72%
+ Functions
+ 63/151
+
+
+
+
+ 55.28%
+ Lines
+ 408/738
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ core
+
+
+
+ 76.66%
+ 115/150
+ 55.55%
+ 20/36
+ 55.55%
+ 10/18
+ 76.02%
+ 111/146
+
+
+
+ dom
+
+
+
+ 38.7%
+ 12/31
+ 0%
+ 0/10
+ 16.66%
+ 1/6
+ 38.7%
+ 12/31
+
+
+
+ geom
+
+
+
+ 100%
+ 2/2
+ 100%
+ 0/0
+ 100%
+ 0/0
+ 100%
+ 2/2
+
+
+
+ geom/line
+
+
+
+ 19.04%
+ 20/105
+ 0%
+ 0/38
+ 0%
+ 0/20
+ 21.97%
+ 20/91
+
+
+
+ geom/point
+
+
+
+ 100%
+ 18/18
+ 100%
+ 8/8
+ 100%
+ 2/2
+ 100%
+ 14/14
+
+
+
+ geom/rectangle
+
+
+
+ 47.01%
+ 63/134
+ 39.65%
+ 23/58
+ 32.25%
+ 10/31
+ 46.66%
+ 56/120
+
+
+
+ math
+
+
+
+ 42.53%
+ 57/134
+ 52.5%
+ 21/40
+ 32.43%
+ 12/37
+ 42.3%
+ 55/130
+
+
+
+ math/angle
+
+
+
+ 100%
+ 21/21
+ 100%
+ 2/2
+ 100%
+ 5/5
+ 100%
+ 21/21
+
+
+
+ math/fuzzy
+
+
+
+ 40%
+ 2/5
+ 0%
+ 0/2
+ 0%
+ 0/1
+ 50%
+ 2/4
+
+
+
+ math/random-data-generator
+
+
+
+ 83.33%
+ 70/84
+ 54.16%
+ 13/24
+ 71.42%
+ 15/21
+ 82.5%
+ 66/80
+
+
+
+ utils
+
+
+
+ 59.42%
+ 41/69
+ 45.45%
+ 25/55
+ 77.77%
+ 7/9
+ 60.29%
+ 41/68
+
+
+
+ utils/object
+
+
+
+ 25%
+ 8/32
+ 37.03%
+ 10/27
+ 100%
+ 1/1
+ 25.8%
+ 8/31
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/Vector2.js.html b/coverage/lcov-report/math/Vector2.js.html
new file mode 100644
index 0000000000..8109d253af
--- /dev/null
+++ b/coverage/lcov-report/math/Vector2.js.html
@@ -0,0 +1,2446 @@
+
+
+
+
+
+ Code coverage report for math/Vector2.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 40.76%
+ Statements
+ 53/130
+
+
+
+
+ 52.5%
+ Branches
+ 21/40
+
+
+
+
+ 30.55%
+ Functions
+ 11/36
+
+
+
+
+ 40.47%
+ Lines
+ 51/126
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+
+
+
+
+
+
+
+
+2x
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+37x
+
+
+
+
+
+
+
+
+
+37x
+
+37x
+
+1x
+1x
+
+
+
+36x
+
+36x
+36x
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+2x
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+2x
+2x
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+1x
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+1x
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+1x
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+1x
+1x
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+2x
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+2x
+2x
+
+2x
+
+1x
+
+1x
+1x
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+2x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+// Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji
+// and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl
+
+var Class = require('../utils/Class');
+var FuzzyEqual = require('../math/fuzzy/Equal');
+
+/**
+ * @classdesc
+ * A representation of a vector in 2D space.
+ *
+ * A two-component vector.
+ *
+ * @class Vector2
+ * @memberof Phaser.Math
+ * @constructor
+ * @since 3.0.0
+ *
+ * @param {number|Phaser.Types.Math.Vector2Like} [x=0] - The x component, or an object with `x` and `y` properties.
+ * @param {number} [y=x] - The y component.
+ */
+var Vector2 = new Class({
+
+ initialize:
+
+ function Vector2 (x, y)
+ {
+ /**
+ * The x component of this Vector.
+ *
+ * @name Phaser.Math.Vector2#x
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.x = 0;
+
+ /**
+ * The y component of this Vector.
+ *
+ * @name Phaser.Math.Vector2#y
+ * @type {number}
+ * @default 0
+ * @since 3.0.0
+ */
+ this.y = 0;
+
+ if (typeof x === 'object')
+ {
+ this.x = x.x || 0;
+ this.y = x.y || 0;
+ }
+ else
+ {
+ if (y === undefined) { y = x; }
+
+ this.x = x || 0;
+ this.y = y || 0;
+ }
+ },
+
+ /**
+ * Make a clone of this Vector2.
+ *
+ * @method Phaser.Math.Vector2#clone
+ * @since 3.0.0
+ *
+ * @return {Phaser.Math.Vector2} A clone of this Vector2.
+ */
+ clone: function ()
+ {
+ return new Vector2(this.x, this.y);
+ },
+
+ /**
+ * Copy the components of a given Vector into this Vector.
+ *
+ * @method Phaser.Math.Vector2#copy
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector to copy the components from.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ copy: function (src)
+ {
+ this.x = src.x || 0;
+ this.y = src.y || 0;
+
+ return this;
+ },
+
+ /**
+ * Set the component values of this Vector from a given Vector2Like object.
+ *
+ * @method Phaser.Math.Vector2#setFromObject
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} obj - The object containing the component values to set for this Vector.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ setFromObject: fu nction (obj)
+ {
+ this.x = obj.x || 0;
+ this.y = obj.y || 0;
+
+ return this;
+ },
+
+ /**
+ * Set the `x` and `y` components of the this Vector to the given `x` and `y` values.
+ *
+ * @method Phaser.Math.Vector2#set
+ * @since 3.0.0
+ *
+ * @param {number} x - The x value to set for this Vector.
+ * @param {number} [y=x] - The y value to set for this Vector.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ set: function (x, y)
+ {
+ if (y === undefined) { y = x; }
+
+ this.x = x;
+ this.y = y;
+
+ return this;
+ },
+
+ /**
+ * This method is an alias for `Vector2.set`.
+ *
+ * @method Phaser.Math.Vector2#setTo
+ * @since 3.4.0
+ *
+ * @param {number} x - The x value to set for this Vector.
+ * @param {number} [y=x] - The y value to set for this Vector.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ setTo: fu nction (x, y)
+ {
+ return this.set(x, y);
+ },
+
+ /**
+ * Sets the `x` and `y` values of this object from a given polar coordinate.
+ *
+ * @method Phaser.Math.Vector2#setToPolar
+ * @since 3.0.0
+ *
+ * @param {number} azimuth - The angular coordinate, in radians.
+ * @param {number} [radius=1] - The radial coordinate (length).
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ setToPolar: fu nction (azimuth, radius)
+ {
+ if (radius == null) { radius = 1; }
+
+ this.x = Math.cos(azimuth) * radius;
+ this.y = Math.sin(azimuth) * radius;
+
+ return this;
+ },
+
+ /**
+ * Check whether this Vector is equal to a given Vector.
+ *
+ * Performs a strict equality check against each Vector's components.
+ *
+ * @method Phaser.Math.Vector2#equals
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} v - The vector to compare with this Vector.
+ *
+ * @return {boolean} Whether the given Vector is equal to this Vector.
+ */
+ equals: function (v)
+ {
+ return ((this.x === v.x) && (this.y === v.y));
+ },
+
+ /**
+ * Check whether this Vector is approximately equal to a given Vector.
+ *
+ * @method Phaser.Math.Vector2#fuzzyEquals
+ * @since 3.23.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} v - The vector to compare with this Vector.
+ * @param {number} [epsilon=0.0001] - The tolerance value.
+ *
+ * @return {boolean} Whether both absolute differences of the x and y components are smaller than `epsilon`.
+ */
+ fuzzyEquals: fu nction (v, epsilon)
+ {
+ return (FuzzyEqual(this.x, v.x, epsilon) && FuzzyEqual(this.y, v.y, epsilon));
+ },
+
+ /**
+ * Calculate the angle between this Vector and the positive x-axis, in radians.
+ *
+ * @method Phaser.Math.Vector2#angle
+ * @since 3.0.0
+ *
+ * @return {number} The angle between this Vector, and the positive x-axis, given in radians.
+ */
+ angle: fu nction ()
+ {
+ // computes the angle in radians with respect to the positive x-axis
+
+ var angle = Math.atan2(this.y, this.x);
+
+ if (angle < 0)
+ {
+ angle += 2 * Math.PI;
+ }
+
+ return angle;
+ },
+
+ /**
+ * Set the angle of this Vector.
+ *
+ * @method Phaser.Math.Vector2#setAngle
+ * @since 3.23.0
+ *
+ * @param {number} angle - The angle, in radians.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ setAngle: fu nction (angle)
+ {
+ return this.setToPolar(angle, this.length());
+ },
+
+ /**
+ * Add a given Vector to this Vector. Addition is component-wise.
+ *
+ * @method Phaser.Math.Vector2#add
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector to add to this Vector.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ add: function (src)
+ {
+ this.x += src.x;
+ this.y += src.y;
+
+ return this;
+ },
+
+ /**
+ * Subtract the given Vector from this Vector. Subtraction is component-wise.
+ *
+ * @method Phaser.Math.Vector2#subtract
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector to subtract from this Vector.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ subtract: function (src)
+ {
+ this.x -= src.x;
+ this.y -= src.y;
+
+ return this;
+ },
+
+ /**
+ * Perform a component-wise multiplication between this Vector and the given Vector.
+ *
+ * Multiplies this Vector by the given Vector.
+ *
+ * @method Phaser.Math.Vector2#multiply
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector to multiply this Vector by.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ multiply: function (src)
+ {
+ this.x *= src.x;
+ this.y *= src.y;
+
+ return this;
+ },
+
+ /**
+ * Scale this Vector by the given value.
+ *
+ * @method Phaser.Math.Vector2#scale
+ * @since 3.0.0
+ *
+ * @param {number} value - The value to scale this Vector by.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ scale: function (value)
+ {
+ if (isFinite(value))
+ {
+ this.x *= value;
+ this.y *= value;
+ }
+ else
+ E {
+ this.x = 0;
+ this.y = 0;
+ }
+
+ return this;
+ },
+
+ /**
+ * Perform a component-wise division between this Vector and the given Vector.
+ *
+ * Divides this Vector by the given Vector.
+ *
+ * @method Phaser.Math.Vector2#divide
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector to divide this Vector by.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ divide: fu nction (src)
+ {
+ this.x /= src.x;
+ this.y /= src.y;
+
+ return this;
+ },
+
+ /**
+ * Negate the `x` and `y` components of this Vector.
+ *
+ * @method Phaser.Math.Vector2#negate
+ * @since 3.0.0
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ negate: fu nction ()
+ {
+ this.x = -this.x;
+ this.y = -this.y;
+
+ return this;
+ },
+
+ /**
+ * Calculate the distance between this Vector and the given Vector.
+ *
+ * @method Phaser.Math.Vector2#distance
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector to calculate the distance to.
+ *
+ * @return {number} The distance from this Vector to the given Vector.
+ */
+ distance: fu nction (src)
+ {
+ var dx = src.x - this.x;
+ var dy = src.y - this.y;
+
+ return Math.sqrt(dx * dx + dy * dy);
+ },
+
+ /**
+ * Calculate the distance between this Vector and the given Vector, squared.
+ *
+ * @method Phaser.Math.Vector2#distanceSq
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector to calculate the distance to.
+ *
+ * @return {number} The distance from this Vector to the given Vector, squared.
+ */
+ distanceSq: fu nction (src)
+ {
+ var dx = src.x - this.x;
+ var dy = src.y - this.y;
+
+ return dx * dx + dy * dy;
+ },
+
+ /**
+ * Calculate the length (or magnitude) of this Vector.
+ *
+ * @method Phaser.Math.Vector2#length
+ * @since 3.0.0
+ *
+ * @return {number} The length of this Vector.
+ */
+ length: function ()
+ {
+ var x = this.x;
+ var y = this.y;
+
+ return Math.sqrt(x * x + y * y);
+ },
+
+ /**
+ * Set the length (or magnitude) of this Vector.
+ *
+ * @method Phaser.Math.Vector2#setLength
+ * @since 3.23.0
+ *
+ * @param {number} length
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ setLength: fu nction (length)
+ {
+ return this.normalize().scale(length);
+ },
+
+ /**
+ * Calculate the length of this Vector squared.
+ *
+ * @method Phaser.Math.Vector2#lengthSq
+ * @since 3.0.0
+ *
+ * @return {number} The length of this Vector, squared.
+ */
+ lengthSq: fu nction ()
+ {
+ var x = this.x;
+ var y = this.y;
+
+ return x * x + y * y;
+ },
+
+ /**
+ * Normalize this Vector.
+ *
+ * Makes the vector a unit length vector (magnitude of 1) in the same direction.
+ *
+ * @method Phaser.Math.Vector2#normalize
+ * @since 3.0.0
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ normalize: function ()
+ {
+ var x = this.x;
+ var y = this.y;
+ var len = x * x + y * y;
+
+ if (len > 0)
+ {
+ len = 1 / Math.sqrt(len);
+
+ this.x = x * len;
+ this.y = y * len;
+ }
+
+ return this;
+ },
+
+ /**
+ * Rotate this Vector to its perpendicular, in the positive direction.
+ *
+ * @method Phaser.Math.Vector2#normalizeRightHand
+ * @since 3.0.0
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ normalizeRightHand: fu nction ()
+ {
+ var x = this.x;
+
+ this.x = this.y * -1;
+ this.y = x;
+
+ return this;
+ },
+
+ /**
+ * Rotate this Vector to its perpendicular, in the negative direction.
+ *
+ * @method Phaser.Math.Vector2#normalizeLeftHand
+ * @since 3.23.0
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ normalizeLeftHand: fu nction ()
+ {
+ var x = this.x;
+
+ this.x = this.y;
+ this.y = x * -1;
+
+ return this;
+ },
+
+ /**
+ * Calculate the dot product of this Vector and the given Vector.
+ *
+ * @method Phaser.Math.Vector2#dot
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector2 to dot product with this Vector2.
+ *
+ * @return {number} The dot product of this Vector and the given Vector.
+ */
+ dot: fu nction (src)
+ {
+ return this.x * src.x + this.y * src.y;
+ },
+
+ /**
+ * Calculate the cross product of this Vector and the given Vector.
+ *
+ * @method Phaser.Math.Vector2#cross
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector2 to cross with this Vector2.
+ *
+ * @return {number} The cross product of this Vector and the given Vector.
+ */
+ cross: fu nction (src)
+ {
+ return this.x * src.y - this.y * src.x;
+ },
+
+ /**
+ * Linearly interpolate between this Vector and the given Vector.
+ *
+ * Interpolates this Vector towards the given Vector.
+ *
+ * @method Phaser.Math.Vector2#lerp
+ * @since 3.0.0
+ *
+ * @param {Phaser.Types.Math.Vector2Like} src - The Vector2 to interpolate towards.
+ * @param {number} [t=0] - The interpolation percentage, between 0 and 1.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ lerp: fu nction (src, t)
+ {
+ if (t === undefined) { t = 0; }
+
+ var ax = this.x;
+ var ay = this.y;
+
+ this.x = ax + t * (src.x - ax);
+ this.y = ay + t * (src.y - ay);
+
+ return this;
+ },
+
+ /**
+ * Transform this Vector with the given Matrix.
+ *
+ * @method Phaser.Math.Vector2#transformMat3
+ * @since 3.0.0
+ *
+ * @param {Phaser.Math.Matrix3} mat - The Matrix3 to transform this Vector2 with.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ transformMat3: fu nction (mat)
+ {
+ var x = this.x;
+ var y = this.y;
+ var m = mat.val;
+
+ this.x = m[0] * x + m[3] * y + m[6];
+ this.y = m[1] * x + m[4] * y + m[7];
+
+ return this;
+ },
+
+ /**
+ * Transform this Vector with the given Matrix.
+ *
+ * @method Phaser.Math.Vector2#transformMat4
+ * @since 3.0.0
+ *
+ * @param {Phaser.Math.Matrix4} mat - The Matrix4 to transform this Vector2 with.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ transformMat4: fu nction (mat)
+ {
+ var x = this.x;
+ var y = this.y;
+ var m = mat.val;
+
+ this.x = m[0] * x + m[4] * y + m[12];
+ this.y = m[1] * x + m[5] * y + m[13];
+
+ return this;
+ },
+
+ /**
+ * Make this Vector the zero vector (0, 0).
+ *
+ * @method Phaser.Math.Vector2#reset
+ * @since 3.0.0
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ reset: fu nction ()
+ {
+ this.x = 0;
+ this.y = 0;
+
+ return this;
+ },
+
+ /**
+ * Limit the length (or magnitude) of this Vector.
+ *
+ * @method Phaser.Math.Vector2#limit
+ * @since 3.23.0
+ *
+ * @param {number} max - The maximum length.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ limit: fu nction (max)
+ {
+ var len = this.length();
+
+ if (len && len > max)
+ {
+ this.scale(max / len);
+ }
+
+ return this;
+ },
+
+ /**
+ * Reflect this Vector off a line defined by a normal.
+ *
+ * @method Phaser.Math.Vector2#reflect
+ * @since 3.23.0
+ *
+ * @param {Phaser.Math.Vector2} normal - A vector perpendicular to the line.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ reflect: fu nction (normal)
+ {
+ normal = normal.clone().normalize();
+
+ return this.subtract(normal.scale(2 * this.dot(normal)));
+ },
+
+ /**
+ * Reflect this Vector across another.
+ *
+ * @method Phaser.Math.Vector2#mirror
+ * @since 3.23.0
+ *
+ * @param {Phaser.Math.Vector2} axis - A vector to reflect across.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ mirror: fu nction (axis)
+ {
+ return this.reflect(axis).negate();
+ },
+
+ /**
+ * Rotate this Vector by an angle amount.
+ *
+ * @method Phaser.Math.Vector2#rotate
+ * @since 3.23.0
+ *
+ * @param {number} delta - The angle to rotate by, in radians.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ rotate: fu nction (delta)
+ {
+ var cos = Math.cos(delta);
+ var sin = Math.sin(delta);
+
+ return this.set(cos * this.x - sin * this.y, sin * this.x + cos * this.y);
+ },
+
+ /**
+ * Project this Vector onto another.
+ *
+ * @method Phaser.Math.Vector2#project
+ * @since 3.60.0
+ *
+ * @param {Phaser.Math.Vector2} src - The vector to project onto.
+ *
+ * @return {Phaser.Math.Vector2} This Vector2.
+ */
+ project: fu nction (src)
+ {
+ var scalar = this.dot(src) / src.dot(src);
+
+ return this.copy(src).scale(scalar);
+ }
+
+});
+
+/**
+ * A static zero Vector2 for use by reference.
+ *
+ * This constant is meant for comparison operations and should not be modified directly.
+ *
+ * @constant
+ * @name Phaser.Math.Vector2.ZERO
+ * @type {Phaser.Math.Vector2}
+ * @since 3.1.0
+ */
+Vector2.ZERO = new Vector2();
+
+/**
+ * A static right Vector2 for use by reference.
+ *
+ * This constant is meant for comparison operations and should not be modified directly.
+ *
+ * @constant
+ * @name Phaser.Math.Vector2.RIGHT
+ * @type {Phaser.Math.Vector2}
+ * @since 3.16.0
+ */
+Vector2.RIGHT = new Vector2(1, 0);
+
+/**
+ * A static left Vector2 for use by reference.
+ *
+ * This constant is meant for comparison operations and should not be modified directly.
+ *
+ * @constant
+ * @name Phaser.Math.Vector2.LEFT
+ * @type {Phaser.Math.Vector2}
+ * @since 3.16.0
+ */
+Vector2.LEFT = new Vector2(-1, 0);
+
+/**
+ * A static up Vector2 for use by reference.
+ *
+ * This constant is meant for comparison operations and should not be modified directly.
+ *
+ * @constant
+ * @name Phaser.Math.Vector2.UP
+ * @type {Phaser.Math.Vector2}
+ * @since 3.16.0
+ */
+Vector2.UP = new Vector2(0, -1);
+
+/**
+ * A static down Vector2 for use by reference.
+ *
+ * This constant is meant for comparison operations and should not be modified directly.
+ *
+ * @constant
+ * @name Phaser.Math.Vector2.DOWN
+ * @type {Phaser.Math.Vector2}
+ * @since 3.16.0
+ */
+Vector2.DOWN = new Vector2(0, 1);
+
+/**
+ * A static one Vector2 for use by reference.
+ *
+ * This constant is meant for comparison operations and should not be modified directly.
+ *
+ * @constant
+ * @name Phaser.Math.Vector2.ONE
+ * @type {Phaser.Math.Vector2}
+ * @since 3.16.0
+ */
+Vector2.ONE = new Vector2(1, 1);
+
+module.exports = Vector2;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/Wrap.js.html b/coverage/lcov-report/math/Wrap.js.html
new file mode 100644
index 0000000000..f3d938efec
--- /dev/null
+++ b/coverage/lcov-report/math/Wrap.js.html
@@ -0,0 +1,163 @@
+
+
+
+
+
+ Code coverage report for math/Wrap.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 4/4
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 100%
+ Functions
+ 1/1
+
+
+
+
+ 100%
+ Lines
+ 4/4
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+22x
+
+22x
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+/**
+ * Wrap the given `value` between `min` and `max`.
+ *
+ * @function Phaser.Math.Wrap
+ * @since 3.0.0
+ *
+ * @param {number} value - The value to wrap.
+ * @param {number} min - The minimum value.
+ * @param {number} max - The maximum value.
+ *
+ * @return {number} The wrapped value.
+ */
+var Wrap = function (value, min, max)
+{
+ var range = max - min;
+
+ return (min + ((((value - min) % range) + range) % range));
+};
+
+module.exports = Wrap;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/angle/Between.js.html b/coverage/lcov-report/math/angle/Between.js.html
new file mode 100644
index 0000000000..16a3885da4
--- /dev/null
+++ b/coverage/lcov-report/math/angle/Between.js.html
@@ -0,0 +1,160 @@
+
+
+
+
+
+ Code coverage report for math/angle/Between.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 3/3
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 100%
+ Functions
+ 1/1
+
+
+
+
+ 100%
+ Lines
+ 3/3
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+5x
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+/**
+ * Find the angle of a segment from (x1, y1) -> (x2, y2).
+ *
+ * @function Phaser.Math.Angle.Between
+ * @since 3.0.0
+ *
+ * @param {number} x1 - The x coordinate of the first point.
+ * @param {number} y1 - The y coordinate of the first point.
+ * @param {number} x2 - The x coordinate of the second point.
+ * @param {number} y2 - The y coordinate of the second point.
+ *
+ * @return {number} The angle in radians.
+ */
+var Between = function (x1, y1, x2, y2)
+{
+ return Math.atan2(y2 - y1, x2 - x1);
+};
+
+module.exports = Between;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/angle/Normalize.js.html b/coverage/lcov-report/math/angle/Normalize.js.html
new file mode 100644
index 0000000000..6ebeb5e144
--- /dev/null
+++ b/coverage/lcov-report/math/angle/Normalize.js.html
@@ -0,0 +1,178 @@
+
+
+
+
+
+ Code coverage report for math/angle/Normalize.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 6/6
+
+
+
+
+ 100%
+ Branches
+ 2/2
+
+
+
+
+ 100%
+ Functions
+ 1/1
+
+
+
+
+ 100%
+ Lines
+ 6/6
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+13x
+
+13x
+
+11x
+
+
+
+2x
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+/**
+ * Normalize an angle to the [0, 2pi] range.
+ *
+ * @function Phaser.Math.Angle.Normalize
+ * @since 3.0.0
+ *
+ * @param {number} angle - The angle to normalize, in radians.
+ *
+ * @return {number} The normalized angle, in radians.
+ */
+var Normalize = function (angle)
+{
+ angle = angle % (2 * Math.PI);
+
+ if (angle >= 0)
+ {
+ return angle;
+ }
+ else
+ {
+ return angle + 2 * Math.PI;
+ }
+};
+
+module.exports = Normalize;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/angle/Reverse.js.html b/coverage/lcov-report/math/angle/Reverse.js.html
new file mode 100644
index 0000000000..17d82591e6
--- /dev/null
+++ b/coverage/lcov-report/math/angle/Reverse.js.html
@@ -0,0 +1,157 @@
+
+
+
+
+
+ Code coverage report for math/angle/Reverse.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 4/4
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 100%
+ Functions
+ 1/1
+
+
+
+
+ 100%
+ Lines
+ 4/4
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+4x
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Normalize = require('./Normalize');
+
+/**
+ * Reverse the given angle.
+ *
+ * @function Phaser.Math.Angle.Reverse
+ * @since 3.0.0
+ *
+ * @param {number} angle - The angle to reverse, in radians.
+ *
+ * @return {number} The reversed angle, in radians.
+ */
+var Reverse = function (angle)
+{
+ return Normalize(angle + Math.PI);
+};
+
+module.exports = Reverse;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/angle/Wrap.js.html b/coverage/lcov-report/math/angle/Wrap.js.html
new file mode 100644
index 0000000000..b7096f5ea3
--- /dev/null
+++ b/coverage/lcov-report/math/angle/Wrap.js.html
@@ -0,0 +1,163 @@
+
+
+
+
+
+ Code coverage report for math/angle/Wrap.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 4/4
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 100%
+ Functions
+ 1/1
+
+
+
+
+ 100%
+ Lines
+ 4/4
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+10x
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var MathWrap = require('../Wrap');
+
+/**
+ * Wrap an angle.
+ *
+ * Wraps the angle to a value in the range of -PI to PI.
+ *
+ * @function Phaser.Math.Angle.Wrap
+ * @since 3.0.0
+ *
+ * @param {number} angle - The angle to wrap, in radians.
+ *
+ * @return {number} The wrapped angle, in radians.
+ */
+var Wrap = function (angle)
+{
+ return MathWrap(angle, -Math.PI, Math.PI);
+};
+
+module.exports = Wrap;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/angle/WrapDegrees.js.html b/coverage/lcov-report/math/angle/WrapDegrees.js.html
new file mode 100644
index 0000000000..4e7fe2829d
--- /dev/null
+++ b/coverage/lcov-report/math/angle/WrapDegrees.js.html
@@ -0,0 +1,163 @@
+
+
+
+
+
+ Code coverage report for math/angle/WrapDegrees.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 4/4
+
+
+
+
+ 100%
+ Branches
+ 0/0
+
+
+
+
+ 100%
+ Functions
+ 1/1
+
+
+
+
+ 100%
+ Lines
+ 4/4
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+12x
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Wrap = require('../Wrap');
+
+/**
+ * Wrap an angle in degrees.
+ *
+ * Wraps the angle to a value in the range of -180 to 180.
+ *
+ * @function Phaser.Math.Angle.WrapDegrees
+ * @since 3.0.0
+ *
+ * @param {number} angle - The angle to wrap, in degrees.
+ *
+ * @return {number} The wrapped angle, in degrees.
+ */
+var WrapDegrees = function (angle)
+{
+ return Wrap(angle, -180, 180);
+};
+
+module.exports = WrapDegrees;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/angle/index.html b/coverage/lcov-report/math/angle/index.html
new file mode 100644
index 0000000000..66895aaaf7
--- /dev/null
+++ b/coverage/lcov-report/math/angle/index.html
@@ -0,0 +1,176 @@
+
+
+
+
+
+ Code coverage report for math/angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100%
+ Statements
+ 21/21
+
+
+
+
+ 100%
+ Branches
+ 2/2
+
+
+
+
+ 100%
+ Functions
+ 5/5
+
+
+
+
+ 100%
+ Lines
+ 21/21
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ Between.js
+
+
+
+ 100%
+ 3/3
+ 100%
+ 0/0
+ 100%
+ 1/1
+ 100%
+ 3/3
+
+
+
+ Normalize.js
+
+
+
+ 100%
+ 6/6
+ 100%
+ 2/2
+ 100%
+ 1/1
+ 100%
+ 6/6
+
+
+
+ Reverse.js
+
+
+
+ 100%
+ 4/4
+ 100%
+ 0/0
+ 100%
+ 1/1
+ 100%
+ 4/4
+
+
+
+ Wrap.js
+
+
+
+ 100%
+ 4/4
+ 100%
+ 0/0
+ 100%
+ 1/1
+ 100%
+ 4/4
+
+
+
+ WrapDegrees.js
+
+
+
+ 100%
+ 4/4
+ 100%
+ 0/0
+ 100%
+ 1/1
+ 100%
+ 4/4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/fuzzy/Equal.js.html b/coverage/lcov-report/math/fuzzy/Equal.js.html
new file mode 100644
index 0000000000..a907ef82af
--- /dev/null
+++ b/coverage/lcov-report/math/fuzzy/Equal.js.html
@@ -0,0 +1,169 @@
+
+
+
+
+
+ Code coverage report for math/fuzzy/Equal.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 40%
+ Statements
+ 2/5
+
+
+
+
+ 0%
+ Branches
+ 0/2
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 50%
+ Lines
+ 2/4
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2x
+
+
+
+
+
+
+2x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+/**
+ * Check whether the given values are fuzzily equal.
+ *
+ * Two numbers are fuzzily equal if their difference is less than `epsilon`.
+ *
+ * @function Phaser.Math.Fuzzy.Equal
+ * @since 3.0.0
+ *
+ * @param {number} a - The first value.
+ * @param {number} b - The second value.
+ * @param {number} [epsilon=0.0001] - The epsilon.
+ *
+ * @return {boolean} `true` if the values are fuzzily equal, otherwise `false`.
+ */
+var Equal = fu nction (a, b, epsilon)
+{
+ if (epsilon === undefined) { epsilon = 0.0001; }
+
+ return Math.abs(a - b) < epsilon;
+};
+
+module.exports = Equal;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/fuzzy/index.html b/coverage/lcov-report/math/fuzzy/index.html
new file mode 100644
index 0000000000..2fab4c0111
--- /dev/null
+++ b/coverage/lcov-report/math/fuzzy/index.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+ Code coverage report for math/fuzzy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 40%
+ Statements
+ 2/5
+
+
+
+
+ 0%
+ Branches
+ 0/2
+
+
+
+
+ 0%
+ Functions
+ 0/1
+
+
+
+
+ 50%
+ Lines
+ 2/4
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ Equal.js
+
+
+
+ 40%
+ 2/5
+ 0%
+ 0/2
+ 0%
+ 0/1
+ 50%
+ 2/4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/index.html b/coverage/lcov-report/math/index.html
new file mode 100644
index 0000000000..f8fa29c15f
--- /dev/null
+++ b/coverage/lcov-report/math/index.html
@@ -0,0 +1,131 @@
+
+
+
+
+
+ Code coverage report for math
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 42.53%
+ Statements
+ 57/134
+
+
+
+
+ 52.5%
+ Branches
+ 21/40
+
+
+
+
+ 32.43%
+ Functions
+ 12/37
+
+
+
+
+ 42.3%
+ Lines
+ 55/130
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ Vector2.js
+
+
+
+ 40.76%
+ 53/130
+ 52.5%
+ 21/40
+ 30.55%
+ 11/36
+ 40.47%
+ 51/126
+
+
+
+ Wrap.js
+
+
+
+ 100%
+ 4/4
+ 100%
+ 0/0
+ 100%
+ 1/1
+ 100%
+ 4/4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/random-data-generator/RandomDataGenerator.js.html b/coverage/lcov-report/math/random-data-generator/RandomDataGenerator.js.html
new file mode 100644
index 0000000000..cd3f6adecf
--- /dev/null
+++ b/coverage/lcov-report/math/random-data-generator/RandomDataGenerator.js.html
@@ -0,0 +1,1597 @@
+
+
+
+
+
+ Code coverage report for math/random-data-generator/RandomDataGenerator.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 83.33%
+ Statements
+ 70/84
+
+
+
+
+ 54.16%
+ Branches
+ 13/24
+
+
+
+
+ 71.42%
+ Functions
+ 15/21
+
+
+
+
+ 82.5%
+ Lines
+ 66/80
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+
+
+
+
+12x
+
+
+
+
+
+
+
+
+
+
+12x
+
+
+
+
+
+
+
+
+
+
+12x
+
+
+
+
+
+
+
+
+
+
+12x
+
+
+
+
+
+
+
+
+
+
+12x
+
+
+
+
+
+
+
+
+
+
+12x
+
+
+
+
+
+
+
+
+12x
+
+12x
+
+12x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+230x
+
+230x
+230x
+230x
+230x
+
+230x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+72x
+
+72x
+
+72x
+
+282x
+282x
+282x
+282x
+282x
+282x
+282x
+282x
+
+
+72x
+
+72x
+
+
+
+
+
+
+
+
+
+
+
+
+12x
+
+
+
+
+
+12x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12x
+12x
+12x
+12x
+12x
+
+12x
+
+
+
+
+
+12x
+
+12x
+
+12x
+12x
+12x
+12x
+12x
+12x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10x
+
+
+
+
+
+
+
+
+
+
+
+
+
+110x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+30x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+50x
+
+
+
+
+
+
+
+
+
+
+
+
+10x
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+1x
+
+1x
+
+
+
+
+1x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+20x
+
+
+
+
+
+
+
+
+
+
+
+
+10x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1x
+
+1x
+
+9x
+9x
+
+9x
+9x
+
+
+1x
+
+
+
+
+1x
+ /**
+ * @author Richard Davey <rich@phaser.io>
+ * @copyright 2013-2025 Phaser Studio Inc.
+ * @license {@link https://opensource.org/licenses/MIT|MIT License}
+ */
+
+var Class = require('../../utils/Class');
+
+/**
+ * @classdesc
+ * A seeded Random Data Generator.
+ *
+ * Access via `Phaser.Math.RND` which is an instance of this class pre-defined
+ * by Phaser. Or, create your own instance to use as you require.
+ *
+ * The `Math.RND` generator is seeded by the Game Config property value `seed`.
+ * If no such config property exists, a random number is used.
+ *
+ * If you create your own instance of this class you should provide a seed for it.
+ * If no seed is given it will use a 'random' one based on Date.now.
+ *
+ * @class RandomDataGenerator
+ * @memberof Phaser.Math
+ * @constructor
+ * @since 3.0.0
+ *
+ * @param {(string|string[])} [seeds] - The seeds to use for the random number generator.
+ */
+var RandomDataGenerator = new Class({
+
+ initialize:
+
+ function RandomDataGenerator (seeds)
+ {
+ if (seeds === undefined) { seeds = [ (Date.now() * Math.random()).toString() ]; }
+
+ /**
+ * Internal var.
+ *
+ * @name Phaser.Math.RandomDataGenerator#c
+ * @type {number}
+ * @default 1
+ * @private
+ * @since 3.0.0
+ */
+ this.c = 1;
+
+ /**
+ * Internal var.
+ *
+ * @name Phaser.Math.RandomDataGenerator#s0
+ * @type {number}
+ * @default 0
+ * @private
+ * @since 3.0.0
+ */
+ this.s0 = 0;
+
+ /**
+ * Internal var.
+ *
+ * @name Phaser.Math.RandomDataGenerator#s1
+ * @type {number}
+ * @default 0
+ * @private
+ * @since 3.0.0
+ */
+ this.s1 = 0;
+
+ /**
+ * Internal var.
+ *
+ * @name Phaser.Math.RandomDataGenerator#s2
+ * @type {number}
+ * @default 0
+ * @private
+ * @since 3.0.0
+ */
+ this.s2 = 0;
+
+ /**
+ * Internal var.
+ *
+ * @name Phaser.Math.RandomDataGenerator#n
+ * @type {number}
+ * @default 0
+ * @private
+ * @since 3.2.0
+ */
+ this.n = 0;
+
+ /**
+ * Signs to choose from.
+ *
+ * @name Phaser.Math.RandomDataGenerator#signs
+ * @type {number[]}
+ * @since 3.0.0
+ */
+ this.signs = [ -1, 1 ];
+
+ E if (seeds)
+ {
+ this.init(seeds);
+ }
+ },
+
+ /**
+ * Private random helper.
+ *
+ * @method Phaser.Math.RandomDataGenerator#rnd
+ * @since 3.0.0
+ * @private
+ *
+ * @return {number} A random number.
+ */
+ rnd: function ()
+ {
+ var t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; // 2^-32
+
+ this.c = t | 0;
+ this.s0 = this.s1;
+ this.s1 = this.s2;
+ this.s2 = t - this.c;
+
+ return this.s2;
+ },
+
+ /**
+ * Internal method that creates a seed hash.
+ *
+ * @method Phaser.Math.RandomDataGenerator#hash
+ * @since 3.0.0
+ * @private
+ *
+ * @param {string} data - The value to hash.
+ *
+ * @return {number} The hashed value.
+ */
+ hash: function (data)
+ {
+ var h;
+ var n = this.n;
+
+ data = data.toString();
+
+ for (var i = 0; i < data.length; i++)
+ {
+ n += data.charCodeAt(i);
+ h = 0.02519603282416938 * n;
+ n = h >>> 0;
+ h -= n;
+ h *= n;
+ n = h >>> 0;
+ h -= n;
+ n += h * 0x100000000;// 2^32
+ }
+
+ this.n = n;
+
+ return (n >>> 0) * 2.3283064365386963e-10;// 2^-32
+ },
+
+ /**
+ * Initialize the state of the random data generator.
+ *
+ * @method Phaser.Math.RandomDataGenerator#init
+ * @since 3.0.0
+ *
+ * @param {(string|string[])} seeds - The seeds to initialize the random data generator with.
+ */
+ init: function (seeds)
+ {
+ I if (typeof seeds === 'string')
+ {
+ this.state(seeds);
+ }
+ else
+ {
+ this.sow(seeds);
+ }
+ },
+
+ /**
+ * Reset the seed of the random data generator.
+ *
+ * _Note_: the seed array is only processed up to the first `undefined` (or `null`) value, should such be present.
+ *
+ * @method Phaser.Math.RandomDataGenerator#sow
+ * @since 3.0.0
+ *
+ * @param {string[]} seeds - The array of seeds: the `toString()` of each value is used.
+ */
+ sow: function (seeds)
+ {
+ // Always reset to default seed
+ this.n = 0xefc8249d;
+ this.s0 = this.hash(' ');
+ this.s1 = this.hash(' ');
+ this.s2 = this.hash(' ');
+ this.c = 1;
+
+ I if (!seeds)
+ {
+ return;
+ }
+
+ // Apply any seeds
+ for (var i = 0; i < seeds.length && (seeds[i] != null); i++)
+ {
+ var seed = seeds[i];
+
+ this.s0 -= this.hash(seed);
+ this.s0 += ~~(this.s0 < 0);
+ this.s1 -= this.hash(seed);
+ this.s1 += ~~(this.s1 < 0);
+ this.s2 -= this.hash(seed);
+ this.s2 += ~~(this.s2 < 0);
+ }
+ },
+
+ /**
+ * Returns a random integer between 0 and 2^32.
+ *
+ * @method Phaser.Math.RandomDataGenerator#integer
+ * @since 3.0.0
+ *
+ * @return {number} A random integer between 0 and 2^32.
+ */
+ integer: function ()
+ {
+ // 2^32
+ return this.rnd() * 0x100000000;
+ },
+
+ /**
+ * Returns a random real number between 0 and 1.
+ *
+ * @method Phaser.Math.RandomDataGenerator#frac
+ * @since 3.0.0
+ *
+ * @return {number} A random real number between 0 and 1.
+ */
+ frac: function ()
+ {
+ // 2^-53
+ return this.rnd() + (this.rnd() * 0x200000 | 0) * 1.1102230246251565e-16;
+ },
+
+ /**
+ * Returns a random real number between 0 and 2^32.
+ *
+ * @method Phaser.Math.RandomDataGenerator#real
+ * @since 3.0.0
+ *
+ * @return {number} A random real number between 0 and 2^32.
+ */
+ real: fu nction ()
+ {
+ return this.integer() + this.frac();
+ },
+
+ /**
+ * Returns a random integer between and including min and max.
+ *
+ * @method Phaser.Math.RandomDataGenerator#integerInRange
+ * @since 3.0.0
+ *
+ * @param {number} min - The minimum value in the range.
+ * @param {number} max - The maximum value in the range.
+ *
+ * @return {number} A random number between min and max.
+ */
+ integerInRange: function (min, max)
+ {
+ return Math.floor(this.realInRange(0, max - min + 1) + min);
+ },
+
+ /**
+ * Returns a random integer between and including min and max.
+ * This method is an alias for RandomDataGenerator.integerInRange.
+ *
+ * @method Phaser.Math.RandomDataGenerator#between
+ * @since 3.0.0
+ *
+ * @param {number} min - The minimum value in the range.
+ * @param {number} max - The maximum value in the range.
+ *
+ * @return {number} A random number between min and max.
+ */
+ between: function (min, max)
+ {
+ return Math.floor(this.realInRange(0, max - min + 1) + min);
+ },
+
+ /**
+ * Returns a random real number between min and max.
+ *
+ * @method Phaser.Math.RandomDataGenerator#realInRange
+ * @since 3.0.0
+ *
+ * @param {number} min - The minimum value in the range.
+ * @param {number} max - The maximum value in the range.
+ *
+ * @return {number} A random number between min and max.
+ */
+ realInRange: function (min, max)
+ {
+ return this.frac() * (max - min) + min;
+ },
+
+ /**
+ * Returns a random real number between -1 and 1.
+ *
+ * @method Phaser.Math.RandomDataGenerator#normal
+ * @since 3.0.0
+ *
+ * @return {number} A random real number between -1 and 1.
+ */
+ normal: function ()
+ {
+ return 1 - (2 * this.frac());
+ },
+
+ /**
+ * Returns a valid RFC4122 version4 ID hex string from https://gist.github.com/1308368
+ *
+ * @method Phaser.Math.RandomDataGenerator#uuid
+ * @since 3.0.0
+ *
+ * @return {string} A valid RFC4122 version4 ID hex string
+ */
+ uuid: function ()
+ {
+ var a = '';
+ var b = '';
+
+ for (b = a = ''; a++ < 36; b += ~a % 5 | a * 3 & 4 ? (a ^ 15 ? 8 ^ this.frac() * (a ^ 20 ? 16 : 4) : 4).toString(16) : '-')
+ {
+ // eslint-disable-next-line no-empty
+ }
+
+ return b;
+ },
+
+ /**
+ * Returns a random element from within the given array.
+ *
+ * @method Phaser.Math.RandomDataGenerator#pick
+ * @since 3.0.0
+ *
+ * @generic T
+ * @genericUse {T[]} - [array]
+ * @genericUse {T} - [$return]
+ *
+ * @param {T[]} array - The array to pick a random element from.
+ *
+ * @return {T} A random member of the array.
+ */
+ pick: function (array)
+ {
+ return array[this.integerInRange(0, array.length - 1)];
+ },
+
+ /**
+ * Returns a sign to be used with multiplication operator.
+ *
+ * @method Phaser.Math.RandomDataGenerator#sign
+ * @since 3.0.0
+ *
+ * @return {number} -1 or +1.
+ */
+ sign: function ()
+ {
+ return this.pick(this.signs);
+ },
+
+ /**
+ * Returns a random element from within the given array, favoring the earlier entries.
+ *
+ * @method Phaser.Math.RandomDataGenerator#weightedPick
+ * @since 3.0.0
+ *
+ * @generic T
+ * @genericUse {T[]} - [array]
+ * @genericUse {T} - [$return]
+ *
+ * @param {T[]} array - The array to pick a random element from.
+ *
+ * @return {T} A random member of the array.
+ */
+ weightedPick: fu nction (array)
+ {
+ return array[~~(Math.pow(this.frac(), 2) * (array.length - 0.5) + 0.5)];
+ },
+
+ /**
+ * Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren't specified.
+ *
+ * @method Phaser.Math.RandomDataGenerator#timestamp
+ * @since 3.0.0
+ *
+ * @param {number} min - The minimum value in the range.
+ * @param {number} max - The maximum value in the range.
+ *
+ * @return {number} A random timestamp between min and max.
+ */
+ timestamp: fu nction (min, max)
+ {
+ return this.realInRange(min || 946684800000, max || 1577862000000);
+ },
+
+ /**
+ * Returns a random angle between -180 and 180.
+ *
+ * @method Phaser.Math.RandomDataGenerator#angle
+ * @since 3.0.0
+ *
+ * @return {number} A random number between -180 and 180.
+ */
+ angle: fu nction ()
+ {
+ return this.integerInRange(-180, 180);
+ },
+
+ /**
+ * Returns a random rotation in radians, between -3.141 and 3.141
+ *
+ * @method Phaser.Math.RandomDataGenerator#rotation
+ * @since 3.0.0
+ *
+ * @return {number} A random number between -3.141 and 3.141
+ */
+ rotation: fu nction ()
+ {
+ return this.realInRange(-3.1415926, 3.1415926);
+ },
+
+ /**
+ * Gets or Sets the state of the generator. This allows you to retain the values
+ * that the generator is using between games, i.e. in a game save file.
+ *
+ * To seed this generator with a previously saved state you can pass it as the
+ * `seed` value in your game config, or call this method directly after Phaser has booted.
+ *
+ * Call this method with no parameters to return the current state.
+ *
+ * If providing a state it should match the same format that this method
+ * returns, which is a string with a header `!rnd` followed by the `c`,
+ * `s0`, `s1` and `s2` values respectively, each comma-delimited.
+ *
+ * @method Phaser.Math.RandomDataGenerator#state
+ * @since 3.0.0
+ *
+ * @param {string} [state] - Generator state to be set.
+ *
+ * @return {string} The current state of the generator.
+ */
+ state: fu nction (state)
+ {
+ if (typeof state === 'string' && state.match(/^!rnd/))
+ {
+ state = state.split(',');
+
+ this.c = parseFloat(state[1]);
+ this.s0 = parseFloat(state[2]);
+ this.s1 = parseFloat(state[3]);
+ this.s2 = parseFloat(state[4]);
+ }
+
+ return [ '!rnd', this.c, this.s0, this.s1, this.s2 ].join(',');
+ },
+
+ /**
+ * Shuffles the given array, using the current seed.
+ *
+ * @method Phaser.Math.RandomDataGenerator#shuffle
+ * @since 3.7.0
+ *
+ * @generic T
+ * @genericUse {T[]} - [array,$return]
+ *
+ * @param {T[]} [array] - The array to be shuffled.
+ *
+ * @return {T[]} The shuffled array.
+ */
+ shuffle: function (array)
+ {
+ var len = array.length - 1;
+
+ for (var i = len; i > 0; i--)
+ {
+ var randomIndex = Math.floor(this.frac() * (i + 1));
+ var itemAtIndex = array[randomIndex];
+
+ array[randomIndex] = array[i];
+ array[i] = itemAtIndex;
+ }
+
+ return array;
+ }
+
+});
+
+module.exports = RandomDataGenerator;
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/math/random-data-generator/index.html b/coverage/lcov-report/math/random-data-generator/index.html
new file mode 100644
index 0000000000..ae6fd79417
--- /dev/null
+++ b/coverage/lcov-report/math/random-data-generator/index.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+ Code coverage report for math/random-data-generator
+
+
+
+
+
+
+
+
+
+
+
+
All files math/random-data-generator
+
+
+
+ 83.33%
+ Statements
+ 70/84
+
+
+
+
+ 54.16%
+ Branches
+ 13/24
+
+
+
+
+ 71.42%
+ Functions
+ 15/21
+
+
+
+
+ 82.5%
+ Lines
+ 66/80
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b , p or k for the previous block.
+
+
+
+ Filter:
+
+
+
+
+
+
+
+
+
+ File
+
+ Statements
+
+ Branches
+
+ Functions
+
+ Lines
+
+
+
+
+ RandomDataGenerator.js
+
+
+
+ 83.33%
+ 70/84
+ 54.16%
+ 13/24
+ 71.42%
+ 15/21
+ 82.5%
+ 66/80
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css
new file mode 100644
index 0000000000..b317a7cda3
--- /dev/null
+++ b/coverage/lcov-report/prettify.css
@@ -0,0 +1 @@
+.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js
new file mode 100644
index 0000000000..b3225238f2
--- /dev/null
+++ b/coverage/lcov-report/prettify.js
@@ -0,0 +1,2 @@
+/* eslint-disable */
+window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^
+
+
+
+