diff --git a/ui/.github/CODE_OF_CONDUCT.md b/ui/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000000000000000000000000000000..8fafdb3094f7728a087e6e7bfa9a7677467875d2 --- /dev/null +++ b/ui/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,84 @@ +# Code of Conduct + +## 1. Purpose + +A primary goal of Phaser is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). + +This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. + +We invite all those who participate in Phaser to help us create safe and positive experiences for everyone. + +## 2. Open Source Citizenship + +A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. + +Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. + +If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. + +## 3. Expected Behavior + +The following behaviors are expected and requested of all community members: + +* Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. +* Exercise consideration and respect in your speech and actions. +* Attempt collaboration before conflict. +* Refrain from demeaning, discriminatory, or harassing behavior and speech. +* Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. +* Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations. + +## 4. Unacceptable Behavior + +The following behaviors are considered harassment and are unacceptable within our community: + +* Violence, threats of violence or violent language directed against another person. +* Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. +* Posting or displaying sexually explicit or violent material. +* Posting or threatening to post other people’s personally identifying information ("doxing"). +* Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. +* Inappropriate photography or recording. +* Inappropriate physical contact. You should have someone’s consent before touching them. +* Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. +* Deliberate intimidation, stalking or following (online or in person). +* Advocating for, or encouraging, any of the above behavior. +* Sustained disruption of community events, including talks and presentations. + +## 5. Consequences of Unacceptable Behavior + +Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. + +Anyone asked to stop unacceptable behavior is expected to comply immediately. + +If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). + +## 6. Reporting Guidelines + +If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. support@phaser.io. + + + +Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. + +## 7. Addressing Grievances + +If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify Photon Storm Ltd with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies. + + + +## 8. Scope + +We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues–online and in-person–as well as in all one-on-one communications pertaining to community business. + +This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. + +## 9. Contact info + +support@phaser.io + +## 10. License and attribution + +This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). + +Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). + +Retrieved on November 22, 2016 from [http://citizencodeofconduct.org/](http://citizencodeofconduct.org/) diff --git a/ui/.github/CONTRIBUTING.md b/ui/.github/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..74ce28264311247c50cdeb119e93ad31b7b2799f --- /dev/null +++ b/ui/.github/CONTRIBUTING.md @@ -0,0 +1,80 @@ +# How to contribute + +It's important to us that you feel you can contribute towards the evolution of Phaser. This can take many forms: from helping to fix bugs or improve the docs, to adding in new features to the source. This guide should help you in making that process as smooth as possible. + +Before contributing, please read the [code of conduct](https://github.com/photonstorm/phaser/blob/master/.github/CODE_OF_CONDUCT.md). + +## Reporting issues + +[GitHub Issues][0] is the place to report bugs you may have found. When submitting a bug please do the following: + +**1. Search for existing issues.** Your bug may have already been fixed, or cannot, or will not, be fixed. So be sure to search the issues first before putting in a duplicate issue. + +**2. Not sure if it's a bug?.** Please ask on the [forum][4]. If something is blatantly wrong then post it to GitHub. But if you feel it might just be because you're not sure of expected behavior, then it might save us time, and get you a response faster, if you post it to the Phaser forum instead. + +**3. Create an isolated and reproducible test case.** If you are reporting a bug, make sure you also have a minimal, runnable, code example that reproduces the problem you have. + +**4. Include a live example.** After narrowing your code down to only the problem areas, make use of [jsFiddle][1], [jsBin][2], [CodePen][5], or a link to your live site so that we can view a live example of the problem. + +**5. Share as much information as possible.** Include browser version affected, your OS, version of the library, steps to reproduce, etc. "X isn't working!!!1!" will probably just be closed. + +## Support Forum + +We have a very active [Phaser Support Forum][4]. If you need general support, or are struggling to understand how to do something or need your code checked over, then we would urge you to post it to our forum. There are a lot of friendly devs in there who can help, as well as the core Phaser team, so it's a great place to get support. You're welcome to report bugs directly on GitHub, but for general support we'd always recommend using the forum first. + +## Making Changes + +I'm assuming you already have a recent version of [Node](https://nodejs.org) installed locally and can run `npm`. This guide is tested and works on both Windows 10 and OS X. + +### 1. Checkout the repos + +Check-out both the [Phaser repo](https://github.com/photonstorm/phaser) and the [Phaser 3 Examples Repo](https://github.com/photonstorm/phaser3-examples). Make sure the Phaser 3 Examples repo is saved locally in a folder called `phaser3-examples`, which will be the default for most Git clients. + +### 2. Matching Directory Levels + +Ensure that both repos live at the same depth in your directory structure. For example: `/usr/home/web/phaser` and `/usr/home/web/phaser3-examples`. This is so the dev build scripts in the Phaser repo can safely copy files to `../phaser3-examples` and have them end up in the correct place. + +### 3. Install dependencies + +Using your console, run `npm install` or `yarn install` as we've configs for both. This process will install a local copy of webpack and a handful of small support scripts. Note that Yarn on Windows seems to have issues making some packages global, so stick with npm if this is the case. + +### 4. Webpack + +Making sure you've got both repos checked out, and at the same directory level in your filesystem, issue the command `webpack`. If you can't issue the command then webpack may need [installing globally](https://webpack.js.org/guides/installation/). Webpack will build Phaser and if there are any path errors in the code they'll be flagged during the build process. + +What you need is the ability to issue the command `webpack` within the v3 folder and have it work. + +### 5. ESLint + +There is an ESLint configuration and an Editor Configuration in the v3 folder. **Please adhere to them!** Although not enforced in the build process yet, I will be adding that at a later point. There are lots of tools you can install so your editor of choice will check the ESLint config during development. + +To test if your code passes our lint config issue the command `npm run lint`. + +## Coding style preferences are not contributions + +If your PR is doing little more than changing the Phaser source code into a format / coding style that you prefer then we will automatically close it. All PRs must adhere to the coding style already set-out across the thousands of lines of code in Phaser. Your personal preferences for how things should "look" or be structured do not apply here, sorry. PRs should fix bugs, fix documentation or add features. No changes for the sake of change. + +## I don't really like git / node.js, but I can fix this bug + +That is fine too. While Pull Requests are the best thing in the world for us, they are not the only way to help. You're welcome to post fixes to our forum or even just email them to us. All we ask is that you still adhere to the guidelines presented here re: ESLint, etc. + +## Code Style Guide + +We provide an .editorconfig and eslint config for you to use, but generally: + +- Use 4 spaces for tabs, never tab characters. + +- No trailing whitespace, blank lines should have no whitespace. + +- Always favor strict equals `===` unless you *need* to use type coercion. + +- Follow conventions already in the code, and listen to eslint. Our config is set-up for a reason. + +Thanks to Chad for creating the original Pixi.js Contributing file which we adapted for Phaser. + +[0]: https://github.com/photonstorm/phaser/issues +[1]: http://jsfiddle.net +[2]: http://jsbin.com/ +[3]: http://nodejs.org +[4]: https://phaser.discourse.group/ +[5]: https://codepen.io/pen?template=YeEWom "Phaser 3 game template" diff --git a/ui/.github/FUNDING.yml b/ui/.github/FUNDING.yml new file mode 100644 index 0000000000000000000000000000000000000000..61f2a6424bab6113c82cc5f73b8b1a23c7eea018 --- /dev/null +++ b/ui/.github/FUNDING.yml @@ -0,0 +1,5 @@ +# These are supported funding model platforms + +github: photonstorm +patreon: photonstorm +custom: https://phaser.io/community/donate diff --git a/ui/.github/no-response.yml b/ui/.github/no-response.yml new file mode 100644 index 0000000000000000000000000000000000000000..cfbe92445c082b38e1ecc3ba9a51e140c69f87b1 --- /dev/null +++ b/ui/.github/no-response.yml @@ -0,0 +1,14 @@ +# Configuration for no-response - https://github.com/probot/no-response + +# Number of days of inactivity before an Issue is closed for lack of response +daysUntilClose: 30 +# Label requiring a response +# TODO: also close `needs-reproduction` issues (blocked by https://github.com/probot/no-response/issues/11) +responseRequiredLabel: 🤷‍♂️ More info needed +# Comment to post when closing an issue due to lack of response. +closeComment: > +Thank you for taking time to open this issue. + +We haven’t gotten a response to our questions above. With the details currently given in the issue we don’t have enough information to take action. + +So we’re going to close this issue. We can re-open it if you find the time to provide the information we need. diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..6e46e45dec9e63eac2f7ac52fe0320da58c3b803 --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,13 @@ +# System and IDE files +Thumbs.db +.DS_Store +.idea +*.suo +*.sublime-project +*.sublime-workspace + +# Vendors +node_modules/ + +# Build +/npm-debug.log diff --git a/ui/LICENSE b/ui/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..3efb556114fa1caf607bff1fb0a9c09099756b13 --- /dev/null +++ b/ui/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Richard Davey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 0000000000000000000000000000000000000000..acfff8c574d8da6d78e65b684d6ed0a043d76a07 --- /dev/null +++ b/ui/README.md @@ -0,0 +1 @@ +# Work in progress \ No newline at end of file diff --git a/ui/dist/assets/may.png b/ui/dist/assets/may.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8bc1b7c267d22a75c807a4973110b6ea7da3e8 Binary files /dev/null and b/ui/dist/assets/may.png differ diff --git a/ui/dist/assets/sprites/archie.png b/ui/dist/assets/sprites/archie.png new file mode 100644 index 0000000000000000000000000000000000000000..967cafbe5d2d8dec62518611263c5d91cf8d720a Binary files /dev/null and b/ui/dist/assets/sprites/archie.png differ diff --git a/ui/dist/assets/sprites/birch.png b/ui/dist/assets/sprites/birch.png new file mode 100644 index 0000000000000000000000000000000000000000..45d67a327d451d169586fa81a63efb6f5ba40e68 Binary files /dev/null and b/ui/dist/assets/sprites/birch.png differ diff --git a/ui/dist/assets/sprites/brendan.png b/ui/dist/assets/sprites/brendan.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1d49b8c28b51cb943ca45f34c19fc2bb6b547b Binary files /dev/null and b/ui/dist/assets/sprites/brendan.png differ diff --git a/ui/dist/assets/sprites/joseph.png b/ui/dist/assets/sprites/joseph.png new file mode 100644 index 0000000000000000000000000000000000000000..cde9b50ac3642e8c37995710335bf94f5140510a Binary files /dev/null and b/ui/dist/assets/sprites/joseph.png differ diff --git a/ui/dist/assets/sprites/maxie.png b/ui/dist/assets/sprites/maxie.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ab2aa093b866c9ed1538d68f5a540e6d55523d Binary files /dev/null and b/ui/dist/assets/sprites/maxie.png differ diff --git a/ui/dist/assets/sprites/may.png b/ui/dist/assets/sprites/may.png new file mode 100644 index 0000000000000000000000000000000000000000..fcba3ce1822c5e7def63ca7f9efcc493945f44f7 Binary files /dev/null and b/ui/dist/assets/sprites/may.png differ diff --git a/ui/dist/assets/sprites/npc1.png b/ui/dist/assets/sprites/npc1.png new file mode 100644 index 0000000000000000000000000000000000000000..77495859eed36e6057055a9762fe4512f17d6691 Binary files /dev/null and b/ui/dist/assets/sprites/npc1.png differ diff --git a/ui/dist/assets/sprites/steven.png b/ui/dist/assets/sprites/steven.png new file mode 100644 index 0000000000000000000000000000000000000000..1e1ae3b8244f5e34a56a623bcbfcf5fddaab1a49 Binary files /dev/null and b/ui/dist/assets/sprites/steven.png differ diff --git a/ui/dist/assets/tilemaps/json/tmp.json b/ui/dist/assets/tilemaps/json/tmp.json new file mode 100644 index 0000000000000000000000000000000000000000..96cc23ae33c7ab18872ecd9d9ee13e58a9e6b92b --- /dev/null +++ b/ui/dist/assets/tilemaps/json/tmp.json @@ -0,0 +1,140 @@ +{ "compressionlevel":-1, + "height":100, + "infinite":false, + "layers":[ + { + "data":[4, 1, 3, 3, 3, 2, 4, 3, 2, 2, 2, 4, 3, 3, 3, 4, 1, 1, 1, 1, 2, 1, 3, 4, 2, 3, 4, 2, 2, 3, 2, 4, 4, 4, 4, 3, 3, 2, 4, 2, 1, 4, 1, 2, 4, 3, 2, 3, 1, 2, 2, 1, 3, 2, 2, 3, 1, 2, 3, 3, 1, 3, 4, 4, 3, 2, 1, 1, 1, 1, 4, 1, 1, 2, 2, 3, 1, 1, 4, 1, 2, 4, 4, 1, 1, 2, 3, 3, 3, 4, 1, 4, 4, 3, 2, 4, 3, 3, 2, 1, + 2, 1, 3, 1, 4, 3, 4, 2, 1, 4, 3, 1, 2, 1, 2, 1, 1, 2, 2, 3, 2, 4, 4, 4, 2, 1, 4, 1, 2, 1, 1, 2, 3, 1, 2, 1, 4, 3, 3, 1, 2, 1, 2, 2, 1, 2, 1, 4, 3, 3, 4, 4, 3, 1, 3, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 2, 2, 3, 3, 3, 4, 1, 1, 2, 3, 3, 3, 4, 1, 4, 1, 2, 2, 1, 3, 4, 3, 4, 3, 3, 2, 3, 3, 4, 4, 3, 2, 1, 1, 3, + 2, 2, 3, 4, 3, 4, 2, 4, 1, 1, 3, 1, 1, 2, 3, 3, 4, 3, 4, 3, 1, 3, 3, 2, 3, 3, 3, 2, 1, 3, 2, 2, 4, 2, 4, 2, 2, 1, 4, 4, 3, 2, 1, 1, 1, 1, 1, 4, 3, 2, 2, 3, 3, 2, 4, 1, 1, 2, 4, 2, 1, 2, 1, 2, 4, 2, 1, 3, 1, 4, 4, 2, 1, 4, 4, 2, 1, 2, 3, 3, 1, 4, 3, 3, 4, 2, 1, 4, 4, 2, 2, 1, 2, 3, 3, 3, 3, 1, 1, 3, + 4, 1, 1, 1, 4, 1, 4, 4, 4, 2, 1, 2, 2, 2, 4, 1, 2, 4, 2, 4, 1, 2, 1, 4, 4, 4, 2, 1, 1, 4, 2, 2, 2, 4, 3, 3, 3, 4, 2, 4, 2, 2, 4, 1, 3, 1, 2, 4, 3, 3, 1, 1, 4, 1, 3, 2, 2, 3, 1, 1, 1, 3, 2, 2, 2, 1, 2, 1, 4, 4, 3, 3, 3, 2, 2, 3, 3, 4, 2, 2, 1, 1, 1, 4, 4, 4, 4, 3, 3, 2, 3, 3, 2, 2, 3, 3, 3, 1, 1, 4, + 1, 3, 1, 4, 1, 1, 4, 3, 3, 3, 1, 2, 4, 3, 4, 4, 3, 3, 4, 4, 2, 3, 3, 4, 4, 2, 1, 4, 1, 2, 2, 4, 1, 2, 1, 3, 1, 2, 1, 2, 1, 3, 4, 3, 3, 1, 1, 2, 4, 3, 1, 3, 2, 1, 1, 2, 2, 2, 4, 1, 2, 1, 2, 3, 4, 1, 3, 4, 4, 1, 3, 1, 2, 2, 1, 1, 3, 3, 4, 2, 2, 3, 1, 2, 1, 2, 4, 4, 1, 3, 2, 2, 4, 2, 2, 3, 4, 4, 2, 3, + 3, 3, 2, 4, 4, 1, 3, 2, 3, 2, 2, 2, 3, 4, 3, 4, 3, 1, 2, 3, 2, 2, 4, 3, 4, 2, 1, 3, 1, 1, 4, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 3, 2, 3, 2, 3, 2, 2, 2, 2, 3, 3, 1, 1, 2, 4, 3, 1, 1, 3, 1, 1, 3, 3, 1, 3, 1, 4, 3, 4, 2, 3, 1, 3, 2, 2, 4, 1, 1, 2, 2, 4, 2, 3, 4, 2, 3, 4, 2, 2, 4, 3, 3, 2, 3, 3, 3, 4, 4, 3, + 1, 4, 2, 2, 4, 4, 1, 3, 4, 1, 3, 4, 2, 2, 3, 3, 1, 2, 3, 3, 1, 3, 3, 2, 1, 2, 4, 2, 1, 4, 3, 3, 2, 1, 3, 2, 2, 4, 2, 1, 1, 2, 4, 1, 1, 1, 1, 4, 3, 1, 3, 4, 2, 2, 2, 3, 2, 3, 4, 3, 3, 2, 2, 4, 4, 3, 2, 1, 2, 3, 4, 1, 3, 3, 4, 3, 1, 4, 3, 2, 1, 4, 3, 4, 1, 4, 2, 3, 1, 2, 4, 1, 4, 3, 4, 2, 4, 1, 4, 4, + 4, 3, 3, 3, 2, 3, 3, 3, 2, 3, 2, 2, 1, 1, 3, 1, 3, 4, 2, 3, 2, 4, 2, 3, 1, 1, 3, 3, 1, 3, 2, 3, 1, 3, 1, 2, 2, 2, 4, 4, 4, 4, 2, 2, 1, 4, 4, 4, 4, 3, 3, 2, 3, 3, 4, 2, 2, 3, 1, 2, 4, 4, 2, 4, 1, 1, 4, 3, 2, 3, 3, 4, 1, 1, 3, 3, 1, 1, 4, 3, 3, 1, 4, 2, 4, 2, 1, 4, 3, 2, 1, 4, 1, 3, 2, 3, 4, 2, 2, 4, + 3, 1, 2, 3, 2, 2, 1, 2, 1, 1, 3, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 4, 3, 2, 4, 2, 4, 2, 1, 3, 4, 2, 2, 3, 3, 4, 3, 2, 1, 3, 1, 3, 4, 3, 4, 1, 4, 3, 2, 2, 3, 3, 1, 2, 2, 2, 1, 4, 1, 2, 4, 2, 2, 2, 1, 2, 1, 3, 4, 3, 1, 2, 3, 3, 4, 4, 4, 1, 4, 4, 3, 3, 3, 2, 4, 4, 1, 3, 1, 2, 2, 4, 4, 2, 1, 3, 1, 4, + 3, 3, 4, 3, 3, 2, 3, 1, 3, 3, 3, 4, 2, 4, 1, 3, 2, 2, 1, 3, 2, 2, 4, 2, 3, 4, 4, 3, 3, 3, 2, 2, 3, 2, 2, 1, 3, 4, 1, 3, 4, 1, 1, 3, 4, 1, 1, 2, 2, 4, 2, 2, 1, 4, 1, 1, 3, 3, 2, 2, 1, 2, 4, 1, 1, 3, 3, 4, 2, 2, 4, 4, 2, 4, 2, 4, 1, 2, 2, 3, 4, 2, 2, 1, 2, 4, 3, 3, 2, 2, 1, 3, 2, 4, 1, 3, 1, 2, 4, 4, + 3, 4, 1, 3, 2, 3, 1, 2, 3, 3, 2, 3, 4, 3, 3, 1, 3, 4, 3, 3, 2, 1, 2, 3, 1, 1, 4, 1, 2, 3, 3, 1, 3, 3, 1, 3, 2, 3, 3, 3, 3, 2, 2, 3, 1, 2, 3, 3, 1, 3, 2, 2, 2, 3, 2, 2, 4, 2, 1, 1, 1, 1, 2, 2, 2, 1, 3, 1, 1, 4, 2, 4, 1, 3, 4, 2, 1, 4, 2, 2, 4, 4, 2, 4, 3, 4, 4, 2, 3, 3, 2, 3, 2, 4, 2, 4, 2, 3, 3, 3, + 1, 3, 2, 1, 2, 2, 3, 2, 4, 1, 2, 2, 2, 4, 2, 2, 4, 1, 3, 3, 3, 3, 4, 1, 2, 2, 1, 1, 2, 3, 3, 2, 2, 1, 1, 4, 2, 2, 2, 2, 4, 2, 1, 4, 4, 1, 2, 2, 1, 4, 3, 4, 4, 4, 4, 2, 2, 2, 4, 2, 3, 1, 2, 3, 3, 2, 2, 2, 2, 4, 1, 4, 3, 3, 4, 1, 2, 1, 1, 3, 4, 3, 1, 1, 1, 4, 3, 1, 1, 1, 4, 4, 1, 3, 2, 2, 1, 1, 1, 3, + 1, 3, 1, 1, 3, 1, 3, 3, 2, 1, 1, 1, 1, 3, 4, 2, 1, 3, 2, 4, 1, 2, 1, 4, 1, 1, 4, 4, 2, 2, 3, 4, 1, 2, 1, 1, 2, 3, 2, 3, 1, 1, 3, 3, 4, 4, 3, 3, 4, 3, 2, 3, 3, 1, 4, 3, 4, 2, 1, 3, 1, 1, 1, 4, 3, 2, 4, 4, 1, 2, 4, 4, 1, 2, 1, 1, 3, 1, 3, 2, 1, 2, 4, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 2, 2, 2, 1, 3, 3, 3, + 4, 2, 3, 1, 4, 3, 3, 3, 3, 3, 4, 1, 3, 1, 2, 1, 4, 3, 1, 4, 4, 2, 1, 1, 4, 2, 1, 2, 4, 2, 1, 4, 4, 3, 2, 2, 1, 2, 4, 2, 4, 3, 4, 3, 2, 4, 4, 2, 2, 1, 1, 3, 4, 3, 1, 3, 3, 2, 3, 1, 1, 4, 1, 4, 2, 4, 1, 4, 3, 2, 3, 1, 4, 2, 2, 2, 3, 3, 2, 4, 1, 3, 2, 1, 3, 2, 4, 1, 3, 2, 4, 4, 4, 3, 1, 3, 1, 3, 2, 3, + 1, 2, 3, 1, 3, 2, 2, 3, 4, 4, 1, 3, 4, 1, 1, 1, 1, 4, 1, 3, 1, 4, 3, 2, 1, 4, 1, 2, 3, 1, 4, 4, 4, 4, 4, 3, 4, 4, 1, 2, 2, 4, 2, 4, 3, 4, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 2, 2, 3, 1, 4, 1, 2, 3, 1, 3, 3, 1, 3, 4, 2, 3, 4, 1, 1, 4, 4, 4, 1, 1, 4, 4, 1, 2, 4, 2, 3, 2, 4, 3, 3, 4, 4, 1, 4, 2, 2, 1, 3, 4, + 1, 3, 1, 4, 2, 1, 2, 2, 2, 3, 2, 3, 2, 4, 3, 4, 3, 4, 3, 4, 1, 3, 2, 4, 4, 3, 3, 2, 3, 4, 1, 2, 3, 3, 2, 1, 2, 4, 2, 1, 4, 4, 1, 2, 3, 1, 4, 4, 1, 4, 2, 4, 4, 3, 2, 3, 1, 2, 2, 3, 2, 3, 2, 2, 1, 4, 2, 2, 3, 2, 3, 4, 3, 3, 2, 1, 1, 3, 3, 3, 3, 2, 2, 4, 1, 4, 2, 3, 1, 4, 3, 3, 3, 3, 2, 4, 3, 4, 3, 3, + 3, 4, 3, 4, 3, 2, 4, 1, 1, 2, 4, 3, 4, 4, 1, 1, 2, 1, 2, 3, 4, 4, 4, 3, 2, 3, 2, 3, 3, 1, 4, 4, 1, 3, 1, 2, 4, 4, 1, 2, 4, 4, 2, 3, 3, 2, 2, 1, 2, 1, 2, 2, 2, 2, 3, 4, 2, 4, 4, 3, 4, 4, 1, 3, 2, 1, 1, 3, 4, 1, 3, 2, 4, 4, 4, 4, 3, 3, 3, 4, 2, 4, 3, 2, 3, 2, 2, 3, 4, 4, 4, 4, 4, 3, 4, 3, 2, 2, 4, 4, + 2, 1, 4, 1, 2, 2, 4, 1, 1, 4, 1, 4, 1, 1, 3, 1, 4, 4, 4, 2, 2, 3, 4, 3, 4, 4, 3, 1, 4, 3, 4, 3, 2, 3, 4, 2, 4, 3, 3, 1, 3, 3, 3, 2, 1, 3, 4, 1, 1, 1, 2, 1, 2, 3, 1, 3, 1, 1, 1, 4, 2, 3, 4, 1, 2, 3, 2, 2, 2, 1, 3, 4, 4, 2, 4, 4, 1, 4, 3, 3, 4, 3, 4, 4, 2, 1, 1, 4, 1, 1, 3, 1, 3, 1, 2, 1, 4, 3, 4, 3, + 3, 2, 3, 1, 4, 3, 2, 4, 4, 3, 1, 4, 3, 2, 3, 2, 1, 2, 3, 4, 1, 1, 1, 3, 1, 3, 3, 4, 3, 4, 2, 3, 1, 2, 4, 4, 1, 3, 2, 1, 2, 2, 1, 1, 3, 1, 1, 2, 2, 2, 4, 4, 2, 1, 2, 3, 4, 3, 1, 3, 1, 3, 2, 3, 3, 2, 2, 3, 2, 2, 4, 2, 3, 4, 3, 3, 4, 3, 4, 2, 3, 1, 1, 1, 4, 1, 1, 3, 2, 4, 1, 2, 3, 1, 1, 4, 3, 3, 3, 4, + 4, 1, 4, 3, 2, 2, 2, 4, 1, 1, 3, 3, 1, 3, 4, 3, 2, 2, 1, 2, 4, 3, 1, 4, 4, 1, 3, 3, 1, 2, 3, 1, 2, 4, 3, 2, 4, 1, 1, 3, 3, 3, 4, 1, 3, 3, 3, 2, 4, 4, 2, 1, 2, 1, 3, 1, 2, 1, 3, 4, 1, 1, 4, 3, 2, 1, 4, 2, 1, 1, 2, 4, 4, 2, 4, 3, 2, 1, 3, 1, 3, 1, 4, 3, 3, 3, 3, 1, 1, 3, 1, 2, 4, 1, 4, 2, 2, 1, 1, 2, + 4, 4, 1, 2, 4, 3, 4, 3, 4, 1, 4, 3, 3, 1, 1, 1, 2, 3, 2, 3, 1, 4, 4, 4, 2, 4, 3, 4, 2, 1, 2, 4, 2, 2, 4, 3, 2, 3, 2, 4, 1, 1, 2, 2, 1, 1, 4, 4, 3, 1, 4, 4, 4, 3, 2, 4, 1, 2, 3, 3, 1, 2, 3, 1, 1, 2, 1, 4, 4, 2, 2, 4, 2, 3, 4, 4, 2, 3, 2, 3, 2, 1, 3, 3, 4, 4, 3, 2, 4, 2, 2, 3, 1, 3, 2, 4, 4, 1, 3, 3, + 1, 2, 1, 3, 1, 4, 1, 4, 3, 3, 4, 3, 1, 2, 2, 1, 2, 1, 1, 4, 1, 2, 2, 3, 1, 3, 3, 4, 1, 2, 1, 1, 4, 3, 3, 3, 4, 2, 3, 1, 1, 3, 3, 4, 4, 2, 1, 1, 3, 1, 2, 1, 4, 2, 2, 1, 4, 2, 1, 3, 3, 2, 4, 2, 3, 2, 2, 1, 1, 4, 3, 4, 2, 4, 1, 3, 1, 3, 4, 3, 3, 2, 3, 2, 4, 4, 1, 4, 4, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, + 2, 1, 2, 2, 4, 1, 3, 1, 2, 4, 1, 1, 4, 3, 2, 4, 4, 3, 1, 1, 1, 2, 1, 3, 1, 4, 2, 3, 1, 3, 2, 4, 2, 2, 3, 3, 3, 2, 3, 4, 2, 1, 1, 2, 3, 4, 2, 1, 2, 4, 4, 2, 4, 3, 4, 4, 1, 1, 1, 2, 3, 4, 4, 2, 2, 4, 4, 3, 3, 4, 2, 4, 3, 4, 4, 2, 4, 3, 3, 4, 1, 1, 4, 4, 1, 4, 4, 2, 2, 3, 3, 1, 1, 3, 3, 1, 3, 2, 4, 2, + 4, 4, 1, 3, 1, 3, 3, 4, 3, 3, 4, 4, 2, 2, 4, 2, 3, 3, 4, 2, 1, 1, 4, 3, 4, 4, 4, 1, 1, 3, 3, 2, 4, 4, 1, 4, 1, 2, 4, 2, 1, 4, 1, 2, 1, 3, 3, 1, 1, 4, 4, 1, 2, 4, 1, 2, 4, 4, 2, 1, 3, 3, 2, 2, 1, 3, 3, 1, 3, 3, 4, 2, 1, 4, 3, 4, 3, 4, 4, 1, 1, 1, 4, 1, 4, 2, 4, 1, 2, 3, 3, 4, 3, 4, 4, 3, 1, 2, 4, 3, + 3, 4, 1, 1, 4, 3, 4, 2, 4, 1, 3, 2, 3, 1, 4, 2, 4, 3, 4, 4, 2, 2, 3, 2, 3, 1, 2, 2, 4, 2, 1, 3, 3, 1, 4, 3, 2, 4, 1, 1, 2, 4, 4, 1, 2, 2, 1, 2, 1, 3, 1, 3, 2, 2, 2, 2, 3, 3, 4, 3, 3, 1, 2, 1, 3, 4, 3, 3, 1, 2, 2, 1, 1, 3, 4, 3, 4, 3, 4, 1, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 4, 4, 1, 2, 1, 4, 4, 1, 1, 3, + 3, 1, 4, 1, 1, 3, 1, 2, 3, 1, 3, 2, 3, 4, 3, 4, 2, 2, 3, 4, 2, 1, 4, 3, 2, 2, 3, 3, 2, 2, 4, 4, 3, 4, 1, 1, 4, 3, 1, 2, 4, 2, 4, 3, 2, 2, 2, 3, 1, 3, 3, 2, 4, 4, 2, 1, 2, 2, 2, 1, 4, 1, 2, 1, 1, 2, 4, 3, 1, 1, 2, 2, 1, 1, 3, 3, 4, 2, 1, 3, 1, 4, 4, 4, 4, 1, 4, 3, 3, 2, 1, 1, 4, 4, 3, 2, 1, 4, 2, 4, + 1, 4, 2, 4, 4, 3, 3, 3, 1, 3, 3, 1, 2, 3, 4, 2, 2, 2, 1, 3, 4, 2, 4, 3, 4, 1, 1, 1, 3, 3, 1, 2, 4, 4, 3, 2, 4, 4, 4, 1, 4, 3, 4, 3, 3, 3, 4, 1, 4, 4, 2, 3, 1, 1, 3, 4, 4, 3, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 4, 2, 3, 4, 3, 4, 4, 3, 3, 1, 2, 3, 3, 1, 1, 4, 3, 4, 4, 4, 1, 1, 2, 2, 2, 2, 3, 4, 4, 3, 3, + 2, 2, 3, 1, 1, 2, 2, 1, 4, 4, 3, 3, 4, 4, 2, 3, 4, 1, 2, 4, 4, 2, 2, 1, 2, 4, 4, 2, 1, 1, 3, 2, 1, 2, 2, 1, 4, 2, 3, 2, 3, 3, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 3, 3, 1, 3, 4, 2, 4, 2, 3, 2, 2, 4, 1, 1, 3, 2, 1, 3, 3, 1, 1, 3, 2, 3, 2, 4, 2, 3, 4, 4, 1, 2, 1, 1, 4, 2, 2, 1, 3, 3, 4, 1, 3, 4, 2, 3, 3, + 3, 3, 2, 1, 2, 3, 4, 2, 1, 4, 4, 2, 3, 4, 3, 2, 2, 4, 1, 4, 1, 2, 4, 1, 1, 3, 3, 4, 4, 2, 2, 3, 1, 2, 4, 1, 2, 1, 2, 2, 1, 3, 4, 3, 4, 2, 4, 1, 3, 4, 1, 3, 2, 1, 4, 2, 3, 2, 3, 2, 2, 4, 1, 3, 2, 4, 2, 2, 2, 2, 3, 4, 3, 2, 3, 1, 3, 2, 3, 2, 2, 4, 4, 1, 4, 4, 3, 3, 2, 3, 1, 4, 4, 4, 3, 1, 2, 4, 3, 4, + 3, 3, 1, 3, 3, 4, 4, 3, 3, 2, 4, 2, 1, 2, 4, 4, 3, 4, 2, 2, 2, 4, 1, 1, 2, 3, 1, 2, 3, 3, 1, 3, 1, 2, 1, 1, 1, 2, 3, 3, 2, 2, 3, 1, 4, 3, 3, 4, 3, 3, 4, 1, 4, 2, 2, 1, 1, 1, 2, 3, 4, 2, 2, 3, 1, 2, 1, 3, 2, 1, 3, 1, 3, 1, 1, 1, 2, 4, 2, 1, 3, 4, 2, 4, 4, 3, 4, 3, 4, 4, 3, 3, 3, 3, 2, 2, 3, 1, 2, 2, + 2, 4, 1, 1, 2, 4, 2, 1, 3, 2, 1, 2, 2, 4, 2, 4, 4, 1, 4, 4, 2, 3, 4, 2, 2, 2, 2, 1, 4, 4, 3, 1, 3, 2, 1, 4, 1, 3, 4, 3, 3, 4, 3, 4, 4, 1, 1, 1, 4, 2, 1, 1, 4, 3, 2, 2, 1, 2, 4, 1, 4, 3, 3, 3, 2, 3, 2, 4, 2, 2, 4, 1, 4, 3, 1, 1, 3, 2, 4, 1, 4, 3, 3, 4, 2, 2, 2, 2, 4, 4, 3, 1, 1, 4, 4, 1, 3, 3, 1, 4, + 1, 1, 4, 2, 3, 3, 3, 2, 4, 1, 4, 1, 2, 1, 4, 4, 3, 2, 3, 3, 3, 1, 4, 4, 4, 1, 1, 4, 3, 2, 3, 2, 3, 2, 2, 4, 1, 3, 2, 1, 4, 2, 2, 4, 3, 1, 4, 1, 2, 2, 3, 3, 4, 2, 2, 4, 1, 3, 1, 2, 1, 1, 3, 2, 1, 1, 4, 1, 2, 3, 1, 2, 2, 1, 3, 3, 1, 1, 1, 1, 2, 2, 3, 2, 1, 3, 2, 2, 1, 4, 1, 3, 4, 2, 1, 2, 1, 4, 1, 3, + 4, 1, 4, 2, 1, 2, 3, 3, 3, 2, 3, 3, 1, 3, 1, 4, 3, 1, 2, 2, 1, 1, 3, 1, 2, 4, 4, 2, 3, 1, 3, 3, 4, 1, 3, 4, 3, 2, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 1, 1, 1, 2, 4, 3, 4, 3, 1, 4, 2, 1, 1, 3, 2, 4, 2, 2, 4, 2, 1, 3, 4, 1, 2, 4, 4, 4, 4, 1, 2, 4, 2, 2, 2, 4, 4, 3, 1, 3, 3, 3, 3, 2, 1, 2, 2, 3, 3, 4, 3, 3, + 3, 4, 3, 2, 2, 4, 3, 4, 2, 4, 3, 3, 4, 1, 2, 2, 4, 1, 4, 3, 4, 4, 3, 3, 4, 3, 2, 2, 2, 1, 4, 3, 3, 3, 3, 1, 2, 4, 3, 1, 4, 2, 1, 2, 3, 3, 2, 2, 1, 3, 1, 3, 1, 2, 3, 4, 2, 4, 2, 4, 1, 4, 4, 3, 3, 4, 1, 2, 2, 2, 2, 1, 2, 3, 2, 4, 2, 2, 1, 4, 3, 1, 2, 4, 2, 1, 4, 2, 2, 1, 1, 2, 1, 2, 4, 2, 2, 3, 4, 3, + 2, 2, 4, 4, 1, 1, 3, 1, 1, 2, 1, 1, 4, 3, 4, 4, 2, 3, 2, 4, 1, 4, 4, 3, 4, 1, 1, 1, 1, 1, 2, 1, 4, 3, 3, 3, 1, 2, 4, 2, 2, 3, 2, 1, 3, 2, 1, 3, 4, 3, 4, 3, 4, 1, 4, 1, 4, 2, 2, 1, 4, 3, 4, 3, 2, 2, 1, 2, 3, 4, 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 4, 2, 2, 2, 4, 2, 3, 3, 2, 1, 2, 3, 4, 4, 2, 4, 4, 3, 2, 1, + 4, 2, 3, 1, 4, 1, 2, 3, 3, 1, 2, 3, 1, 4, 4, 4, 1, 3, 1, 3, 1, 4, 2, 1, 2, 1, 3, 1, 4, 4, 4, 2, 1, 1, 4, 4, 2, 2, 1, 4, 3, 4, 3, 3, 3, 3, 4, 2, 2, 1, 3, 1, 1, 4, 3, 1, 3, 4, 2, 4, 3, 4, 3, 2, 3, 4, 1, 4, 2, 3, 3, 3, 2, 3, 3, 1, 2, 1, 4, 1, 2, 1, 3, 4, 3, 4, 3, 3, 4, 1, 3, 2, 4, 2, 2, 3, 3, 1, 4, 3, + 2, 4, 3, 3, 1, 4, 1, 3, 2, 4, 3, 4, 3, 1, 4, 2, 2, 4, 3, 3, 4, 3, 4, 3, 4, 4, 1, 2, 4, 3, 2, 3, 4, 1, 2, 2, 1, 1, 4, 3, 3, 2, 2, 1, 3, 4, 3, 1, 4, 2, 2, 1, 2, 3, 2, 1, 3, 1, 1, 4, 2, 2, 1, 4, 2, 3, 2, 2, 4, 3, 4, 3, 4, 2, 2, 4, 1, 3, 2, 3, 4, 2, 1, 1, 3, 1, 1, 1, 4, 1, 4, 1, 3, 1, 4, 3, 4, 4, 3, 3, + 4, 3, 3, 2, 2, 2, 3, 2, 2, 4, 3, 1, 2, 3, 2, 4, 1, 3, 2, 1, 4, 4, 2, 1, 3, 3, 3, 2, 2, 1, 2, 1, 3, 2, 2, 1, 4, 3, 3, 3, 2, 1, 1, 4, 4, 1, 1, 1, 1, 2, 3, 2, 2, 1, 3, 4, 2, 4, 4, 1, 2, 3, 2, 4, 1, 2, 2, 3, 3, 1, 2, 1, 2, 3, 3, 1, 3, 2, 4, 4, 4, 3, 3, 4, 4, 4, 4, 1, 4, 1, 3, 1, 1, 4, 3, 2, 3, 3, 4, 1, + 3, 3, 1, 3, 3, 1, 1, 1, 4, 3, 3, 1, 3, 4, 2, 3, 4, 2, 4, 2, 1, 3, 1, 1, 2, 2, 3, 3, 3, 4, 4, 3, 3, 2, 3, 2, 1, 2, 3, 3, 4, 3, 2, 3, 3, 3, 4, 1, 3, 1, 3, 2, 3, 2, 3, 4, 1, 1, 1, 2, 4, 1, 1, 4, 2, 3, 1, 2, 3, 4, 3, 3, 4, 1, 1, 2, 3, 4, 2, 3, 3, 2, 1, 2, 2, 2, 2, 4, 2, 3, 1, 2, 1, 3, 4, 1, 1, 2, 2, 1, + 4, 1, 4, 4, 1, 4, 1, 2, 4, 4, 3, 2, 3, 1, 3, 4, 2, 2, 3, 2, 2, 2, 4, 1, 1, 1, 1, 3, 3, 4, 3, 1, 3, 3, 3, 4, 4, 1, 1, 2, 2, 2, 3, 1, 4, 1, 3, 3, 3, 3, 3, 4, 4, 1, 3, 4, 4, 4, 3, 1, 3, 1, 1, 1, 3, 2, 3, 4, 3, 2, 1, 1, 1, 4, 4, 1, 3, 2, 4, 2, 3, 4, 1, 3, 1, 4, 2, 4, 1, 3, 1, 4, 3, 2, 2, 2, 3, 2, 2, 3, + 2, 2, 4, 1, 2, 1, 3, 2, 4, 2, 2, 1, 2, 2, 1, 2, 4, 3, 4, 2, 3, 3, 4, 3, 2, 2, 4, 3, 2, 2, 2, 1, 2, 1, 3, 4, 2, 1, 2, 1, 1, 3, 2, 2, 3, 1, 3, 4, 1, 2, 4, 3, 3, 4, 4, 4, 4, 3, 2, 3, 4, 3, 3, 3, 2, 1, 2, 3, 4, 4, 2, 4, 4, 3, 2, 1, 4, 1, 4, 4, 4, 4, 2, 3, 2, 3, 1, 4, 3, 2, 3, 4, 1, 2, 3, 4, 2, 4, 1, 3, + 1, 1, 3, 1, 4, 3, 2, 3, 3, 3, 2, 2, 1, 3, 4, 3, 2, 1, 4, 4, 4, 2, 4, 4, 2, 3, 4, 1, 4, 2, 2, 1, 1, 3, 4, 3, 4, 2, 2, 4, 4, 2, 3, 4, 4, 2, 3, 2, 2, 1, 1, 1, 4, 1, 2, 2, 4, 2, 3, 4, 2, 4, 1, 2, 3, 4, 2, 1, 3, 4, 2, 2, 3, 3, 1, 3, 3, 3, 3, 1, 4, 3, 1, 4, 1, 4, 1, 4, 3, 2, 1, 2, 1, 3, 3, 3, 1, 1, 4, 4, + 4, 2, 1, 2, 4, 3, 2, 4, 3, 1, 2, 2, 2, 1, 2, 3, 2, 1, 2, 1, 1, 2, 4, 2, 4, 2, 4, 2, 2, 1, 3, 3, 3, 2, 1, 4, 3, 2, 4, 4, 4, 1, 1, 4, 4, 3, 2, 1, 3, 1, 2, 3, 4, 4, 3, 2, 1, 1, 1, 4, 4, 1, 4, 1, 4, 4, 2, 1, 1, 4, 4, 2, 2, 3, 1, 2, 4, 4, 2, 4, 3, 1, 3, 3, 4, 1, 2, 2, 2, 2, 2, 4, 4, 3, 3, 1, 3, 1, 4, 2, + 3, 1, 4, 2, 1, 3, 4, 4, 3, 1, 3, 3, 1, 1, 1, 4, 4, 2, 2, 3, 3, 4, 2, 1, 1, 1, 4, 2, 4, 1, 2, 1, 4, 4, 2, 4, 2, 2, 4, 3, 1, 4, 3, 3, 3, 3, 2, 3, 2, 2, 3, 3, 1, 4, 3, 1, 3, 4, 3, 2, 4, 2, 1, 2, 3, 2, 1, 4, 3, 4, 3, 1, 3, 1, 1, 3, 4, 2, 4, 2, 1, 2, 2, 2, 1, 3, 2, 1, 3, 3, 2, 1, 3, 3, 3, 3, 1, 3, 1, 1, + 3, 1, 4, 3, 2, 4, 4, 2, 2, 4, 3, 2, 2, 3, 2, 3, 2, 2, 2, 2, 4, 2, 1, 2, 1, 4, 1, 3, 4, 3, 1, 1, 2, 4, 3, 1, 1, 1, 4, 1, 2, 3, 2, 2, 2, 3, 4, 1, 2, 1, 2, 1, 2, 3, 4, 1, 2, 2, 2, 4, 4, 2, 2, 1, 4, 4, 3, 4, 4, 3, 4, 2, 3, 4, 3, 4, 4, 2, 2, 4, 2, 4, 4, 4, 4, 3, 2, 4, 2, 3, 4, 1, 1, 2, 4, 1, 2, 2, 3, 3, + 3, 3, 2, 4, 4, 1, 3, 1, 4, 3, 1, 3, 4, 4, 1, 4, 4, 1, 2, 4, 4, 3, 2, 2, 3, 2, 1, 2, 2, 3, 1, 1, 2, 4, 4, 3, 2, 2, 1, 2, 4, 3, 3, 1, 1, 3, 3, 2, 4, 1, 3, 1, 4, 1, 2, 2, 4, 2, 3, 1, 2, 3, 1, 4, 3, 4, 4, 4, 2, 4, 4, 4, 1, 4, 1, 1, 1, 4, 1, 4, 2, 3, 3, 3, 2, 2, 1, 2, 2, 1, 1, 3, 3, 3, 1, 1, 2, 1, 2, 4, + 2, 4, 2, 4, 1, 3, 4, 3, 3, 3, 2, 4, 2, 3, 4, 4, 3, 2, 1, 4, 2, 1, 4, 2, 4, 3, 1, 2, 3, 3, 4, 1, 3, 3, 4, 3, 2, 1, 4, 2, 1, 4, 1, 1, 1, 2, 2, 3, 2, 3, 2, 2, 3, 3, 4, 1, 3, 4, 1, 4, 4, 4, 2, 2, 3, 1, 1, 2, 4, 4, 4, 2, 3, 4, 4, 3, 4, 1, 4, 4, 3, 3, 4, 4, 4, 2, 3, 2, 2, 1, 4, 4, 1, 1, 4, 3, 1, 2, 4, 1, + 2, 3, 2, 2, 3, 3, 3, 1, 2, 1, 3, 2, 3, 2, 1, 3, 1, 4, 2, 4, 3, 1, 1, 2, 1, 2, 3, 1, 4, 2, 3, 4, 3, 3, 2, 3, 3, 1, 2, 4, 2, 1, 3, 4, 4, 3, 4, 1, 1, 3, 2, 2, 4, 4, 4, 2, 4, 3, 1, 1, 4, 2, 2, 2, 1, 3, 2, 3, 3, 3, 4, 3, 2, 1, 4, 4, 3, 3, 1, 2, 1, 1, 1, 3, 2, 4, 4, 4, 4, 3, 4, 1, 4, 1, 4, 4, 4, 2, 3, 4, + 3, 1, 2, 4, 2, 2, 2, 4, 1, 1, 3, 2, 4, 3, 1, 2, 2, 2, 4, 4, 3, 3, 1, 1, 1, 1, 2, 3, 3, 2, 1, 3, 1, 3, 4, 3, 3, 1, 3, 4, 1, 1, 2, 1, 4, 2, 1, 4, 1, 4, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3, 4, 4, 3, 4, 4, 1, 3, 1, 1, 3, 2, 3, 1, 1, 3, 2, 4, 4, 4, 4, 2, 4, 1, 2, 2, 2, 1, 3, 1, 2, 4, 1, 1, 2, 2, 3, 2, 4, + 3, 3, 1, 4, 2, 1, 3, 4, 2, 2, 2, 2, 1, 1, 3, 4, 2, 2, 1, 4, 1, 4, 3, 1, 4, 4, 4, 1, 2, 2, 3, 4, 3, 4, 2, 1, 2, 3, 3, 4, 1, 1, 2, 4, 1, 3, 2, 3, 4, 3, 2, 2, 3, 4, 4, 4, 1, 1, 3, 1, 3, 2, 1, 4, 2, 4, 3, 3, 1, 1, 4, 3, 3, 3, 3, 1, 1, 1, 1, 3, 4, 1, 1, 2, 4, 3, 1, 1, 3, 2, 4, 1, 3, 2, 4, 2, 1, 2, 2, 2, + 4, 3, 3, 1, 1, 1, 2, 3, 2, 4, 1, 2, 4, 4, 2, 4, 1, 1, 2, 2, 1, 3, 3, 3, 3, 1, 4, 2, 4, 3, 3, 2, 4, 3, 1, 1, 1, 2, 4, 2, 3, 3, 1, 2, 2, 4, 3, 1, 3, 4, 3, 4, 4, 3, 3, 2, 1, 1, 1, 3, 4, 1, 4, 3, 3, 4, 2, 4, 2, 3, 3, 4, 2, 1, 1, 3, 3, 4, 4, 3, 1, 4, 3, 2, 1, 2, 3, 3, 1, 4, 1, 4, 4, 2, 2, 4, 1, 1, 3, 4, + 3, 2, 2, 1, 2, 4, 3, 2, 3, 4, 2, 2, 3, 2, 1, 1, 3, 2, 3, 1, 4, 3, 3, 3, 2, 3, 4, 2, 1, 4, 4, 4, 3, 4, 2, 1, 3, 2, 2, 3, 4, 3, 3, 2, 1, 2, 2, 1, 1, 2, 1, 4, 2, 2, 3, 1, 3, 2, 2, 2, 2, 3, 4, 1, 3, 4, 4, 2, 4, 3, 3, 4, 3, 4, 4, 1, 2, 4, 4, 3, 4, 4, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 3, 1, 2, 2, 2, 3, 1, 1, + 1, 3, 1, 4, 1, 1, 4, 4, 2, 4, 2, 2, 3, 2, 1, 2, 4, 1, 4, 2, 2, 4, 1, 1, 1, 4, 4, 4, 4, 1, 2, 3, 1, 4, 3, 3, 3, 4, 2, 2, 3, 1, 1, 2, 2, 1, 3, 4, 4, 4, 1, 4, 2, 4, 1, 1, 1, 1, 3, 2, 1, 4, 3, 3, 1, 1, 2, 4, 3, 3, 3, 1, 2, 4, 2, 1, 3, 2, 3, 3, 3, 3, 1, 2, 3, 2, 4, 2, 4, 4, 2, 3, 2, 3, 3, 2, 4, 2, 1, 3, + 4, 3, 4, 2, 4, 3, 4, 2, 2, 2, 1, 2, 4, 4, 4, 2, 2, 3, 1, 4, 3, 4, 1, 2, 3, 3, 4, 4, 4, 4, 3, 1, 1, 1, 1, 3, 1, 4, 3, 3, 4, 3, 2, 1, 2, 2, 3, 4, 4, 4, 3, 1, 2, 4, 3, 4, 4, 1, 3, 4, 2, 4, 4, 2, 4, 1, 4, 4, 3, 1, 4, 2, 1, 4, 4, 2, 4, 3, 4, 1, 2, 3, 4, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 3, 4, 3, 2, 4, + 4, 1, 1, 2, 3, 4, 2, 3, 1, 2, 3, 4, 3, 2, 2, 1, 3, 1, 4, 4, 4, 2, 1, 4, 2, 4, 3, 3, 4, 1, 2, 2, 1, 4, 3, 4, 4, 3, 2, 1, 2, 2, 3, 2, 3, 4, 2, 4, 4, 4, 4, 3, 1, 4, 4, 1, 1, 4, 2, 2, 2, 4, 3, 2, 4, 3, 1, 3, 4, 2, 2, 4, 3, 2, 4, 2, 4, 3, 2, 2, 4, 2, 3, 4, 1, 2, 3, 2, 4, 2, 4, 4, 4, 4, 3, 1, 4, 4, 1, 4, + 3, 1, 2, 1, 3, 2, 4, 1, 2, 1, 2, 2, 2, 1, 3, 3, 3, 4, 2, 2, 1, 3, 1, 4, 3, 4, 4, 1, 3, 1, 2, 4, 1, 4, 3, 1, 4, 3, 2, 1, 3, 1, 3, 2, 1, 1, 3, 2, 4, 4, 2, 1, 1, 2, 4, 4, 3, 2, 3, 2, 1, 1, 1, 3, 1, 1, 1, 2, 2, 1, 3, 3, 2, 4, 2, 4, 4, 3, 1, 4, 1, 4, 4, 4, 3, 1, 3, 1, 3, 2, 4, 2, 4, 1, 1, 4, 3, 2, 1, 4, + 2, 3, 1, 3, 3, 1, 2, 3, 3, 3, 3, 1, 2, 4, 3, 3, 3, 4, 2, 3, 4, 2, 2, 4, 2, 3, 3, 1, 1, 3, 2, 3, 3, 4, 1, 3, 2, 3, 3, 2, 2, 1, 2, 1, 4, 3, 4, 1, 3, 4, 1, 1, 2, 1, 1, 1, 4, 4, 2, 2, 3, 1, 2, 2, 4, 1, 1, 1, 2, 4, 2, 4, 4, 3, 2, 4, 4, 3, 3, 4, 1, 2, 4, 1, 3, 1, 1, 4, 4, 3, 4, 1, 3, 1, 1, 1, 3, 1, 4, 2, + 2, 1, 4, 1, 3, 2, 1, 2, 3, 1, 4, 2, 3, 4, 2, 2, 4, 2, 3, 4, 4, 1, 3, 2, 4, 1, 4, 3, 1, 1, 1, 2, 2, 1, 3, 2, 1, 4, 2, 4, 2, 1, 1, 2, 4, 3, 2, 2, 1, 2, 1, 4, 3, 1, 3, 4, 1, 2, 2, 2, 1, 1, 4, 4, 4, 3, 3, 1, 2, 1, 4, 4, 1, 1, 1, 3, 1, 1, 3, 3, 4, 1, 2, 1, 3, 4, 3, 3, 3, 1, 4, 4, 3, 4, 2, 4, 1, 4, 2, 1, + 4, 3, 3, 1, 3, 3, 3, 3, 3, 1, 4, 4, 4, 3, 2, 1, 1, 2, 2, 4, 1, 1, 2, 3, 1, 3, 2, 1, 2, 4, 3, 4, 3, 3, 1, 1, 3, 4, 3, 1, 2, 3, 4, 3, 2, 3, 2, 3, 1, 2, 1, 1, 3, 1, 3, 3, 4, 2, 4, 2, 1, 4, 2, 1, 4, 3, 1, 4, 3, 4, 3, 1, 4, 3, 3, 3, 1, 4, 2, 2, 4, 3, 1, 4, 1, 1, 2, 4, 4, 3, 2, 3, 1, 3, 2, 4, 4, 4, 3, 1, + 3, 3, 3, 3, 3, 4, 1, 2, 1, 4, 3, 1, 4, 3, 4, 4, 3, 1, 1, 1, 1, 1, 4, 1, 3, 1, 3, 1, 3, 2, 1, 3, 2, 2, 1, 1, 1, 3, 3, 3, 2, 3, 4, 3, 1, 4, 4, 4, 2, 4, 3, 3, 4, 1, 2, 3, 4, 3, 3, 3, 1, 3, 4, 4, 4, 3, 4, 3, 2, 3, 3, 1, 2, 3, 4, 4, 1, 4, 3, 4, 4, 2, 3, 4, 2, 3, 1, 4, 1, 1, 2, 2, 1, 2, 4, 4, 3, 1, 2, 4, + 1, 1, 4, 2, 3, 1, 4, 2, 1, 1, 2, 3, 3, 3, 1, 4, 4, 3, 1, 4, 4, 4, 2, 3, 4, 4, 2, 3, 2, 4, 4, 2, 3, 2, 4, 1, 2, 4, 1, 1, 1, 3, 1, 1, 1, 2, 3, 4, 2, 4, 1, 2, 3, 4, 1, 2, 2, 3, 1, 1, 1, 4, 2, 1, 2, 3, 1, 3, 3, 2, 4, 3, 2, 1, 3, 2, 1, 3, 4, 4, 3, 3, 2, 4, 3, 1, 3, 1, 1, 3, 3, 1, 2, 2, 4, 1, 4, 3, 1, 2, + 4, 2, 2, 4, 1, 1, 1, 1, 2, 3, 4, 3, 4, 1, 2, 2, 1, 3, 2, 2, 3, 1, 2, 3, 1, 2, 2, 3, 3, 1, 4, 3, 2, 2, 4, 2, 2, 1, 1, 3, 4, 2, 1, 1, 3, 2, 3, 1, 2, 2, 4, 1, 3, 3, 3, 4, 2, 2, 4, 4, 3, 1, 2, 2, 3, 3, 1, 2, 1, 2, 2, 3, 4, 1, 4, 3, 4, 3, 1, 2, 2, 2, 1, 1, 2, 1, 2, 3, 2, 4, 4, 1, 3, 2, 4, 4, 3, 1, 1, 1, + 3, 2, 1, 3, 2, 1, 4, 2, 1, 3, 1, 2, 2, 4, 1, 1, 3, 3, 4, 3, 4, 2, 3, 2, 2, 1, 2, 1, 3, 2, 4, 2, 3, 4, 4, 3, 2, 4, 3, 2, 3, 4, 4, 1, 1, 4, 4, 4, 1, 1, 1, 3, 3, 3, 1, 2, 2, 1, 1, 4, 1, 2, 3, 2, 3, 4, 1, 2, 1, 2, 1, 1, 2, 3, 1, 4, 4, 1, 3, 2, 2, 4, 4, 3, 4, 4, 3, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 4, 3, 4, + 1, 2, 4, 4, 3, 1, 4, 2, 4, 3, 4, 2, 1, 1, 1, 3, 1, 2, 1, 4, 2, 1, 4, 3, 3, 4, 4, 4, 1, 3, 2, 1, 2, 2, 1, 2, 3, 1, 3, 3, 3, 3, 2, 1, 1, 2, 4, 4, 2, 3, 3, 3, 3, 4, 4, 4, 4, 1, 3, 3, 3, 2, 1, 1, 3, 4, 2, 3, 4, 2, 4, 1, 3, 4, 1, 3, 2, 1, 3, 2, 2, 4, 2, 3, 2, 3, 3, 4, 1, 3, 3, 2, 2, 3, 1, 2, 3, 2, 3, 1, + 3, 4, 2, 3, 4, 1, 2, 4, 4, 4, 1, 2, 1, 4, 2, 3, 4, 3, 2, 2, 3, 1, 2, 1, 2, 4, 3, 4, 2, 2, 3, 4, 3, 4, 4, 1, 4, 1, 4, 3, 3, 1, 2, 1, 2, 2, 2, 4, 4, 1, 1, 4, 3, 1, 2, 2, 3, 1, 4, 1, 1, 1, 2, 2, 1, 4, 3, 4, 1, 4, 2, 1, 2, 1, 4, 1, 2, 1, 3, 2, 3, 3, 4, 4, 4, 3, 4, 1, 4, 4, 1, 4, 3, 3, 3, 1, 1, 3, 1, 1, + 2, 3, 2, 4, 3, 4, 4, 1, 4, 2, 4, 2, 1, 3, 4, 1, 2, 2, 3, 3, 2, 1, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 2, 1, 4, 4, 3, 3, 3, 1, 1, 3, 2, 2, 2, 2, 2, 3, 2, 1, 1, 1, 4, 4, 2, 2, 4, 3, 4, 4, 3, 4, 1, 4, 4, 3, 4, 4, 1, 1, 2, 1, 3, 1, 2, 4, 3, 1, 4, 3, 1, 3, 4, 1, 2, 3, 3, 2, 4, 3, 1, 4, 2, 4, 1, 3, 1, 1, 2, + 3, 1, 4, 4, 4, 1, 1, 2, 1, 3, 2, 3, 3, 1, 1, 4, 1, 2, 1, 2, 1, 3, 3, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 4, 1, 2, 4, 3, 2, 2, 1, 4, 4, 2, 2, 4, 4, 4, 1, 3, 4, 4, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 4, 3, 3, 4, 2, 3, 4, 3, 4, 2, 1, 1, 1, 4, 3, 2, 4, 1, 2, 2, 4, 1, 1, 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 1, 1, 4, + 1, 4, 4, 1, 3, 4, 4, 4, 3, 2, 3, 1, 1, 3, 4, 2, 3, 1, 3, 4, 2, 1, 1, 3, 1, 2, 4, 3, 2, 4, 3, 4, 1, 1, 2, 4, 1, 4, 1, 1, 3, 3, 2, 1, 3, 1, 4, 1, 4, 1, 1, 1, 2, 2, 4, 2, 2, 3, 2, 4, 1, 3, 4, 4, 1, 2, 2, 1, 2, 3, 1, 4, 4, 1, 4, 3, 2, 4, 2, 4, 3, 1, 2, 4, 3, 2, 3, 3, 4, 4, 3, 4, 4, 2, 2, 3, 1, 3, 2, 2, + 4, 1, 1, 1, 3, 1, 1, 1, 1, 2, 3, 1, 4, 3, 4, 3, 2, 4, 1, 1, 4, 2, 1, 2, 1, 2, 1, 2, 1, 3, 2, 1, 1, 2, 4, 2, 1, 1, 4, 1, 4, 1, 1, 4, 1, 1, 1, 4, 3, 1, 4, 3, 1, 4, 1, 4, 1, 2, 3, 3, 4, 1, 3, 3, 4, 1, 2, 1, 2, 2, 3, 2, 4, 3, 1, 3, 2, 2, 3, 3, 3, 4, 1, 2, 3, 4, 2, 1, 1, 3, 4, 3, 4, 1, 3, 2, 4, 4, 1, 3, + 4, 2, 3, 4, 1, 2, 1, 4, 4, 1, 3, 4, 4, 4, 3, 4, 4, 1, 3, 1, 4, 1, 2, 4, 2, 2, 2, 4, 1, 2, 2, 1, 2, 4, 2, 4, 3, 4, 2, 4, 3, 1, 3, 1, 3, 2, 1, 2, 4, 4, 2, 2, 4, 4, 4, 4, 1, 2, 1, 4, 2, 3, 2, 1, 3, 4, 1, 4, 1, 3, 4, 1, 4, 3, 1, 1, 3, 2, 1, 3, 1, 1, 4, 3, 4, 2, 3, 4, 2, 4, 2, 2, 2, 4, 2, 3, 3, 1, 2, 2, + 3, 4, 2, 4, 1, 4, 4, 2, 2, 4, 2, 4, 2, 3, 3, 2, 4, 4, 2, 1, 2, 4, 2, 2, 1, 3, 2, 1, 2, 4, 2, 1, 2, 2, 1, 4, 3, 1, 2, 2, 2, 3, 2, 3, 3, 1, 4, 4, 2, 2, 3, 2, 3, 4, 1, 3, 3, 1, 2, 2, 4, 2, 4, 3, 3, 4, 4, 1, 1, 1, 2, 3, 3, 4, 1, 3, 3, 3, 1, 1, 4, 3, 3, 1, 2, 1, 2, 1, 1, 3, 1, 4, 4, 3, 3, 4, 4, 2, 2, 4, + 3, 4, 1, 2, 2, 4, 1, 1, 3, 4, 3, 1, 1, 1, 1, 2, 2, 4, 3, 3, 2, 3, 1, 1, 3, 2, 4, 4, 2, 3, 2, 1, 1, 1, 1, 2, 2, 4, 3, 1, 1, 4, 3, 1, 1, 3, 1, 2, 3, 4, 4, 3, 2, 2, 4, 4, 4, 3, 1, 1, 1, 3, 1, 4, 3, 4, 2, 4, 2, 3, 4, 1, 4, 3, 1, 3, 3, 2, 4, 4, 1, 3, 2, 3, 2, 2, 2, 3, 2, 2, 2, 1, 2, 2, 4, 2, 4, 3, 2, 1, + 4, 3, 3, 1, 2, 4, 4, 2, 2, 3, 1, 3, 1, 2, 4, 3, 3, 1, 1, 2, 2, 2, 1, 4, 4, 4, 4, 1, 3, 4, 2, 3, 1, 1, 2, 4, 2, 1, 2, 3, 2, 1, 1, 3, 3, 2, 3, 2, 3, 3, 3, 4, 1, 1, 3, 4, 3, 2, 4, 1, 1, 2, 4, 1, 2, 3, 1, 2, 3, 1, 4, 2, 1, 2, 1, 4, 1, 3, 2, 4, 2, 2, 1, 3, 2, 4, 4, 2, 2, 1, 4, 4, 4, 1, 3, 4, 1, 1, 2, 1, + 2, 4, 3, 1, 4, 4, 2, 2, 1, 4, 1, 1, 2, 3, 4, 3, 4, 1, 4, 3, 1, 1, 4, 3, 1, 4, 4, 2, 2, 3, 1, 3, 1, 2, 4, 3, 3, 4, 4, 4, 3, 4, 3, 3, 2, 2, 4, 1, 3, 3, 2, 2, 3, 1, 3, 3, 2, 4, 3, 2, 3, 4, 3, 1, 2, 2, 4, 2, 4, 3, 4, 1, 1, 3, 3, 1, 1, 1, 2, 1, 4, 4, 1, 3, 1, 2, 4, 4, 1, 2, 2, 2, 4, 2, 3, 1, 2, 1, 3, 1, + 4, 4, 3, 3, 2, 4, 3, 1, 2, 2, 2, 4, 4, 2, 3, 3, 4, 2, 3, 4, 1, 4, 2, 3, 1, 2, 2, 2, 4, 4, 4, 3, 1, 1, 2, 4, 1, 3, 4, 4, 1, 3, 4, 2, 4, 4, 1, 1, 4, 4, 1, 3, 1, 3, 2, 2, 1, 4, 2, 2, 3, 4, 4, 4, 2, 3, 3, 2, 3, 4, 3, 4, 2, 3, 3, 1, 3, 2, 3, 3, 4, 2, 4, 3, 3, 4, 2, 3, 4, 1, 4, 3, 2, 3, 1, 1, 4, 2, 2, 2, + 2, 1, 3, 4, 4, 3, 4, 2, 4, 1, 1, 3, 3, 4, 4, 3, 1, 4, 1, 1, 4, 2, 1, 4, 2, 3, 2, 2, 2, 1, 1, 2, 2, 4, 1, 1, 3, 4, 4, 1, 4, 2, 4, 1, 2, 2, 1, 2, 1, 1, 4, 1, 3, 3, 1, 2, 1, 3, 1, 4, 1, 3, 2, 3, 2, 3, 4, 1, 2, 1, 2, 2, 4, 2, 2, 2, 2, 3, 4, 1, 3, 4, 1, 2, 4, 4, 4, 3, 3, 2, 1, 1, 2, 2, 4, 4, 1, 4, 2, 1, + 4, 1, 2, 3, 3, 3, 4, 4, 2, 1, 1, 4, 4, 2, 3, 1, 4, 2, 3, 2, 4, 4, 4, 4, 2, 4, 1, 4, 3, 3, 4, 1, 2, 1, 3, 4, 4, 3, 3, 2, 1, 3, 3, 2, 3, 4, 1, 4, 4, 1, 3, 3, 1, 2, 4, 1, 2, 4, 3, 2, 1, 2, 1, 1, 2, 2, 3, 1, 3, 3, 2, 1, 3, 4, 4, 1, 2, 3, 3, 3, 2, 4, 3, 1, 3, 2, 3, 4, 1, 2, 2, 4, 2, 1, 2, 2, 2, 1, 4, 2, + 1, 1, 1, 1, 4, 2, 4, 1, 4, 2, 2, 3, 4, 3, 1, 2, 2, 3, 3, 2, 1, 1, 4, 4, 4, 1, 1, 1, 3, 3, 2, 1, 4, 3, 2, 2, 3, 4, 3, 1, 1, 4, 4, 4, 1, 2, 1, 1, 4, 3, 4, 1, 4, 2, 3, 1, 1, 4, 3, 4, 2, 4, 3, 2, 2, 3, 1, 3, 2, 2, 2, 3, 4, 2, 2, 4, 3, 3, 1, 4, 4, 1, 1, 2, 3, 1, 2, 4, 4, 4, 4, 3, 1, 2, 1, 1, 4, 2, 2, 4, + 1, 2, 4, 4, 4, 3, 1, 1, 4, 1, 3, 1, 4, 3, 1, 2, 1, 1, 1, 3, 4, 2, 2, 4, 3, 2, 4, 4, 2, 4, 2, 3, 1, 3, 1, 2, 2, 1, 2, 1, 3, 4, 2, 4, 3, 3, 2, 3, 1, 3, 2, 3, 4, 4, 4, 3, 4, 2, 4, 1, 4, 4, 3, 1, 3, 2, 1, 4, 2, 1, 3, 3, 1, 4, 1, 3, 4, 4, 3, 4, 4, 1, 4, 4, 1, 2, 4, 4, 3, 3, 4, 1, 2, 1, 4, 3, 4, 4, 1, 2, + 2, 4, 2, 2, 2, 4, 3, 1, 1, 2, 4, 1, 1, 3, 4, 3, 3, 4, 3, 3, 2, 3, 4, 3, 2, 3, 4, 3, 2, 3, 2, 2, 1, 1, 3, 4, 3, 2, 4, 4, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 3, 2, 2, 4, 1, 4, 4, 2, 3, 4, 4, 4, 1, 1, 2, 1, 1, 3, 2, 4, 2, 4, 1, 2, 4, 3, 1, 4, 1, 4, 1, 2, 1, 3, 3, 1, 3, 1, 2, 2, 1, 2, 1, 3, 4, 3, 2, 2, + 3, 3, 3, 1, 4, 3, 2, 3, 4, 2, 4, 1, 2, 4, 3, 1, 4, 4, 1, 4, 4, 4, 4, 1, 4, 2, 3, 1, 3, 2, 1, 1, 3, 2, 1, 2, 4, 1, 4, 1, 2, 1, 4, 1, 1, 1, 3, 1, 1, 1, 1, 3, 2, 3, 2, 2, 2, 3, 1, 3, 2, 1, 3, 1, 3, 4, 4, 4, 1, 2, 1, 3, 1, 3, 1, 3, 2, 4, 3, 4, 2, 4, 4, 1, 4, 2, 1, 4, 1, 3, 1, 3, 4, 1, 3, 1, 1, 1, 3, 1, + 4, 3, 4, 1, 1, 3, 3, 4, 2, 4, 1, 4, 2, 3, 3, 2, 1, 3, 3, 4, 4, 4, 3, 2, 1, 2, 1, 2, 3, 1, 4, 1, 2, 4, 4, 4, 1, 2, 4, 1, 3, 3, 3, 4, 2, 1, 4, 2, 2, 1, 2, 3, 2, 1, 2, 1, 3, 3, 1, 1, 4, 2, 1, 4, 2, 2, 2, 4, 1, 2, 2, 2, 1, 4, 4, 2, 2, 4, 3, 4, 1, 4, 2, 4, 4, 4, 4, 2, 3, 2, 3, 1, 1, 2, 2, 2, 1, 4, 3, 4, + 2, 2, 2, 2, 4, 4, 2, 4, 4, 1, 3, 3, 4, 4, 1, 4, 4, 1, 1, 3, 4, 1, 4, 1, 3, 4, 3, 2, 3, 3, 1, 4, 3, 2, 1, 3, 4, 2, 4, 2, 2, 3, 1, 2, 2, 4, 1, 4, 3, 2, 4, 4, 4, 3, 4, 3, 3, 1, 4, 3, 1, 3, 2, 4, 4, 1, 3, 4, 3, 4, 2, 4, 1, 4, 3, 2, 4, 4, 2, 1, 2, 1, 3, 1, 4, 2, 1, 4, 3, 2, 1, 1, 1, 2, 3, 1, 4, 1, 1, 1, + 1, 4, 4, 2, 2, 1, 4, 2, 1, 3, 1, 1, 2, 3, 2, 4, 1, 2, 4, 3, 2, 1, 1, 1, 1, 3, 4, 3, 3, 2, 1, 1, 1, 3, 1, 1, 2, 3, 4, 1, 2, 1, 1, 2, 3, 4, 2, 1, 1, 1, 4, 4, 2, 3, 4, 4, 2, 1, 1, 3, 3, 2, 3, 4, 3, 2, 3, 2, 3, 4, 4, 3, 3, 3, 2, 4, 4, 1, 1, 2, 1, 2, 2, 3, 4, 4, 4, 1, 1, 2, 1, 4, 1, 1, 2, 3, 1, 3, 2, 2, + 3, 1, 4, 4, 2, 1, 4, 1, 4, 4, 3, 4, 1, 2, 3, 1, 4, 3, 4, 4, 2, 3, 2, 2, 3, 2, 4, 1, 1, 4, 3, 2, 3, 4, 1, 2, 1, 2, 1, 4, 1, 1, 1, 4, 2, 3, 4, 1, 3, 3, 2, 2, 1, 3, 2, 3, 4, 4, 3, 2, 3, 1, 2, 4, 1, 2, 3, 1, 2, 3, 2, 3, 2, 2, 1, 4, 1, 4, 4, 3, 3, 4, 3, 3, 3, 4, 1, 2, 3, 2, 1, 1, 2, 1, 2, 4, 3, 3, 2, 1, + 3, 3, 1, 3, 3, 3, 2, 2, 3, 3, 4, 1, 3, 2, 1, 3, 1, 1, 1, 4, 4, 1, 1, 1, 2, 1, 2, 2, 3, 1, 4, 2, 1, 4, 3, 2, 3, 4, 1, 4, 2, 1, 1, 4, 1, 1, 1, 1, 3, 1, 4, 1, 2, 4, 3, 1, 3, 2, 3, 1, 3, 3, 2, 4, 4, 3, 3, 2, 4, 1, 1, 2, 1, 3, 2, 3, 2, 2, 1, 4, 1, 2, 4, 2, 3, 3, 2, 2, 1, 3, 2, 2, 1, 2, 3, 1, 3, 1, 2, 1, + 2, 1, 1, 4, 4, 3, 2, 2, 2, 3, 2, 4, 3, 1, 4, 1, 1, 2, 2, 2, 4, 4, 3, 2, 2, 1, 3, 2, 3, 2, 2, 4, 1, 4, 3, 1, 3, 3, 1, 1, 4, 1, 3, 4, 2, 2, 2, 3, 2, 3, 2, 4, 4, 4, 2, 4, 2, 4, 3, 3, 4, 3, 3, 2, 1, 4, 1, 4, 1, 4, 3, 2, 2, 2, 4, 1, 2, 4, 3, 1, 1, 2, 4, 3, 2, 4, 1, 1, 3, 2, 1, 3, 1, 3, 3, 4, 1, 2, 4, 1, + 2, 2, 1, 3, 3, 4, 3, 4, 3, 3, 1, 1, 4, 4, 2, 1, 1, 2, 4, 4, 2, 3, 4, 2, 1, 4, 3, 3, 1, 4, 1, 2, 4, 2, 2, 3, 3, 3, 4, 4, 4, 1, 3, 4, 4, 4, 4, 2, 1, 4, 1, 2, 3, 4, 3, 1, 4, 2, 4, 4, 3, 3, 2, 3, 2, 4, 2, 1, 3, 2, 4, 2, 2, 2, 2, 3, 2, 2, 3, 3, 4, 3, 4, 2, 1, 3, 3, 4, 4, 3, 1, 2, 1, 1, 3, 3, 1, 2, 2, 3, + 2, 3, 4, 4, 4, 3, 4, 3, 3, 3, 2, 2, 1, 2, 4, 1, 2, 4, 4, 2, 4, 4, 1, 1, 3, 2, 2, 2, 4, 4, 3, 4, 4, 2, 1, 1, 3, 2, 1, 3, 3, 1, 3, 2, 2, 1, 1, 1, 3, 2, 2, 3, 2, 3, 2, 3, 1, 4, 2, 1, 1, 2, 2, 3, 2, 1, 3, 4, 2, 3, 2, 3, 4, 1, 4, 3, 1, 4, 3, 4, 4, 4, 1, 3, 1, 1, 2, 2, 3, 3, 1, 4, 3, 1, 3, 3, 1, 2, 1, 3, + 2, 3, 1, 4, 3, 1, 1, 3, 3, 2, 2, 1, 3, 2, 1, 2, 1, 1, 1, 2, 4, 1, 3, 3, 4, 1, 4, 3, 1, 2, 3, 3, 2, 2, 2, 3, 3, 4, 3, 2, 4, 2, 4, 3, 4, 2, 4, 1, 1, 1, 3, 4, 4, 3, 2, 2, 1, 2, 2, 4, 3, 2, 1, 2, 2, 4, 4, 4, 3, 1, 2, 4, 3, 1, 1, 4, 3, 1, 2, 3, 1, 4, 4, 3, 1, 4, 1, 4, 3, 2, 2, 2, 1, 2, 1, 3, 2, 3, 3, 4, + 1, 2, 3, 3, 2, 1, 3, 1, 2, 3, 4, 2, 1, 3, 3, 4, 4, 2, 2, 3, 1, 2, 4, 3, 1, 4, 4, 1, 3, 4, 3, 4, 3, 3, 3, 4, 2, 3, 1, 2, 2, 1, 1, 4, 4, 4, 1, 3, 1, 1, 1, 4, 4, 2, 1, 2, 3, 4, 3, 1, 2, 3, 3, 4, 1, 1, 4, 1, 1, 3, 4, 3, 2, 2, 3, 4, 2, 3, 3, 3, 1, 4, 3, 3, 4, 3, 3, 3, 1, 4, 1, 4, 4, 4, 2, 2, 1, 1, 1, 2, + 3, 3, 3, 1, 1, 2, 1, 1, 3, 2, 3, 4, 3, 2, 3, 1, 2, 4, 4, 1, 3, 4, 3, 3, 4, 3, 1, 4, 2, 3, 4, 1, 3, 3, 4, 1, 4, 2, 1, 4, 2, 2, 1, 2, 1, 3, 3, 4, 2, 2, 1, 2, 1, 1, 3, 1, 3, 3, 1, 3, 1, 2, 1, 3, 4, 2, 2, 3, 4, 4, 1, 1, 1, 3, 2, 2, 3, 1, 1, 3, 1, 1, 3, 3, 4, 2, 1, 3, 3, 2, 1, 4, 2, 2, 1, 4, 4, 2, 4, 3, + 3, 4, 1, 2, 2, 4, 4, 4, 3, 1, 2, 4, 2, 4, 3, 2, 4, 3, 1, 3, 3, 3, 3, 2, 1, 1, 1, 4, 2, 3, 4, 4, 3, 4, 3, 3, 1, 1, 4, 1, 1, 1, 1, 4, 2, 1, 2, 1, 2, 4, 3, 4, 4, 4, 2, 2, 1, 1, 4, 4, 3, 4, 4, 3, 1, 3, 2, 2, 3, 3, 1, 4, 2, 1, 3, 1, 3, 1, 3, 1, 4, 4, 4, 2, 4, 4, 2, 2, 4, 4, 4, 4, 3, 2, 2, 1, 4, 4, 4, 3, + 4, 4, 1, 1, 4, 2, 2, 4, 4, 3, 1, 3, 1, 4, 4, 4, 4, 4, 1, 3, 1, 4, 4, 4, 1, 1, 4, 3, 1, 3, 4, 2, 1, 4, 1, 2, 2, 4, 4, 1, 1, 4, 4, 1, 1, 4, 4, 2, 2, 4, 3, 1, 2, 2, 1, 2, 4, 2, 4, 1, 4, 4, 3, 1, 1, 2, 3, 2, 4, 3, 4, 1, 3, 2, 4, 3, 1, 1, 4, 3, 3, 4, 3, 1, 1, 2, 4, 1, 1, 3, 1, 2, 4, 1, 4, 1, 3, 1, 2, 3, + 3, 2, 4, 2, 1, 3, 3, 3, 4, 3, 3, 2, 4, 4, 1, 1, 2, 2, 2, 3, 2, 1, 2, 4, 3, 3, 3, 1, 4, 2, 2, 1, 1, 3, 2, 1, 3, 3, 2, 2, 3, 1, 1, 3, 2, 3, 1, 2, 4, 4, 1, 2, 4, 1, 4, 3, 3, 4, 4, 2, 4, 3, 4, 4, 4, 2, 3, 2, 3, 4, 3, 2, 3, 3, 4, 1, 2, 4, 1, 1, 3, 2, 4, 4, 4, 4, 2, 4, 3, 4, 1, 4, 1, 1, 3, 2, 4, 2, 1, 2, + 4, 2, 2, 4, 3, 3, 4, 2, 2, 1, 2, 4, 2, 1, 1, 4, 2, 3, 2, 1, 1, 1, 3, 4, 2, 3, 4, 3, 1, 4, 2, 1, 3, 2, 2, 2, 2, 3, 2, 4, 1, 1, 1, 3, 3, 2, 2, 4, 4, 4, 4, 1, 1, 1, 3, 3, 3, 3, 1, 3, 1, 3, 2, 1, 2, 1, 2, 3, 3, 3, 3, 1, 3, 3, 4, 2, 1, 3, 3, 2, 1, 1, 4, 3, 3, 1, 1, 4, 1, 4, 4, 2, 2, 1, 1, 2, 2, 4, 4, 3, + 1, 4, 1, 1, 1, 3, 3, 1, 2, 3, 1, 3, 4, 4, 1, 4, 2, 2, 2, 2, 1, 4, 3, 4, 4, 3, 2, 1, 4, 1, 4, 4, 2, 3, 4, 1, 2, 3, 2, 1, 3, 4, 3, 3, 3, 3, 4, 2, 2, 4, 1, 3, 1, 1, 3, 1, 1, 2, 3, 1, 2, 3, 4, 1, 4, 2, 2, 2, 2, 2, 4, 3, 3, 2, 1, 2, 1, 4, 3, 2, 3, 2, 4, 2, 2, 2, 1, 4, 4, 4, 1, 3, 2, 3, 3, 4, 3, 3, 1, 3, + 1, 4, 4, 3, 2, 1, 2, 3, 1, 2, 1, 3, 4, 4, 2, 4, 4, 4, 1, 1, 2, 1, 1, 2, 4, 3, 3, 1, 4, 2, 2, 2, 2, 1, 4, 1, 1, 3, 4, 1, 2, 3, 4, 2, 4, 3, 4, 2, 1, 1, 2, 3, 2, 3, 4, 4, 2, 1, 4, 3, 1, 2, 2, 1, 3, 2, 2, 4, 3, 2, 1, 4, 4, 2, 4, 3, 4, 3, 4, 2, 2, 2, 3, 4, 2, 2, 2, 4, 2, 2, 4, 3, 4, 4, 4, 4, 2, 4, 2, 3, + 4, 2, 4, 2, 2, 3, 2, 1, 3, 1, 2, 3, 3, 1, 2, 1, 1, 1, 2, 4, 4, 3, 2, 4, 1, 1, 1, 4, 4, 2, 2, 1, 1, 2, 3, 2, 1, 4, 4, 3, 3, 4, 1, 1, 4, 1, 3, 3, 4, 4, 1, 4, 4, 4, 1, 3, 3, 3, 2, 4, 2, 3, 4, 1, 4, 1, 4, 4, 2, 4, 2, 4, 3, 2, 3, 3, 2, 1, 1, 4, 1, 1, 1, 3, 4, 2, 1, 3, 3, 3, 1, 3, 1, 1, 2, 3, 2, 4, 4, 4, + 4, 1, 4, 4, 4, 4, 1, 4, 4, 4, 1, 2, 4, 1, 1, 3, 3, 4, 2, 3, 2, 1, 1, 2, 1, 1, 3, 4, 2, 1, 2, 3, 3, 4, 4, 1, 3, 2, 2, 2, 2, 4, 2, 3, 2, 2, 4, 1, 1, 4, 1, 4, 4, 3, 2, 3, 3, 4, 3, 2, 2, 2, 3, 1, 2, 1, 4, 4, 4, 4, 4, 1, 1, 3, 1, 4, 1, 4, 4, 1, 3, 4, 1, 2, 1, 4, 2, 1, 1, 4, 1, 3, 2, 2, 4, 3, 4, 2, 3, 1], + "height":100, + "id":1, + "name":"background", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":100, + "x":0, + "y":0 + }], + "nextlayerid":2, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.10.1", + "tileheight":16, + "tilesets":[ + { + "columns":8, + "firstgid":1, + "image":"..\/tiles\/tileset.png", + "imageheight":15968, + "imagewidth":128, + "margin":0, + "name":"pokemon", + "spacing":0, + "tilecount":7984, + "tileheight":16, + "tilewidth":16 + }], + "tilewidth":16, + "type":"map", + "version":"1.10", + "width":100 +} \ No newline at end of file diff --git a/ui/dist/assets/tilemaps/json/town.json b/ui/dist/assets/tilemaps/json/town.json new file mode 100644 index 0000000000000000000000000000000000000000..fc780a4cfb4b080446cbe59844411532db20d4fb --- /dev/null +++ b/ui/dist/assets/tilemaps/json/town.json @@ -0,0 +1,72467 @@ +{ "compressionlevel":-1, + "height":35, + "infinite":false, + "layers":[ + { + "data":[4, 1, 1, 4, 3, 2, 2, 1, 3, 4, 2, 2, 1, 4, 2, 1, 3, 3, 4, 2, 2, 3, 4, 2, 4, 3, 1, 2, 2, 2, 4, 1, 3, 2, 3, 1, 4, 3, 2, 3, 3, 2, 2, 3, 3, 1, 1, 1, + 3, 1, 4, 2, 2, 1, 3, 4, 4, 3, 1, 2, 4, 3, 1, 3, 4, 4, 4, 4, 3, 2, 25, 26, 27, 3, 3, 3, 2, 2, 1, 1, 1, 4, 2, 3, 4, 3, 3, 3, 2, 3, 3, 1, 1, 3, 2, 2, + 1, 2, 3, 4, 1, 4, 2, 3, 3, 4, 4, 1, 3, 2, 4, 3, 2, 4, 3, 4, 4, 2, 25, 26, 27, 3, 3, 2, 3, 2, 17, 18, 18, 18, 18, 18, 18, 19, 1, 4, 4, 1, 3, 2, 1, 2, 3, 3, + 4, 3, 1, 4, 4, 4, 2, 1, 3, 4, 4, 3, 4, 1, 2, 4, 3, 2, 2, 3, 1, 2, 25, 26, 27, 1, 2, 3, 3, 2, 25, 26, 26, 26, 26, 26, 26, 27, 3, 3, 2, 2, 3, 2, 2, 4, 4, 3, + 2, 3, 4, 1, 1, 2, 2, 4, 1, 1, 17, 18, 19, 3, 1, 3, 2, 1, 1, 4, 4, 3, 25, 26, 27, 4, 3, 4, 1, 3, 25, 26, 45, 34, 34, 44, 26, 27, 4, 3, 1, 4, 4, 2, 1, 3, 4, 4, + 4, 1, 4, 4, 2, 2, 1, 1, 3, 3, 25, 26, 27, 2, 4, 4, 2, 3, 4, 4, 2, 2, 25, 26, 27, 4, 2, 3, 2, 4, 25, 26, 27, 1, 3, 25, 26, 27, 3, 4, 4, 2, 4, 4, 3, 2, 3, 2, + 2, 4, 4, 3, 3, 2, 4, 1, 3, 3, 4, 1, 3, 2, 1, 1, 3, 4, 4, 4, 3, 1, 25, 26, 27, 3, 4, 2, 1, 1, 2, 3, 4, 1, 2, 25, 26, 27, 2, 4, 4, 4, 1, 1, 4, 3, 1, 4, + 3, 2, 1, 2, 2, 4, 4, 2, 4, 4, 2, 4, 4, 2, 4, 4, 4, 1, 4, 4, 3, 3, 25, 26, 27, 4, 4, 1, 4, 2, 2, 1, 2, 2, 4, 25, 26, 27, 2, 3, 1, 1, 3, 2, 4, 2, 1, 2, + 4, 3, 1, 1, 4, 1, 3, 3, 1, 4, 3, 2, 1, 1, 1, 1, 4, 2, 3, 2, 4, 2, 25, 26, 27, 1, 3, 3, 2, 2, 1, 4, 1, 3, 1, 25, 26, 27, 2, 1, 4, 2, 3, 4, 1, 3, 1, 2, + 3, 3, 1, 2, 1, 4, 1, 1, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 36, 26, 37, 18, 18, 18, 18, 18, 18, 18, 18, 19, 2, 25, 26, 27, 4, 3, 3, 3, 4, 2, 2, 1, 4, 2, + 4, 3, 2, 2, 2, 2, 3, 1, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 2, 25, 26, 27, 1, 2, 2, 4, 1, 4, 4, 1, 4, 4, + 3, 2, 4, 4, 2, 4, 3, 2, 25, 26, 45, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 4, 25, 26, 27, 4, 3, 2, 1, 2, 3, 1, 4, 3, 3, + 4, 3, 3, 2, 3, 2, 1, 2, 25, 26, 27, 1, 2, 3, 3, 3, 3, 2, 2, 4, 4, 2, 2, 2, 3, 2, 4, 4, 1, 2, 2, 2, 2, 3, 4, 25, 26, 27, 3, 2, 1, 4, 3, 2, 4, 1, 3, 2, + 4, 4, 1, 3, 3, 4, 4, 2, 25, 26, 27, 4, 2, 3, 3, 4, 1, 3, 2, 1, 2, 3, 4, 4, 4, 2, 2, 1, 1, 3, 1, 1, 2, 2, 3, 25, 26, 27, 1, 3, 1, 4, 4, 2, 3, 1, 3, 3, + 3, 2, 2, 3, 3, 4, 3, 2, 25, 26, 27, 1, 1, 4, 4, 2, 4, 4, 2, 4, 1, 4, 3, 1, 3, 2, 4, 1, 3, 1, 4, 3, 4, 2, 1, 25, 26, 27, 2, 4, 2, 4, 1, 4, 1, 4, 1, 4, + 2, 4, 4, 2, 2, 1, 3, 2, 25, 26, 37, 18, 18, 18, 18, 18, 18, 18, 18, 19, 2, 1, 3, 3, 1, 3, 1, 3, 2, 1, 2, 3, 1, 3, 3, 25, 26, 27, 3, 4, 4, 2, 4, 4, 1, 2, 4, 2, + 3, 2, 2, 4, 4, 1, 1, 4, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 2, 1, 3, 2, 4, 4, 3, 1, 1, 4, 3, 3, 4, 2, 1, 25, 26, 27, 4, 4, 2, 3, 3, 3, 2, 1, 3, 4, + 18, 18, 18, 18, 18, 18, 18, 18, 36, 26, 45, 34, 34, 34, 34, 34, 34, 44, 26, 27, 3, 2, 3, 1, 1, 2, 2, 1, 2, 4, 4, 2, 3, 3, 4, 25, 26, 27, 2, 2, 3, 4, 3, 1, 1, 2, 4, 4, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 2, 3, 1, 1, 3, 2, 25, 26, 27, 1, 2, 1, 4, 2, 2, 3, 4, 3, 1, 1, 4, 2, 2, 2, 25, 26, 27, 1, 1, 2, 4, 3, 1, 4, 2, 1, 3, + 34, 34, 34, 34, 34, 34, 34, 34, 44, 26, 27, 1, 3, 3, 3, 4, 4, 25, 26, 37, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 36, 26, 27, 3, 3, 1, 2, 3, 4, 2, 4, 1, 2, + 1, 1, 2, 2, 1, 2, 1, 4, 25, 26, 27, 1, 2, 3, 4, 3, 4, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 2, 2, 1, 4, 1, 2, 3, 2, 4, 1, + 2, 4, 1, 1, 2, 1, 3, 2, 25, 26, 27, 3, 3, 3, 1, 3, 3, 25, 26, 45, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 3, 3, 4, 3, 1, 1, 3, 4, 4, 1, + 1, 4, 1, 4, 1, 4, 1, 2, 25, 26, 27, 1, 1, 3, 1, 3, 1, 25, 26, 27, 3, 4, 3, 1, 3, 4, 1, 4, 3, 2, 4, 3, 2, 2, 2, 3, 3, 2, 2, 1, 2, 4, 2, 4, 3, 3, 1, 4, + 1, 1, 1, 3, 1, 2, 3, 4, 25, 26, 27, 1, 3, 4, 2, 2, 2, 25, 26, 27, 4, 4, 1, 3, 2, 1, 4, 3, 2, 4, 2, 4, 4, 1, 2, 3, 2, 3, 2, 2, 1, 3, 2, 2, 3, 3, 3, 3, + 1, 4, 3, 4, 2, 1, 1, 1, 25, 26, 27, 4, 2, 3, 2, 1, 1, 25, 26, 27, 2, 2, 3, 3, 4, 4, 2, 4, 1, 1, 3, 1, 4, 2, 3, 4, 1, 3, 1, 1, 2, 1, 1, 3, 2, 4, 1, 3, + 1, 4, 3, 3, 3, 4, 2, 2, 25, 26, 27, 1, 2, 3, 4, 2, 3, 25, 26, 27, 4, 1, 3, 3, 2, 3, 1, 1, 2, 1, 4, 4, 3, 4, 4, 1, 4, 4, 4, 1, 4, 1, 1, 2, 1, 4, 4, 1, + 2, 1, 1, 2, 4, 4, 1, 4, 25, 26, 37, 18, 18, 18, 18, 18, 18, 36, 26, 27, 2, 1, 3, 2, 4, 1, 2, 3, 4, 2, 3, 2, 3, 3, 2, 4, 2, 2, 4, 1, 1, 1, 4, 2, 4, 3, 2, 3, + 1, 3, 2, 4, 4, 1, 2, 3, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 4, 4, 1, 1, 4, 1, 3, 4, 4, 4, 3, 1, 2, 1, 2, 2, 3, 4, 4, 1, 2, 3, 4, 1, 1, 1, 3, 2, + 3, 2, 1, 3, 4, 3, 4, 3, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 4, 4, 4, 3, 3, 4, 3, 2, 4, 1, 3, 4, 4, 3, 1, 4, 1, 2, 1, 2, 2, 3, 2, 3, 4, 2, 1, 4, + 4, 1, 1, 3, 2, 1, 2, 3, 1, 3, 3, 3, 4, 1, 2, 3, 2, 2, 3, 3, 2, 4, 2, 1, 1, 4, 4, 3, 3, 2, 4, 2, 4, 2, 3, 4, 1, 2, 3, 1, 4, 2, 1, 3, 4, 4, 3, 4, + 1, 2, 4, 3, 2, 3, 1, 2, 1, 1, 3, 3, 2, 4, 2, 2, 1, 1, 4, 3, 4, 3, 3, 3, 4, 1, 4, 2, 4, 2, 2, 4, 2, 1, 3, 2, 1, 4, 1, 1, 3, 1, 3, 3, 2, 2, 2, 2, + 3, 2, 1, 4, 1, 3, 2, 3, 1, 3, 1, 1, 4, 4, 4, 4, 1, 1, 4, 4, 4, 1, 2, 3, 3, 2, 1, 3, 3, 3, 4, 4, 4, 4, 4, 2, 1, 1, 2, 3, 3, 3, 3, 2, 2, 1, 4, 4, + 4, 2, 2, 2, 3, 3, 2, 2, 1, 4, 1, 1, 1, 4, 1, 2, 4, 1, 3, 4, 4, 4, 1, 3, 3, 2, 3, 1, 3, 1, 1, 1, 4, 4, 1, 4, 1, 2, 4, 4, 1, 3, 3, 4, 1, 4, 3, 2, + 2, 2, 4, 3, 2, 3, 1, 4, 1, 3, 4, 3, 2, 3, 1, 3, 2, 2, 2, 3, 4, 2, 1, 1, 1, 2, 3, 2, 2, 2, 2, 2, 4, 3, 4, 4, 3, 4, 1, 3, 2, 3, 4, 3, 3, 4, 1, 2, + 3, 4, 3, 2, 3, 2, 3, 2, 4, 3, 1, 3, 2, 3, 3, 4, 4, 1, 4, 4, 3, 1, 3, 2, 2, 1, 1, 1, 4, 1, 1, 1, 4, 4, 4, 2, 1, 4, 3, 2, 3, 3, 1, 1, 3, 4, 3, 3], + "height":35, + "id":1, + "name":"ground", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":48, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 219, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 0, 0, 0, 213, 213, 213, 213, 201, 213, 213, 213, 213, 213, 213, 213, 213, 213, 220, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 213, 213, 213, 213, 213, 213, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 221, 221, 221, 221, 221, 221, 221, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 203, 213, 213, 213, 213, 213, 213, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 221, 221, 221, 221, 221, 221, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 213, 29, 213, 213, 213, 213, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 218, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 217, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":35, + "id":8, + "name":"wall", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":48, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 8, 7, 8, 7, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 15, 16, 15, 16, 15, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, 5, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, 13, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 21, 22, 5, 6, 5, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 5, 6, 5, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 15, 16, 13, 14, 13, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 21, 22, 21, 22, 21, 22, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 8, 7, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 15, 16, 15, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, + 7, 8, 7, 8, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, + 15, 16, 15, 16, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, + 13, 14, 13, 14, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, + 13, 14, 13, 14, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, + 13, 14, 13, 14, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 0, 166, 167, 167, 167, 167, 167, 167, 167, 167, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, + 13, 14, 13, 14, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, + 13, 14, 13, 14, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 5, 6, 5, 6, + 21, 22, 21, 22, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 14, 13, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 21, 22, 21, 22], + "height":35, + "id":6, + "name":"tree", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":48, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, 1340, 1340, 1340, 1340, 1344, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1339, 1340, 1341, 1342, 1343, 1340, 1344, 1339, 1340, 1340, 1340, 1340, 1344, 0, 0, 0, 0, 0, 0, 0, 1339, 1340, 1341, 1342, 1343, 1340, 1344, 0, 0, 0, 1347, 1348, 1348, 1348, 1348, 1352, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1347, 1348, 1349, 1350, 1351, 1348, 1352, 1347, 1348, 1349, 1350, 1351, 1352, 0, 0, 0, 0, 0, 0, 0, 1347, 1348, 1349, 1350, 1351, 1348, 1352, 0, 0, 0, 1355, 1359, 1359, 1359, 1359, 1360, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1355, 1356, 1357, 1358, 1359, 1359, 1360, 1355, 1356, 1357, 1358, 1359, 1360, 0, 0, 0, 0, 0, 0, 0, 1355, 1356, 1357, 1358, 1359, 1359, 1360, 0, 0, 0, 1326, 1327, 1310, 1312, 1335, 1336, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1326, 1318, 1319, 1311, 1327, 1310, 1336, 1326, 1318, 1319, 1320, 1335, 1336, 0, 0, 0, 0, 0, 0, 0, 1326, 1318, 1319, 1311, 1327, 1310, 1336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, 1340, 1340, 1340, 1340, 1340, 1344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1347, 1348, 1349, 1350, 1351, 1348, 1352, 361, 362, 363, 364, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1355, 1356, 1357, 1358, 1359, 1359, 1360, 369, 370, 371, 372, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, 1318, 1319, 1311, 1327, 1310, 1336, 377, 378, 379, 380, 381, 0, 0, 0, 325, 326, 327, 328, 366, 367, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 386, 387, 388, 389, 0, 0, 0, 333, 334, 335, 336, 374, 375, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 394, 395, 396, 397, 0, 0, 0, 341, 342, 343, 344, 382, 383, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 349, 350, 351, 352, 390, 391, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 357, 358, 359, 360, 398, 399, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1193, 1194, 1195, 1196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1201, 1202, 1203, 1204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1247, 1248, 1201, 1202, 1203, 1204, 0, 0, 0, 0, 32, 1339, 1340, 1340, 1340, 1340, 1344, 329, 330, 331, 332, 1339, 1340, 1340, 1340, 1344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1247, 1248, 1209, 1210, 1211, 1212, 0, 0, 0, 0, 0, 1347, 1348, 1349, 1350, 1351, 1352, 337, 338, 339, 340, 1347, 1348, 1348, 1348, 1352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1247, 1248, 1217, 1218, 1219, 1220, 0, 0, 0, 0, 0, 1355, 1356, 1357, 1358, 1359, 1360, 345, 346, 347, 348, 1355, 1359, 1359, 1359, 1360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1225, 1226, 1227, 1228, 0, 0, 0, 0, 0, 1326, 1318, 1319, 1320, 1335, 1336, 353, 354, 355, 356, 1326, 1327, 1334, 1335, 1336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0, 1233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":35, + "id":5, + "name":"house", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":48, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4338, 0, 4338, 0, 4338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4338, 0, 4338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4338, 0, 4338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4338, 0, 4338, 0, 4338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":35, + "id":9, + "name":"flower", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":48, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":11, + "name":"location", + "objects":[ + { + "height":40.6666666666666, + "id":21, + "name":"Bike Store", + "rotation":0, + "type":"", + "visible":true, + "width":56.6666666666667, + "x":195.333333333333, + "y":420 + }, + { + "height":23.3333333333333, + "id":22, + "name":"Pok\u00e9mon Center", + "rotation":0, + "type":"", + "visible":true, + "width":74.6666666666666, + "x":323.333333333333, + "y":276.666666666667 + }, + { + "height":28, + "id":23, + "name":"Pok\u00e9mon Gym", + "rotation":0, + "type":"", + "visible":true, + "width":76.6666666666666, + "x":465.333333333333, + "y":306 + }, + { + "height":26.6666666666667, + "id":24, + "name":"Shop", + "rotation":0, + "type":"", + "visible":true, + "width":58.6666666666667, + "x":434.666666666667, + "y":418 + }, + { + "height":40, + "id":25, + "name":"Park", + "rotation":0, + "type":"", + "visible":true, + "width":73.3333333333333, + "x":195.333333333333, + "y":276 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":10, + "name":"npcs", + "objects":[ + { + "height":0, + "id":12, + "name":"May", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":0 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":208, + "y":240 + }, + { + "height":0, + "id":13, + "name":"Steven", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":2 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":480, + "y":304 + }, + { + "height":0, + "id":14, + "name":"Birch", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":1 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":240, + "y":240 + }, + { + "height":0, + "id":15, + "name":"Maxie", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":3 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":335.5, + "y":272 + }, + { + "height":0, + "id":16, + "name":"Archie", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":4 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":449, + "y":416 + }, + { + "height":0, + "id":17, + "name":"Joseph", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":5 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":224, + "y":416 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":12, + "nextobjectid":26, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.10.1", + "tileheight":16, + "tilesets":[ + { + "columns":8, + "firstgid":1, + "image":"..\/tiles\/tileset.png", + "imageheight":15968, + "imagewidth":128, + "margin":0, + "name":"town", + "spacing":0, + "tilecount":7984, + "tileheight":16, + "tiles":[ + { + "id":0, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":5, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":6, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":7, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":8, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":9, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":10, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":11, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":12, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":13, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":14, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":15, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":16, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":17, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":18, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":19, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":20, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":21, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":22, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":23, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":24, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":25, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":26, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":27, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":28, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":29, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":30, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":31, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":32, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":33, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":34, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":35, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":36, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":37, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":38, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":39, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":40, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":41, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":42, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":43, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":44, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":45, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":46, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":47, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":48, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":49, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":50, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":51, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":52, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":53, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":54, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":55, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":56, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":57, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":58, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":59, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":60, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":61, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":62, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":63, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":64, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":65, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":66, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":67, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":68, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":69, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":70, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":71, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":72, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":73, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":74, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":75, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":76, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":77, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":78, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":79, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":80, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":81, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":82, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":83, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":84, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":85, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":86, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":87, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":88, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":89, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":90, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":91, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":92, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":93, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":94, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":95, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":96, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":97, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":98, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":99, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":100, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":101, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":102, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":103, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":104, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":105, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":106, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":107, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":108, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":109, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":110, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":111, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":112, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":113, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":114, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":115, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":116, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":117, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":118, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":119, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":120, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":121, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":122, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":123, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":124, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":125, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":126, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":127, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":128, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":129, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":130, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":131, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":132, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":133, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":134, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":135, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":136, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":137, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":138, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":139, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":140, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":141, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":142, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":143, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + + { + "id":144, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":145, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":146, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":147, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":148, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":149, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":150, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":151, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":152, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":153, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":154, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":155, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":156, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":157, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":158, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":159, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":160, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":161, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":162, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":163, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":164, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":165, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":166, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":167, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":168, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":169, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":170, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":171, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":172, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":173, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":174, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":175, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":176, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":177, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":178, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":179, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":180, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":181, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":182, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":183, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":184, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":185, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":186, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":187, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":188, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":189, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":190, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":191, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":192, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":193, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":194, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":195, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":196, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":197, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":198, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":199, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":200, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":201, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":202, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":203, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":204, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":205, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":206, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":207, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":208, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":209, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":210, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":211, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":212, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":213, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":214, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":215, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":216, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":217, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":218, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":219, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":220, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":221, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":222, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":223, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":224, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":225, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":226, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":227, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":228, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":229, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":230, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":231, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":232, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":233, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":234, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":235, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":236, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":237, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":238, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":239, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":240, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":241, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":242, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":243, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":244, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":245, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":246, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":247, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":248, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":249, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":250, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":251, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":252, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":253, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":254, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":255, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":256, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":257, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":258, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":259, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":260, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":261, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":262, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":263, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":264, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":265, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":266, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":267, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":268, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":269, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":270, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":271, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":272, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":273, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":274, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":275, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":276, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":277, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":278, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":279, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":280, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":281, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":282, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":283, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":284, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":285, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":286, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":287, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":288, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":289, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":290, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":291, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":292, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":293, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":294, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":295, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":296, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":297, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":298, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":299, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":300, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":301, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":302, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":303, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":304, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":305, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":306, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":307, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":308, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":309, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":310, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":311, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":312, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":313, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":314, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":315, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":316, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":317, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":318, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":319, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":320, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":321, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":322, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":323, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":324, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":325, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":326, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":327, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":328, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":329, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":330, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":331, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":332, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":333, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":334, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":335, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + + { + "id":336, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":337, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":338, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":339, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":340, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":341, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":342, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":343, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":344, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":345, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":346, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":347, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":348, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":349, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":350, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":351, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":352, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":353, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":354, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":355, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":356, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":357, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":358, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":359, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":360, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":361, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":362, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":363, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":364, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":365, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":366, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":367, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":368, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":369, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":370, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":371, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":372, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":373, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":374, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":375, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":376, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":377, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":378, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":379, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":380, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":381, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":382, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":383, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + + { + "id":384, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":385, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":386, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":387, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":388, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":389, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":390, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":391, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":392, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":393, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":394, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":395, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":396, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":397, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":398, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":399, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":400, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":401, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":402, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":403, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":404, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":405, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":406, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":407, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":408, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":409, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":410, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":411, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":412, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":413, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":414, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":415, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":416, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":417, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":418, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":419, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":420, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":421, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":422, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":423, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":424, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":425, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":426, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":427, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":428, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":429, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":430, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":431, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":432, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":433, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":434, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":435, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":436, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":437, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":438, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":439, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":440, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":441, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":442, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":443, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":444, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":445, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":446, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":447, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":448, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":449, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":450, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":451, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":452, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":453, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":454, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":455, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":456, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":457, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":458, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":459, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":460, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":461, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":462, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":463, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":464, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":465, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":466, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":467, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":468, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":469, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":470, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":471, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":472, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":473, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":474, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":475, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":476, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":477, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":478, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":479, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":480, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":481, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":482, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":483, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":484, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":485, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":486, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":487, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":488, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":489, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":490, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":491, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":492, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":493, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":494, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":495, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":496, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":497, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":498, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":499, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":500, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":501, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":502, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":503, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":504, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":505, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":506, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":507, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":508, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":509, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":510, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":511, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":512, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":513, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":514, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":515, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":516, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":517, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":518, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":519, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":520, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":521, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":522, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":523, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":524, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":525, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":526, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":527, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":528, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":529, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":530, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":531, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":532, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":533, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":534, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":535, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":536, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":537, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":538, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":539, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":540, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":541, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":542, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":543, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":544, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":545, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":546, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":547, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":548, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":549, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":550, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":551, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":552, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":553, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":554, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":555, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":556, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":557, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":558, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":559, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":560, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":561, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":562, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":563, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":564, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":565, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":566, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":567, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":568, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":569, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":570, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":571, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":572, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":573, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":574, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":575, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":576, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":577, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":578, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":579, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":580, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":581, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":582, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":583, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":584, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":585, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":586, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":587, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":588, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":589, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":590, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":591, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":592, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":593, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":594, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":595, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":596, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":597, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":598, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":599, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":600, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":601, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":602, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":603, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":604, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":605, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":606, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":607, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":608, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":609, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":610, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":611, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":612, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":613, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":614, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":615, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":616, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":617, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":618, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":619, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":620, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":621, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":622, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":623, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":624, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":625, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":626, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":627, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":628, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":629, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":630, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":631, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":632, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":633, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":634, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":635, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":636, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":637, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":638, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":639, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":640, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":641, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":642, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":643, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":644, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":645, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":646, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":647, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":648, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":649, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":650, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":651, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":652, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":653, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":654, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":655, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":656, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":657, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":658, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":659, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":660, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":661, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":662, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":663, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":664, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":665, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":666, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":667, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":668, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":669, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":670, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":671, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":672, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":673, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":674, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":675, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":676, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":677, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":678, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":679, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":680, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":681, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":682, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":683, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":684, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":685, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":686, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":687, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":688, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":689, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":690, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":691, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":692, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":693, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":694, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":695, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":696, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":697, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":698, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":699, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":700, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":701, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":702, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":703, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":704, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":705, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":706, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":707, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":708, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":709, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":710, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":711, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":712, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":713, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":714, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":715, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":716, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":717, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":718, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":719, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":720, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":721, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":722, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":723, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":724, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":725, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":726, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":727, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":728, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":729, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":730, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":731, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":732, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":733, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":734, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":735, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":736, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":737, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":738, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":739, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":740, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":741, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":742, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":743, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":744, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":745, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":746, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":747, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":748, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":749, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":750, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":751, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":752, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":753, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":754, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":755, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":756, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":757, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":758, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":759, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":760, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":761, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":762, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":763, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":764, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":765, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":766, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":767, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":768, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":769, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":770, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":771, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":772, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":773, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":774, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":775, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":776, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":777, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":778, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":779, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":780, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":781, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":782, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":783, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":784, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":785, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":786, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":787, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":788, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":789, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":790, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":791, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":792, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":793, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":794, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":795, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":796, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":797, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":798, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":799, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":800, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":801, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":802, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":803, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":804, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":805, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":806, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":807, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":808, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":809, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":810, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":811, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":812, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":813, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":814, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":815, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":816, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":817, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":818, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":819, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":820, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":821, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":822, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":823, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":824, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":825, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":826, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":827, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":828, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":829, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":830, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":831, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":832, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":833, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":834, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":835, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":836, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":837, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":838, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":839, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":840, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":841, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":842, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":843, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":844, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":845, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":846, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":847, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":848, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":849, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":850, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":851, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":852, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":853, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":854, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":855, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":856, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":857, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":858, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":859, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":860, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":861, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":862, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":863, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":864, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":865, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":866, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":867, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":868, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":869, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":870, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":871, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":872, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":873, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":874, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":875, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":876, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":877, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":878, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":879, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":880, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":881, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":882, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":883, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":884, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":885, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":886, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":887, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":888, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":889, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":890, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":891, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":892, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":893, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":894, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":895, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":896, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":897, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":898, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":899, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":900, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":901, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":902, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":903, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":904, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":905, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":906, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":907, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":908, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":909, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":910, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":911, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":912, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":913, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":914, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":915, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":916, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":917, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":918, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":919, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":920, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":921, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":922, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":923, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":924, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":925, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":926, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":927, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":928, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":929, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":930, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":931, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":932, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":933, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":934, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":935, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":936, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":937, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":938, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":939, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":940, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":941, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":942, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":943, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":944, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":945, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":946, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":947, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":948, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":949, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":950, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":951, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":952, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":953, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":954, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":955, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":956, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":957, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":958, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":959, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":960, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":961, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":962, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":963, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":964, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":965, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":966, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":967, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":968, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":969, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":970, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":971, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":972, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":973, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":974, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":975, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":976, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":977, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":978, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":979, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":980, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":981, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":982, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":983, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":984, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":985, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":986, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":987, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":988, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":989, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":990, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":991, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":992, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":993, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":994, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":995, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":996, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":997, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":998, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":999, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1000, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1001, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1002, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1003, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1004, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1005, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1006, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1007, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1008, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1009, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1010, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1011, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1012, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1013, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1014, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1015, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1016, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1017, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1018, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1019, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1020, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1021, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1022, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1023, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1024, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1025, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1026, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1027, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1028, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1029, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1030, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1031, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1032, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1033, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1034, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1035, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1036, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1037, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1038, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1039, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1040, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1041, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1042, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1043, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1044, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1045, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1046, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1047, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1048, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1049, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1050, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1051, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1052, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1053, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1054, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1055, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1056, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1057, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1058, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1059, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1060, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1061, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1062, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1063, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1064, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1065, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1066, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1067, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1068, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1069, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1070, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1071, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1072, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1073, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1074, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1075, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1076, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1077, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1078, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1079, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1080, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1081, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1082, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1083, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1084, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1085, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1086, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1087, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1088, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1089, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1090, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1091, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1092, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1093, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1094, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1095, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1096, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1097, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1098, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1099, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1100, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1101, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1102, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1103, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1104, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1105, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1106, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1107, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1108, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1109, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1110, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1111, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1112, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1113, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1114, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1115, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1116, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1117, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1118, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1119, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1120, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1121, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1122, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1123, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1124, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1125, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1126, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1127, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1128, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1129, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1130, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1131, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1132, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1133, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1134, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1135, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1136, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1137, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1138, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1139, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1140, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1141, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1142, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1143, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1144, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1145, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1146, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1147, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1148, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1149, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1150, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1151, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1152, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1153, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1154, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1155, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1156, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1157, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1158, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1159, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1160, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1161, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1162, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1163, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1164, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1165, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1166, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1167, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1168, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1169, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1170, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1171, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1172, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1173, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1174, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1175, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1176, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1177, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1178, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1179, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1180, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1181, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1182, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1183, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1184, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1185, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1186, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1187, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1188, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1189, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1190, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1191, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1192, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1193, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1194, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1195, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1196, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1197, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1198, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1199, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1200, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1201, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1202, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1203, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1204, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1205, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1206, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1207, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1208, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1209, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1210, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1211, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1212, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1213, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1214, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1215, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1216, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1217, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1218, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1219, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1220, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1221, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1222, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1223, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1224, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1225, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1226, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1227, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1228, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1229, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1230, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1231, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1232, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1233, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1234, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1235, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1236, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1237, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1238, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1239, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1240, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1241, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1242, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1243, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1244, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1245, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1246, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1247, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + + { + "id":1248, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1249, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1250, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1251, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1252, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1253, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1254, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1255, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1256, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1257, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1258, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1259, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1260, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1261, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1262, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1263, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1264, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1265, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1266, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1267, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1268, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1269, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1270, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1271, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1272, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1273, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1274, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1275, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1276, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1277, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1278, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1279, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1280, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1281, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1282, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1283, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1284, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1285, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1286, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1287, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1288, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1289, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1290, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1291, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1292, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1293, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1294, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1295, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1296, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1297, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1298, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1299, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1300, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1301, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1302, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1303, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1304, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1305, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1306, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1307, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1308, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1309, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1310, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1311, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1312, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1313, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1314, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1315, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1316, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1317, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1318, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1319, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1320, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1321, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1322, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1323, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1324, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1325, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1326, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1327, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1328, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1329, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1330, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1331, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1332, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1333, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1334, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1335, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1336, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1337, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1338, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1339, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1340, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1341, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1342, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1343, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + + { + "id":1344, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1345, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1346, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1347, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1348, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1349, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1350, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1351, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1352, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1353, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1354, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1355, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1356, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1357, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1358, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1359, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1360, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1361, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1362, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1363, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1364, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1365, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1366, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1367, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1368, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1369, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1370, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1371, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1372, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1373, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1374, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1375, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1376, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1377, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1378, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1379, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1380, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1381, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1382, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1383, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1384, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1385, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1386, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1387, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1388, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1389, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1390, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":1391, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + + { + "id":1392, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1393, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1394, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1395, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1396, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1397, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1398, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1399, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1400, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1401, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1402, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1403, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1404, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1405, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1406, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1407, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1408, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1409, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1410, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1411, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1412, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1413, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1414, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1415, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1416, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1417, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1418, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1419, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1420, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1421, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1422, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1423, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1424, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1425, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1426, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1427, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1428, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1429, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1430, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1431, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1432, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1433, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1434, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1435, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1436, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1437, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1438, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1439, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1440, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1441, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1442, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1443, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1444, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1445, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1446, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1447, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1448, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1449, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1450, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1451, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1452, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1453, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1454, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1455, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1456, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1457, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1458, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1459, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1460, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1461, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1462, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1463, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1464, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1465, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1466, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1467, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1468, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1469, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1470, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1471, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1472, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1473, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1474, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1475, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1476, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1477, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1478, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1479, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1480, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1481, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1482, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1483, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1484, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1485, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1486, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1487, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1488, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1489, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1490, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1491, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1492, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1493, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1494, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1495, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1496, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1497, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1498, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1499, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1500, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1501, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1502, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1503, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1504, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1505, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1506, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1507, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1508, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1509, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1510, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1511, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1512, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1513, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1514, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1515, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1516, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1517, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1518, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1519, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1520, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1521, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1522, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1523, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1524, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1525, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1526, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1527, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1528, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1529, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1530, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1531, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1532, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1533, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1534, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1535, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1536, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1537, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1538, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1539, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1540, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1541, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1542, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1543, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1544, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1545, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1546, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1547, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1548, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1549, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1550, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1551, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1552, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1553, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1554, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1555, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1556, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1557, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1558, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1559, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1560, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1561, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1562, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1563, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1564, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1565, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1566, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1567, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1568, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1569, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1570, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1571, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1572, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1573, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1574, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1575, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1576, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1577, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1578, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1579, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1580, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1581, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1582, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1583, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1584, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1585, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1586, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1587, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1588, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1589, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1590, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1591, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1592, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1593, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1594, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1595, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1596, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1597, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1598, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1599, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1600, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1601, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1602, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1603, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1604, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1605, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1606, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1607, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1608, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1609, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1610, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1611, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1612, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1613, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1614, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1615, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1616, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1617, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1618, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1619, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1620, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1621, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1622, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1623, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1624, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1625, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1626, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1627, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1628, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1629, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1630, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1631, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1632, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1633, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1634, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1635, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1636, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1637, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1638, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1639, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1640, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1641, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1642, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1643, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1644, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1645, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1646, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1647, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1648, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1649, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1650, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1651, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1652, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1653, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1654, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1655, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1656, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1657, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1658, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1659, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1660, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1661, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1662, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1663, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1664, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1665, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1666, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1667, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1668, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1669, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1670, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1671, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1672, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1673, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1674, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1675, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1676, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1677, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1678, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1679, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1680, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1681, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1682, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1683, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1684, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1685, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1686, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1687, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1688, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1689, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1690, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1691, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1692, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1693, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1694, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1695, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1696, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1697, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1698, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1699, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1700, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1701, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1702, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1703, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1704, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1705, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1706, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1707, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1708, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1709, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1710, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1711, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1712, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1713, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1714, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1715, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1716, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1717, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1718, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1719, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1720, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1721, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1722, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1723, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1724, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1725, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1726, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1727, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1728, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1729, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1730, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1731, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1732, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1733, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1734, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1735, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1736, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1737, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1738, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1739, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1740, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1741, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1742, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1743, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1744, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1745, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1746, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1747, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1748, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1749, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1750, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1751, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1752, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1753, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1754, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1755, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1756, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1757, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1758, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1759, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1760, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1761, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1762, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1763, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1764, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1765, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1766, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1767, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1768, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1769, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1770, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1771, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1772, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1773, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1774, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1775, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1776, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1777, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1778, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1779, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1780, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1781, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1782, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1783, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1784, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1785, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1786, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1787, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1788, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1789, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1790, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1791, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1792, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1793, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1794, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1795, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1796, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1797, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1798, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1799, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1800, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1801, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1802, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1803, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1804, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1805, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1806, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1807, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1808, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1809, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1810, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1811, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1812, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1813, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1814, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1815, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1816, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1817, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1818, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1819, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1820, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1821, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1822, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1823, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1824, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1825, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1826, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1827, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1828, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1829, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1830, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1831, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1832, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1833, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1834, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1835, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1836, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1837, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1838, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1839, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1840, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1841, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1842, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1843, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1844, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1845, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1846, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1847, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1848, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1849, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1850, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1851, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1852, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1853, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1854, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1855, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1856, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1857, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1858, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1859, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1860, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1861, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1862, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1863, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1864, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1865, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1866, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1867, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1868, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1869, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1870, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1871, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1872, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1873, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1874, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1875, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1876, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1877, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1878, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1879, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1880, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1881, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1882, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1883, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1884, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1885, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1886, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1887, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1888, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1889, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1890, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1891, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1892, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1893, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1894, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1895, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1896, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1897, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1898, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1899, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1900, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1901, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1902, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1903, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1904, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1905, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1906, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1907, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1908, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1909, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1910, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1911, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1912, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1913, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1914, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1915, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1916, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1917, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1918, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1919, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1920, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1921, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1922, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1923, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1924, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1925, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1926, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1927, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1928, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1929, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1930, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1931, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1932, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1933, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1934, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1935, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1936, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1937, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1938, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1939, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1940, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1941, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1942, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1943, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1944, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1945, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1946, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1947, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1948, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1949, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1950, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1951, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1952, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1953, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1954, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1955, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1956, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1957, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1958, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1959, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1960, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1961, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1962, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1963, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1964, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1965, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1966, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1967, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":1968, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1969, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1970, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1971, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1972, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1973, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1974, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1975, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1976, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1977, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1978, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1979, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1980, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1981, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1982, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1983, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1984, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1985, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1986, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1987, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1988, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1989, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1990, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1991, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1992, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1993, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1994, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1995, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1996, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1997, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1998, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":1999, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2000, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2001, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2002, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2003, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2004, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2005, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2006, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2007, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2008, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2009, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2010, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2011, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2012, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2013, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2014, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2015, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2016, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2017, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2018, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2019, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2020, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2021, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2022, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2023, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2024, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2025, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2026, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2027, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2028, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2029, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2030, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2031, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2032, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2033, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2034, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2035, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2036, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2037, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2038, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2039, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2040, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2041, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2042, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2043, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2044, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2045, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2046, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2047, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2048, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2049, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2050, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2051, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2052, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2053, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2054, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2055, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2056, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2057, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2058, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2059, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2060, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2061, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2062, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2063, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2064, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2065, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2066, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2067, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2068, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2069, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2070, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2071, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2072, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2073, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2074, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2075, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2076, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2077, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2078, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2079, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2080, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2081, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2082, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2083, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2084, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2085, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2086, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2087, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2088, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2089, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2090, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2091, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2092, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2093, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2094, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2095, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2096, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2097, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2098, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2099, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2100, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2101, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2102, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2103, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2104, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2105, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2106, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2107, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2108, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2109, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2110, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2111, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2112, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2113, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2114, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2115, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2116, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2117, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2118, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2119, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2120, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2121, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2122, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2123, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2124, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2125, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2126, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2127, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2128, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2129, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2130, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2131, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2132, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2133, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2134, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2135, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2136, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2137, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2138, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2139, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2140, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2141, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2142, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2143, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2144, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2145, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2146, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2147, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2148, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2149, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2150, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2151, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2152, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2153, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2154, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2155, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2156, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2157, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2158, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2159, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2160, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2161, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2162, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2163, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2164, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2165, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2166, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2167, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2168, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2169, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2170, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2171, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2172, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2173, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2174, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2175, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2176, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2177, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2178, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2179, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2180, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2181, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2182, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2183, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2184, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2185, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2186, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2187, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2188, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2189, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2190, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2191, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2192, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2193, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2194, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2195, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2196, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2197, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2198, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2199, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2200, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2201, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2202, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2203, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2204, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2205, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2206, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2207, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2208, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2209, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2210, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2211, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2212, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2213, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2214, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2215, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2216, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2217, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2218, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2219, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2220, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2221, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2222, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2223, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2224, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2225, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2226, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2227, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2228, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2229, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2230, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2231, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2232, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2233, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2234, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2235, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2236, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2237, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2238, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2239, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2240, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2241, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2242, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2243, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2244, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2245, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2246, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2247, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2248, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2249, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2250, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2251, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2252, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2253, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2254, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2255, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2256, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2257, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2258, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2259, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2260, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2261, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2262, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2263, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2264, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2265, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2266, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2267, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2268, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2269, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2270, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2271, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2272, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2273, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2274, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2275, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2276, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2277, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2278, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2279, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2280, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2281, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2282, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2283, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2284, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2285, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2286, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2287, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2288, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2289, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2290, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2291, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2292, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2293, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2294, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2295, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2296, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2297, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2298, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2299, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2300, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2301, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2302, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2303, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2304, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2305, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2306, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2307, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2308, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2309, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2310, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2311, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2312, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2313, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2314, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2315, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2316, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2317, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2318, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2319, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2320, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2321, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2322, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2323, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2324, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2325, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2326, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2327, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2328, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2329, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2330, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2331, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2332, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2333, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2334, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2335, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2336, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2337, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2338, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2339, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2340, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2341, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2342, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2343, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2344, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2345, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2346, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2347, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2348, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2349, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2350, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2351, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2352, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2353, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2354, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2355, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2356, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2357, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2358, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2359, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2360, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2361, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2362, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2363, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2364, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2365, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2366, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2367, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2368, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2369, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2370, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2371, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2372, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2373, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2374, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2375, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2376, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2377, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2378, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2379, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2380, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2381, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2382, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2383, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2384, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2385, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2386, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2387, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2388, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2389, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2390, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2391, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2392, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2393, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2394, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2395, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2396, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2397, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2398, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2399, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2400, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2401, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2402, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2403, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2404, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2405, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2406, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2407, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2408, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2409, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2410, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2411, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2412, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2413, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2414, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2415, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2416, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2417, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2418, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2419, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2420, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2421, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2422, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2423, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2424, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2425, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2426, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2427, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2428, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2429, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2430, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2431, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2432, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2433, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2434, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2435, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2436, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2437, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2438, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2439, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2440, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2441, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2442, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2443, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2444, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2445, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2446, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2447, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2448, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2449, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2450, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2451, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2452, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2453, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2454, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2455, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2456, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2457, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2458, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2459, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2460, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2461, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2462, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2463, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2464, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2465, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2466, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2467, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2468, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2469, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2470, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2471, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2472, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2473, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2474, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2475, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2476, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2477, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2478, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2479, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2480, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2481, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2482, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2483, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2484, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2485, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2486, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2487, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2488, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2489, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2490, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2491, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2492, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2493, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2494, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2495, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2496, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2497, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2498, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2499, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2500, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2501, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2502, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2503, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2504, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2505, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2506, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2507, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2508, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2509, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2510, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2511, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2512, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2513, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2514, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2515, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2516, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2517, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2518, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2519, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2520, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2521, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2522, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2523, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2524, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2525, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2526, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2527, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2528, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2529, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2530, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2531, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2532, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2533, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2534, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2535, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2536, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2537, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2538, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2539, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2540, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2541, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2542, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2543, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2544, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2545, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2546, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2547, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2548, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2549, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2550, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2551, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2552, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2553, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2554, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2555, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2556, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2557, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2558, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2559, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2560, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2561, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2562, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2563, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2564, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2565, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2566, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2567, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2568, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2569, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2570, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2571, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2572, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2573, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2574, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2575, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2576, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2577, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2578, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2579, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2580, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2581, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2582, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2583, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2584, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2585, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2586, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2587, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2588, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2589, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2590, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2591, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2592, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2593, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2594, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2595, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2596, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2597, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2598, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2599, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2600, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2601, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2602, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2603, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2604, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2605, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2606, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2607, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2608, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2609, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2610, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2611, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2612, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2613, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2614, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2615, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2616, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2617, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2618, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2619, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2620, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2621, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2622, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2623, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2624, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2625, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2626, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2627, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2628, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2629, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2630, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2631, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2632, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2633, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2634, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2635, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2636, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2637, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2638, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2639, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2640, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2641, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2642, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2643, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2644, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2645, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2646, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2647, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2648, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2649, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2650, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2651, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2652, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2653, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2654, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2655, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2656, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2657, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2658, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2659, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2660, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2661, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2662, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2663, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2664, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2665, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2666, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2667, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2668, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2669, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2670, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2671, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2672, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2673, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2674, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2675, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2676, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2677, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2678, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2679, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2680, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2681, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2682, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2683, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2684, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2685, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2686, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2687, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2688, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2689, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2690, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2691, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2692, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2693, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2694, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2695, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2696, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2697, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2698, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2699, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2700, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2701, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2702, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2703, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2704, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2705, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2706, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2707, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2708, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2709, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2710, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2711, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2712, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2713, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2714, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2715, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2716, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2717, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2718, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2719, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2720, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2721, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2722, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2723, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2724, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2725, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2726, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2727, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2728, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2729, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2730, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2731, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2732, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2733, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2734, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2735, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2736, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2737, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2738, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2739, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2740, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2741, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2742, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2743, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2744, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2745, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2746, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2747, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2748, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2749, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2750, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2751, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2752, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2753, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2754, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2755, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2756, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2757, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2758, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2759, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2760, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2761, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2762, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2763, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2764, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2765, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2766, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2767, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2768, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2769, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2770, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2771, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2772, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2773, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2774, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2775, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2776, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2777, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2778, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2779, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2780, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2781, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2782, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2783, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2784, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2785, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2786, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2787, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2788, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2789, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2790, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2791, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2792, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2793, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2794, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2795, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2796, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2797, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2798, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2799, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2800, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2801, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2802, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2803, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2804, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2805, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2806, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2807, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2808, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2809, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2810, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2811, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2812, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2813, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2814, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2815, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2816, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2817, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2818, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2819, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2820, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2821, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2822, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2823, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2824, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2825, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2826, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2827, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2828, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2829, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2830, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2831, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2832, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2833, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2834, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2835, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2836, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2837, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2838, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2839, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2840, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2841, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2842, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2843, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2844, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2845, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2846, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2847, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2848, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2849, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2850, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2851, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2852, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2853, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2854, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2855, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2856, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2857, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2858, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2859, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2860, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2861, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2862, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2863, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2864, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2865, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2866, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2867, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2868, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2869, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2870, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2871, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2872, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2873, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2874, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2875, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2876, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2877, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2878, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2879, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2880, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2881, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2882, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2883, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2884, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2885, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2886, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2887, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2888, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2889, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2890, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2891, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2892, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2893, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2894, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2895, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2896, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2897, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2898, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2899, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2900, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2901, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2902, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2903, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2904, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2905, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2906, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2907, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2908, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2909, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2910, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2911, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2912, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2913, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2914, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2915, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2916, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2917, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2918, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2919, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2920, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2921, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2922, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2923, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2924, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2925, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2926, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2927, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2928, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2929, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2930, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2931, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2932, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2933, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2934, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2935, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2936, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2937, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2938, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2939, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2940, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2941, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2942, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2943, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2944, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2945, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2946, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2947, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2948, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2949, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2950, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2951, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2952, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2953, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2954, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2955, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2956, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2957, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2958, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2959, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2960, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2961, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2962, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2963, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2964, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2965, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2966, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2967, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2968, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2969, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2970, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2971, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2972, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2973, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2974, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2975, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":2976, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2977, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2978, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2979, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2980, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2981, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2982, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2983, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2984, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2985, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2986, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2987, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2988, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2989, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2990, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2991, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2992, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2993, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2994, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2995, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2996, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2997, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2998, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":2999, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3000, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3001, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3002, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3003, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3004, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3005, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3006, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3007, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3008, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3009, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3010, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3011, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3012, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3013, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3014, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3015, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3016, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3017, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3018, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3019, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3020, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3021, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3022, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3023, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3024, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3025, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3026, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3027, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3028, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3029, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3030, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3031, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3032, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3033, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3034, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3035, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3036, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3037, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3038, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3039, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3040, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3041, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3042, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3043, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3044, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3045, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3046, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3047, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3048, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3049, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3050, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3051, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3052, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3053, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3054, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3055, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3056, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3057, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3058, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3059, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3060, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3061, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3062, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3063, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3064, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3065, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3066, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3067, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3068, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3069, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3070, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3071, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3072, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3073, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3074, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3075, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3076, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3077, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3078, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3079, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3080, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3081, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3082, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3083, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3084, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3085, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3086, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3087, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3088, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3089, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3090, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3091, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3092, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3093, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3094, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3095, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3096, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3097, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3098, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3099, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3100, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3101, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3102, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3103, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3104, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3105, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3106, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3107, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3108, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3109, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3110, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3111, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3112, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3113, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3114, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3115, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3116, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3117, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3118, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3119, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3120, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3121, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3122, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3123, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3124, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3125, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3126, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3127, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3128, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3129, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3130, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3131, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3132, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3133, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3134, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3135, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3136, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3137, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3138, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3139, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3140, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3141, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3142, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3143, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3144, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3145, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3146, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3147, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3148, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3149, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3150, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3151, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3152, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3153, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3154, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3155, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3156, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3157, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3158, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3159, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3160, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3161, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3162, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3163, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3164, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3165, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3166, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3167, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3168, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3169, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3170, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3171, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3172, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3173, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3174, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3175, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3176, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3177, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3178, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3179, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3180, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3181, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3182, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3183, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3184, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3185, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3186, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3187, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3188, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3189, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3190, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3191, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3192, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3193, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3194, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3195, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3196, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3197, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3198, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3199, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3200, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3201, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3202, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3203, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3204, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3205, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3206, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3207, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3208, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3209, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3210, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3211, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3212, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3213, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3214, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3215, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3216, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3217, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3218, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3219, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3220, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3221, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3222, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3223, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3224, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3225, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3226, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3227, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3228, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3229, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3230, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3231, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3232, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3233, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3234, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3235, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3236, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3237, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3238, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3239, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3240, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3241, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3242, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3243, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3244, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3245, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3246, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3247, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3248, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3249, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3250, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3251, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3252, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3253, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3254, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3255, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3256, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3257, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3258, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3259, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3260, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3261, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3262, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3263, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3264, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3265, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3266, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3267, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3268, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3269, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3270, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3271, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3272, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3273, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3274, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3275, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3276, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3277, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3278, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3279, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3280, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3281, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3282, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3283, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3284, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3285, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3286, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3287, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3288, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3289, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3290, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3291, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3292, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3293, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3294, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3295, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3296, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3297, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3298, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3299, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3300, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3301, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3302, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3303, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3304, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3305, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3306, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3307, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3308, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3309, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3310, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3311, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3312, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3313, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3314, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3315, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3316, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3317, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3318, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3319, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3320, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3321, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3322, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3323, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3324, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3325, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3326, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3327, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3328, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3329, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3330, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3331, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3332, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3333, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3334, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3335, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3336, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3337, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3338, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3339, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3340, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3341, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3342, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3343, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3344, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3345, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3346, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3347, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3348, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3349, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3350, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3351, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3352, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3353, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3354, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3355, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3356, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3357, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3358, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3359, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3360, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3361, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3362, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3363, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3364, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3365, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3366, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3367, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3368, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3369, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3370, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3371, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3372, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3373, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3374, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3375, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3376, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3377, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3378, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3379, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3380, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3381, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3382, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3383, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3384, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3385, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3386, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3387, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3388, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3389, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3390, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3391, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3392, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3393, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3394, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3395, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3396, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3397, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3398, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3399, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3400, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3401, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3402, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3403, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3404, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3405, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3406, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3407, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3408, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3409, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3410, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3411, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3412, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3413, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3414, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3415, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3416, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3417, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3418, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3419, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3420, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3421, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3422, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3423, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3424, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3425, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3426, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3427, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3428, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3429, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3430, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3431, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3432, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3433, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3434, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3435, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3436, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3437, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3438, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3439, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3440, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3441, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3442, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3443, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3444, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3445, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3446, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3447, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3448, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3449, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3450, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3451, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3452, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3453, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3454, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3455, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3456, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3457, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3458, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3459, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3460, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3461, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3462, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3463, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3464, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3465, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3466, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3467, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3468, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3469, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3470, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3471, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3472, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3473, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3474, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3475, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3476, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3477, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3478, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3479, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3480, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3481, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3482, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3483, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3484, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3485, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3486, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3487, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3488, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3489, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3490, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3491, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3492, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3493, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3494, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3495, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3496, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3497, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3498, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3499, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3500, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3501, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3502, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3503, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3504, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3505, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3506, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3507, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3508, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3509, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3510, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3511, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3512, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3513, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3514, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3515, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3516, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3517, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3518, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3519, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3520, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3521, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3522, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3523, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3524, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3525, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3526, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3527, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3528, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3529, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3530, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3531, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3532, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3533, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3534, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3535, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3536, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3537, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3538, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3539, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3540, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3541, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3542, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3543, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3544, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3545, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3546, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3547, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3548, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3549, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3550, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3551, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3552, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3553, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3554, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3555, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3556, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3557, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3558, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3559, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3560, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3561, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3562, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3563, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3564, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3565, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3566, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3567, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3568, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3569, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3570, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3571, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3572, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3573, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3574, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3575, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3576, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3577, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3578, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3579, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3580, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3581, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3582, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3583, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3584, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3585, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3586, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3587, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3588, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3589, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3590, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3591, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3592, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3593, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3594, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3595, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3596, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3597, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3598, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3599, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3600, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3601, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3602, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3603, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3604, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3605, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3606, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3607, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3608, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3609, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3610, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3611, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3612, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3613, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3614, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3615, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3616, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3617, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3618, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3619, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3620, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3621, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3622, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3623, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3624, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3625, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3626, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3627, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3628, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3629, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3630, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3631, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3632, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3633, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3634, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3635, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3636, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3637, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3638, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3639, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3640, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3641, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3642, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3643, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3644, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3645, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3646, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3647, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3648, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3649, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3650, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3651, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3652, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3653, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3654, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3655, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3656, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3657, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3658, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3659, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3660, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3661, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3662, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3663, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3664, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3665, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3666, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3667, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3668, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3669, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3670, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3671, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3672, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3673, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3674, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3675, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3676, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3677, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3678, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3679, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3680, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3681, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3682, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3683, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3684, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3685, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3686, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3687, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3688, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3689, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3690, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3691, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3692, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3693, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3694, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3695, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3696, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3697, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3698, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3699, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3700, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3701, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3702, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3703, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3704, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3705, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3706, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3707, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3708, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3709, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3710, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3711, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3712, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3713, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3714, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3715, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3716, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3717, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3718, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3719, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3720, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3721, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3722, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3723, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3724, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3725, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3726, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3727, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3728, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3729, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3730, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3731, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3732, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3733, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3734, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3735, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3736, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3737, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3738, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3739, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3740, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3741, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3742, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3743, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3744, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3745, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3746, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3747, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3748, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3749, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3750, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3751, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3752, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3753, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3754, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3755, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3756, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3757, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3758, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3759, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3760, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3761, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3762, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3763, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3764, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3765, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3766, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3767, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3768, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3769, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3770, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3771, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3772, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3773, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3774, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3775, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3776, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3777, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3778, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3779, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3780, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3781, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3782, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3783, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3784, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3785, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3786, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3787, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3788, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3789, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3790, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3791, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3792, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3793, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3794, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3795, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3796, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3797, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3798, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3799, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3800, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3801, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3802, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3803, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3804, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3805, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3806, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3807, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3808, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3809, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3810, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3811, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3812, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3813, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3814, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3815, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3816, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3817, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3818, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3819, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3820, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3821, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3822, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3823, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3824, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3825, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3826, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3827, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3828, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3829, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3830, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3831, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3832, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3833, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3834, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3835, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3836, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3837, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3838, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3839, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3840, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3841, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3842, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3843, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3844, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3845, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3846, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3847, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3848, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3849, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3850, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3851, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3852, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3853, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3854, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3855, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3856, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3857, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3858, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3859, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3860, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3861, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3862, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3863, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3864, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3865, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3866, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3867, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3868, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3869, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3870, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3871, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3872, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3873, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3874, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3875, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3876, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3877, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3878, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3879, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3880, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3881, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3882, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3883, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3884, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3885, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3886, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3887, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3888, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3889, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3890, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3891, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3892, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3893, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3894, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3895, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3896, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3897, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3898, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3899, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3900, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3901, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3902, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3903, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3904, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3905, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3906, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3907, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3908, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3909, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3910, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3911, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3912, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3913, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3914, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3915, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3916, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3917, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3918, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3919, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3920, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3921, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3922, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3923, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3924, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3925, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3926, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3927, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3928, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3929, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3930, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3931, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3932, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3933, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3934, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3935, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3936, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3937, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3938, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3939, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3940, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3941, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3942, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3943, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3944, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3945, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3946, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3947, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3948, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3949, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3950, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3951, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3952, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3953, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3954, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3955, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3956, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3957, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3958, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3959, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3960, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3961, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3962, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3963, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3964, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3965, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3966, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3967, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3968, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3969, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3970, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3971, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3972, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3973, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3974, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3975, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3976, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3977, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3978, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3979, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3980, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3981, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3982, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3983, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":3984, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3985, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3986, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3987, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3988, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3989, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3990, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3991, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3992, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3993, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3994, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3995, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3996, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3997, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3998, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":3999, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4000, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4001, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4002, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4003, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4004, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4005, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4006, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4007, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4008, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4009, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4010, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4011, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4012, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4013, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4014, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4015, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4016, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4017, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4018, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4019, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4020, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4021, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4022, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4023, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4024, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4025, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4026, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4027, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4028, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4029, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4030, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4031, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4032, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4033, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4034, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4035, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4036, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4037, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4038, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4039, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4040, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4041, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4042, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4043, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4044, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4045, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4046, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4047, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4048, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4049, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4050, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4051, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4052, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4053, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4054, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4055, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4056, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4057, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4058, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4059, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4060, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4061, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4062, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4063, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4064, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4065, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4066, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4067, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4068, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4069, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4070, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4071, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4072, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4073, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4074, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4075, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4076, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4077, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4078, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4079, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4080, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4081, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4082, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4083, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4084, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4085, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4086, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4087, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4088, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4089, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4090, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4091, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4092, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4093, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4094, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4095, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4096, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4097, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4098, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4099, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4100, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4101, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4102, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4103, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4104, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4105, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4106, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4107, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4108, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4109, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4110, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4111, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4112, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4113, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4114, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4115, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4116, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4117, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4118, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4119, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4120, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4121, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4122, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4123, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4124, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4125, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4126, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4127, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4128, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4129, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4130, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4131, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4132, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4133, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4134, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4135, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4136, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4137, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4138, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4139, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4140, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4141, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4142, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4143, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4144, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4145, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4146, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4147, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4148, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4149, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4150, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4151, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4152, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4153, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4154, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4155, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4156, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4157, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4158, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4159, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4160, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4161, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4162, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4163, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4164, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4165, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4166, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4167, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4168, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4169, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4170, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4171, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4172, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4173, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4174, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4175, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4176, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4177, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4178, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4179, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4180, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4181, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4182, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4183, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4184, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4185, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4186, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4187, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4188, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4189, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4190, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4191, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4192, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4193, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4194, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4195, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4196, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4197, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4198, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4199, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4200, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4201, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4202, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4203, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4204, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4205, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4206, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4207, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4208, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4209, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4210, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4211, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4212, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4213, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4214, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4215, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4216, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4217, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4218, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4219, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4220, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4221, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4222, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4223, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4224, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4225, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4226, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4227, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4228, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4229, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4230, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4231, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4232, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4233, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4234, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4235, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4236, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4237, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4238, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4239, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4240, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4241, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4242, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4243, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4244, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4245, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4246, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4247, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4248, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4249, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4250, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4251, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4252, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4253, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4254, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4255, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4256, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4257, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4258, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4259, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4260, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4261, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4262, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4263, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4264, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4265, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4266, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4267, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4268, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4269, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4270, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4271, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4272, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4273, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4274, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4275, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4276, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4277, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4278, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4279, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4280, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4281, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4282, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4283, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4284, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4285, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4286, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4287, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4288, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4289, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4290, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4291, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4292, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4293, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4294, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4295, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4296, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4297, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4298, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4299, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4300, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4301, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4302, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4303, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4304, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4305, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4306, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4307, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4308, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4309, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4310, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4311, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4312, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4313, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4314, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4315, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4316, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4317, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4318, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4319, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4320, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4321, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4322, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4323, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4324, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4325, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4326, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4327, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4328, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4329, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4330, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4331, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4332, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4333, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4334, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4335, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4336, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4337, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4338, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4339, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4340, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4341, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4342, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4343, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4344, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4345, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4346, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4347, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4348, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4349, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4350, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4351, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4352, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4353, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4354, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4355, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4356, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4357, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4358, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4359, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4360, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4361, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4362, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4363, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4364, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4365, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4366, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4367, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4368, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4369, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4370, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4371, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4372, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4373, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4374, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4375, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4376, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4377, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4378, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4379, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4380, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4381, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4382, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4383, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4384, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4385, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4386, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4387, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4388, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4389, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4390, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4391, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4392, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4393, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4394, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4395, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4396, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4397, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4398, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4399, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4400, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4401, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4402, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4403, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4404, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4405, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4406, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4407, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4408, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4409, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4410, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4411, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4412, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4413, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4414, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4415, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4416, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4417, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4418, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4419, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4420, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4421, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4422, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4423, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4424, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4425, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4426, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4427, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4428, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4429, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4430, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4431, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4432, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4433, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4434, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4435, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4436, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4437, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4438, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4439, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4440, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4441, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4442, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4443, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4444, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4445, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4446, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4447, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4448, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4449, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4450, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4451, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4452, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4453, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4454, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4455, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4456, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4457, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4458, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4459, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4460, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4461, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4462, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4463, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4464, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4465, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4466, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4467, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4468, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4469, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4470, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4471, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4472, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4473, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4474, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4475, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4476, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4477, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4478, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4479, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4480, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4481, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4482, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4483, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4484, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4485, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4486, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4487, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4488, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4489, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4490, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4491, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4492, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4493, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4494, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4495, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4496, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4497, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4498, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4499, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4500, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4501, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4502, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4503, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4504, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4505, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4506, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4507, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4508, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4509, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4510, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4511, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4512, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4513, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4514, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4515, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4516, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4517, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4518, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4519, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4520, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4521, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4522, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4523, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4524, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4525, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4526, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4527, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4528, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4529, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4530, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4531, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4532, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4533, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4534, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4535, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4536, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4537, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4538, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4539, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4540, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4541, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4542, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4543, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4544, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4545, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4546, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4547, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4548, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4549, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4550, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4551, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4552, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4553, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4554, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4555, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4556, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4557, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4558, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4559, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4560, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4561, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4562, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4563, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4564, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4565, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4566, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4567, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4568, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4569, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4570, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4571, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4572, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4573, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4574, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4575, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4576, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4577, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4578, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4579, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4580, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4581, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4582, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4583, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4584, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4585, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4586, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4587, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4588, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4589, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4590, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4591, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4592, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4593, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4594, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4595, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4596, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4597, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4598, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4599, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4600, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4601, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4602, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4603, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4604, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4605, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4606, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4607, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4608, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4609, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4610, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4611, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4612, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4613, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4614, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4615, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4616, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4617, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4618, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4619, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4620, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4621, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4622, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4623, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4624, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4625, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4626, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4627, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4628, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4629, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4630, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4631, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4632, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4633, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4634, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4635, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4636, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4637, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4638, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4639, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4640, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4641, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4642, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4643, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4644, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4645, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4646, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4647, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4648, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4649, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4650, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4651, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4652, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4653, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4654, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4655, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4656, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4657, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4658, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4659, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4660, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4661, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4662, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4663, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4664, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4665, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4666, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4667, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4668, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4669, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4670, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4671, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4672, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4673, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4674, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4675, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4676, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4677, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4678, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4679, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4680, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4681, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4682, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4683, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4684, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4685, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4686, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4687, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4688, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4689, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4690, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4691, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4692, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4693, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4694, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4695, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4696, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4697, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4698, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4699, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4700, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4701, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4702, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4703, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4704, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4705, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4706, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4707, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4708, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4709, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4710, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4711, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4712, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4713, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4714, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4715, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4716, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4717, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4718, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4719, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4720, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4721, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4722, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4723, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4724, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4725, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4726, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4727, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4728, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4729, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4730, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4731, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4732, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4733, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4734, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4735, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4736, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4737, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4738, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4739, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4740, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4741, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4742, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4743, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4744, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4745, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4746, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4747, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4748, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4749, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4750, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4751, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4752, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4753, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4754, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4755, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4756, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4757, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4758, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4759, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4760, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4761, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4762, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4763, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4764, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4765, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4766, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4767, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4768, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4769, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4770, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4771, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4772, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4773, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4774, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4775, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4776, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4777, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4778, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4779, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4780, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4781, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4782, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4783, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4784, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4785, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4786, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4787, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4788, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4789, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4790, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4791, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4792, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4793, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4794, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4795, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4796, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4797, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4798, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4799, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4800, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4801, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4802, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4803, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4804, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4805, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4806, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4807, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4808, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4809, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4810, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4811, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4812, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4813, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4814, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4815, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4816, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4817, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4818, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4819, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4820, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4821, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4822, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4823, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4824, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4825, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4826, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4827, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4828, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4829, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4830, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4831, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4832, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4833, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4834, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4835, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4836, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4837, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4838, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4839, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4840, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4841, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4842, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4843, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4844, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4845, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4846, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4847, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4848, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4849, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4850, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4851, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4852, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4853, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4854, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4855, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4856, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4857, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4858, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4859, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4860, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4861, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4862, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4863, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4864, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4865, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4866, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4867, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4868, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4869, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4870, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4871, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4872, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4873, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4874, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4875, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4876, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4877, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4878, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4879, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4880, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4881, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4882, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4883, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4884, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4885, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4886, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4887, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4888, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4889, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4890, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4891, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4892, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4893, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4894, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4895, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4896, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4897, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4898, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4899, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4900, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4901, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4902, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4903, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4904, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4905, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4906, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4907, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4908, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4909, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4910, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4911, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4912, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4913, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4914, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4915, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4916, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4917, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4918, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4919, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4920, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4921, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4922, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4923, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4924, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4925, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4926, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4927, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4928, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4929, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4930, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4931, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4932, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4933, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4934, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4935, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4936, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4937, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4938, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4939, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4940, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4941, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4942, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4943, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4944, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4945, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4946, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4947, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4948, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4949, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4950, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4951, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4952, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4953, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4954, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4955, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4956, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4957, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4958, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4959, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4960, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4961, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4962, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4963, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4964, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4965, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4966, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4967, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4968, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4969, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4970, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4971, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4972, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4973, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4974, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4975, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4976, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4977, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4978, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4979, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4980, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4981, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4982, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4983, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4984, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4985, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4986, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4987, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4988, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4989, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4990, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4991, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":4992, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4993, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4994, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4995, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4996, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4997, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4998, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":4999, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5000, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5001, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5002, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5003, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5004, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5005, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5006, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5007, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5008, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5009, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5010, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5011, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5012, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5013, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5014, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5015, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5016, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5017, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5018, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5019, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5020, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5021, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5022, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5023, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5024, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5025, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5026, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5027, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5028, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5029, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5030, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5031, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5032, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5033, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5034, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5035, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5036, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5037, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5038, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5039, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5040, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5041, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5042, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5043, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5044, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5045, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5046, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5047, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5048, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5049, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5050, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5051, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5052, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5053, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5054, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5055, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5056, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5057, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5058, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5059, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5060, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5061, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5062, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5063, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5064, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5065, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5066, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5067, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5068, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5069, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5070, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5071, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5072, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5073, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5074, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5075, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5076, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5077, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5078, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5079, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5080, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5081, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5082, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5083, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5084, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5085, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5086, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5087, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5088, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5089, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5090, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5091, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5092, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5093, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5094, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5095, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5096, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5097, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5098, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5099, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5100, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5101, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5102, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5103, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5104, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5105, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5106, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5107, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5108, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5109, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5110, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5111, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5112, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5113, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5114, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5115, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5116, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5117, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5118, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5119, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5120, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5121, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5122, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5123, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5124, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5125, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5126, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5127, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5128, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5129, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5130, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5131, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5132, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5133, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5134, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5135, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5136, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5137, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5138, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5139, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5140, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5141, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5142, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5143, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5144, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5145, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5146, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5147, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5148, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5149, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5150, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5151, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5152, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5153, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5154, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5155, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5156, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5157, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5158, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5159, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5160, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5161, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5162, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5163, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5164, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5165, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5166, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5167, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5168, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5169, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5170, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5171, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5172, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5173, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5174, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5175, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5176, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5177, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5178, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5179, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5180, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5181, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5182, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5183, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5184, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5185, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5186, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5187, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5188, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5189, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5190, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5191, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5192, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5193, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5194, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5195, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5196, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5197, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5198, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5199, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5200, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5201, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5202, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5203, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5204, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5205, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5206, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5207, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5208, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5209, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5210, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5211, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5212, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5213, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5214, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5215, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5216, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5217, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5218, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5219, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5220, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5221, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5222, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5223, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5224, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5225, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5226, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5227, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5228, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5229, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5230, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5231, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5232, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5233, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5234, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5235, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5236, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5237, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5238, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5239, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5240, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5241, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5242, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5243, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5244, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5245, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5246, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5247, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5248, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5249, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5250, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5251, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5252, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5253, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5254, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5255, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5256, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5257, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5258, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5259, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5260, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5261, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5262, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5263, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5264, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5265, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5266, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5267, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5268, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5269, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5270, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5271, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5272, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5273, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5274, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5275, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5276, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5277, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5278, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5279, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5280, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5281, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5282, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5283, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5284, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5285, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5286, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5287, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5288, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5289, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5290, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5291, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5292, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5293, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5294, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5295, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5296, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5297, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5298, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5299, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5300, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5301, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5302, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5303, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5304, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5305, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5306, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5307, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5308, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5309, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5310, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5311, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5312, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5313, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5314, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5315, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5316, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5317, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5318, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5319, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5320, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5321, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5322, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5323, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5324, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5325, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5326, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5327, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5328, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5329, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5330, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5331, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5332, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5333, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5334, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5335, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5336, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5337, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5338, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5339, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5340, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5341, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5342, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5343, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5344, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5345, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5346, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5347, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5348, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5349, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5350, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5351, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5352, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5353, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5354, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5355, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5356, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5357, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5358, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5359, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5360, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5361, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5362, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5363, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5364, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5365, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5366, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5367, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5368, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5369, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5370, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5371, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5372, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5373, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5374, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5375, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5376, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5377, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5378, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5379, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5380, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5381, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5382, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5383, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5384, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5385, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5386, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5387, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5388, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5389, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5390, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5391, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5392, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5393, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5394, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5395, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5396, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5397, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5398, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5399, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5400, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5401, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5402, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5403, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5404, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5405, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5406, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5407, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5408, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5409, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5410, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5411, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5412, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5413, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5414, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5415, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5416, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5417, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5418, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5419, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5420, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5421, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5422, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5423, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5424, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5425, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5426, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5427, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5428, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5429, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5430, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5431, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5432, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5433, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5434, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5435, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5436, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5437, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5438, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5439, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5440, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5441, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5442, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5443, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5444, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5445, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5446, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5447, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5448, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5449, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5450, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5451, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5452, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5453, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5454, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5455, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5456, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5457, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5458, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5459, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5460, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5461, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5462, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5463, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5464, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5465, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5466, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5467, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5468, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5469, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5470, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5471, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5472, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5473, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5474, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5475, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5476, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5477, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5478, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5479, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5480, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5481, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5482, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5483, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5484, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5485, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5486, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5487, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5488, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5489, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5490, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5491, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5492, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5493, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5494, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5495, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5496, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5497, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5498, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5499, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5500, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5501, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5502, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5503, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5504, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5505, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5506, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5507, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5508, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5509, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5510, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5511, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5512, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5513, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5514, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5515, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5516, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5517, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5518, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5519, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5520, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5521, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5522, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5523, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5524, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5525, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5526, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5527, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5528, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5529, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5530, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5531, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5532, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5533, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5534, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5535, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5536, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5537, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5538, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5539, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5540, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5541, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5542, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5543, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5544, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5545, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5546, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5547, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5548, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5549, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5550, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5551, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5552, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5553, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5554, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5555, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5556, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5557, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5558, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5559, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5560, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5561, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5562, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5563, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5564, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5565, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5566, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5567, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5568, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5569, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5570, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5571, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5572, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5573, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5574, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5575, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5576, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5577, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5578, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5579, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5580, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5581, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5582, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5583, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5584, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5585, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5586, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5587, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5588, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5589, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5590, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5591, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5592, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5593, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5594, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5595, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5596, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5597, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5598, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5599, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5600, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5601, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5602, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5603, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5604, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5605, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5606, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5607, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5608, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5609, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5610, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5611, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5612, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5613, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5614, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5615, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5616, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5617, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5618, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5619, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5620, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5621, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5622, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5623, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5624, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5625, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5626, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5627, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5628, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5629, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5630, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5631, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5632, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5633, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5634, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5635, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5636, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5637, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5638, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5639, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5640, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5641, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5642, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5643, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5644, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5645, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5646, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5647, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5648, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5649, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5650, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5651, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5652, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5653, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5654, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5655, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5656, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5657, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5658, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5659, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5660, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5661, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5662, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5663, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5664, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5665, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5666, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5667, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5668, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5669, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5670, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5671, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5672, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5673, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5674, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5675, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5676, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5677, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5678, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5679, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5680, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5681, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5682, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5683, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5684, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5685, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5686, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5687, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5688, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5689, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5690, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5691, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5692, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5693, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5694, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5695, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5696, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5697, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5698, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5699, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5700, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5701, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5702, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5703, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5704, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5705, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5706, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5707, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5708, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5709, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5710, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5711, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5712, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5713, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5714, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5715, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5716, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5717, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5718, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5719, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5720, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5721, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5722, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5723, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5724, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5725, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5726, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5727, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5728, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5729, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5730, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5731, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5732, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5733, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5734, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5735, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5736, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5737, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5738, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5739, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5740, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5741, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5742, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5743, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5744, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5745, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5746, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5747, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5748, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5749, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5750, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5751, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5752, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5753, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5754, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5755, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5756, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5757, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5758, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5759, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5760, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5761, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5762, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5763, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5764, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5765, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5766, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5767, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5768, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5769, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5770, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5771, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5772, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5773, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5774, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5775, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5776, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5777, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5778, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5779, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5780, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5781, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5782, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5783, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5784, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5785, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5786, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5787, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5788, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5789, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5790, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5791, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5792, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5793, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5794, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5795, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5796, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5797, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5798, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5799, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5800, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5801, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5802, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5803, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5804, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5805, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5806, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5807, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5808, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5809, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5810, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5811, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5812, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5813, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5814, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5815, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5816, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5817, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5818, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5819, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5820, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5821, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5822, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5823, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5824, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5825, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5826, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5827, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5828, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5829, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5830, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5831, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5832, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5833, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5834, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5835, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5836, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5837, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5838, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5839, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5840, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5841, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5842, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5843, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5844, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5845, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5846, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5847, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5848, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5849, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5850, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5851, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5852, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5853, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5854, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5855, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5856, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5857, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5858, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5859, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5860, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5861, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5862, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5863, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5864, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5865, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5866, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5867, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5868, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5869, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5870, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5871, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5872, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5873, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5874, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5875, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5876, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5877, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5878, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5879, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5880, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5881, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5882, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5883, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5884, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5885, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5886, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5887, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5888, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5889, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5890, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5891, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5892, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5893, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5894, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5895, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5896, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5897, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5898, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5899, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5900, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5901, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5902, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5903, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5904, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5905, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5906, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5907, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5908, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5909, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5910, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5911, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5912, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5913, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5914, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5915, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5916, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5917, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5918, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5919, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5920, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5921, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5922, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5923, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5924, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5925, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5926, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5927, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5928, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5929, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5930, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5931, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5932, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5933, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5934, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5935, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5936, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5937, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5938, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5939, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5940, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5941, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5942, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5943, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5944, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5945, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5946, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5947, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5948, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5949, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5950, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5951, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":5952, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5953, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5954, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5955, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5956, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5957, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5958, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5959, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5960, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5961, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5962, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5963, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5964, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5965, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5966, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5967, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5968, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5969, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5970, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5971, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5972, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5973, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5974, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5975, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5976, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5977, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5978, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5979, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5980, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5981, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5982, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5983, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5984, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5985, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5986, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5987, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5988, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5989, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5990, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5991, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5992, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5993, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5994, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5995, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5996, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5997, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5998, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":5999, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6000, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6001, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6002, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6003, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6004, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6005, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6006, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6007, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6008, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6009, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6010, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6011, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6012, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6013, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6014, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6015, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6016, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6017, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6018, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6019, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6020, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6021, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6022, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6023, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6024, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6025, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6026, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6027, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6028, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6029, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6030, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6031, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6032, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6033, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6034, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6035, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6036, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6037, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6038, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6039, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6040, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6041, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6042, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6043, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6044, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6045, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6046, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6047, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6048, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6049, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6050, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6051, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6052, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6053, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6054, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6055, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6056, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6057, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6058, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6059, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6060, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6061, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6062, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6063, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6064, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6065, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6066, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6067, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6068, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6069, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6070, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6071, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6072, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6073, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6074, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6075, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6076, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6077, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6078, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6079, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6080, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6081, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6082, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6083, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6084, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6085, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6086, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6087, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6088, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6089, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6090, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6091, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6092, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6093, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6094, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6095, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6096, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6097, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6098, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6099, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6100, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6101, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6102, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6103, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6104, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6105, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6106, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6107, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6108, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6109, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6110, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6111, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6112, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6113, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6114, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6115, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6116, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6117, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6118, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6119, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6120, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6121, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6122, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6123, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6124, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6125, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6126, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6127, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6128, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6129, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6130, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6131, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6132, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6133, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6134, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6135, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6136, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6137, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6138, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6139, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6140, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6141, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6142, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6143, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6144, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6145, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6146, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6147, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6148, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6149, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6150, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6151, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6152, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6153, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6154, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6155, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6156, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6157, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6158, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6159, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6160, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6161, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6162, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6163, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6164, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6165, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6166, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6167, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6168, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6169, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6170, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6171, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6172, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6173, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6174, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6175, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6176, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6177, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6178, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6179, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6180, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6181, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6182, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6183, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6184, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6185, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6186, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6187, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6188, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6189, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6190, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6191, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6192, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6193, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6194, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6195, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6196, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6197, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6198, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6199, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6200, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6201, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6202, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6203, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6204, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6205, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6206, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6207, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6208, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6209, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6210, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6211, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6212, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6213, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6214, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6215, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6216, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6217, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6218, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6219, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6220, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6221, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6222, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6223, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6224, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6225, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6226, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6227, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6228, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6229, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6230, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6231, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6232, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6233, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6234, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6235, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6236, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6237, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6238, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6239, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6240, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6241, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6242, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6243, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6244, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6245, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6246, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6247, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6248, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6249, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6250, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6251, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6252, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6253, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6254, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6255, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6256, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6257, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6258, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6259, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6260, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6261, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6262, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6263, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6264, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6265, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6266, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6267, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6268, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6269, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6270, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6271, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6272, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6273, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6274, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6275, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6276, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6277, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6278, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6279, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6280, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6281, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6282, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6283, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6284, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6285, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6286, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6287, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6288, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6289, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6290, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6291, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6292, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6293, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6294, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6295, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6296, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6297, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6298, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6299, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6300, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6301, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6302, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6303, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6304, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6305, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6306, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6307, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6308, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6309, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6310, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6311, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6312, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6313, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6314, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6315, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6316, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6317, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6318, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6319, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6320, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6321, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6322, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6323, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6324, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6325, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6326, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6327, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6328, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6329, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6330, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6331, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6332, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6333, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6334, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6335, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6336, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6337, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6338, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6339, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6340, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6341, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6342, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6343, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6344, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6345, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6346, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6347, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6348, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6349, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6350, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6351, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6352, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6353, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6354, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6355, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6356, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6357, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6358, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6359, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6360, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6361, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6362, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6363, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6364, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6365, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6366, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6367, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6368, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6369, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6370, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6371, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6372, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6373, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6374, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6375, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6376, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6377, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6378, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6379, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6380, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6381, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6382, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6383, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6384, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6385, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6386, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6387, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6388, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6389, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6390, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6391, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6392, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6393, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6394, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6395, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6396, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6397, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6398, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6399, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6400, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6401, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6402, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6403, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6404, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6405, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6406, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6407, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6408, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6409, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6410, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6411, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6412, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6413, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6414, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6415, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6416, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6417, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6418, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6419, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6420, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6421, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6422, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6423, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6424, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6425, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6426, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6427, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6428, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6429, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6430, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6431, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6432, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6433, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6434, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6435, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6436, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6437, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6438, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6439, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6440, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6441, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6442, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6443, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6444, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6445, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6446, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6447, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6448, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6449, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6450, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6451, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6452, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6453, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6454, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6455, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6456, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6457, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6458, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6459, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6460, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6461, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6462, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6463, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6464, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6465, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6466, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6467, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6468, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6469, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6470, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6471, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6472, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6473, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6474, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6475, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6476, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6477, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6478, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6479, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6480, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6481, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6482, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6483, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6484, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6485, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6486, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6487, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6488, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6489, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6490, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6491, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6492, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6493, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6494, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6495, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6496, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6497, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6498, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6499, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6500, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6501, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6502, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6503, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6504, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6505, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6506, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6507, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6508, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6509, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6510, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6511, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6512, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6513, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6514, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6515, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6516, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6517, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6518, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6519, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6520, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6521, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6522, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6523, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6524, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6525, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6526, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6527, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6528, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6529, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6530, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6531, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6532, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6533, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6534, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6535, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6536, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6537, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6538, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6539, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6540, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6541, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6542, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6543, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6544, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6545, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6546, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6547, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6548, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6549, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6550, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6551, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6552, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6553, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6554, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6555, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6556, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6557, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6558, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6559, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6560, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6561, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6562, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6563, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6564, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6565, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6566, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6567, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6568, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6569, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6570, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6571, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6572, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6573, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6574, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6575, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6576, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6577, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6578, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6579, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6580, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6581, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6582, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6583, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6584, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6585, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6586, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6587, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6588, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6589, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6590, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6591, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6592, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6593, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6594, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6595, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6596, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6597, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6598, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6599, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6600, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6601, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6602, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6603, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6604, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6605, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6606, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6607, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6608, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6609, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6610, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6611, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6612, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6613, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6614, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6615, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6616, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6617, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6618, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6619, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6620, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6621, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6622, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6623, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6624, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6625, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6626, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6627, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6628, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6629, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6630, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6631, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6632, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6633, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6634, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6635, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6636, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6637, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6638, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6639, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6640, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6641, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6642, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6643, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6644, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6645, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6646, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6647, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6648, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6649, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6650, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6651, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6652, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6653, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6654, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6655, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6656, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6657, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6658, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6659, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6660, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6661, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6662, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6663, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6664, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6665, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6666, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6667, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6668, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6669, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6670, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6671, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6672, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6673, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6674, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6675, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6676, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6677, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6678, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6679, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6680, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6681, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6682, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6683, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6684, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6685, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6686, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6687, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6688, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6689, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6690, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6691, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6692, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6693, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6694, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6695, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6696, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6697, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6698, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6699, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6700, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6701, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6702, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6703, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6704, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6705, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6706, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6707, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6708, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6709, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6710, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6711, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6712, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6713, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6714, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6715, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6716, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6717, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6718, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6719, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6720, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6721, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6722, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6723, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6724, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6725, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6726, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6727, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6728, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6729, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6730, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6731, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6732, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6733, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6734, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6735, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6736, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6737, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6738, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6739, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6740, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6741, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6742, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6743, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6744, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6745, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6746, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6747, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6748, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6749, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6750, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6751, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6752, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6753, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6754, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6755, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6756, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6757, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6758, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6759, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6760, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6761, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6762, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6763, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6764, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6765, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6766, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6767, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6768, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6769, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6770, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6771, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6772, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6773, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6774, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6775, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6776, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6777, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6778, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6779, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6780, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6781, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6782, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6783, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6784, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6785, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6786, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6787, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6788, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6789, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6790, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6791, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6792, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6793, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6794, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6795, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6796, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6797, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6798, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6799, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6800, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6801, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6802, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6803, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6804, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6805, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6806, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6807, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6808, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6809, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6810, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6811, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6812, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6813, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6814, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6815, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6816, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6817, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6818, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6819, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6820, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6821, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6822, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6823, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6824, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6825, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6826, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6827, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6828, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6829, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6830, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6831, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6832, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6833, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6834, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6835, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6836, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6837, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6838, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6839, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6840, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6841, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6842, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6843, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6844, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6845, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6846, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6847, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6848, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6849, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6850, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6851, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6852, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6853, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6854, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6855, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6856, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6857, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6858, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6859, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6860, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6861, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6862, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6863, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6864, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6865, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6866, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6867, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6868, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6869, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6870, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6871, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6872, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6873, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6874, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6875, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6876, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6877, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6878, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6879, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6880, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6881, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6882, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6883, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6884, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6885, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6886, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6887, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6888, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6889, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6890, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6891, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6892, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6893, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6894, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6895, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6896, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6897, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6898, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6899, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6900, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6901, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6902, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6903, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6904, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6905, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6906, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6907, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6908, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6909, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6910, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6911, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6912, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6913, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6914, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6915, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6916, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6917, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6918, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6919, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6920, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6921, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6922, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6923, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6924, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6925, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6926, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6927, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6928, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6929, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6930, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6931, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6932, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6933, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6934, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6935, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6936, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6937, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6938, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6939, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6940, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6941, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6942, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6943, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6944, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6945, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6946, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6947, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6948, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6949, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6950, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6951, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6952, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6953, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6954, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6955, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6956, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6957, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6958, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6959, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":6960, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6961, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6962, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6963, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6964, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6965, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6966, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6967, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6968, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6969, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6970, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6971, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6972, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6973, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6974, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6975, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6976, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6977, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6978, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6979, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6980, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6981, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6982, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6983, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6984, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6985, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6986, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6987, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6988, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6989, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6990, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6991, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6992, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6993, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6994, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6995, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6996, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6997, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6998, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":6999, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7000, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7001, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7002, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7003, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7004, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7005, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7006, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7007, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7008, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7009, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7010, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7011, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7012, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7013, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7014, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7015, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7016, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7017, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7018, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7019, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7020, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7021, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7022, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7023, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7024, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7025, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7026, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7027, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7028, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7029, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7030, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7031, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7032, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7033, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7034, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7035, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7036, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7037, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7038, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7039, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7040, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7041, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7042, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7043, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7044, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7045, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7046, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7047, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7048, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7049, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7050, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7051, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7052, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7053, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7054, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7055, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7056, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7057, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7058, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7059, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7060, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7061, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7062, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7063, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7064, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7065, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7066, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7067, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7068, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7069, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7070, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7071, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7072, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7073, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7074, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7075, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7076, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7077, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7078, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7079, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7080, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7081, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7082, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7083, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7084, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7085, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7086, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7087, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7088, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7089, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7090, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7091, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7092, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7093, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7094, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7095, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7096, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7097, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7098, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7099, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7100, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7101, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7102, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7103, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7104, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7105, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7106, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7107, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7108, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7109, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7110, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7111, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7112, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7113, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7114, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7115, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7116, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7117, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7118, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7119, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7120, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7121, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7122, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7123, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7124, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7125, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7126, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7127, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7128, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7129, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7130, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7131, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7132, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7133, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7134, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7135, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7136, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7137, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7138, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7139, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7140, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7141, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7142, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7143, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7144, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7145, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7146, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7147, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7148, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7149, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7150, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7151, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7152, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7153, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7154, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7155, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7156, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7157, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7158, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7159, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7160, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7161, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7162, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7163, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7164, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7165, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7166, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7167, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7168, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7169, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7170, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7171, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7172, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7173, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7174, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7175, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7176, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7177, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7178, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7179, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7180, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7181, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7182, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7183, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7184, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7185, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7186, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7187, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7188, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7189, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7190, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7191, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7192, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7193, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7194, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7195, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7196, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7197, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7198, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7199, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7200, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7201, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7202, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7203, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7204, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7205, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7206, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7207, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7208, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7209, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7210, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7211, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7212, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7213, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7214, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7215, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7216, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7217, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7218, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7219, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7220, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7221, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7222, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7223, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7224, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7225, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7226, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7227, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7228, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7229, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7230, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7231, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7232, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7233, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7234, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7235, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7236, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7237, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7238, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7239, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7240, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7241, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7242, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7243, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7244, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7245, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7246, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7247, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7248, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7249, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7250, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7251, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7252, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7253, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7254, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7255, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7256, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7257, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7258, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7259, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7260, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7261, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7262, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7263, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7264, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7265, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7266, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7267, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7268, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7269, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7270, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7271, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7272, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7273, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7274, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7275, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7276, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7277, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7278, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7279, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7280, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7281, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7282, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7283, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7284, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7285, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7286, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7287, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7288, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7289, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7290, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7291, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7292, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7293, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7294, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7295, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7296, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7297, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7298, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7299, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7300, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7301, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7302, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7303, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7304, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7305, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7306, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7307, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7308, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7309, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7310, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7311, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7312, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7313, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7314, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7315, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7316, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7317, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7318, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7319, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7320, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7321, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7322, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7323, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7324, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7325, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7326, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7327, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7328, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7329, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7330, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7331, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7332, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7333, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7334, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7335, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7336, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7337, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7338, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7339, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7340, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7341, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7342, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7343, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7344, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7345, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7346, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7347, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7348, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7349, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7350, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7351, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7352, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7353, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7354, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7355, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7356, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7357, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7358, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7359, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7360, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7361, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7362, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7363, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7364, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7365, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7366, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7367, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7368, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7369, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7370, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7371, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7372, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7373, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7374, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7375, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7376, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7377, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7378, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7379, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7380, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7381, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7382, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7383, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7384, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7385, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7386, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7387, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7388, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7389, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7390, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7391, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7392, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7393, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7394, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7395, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7396, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7397, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7398, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7399, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7400, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7401, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7402, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7403, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7404, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7405, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7406, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7407, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7408, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7409, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7410, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7411, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7412, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7413, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7414, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7415, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7416, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7417, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7418, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7419, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7420, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7421, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7422, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7423, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7424, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7425, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7426, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7427, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7428, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7429, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7430, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7431, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7432, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7433, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7434, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7435, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7436, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7437, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7438, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7439, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7440, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7441, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7442, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7443, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7444, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7445, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7446, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7447, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7448, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7449, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7450, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7451, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7452, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7453, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7454, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7455, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7456, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7457, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7458, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7459, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7460, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7461, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7462, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7463, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7464, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7465, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7466, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7467, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7468, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7469, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7470, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7471, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7472, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7473, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7474, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7475, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7476, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7477, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7478, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7479, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7480, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7481, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7482, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7483, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7484, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7485, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7486, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7487, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7488, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7489, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7490, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7491, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7492, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7493, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7494, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7495, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7496, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7497, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7498, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7499, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7500, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7501, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7502, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7503, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7504, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7505, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7506, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7507, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7508, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7509, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7510, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7511, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7512, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7513, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7514, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7515, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7516, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7517, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7518, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7519, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7520, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7521, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7522, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7523, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7524, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7525, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7526, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7527, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7528, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7529, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7530, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7531, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7532, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7533, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7534, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7535, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7536, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7537, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7538, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7539, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7540, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7541, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7542, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7543, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7544, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7545, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7546, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7547, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7548, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7549, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7550, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7551, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7552, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7553, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7554, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7555, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7556, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7557, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7558, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7559, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7560, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7561, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7562, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7563, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7564, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7565, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7566, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7567, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7568, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7569, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7570, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7571, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7572, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7573, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7574, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7575, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7576, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7577, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7578, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7579, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7580, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7581, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7582, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7583, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7584, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7585, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7586, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7587, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7588, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7589, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7590, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7591, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7592, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7593, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7594, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7595, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7596, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7597, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7598, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7599, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7600, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7601, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7602, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7603, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7604, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7605, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7606, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7607, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7608, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7609, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7610, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7611, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7612, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7613, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7614, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7615, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7616, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7617, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7618, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7619, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7620, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7621, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7622, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7623, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7624, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7625, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7626, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7627, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7628, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7629, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7630, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7631, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7632, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7633, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7634, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7635, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7636, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7637, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7638, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7639, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7640, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7641, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7642, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7643, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7644, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7645, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7646, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7647, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7648, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7649, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7650, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7651, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7652, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7653, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7654, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7655, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7656, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7657, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7658, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7659, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7660, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7661, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7662, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7663, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7664, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7665, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7666, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7667, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7668, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7669, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7670, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7671, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7672, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7673, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7674, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7675, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7676, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7677, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7678, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7679, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7680, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7681, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7682, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7683, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7684, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7685, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7686, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7687, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7688, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7689, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7690, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7691, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7692, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7693, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7694, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7695, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7696, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7697, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7698, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7699, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7700, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7701, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7702, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7703, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7704, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7705, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7706, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7707, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7708, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7709, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7710, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7711, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7712, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7713, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7714, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7715, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7716, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7717, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7718, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7719, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7720, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7721, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7722, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7723, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7724, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7725, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7726, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7727, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7728, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7729, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7730, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7731, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7732, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7733, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7734, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7735, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7736, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7737, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7738, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7739, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7740, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7741, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7742, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7743, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7744, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7745, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7746, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7747, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7748, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7749, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7750, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7751, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7752, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7753, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7754, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7755, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7756, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7757, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7758, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7759, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7760, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7761, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7762, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7763, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7764, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7765, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7766, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7767, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7768, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7769, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7770, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7771, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7772, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7773, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7774, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7775, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7776, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7777, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7778, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7779, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7780, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7781, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7782, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7783, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7784, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7785, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7786, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7787, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7788, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7789, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7790, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7791, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7792, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7793, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7794, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7795, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7796, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7797, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7798, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7799, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7800, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7801, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7802, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7803, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7804, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7805, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7806, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7807, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7808, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7809, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7810, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7811, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7812, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7813, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7814, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7815, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7816, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7817, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7818, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7819, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7820, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7821, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7822, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7823, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7824, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7825, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7826, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7827, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7828, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7829, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7830, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7831, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7832, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7833, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7834, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7835, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7836, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7837, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7838, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7839, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7840, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7841, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7842, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7843, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7844, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7845, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7846, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7847, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7848, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7849, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7850, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7851, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7852, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7853, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7854, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7855, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7856, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7857, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7858, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7859, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7860, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7861, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7862, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7863, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7864, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7865, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7866, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7867, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7868, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7869, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7870, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7871, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7872, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7873, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7874, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7875, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7876, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7877, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7878, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7879, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7880, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7881, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7882, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7883, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7884, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7885, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7886, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7887, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7888, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7889, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7890, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7891, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7892, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7893, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7894, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7895, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7896, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7897, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7898, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7899, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7900, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7901, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7902, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7903, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7904, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7905, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7906, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7907, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7908, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7909, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7910, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7911, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7912, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7913, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7914, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7915, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7916, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7917, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7918, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7919, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7920, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7921, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7922, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7923, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7924, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7925, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7926, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7927, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7928, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7929, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7930, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7931, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7932, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7933, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7934, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7935, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7936, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7937, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7938, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7939, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7940, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7941, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7942, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7943, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7944, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7945, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7946, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7947, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7948, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7949, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7950, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7951, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7952, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7953, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7954, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7955, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7956, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7957, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7958, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7959, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7960, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7961, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7962, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7963, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7964, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7965, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7966, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7967, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + + { + "id":7968, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7969, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7970, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7971, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7972, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7973, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7974, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7975, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7976, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7977, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7978, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7979, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7980, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7981, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7982, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }, + { + "id":7983, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":false + }] + }], + "tilewidth":16 + }], + "tilewidth":16, + "type":"map", + "version":"1.10", + "width":48 +} \ No newline at end of file diff --git a/ui/dist/assets/tilemaps/tiles/tileset.png b/ui/dist/assets/tilemaps/tiles/tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..f8cb6fea4ec0b0cb9cec339d2c71a34a6635d30f Binary files /dev/null and b/ui/dist/assets/tilemaps/tiles/tileset.png differ diff --git a/ui/dist/assets/tilemaps/tiles/tileset.tsx b/ui/dist/assets/tilemaps/tiles/tileset.tsx new file mode 100644 index 0000000000000000000000000000000000000000..5897600ae219711f8a5c8da05cceb45b619b4e69 --- /dev/null +++ b/ui/dist/assets/tilemaps/tiles/tileset.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/ui/dist/assets/tilemaps/tiles/town.tsx b/ui/dist/assets/tilemaps/tiles/town.tsx new file mode 100644 index 0000000000000000000000000000000000000000..5897600ae219711f8a5c8da05cceb45b619b4e69 --- /dev/null +++ b/ui/dist/assets/tilemaps/tiles/town.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/ui/dist/index.html b/ui/dist/index.html new file mode 100644 index 0000000000000000000000000000000000000000..d8f3f9c1be0bec56da47b4c27462b64bf2c7cb4e --- /dev/null +++ b/ui/dist/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/ui/package-lock.json b/ui/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..b8c3b639aace676634f0c27105cef32cab4b240e --- /dev/null +++ b/ui/package-lock.json @@ -0,0 +1,2895 @@ +{ + "name": "phaser3-typescript-project-template", + "version": "1.2.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "phaser3-typescript-project-template", + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "phaser3-rex-plugins": "^1.60.1" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/plugin-terser": "^0.4.0", + "@rollup/plugin-typescript": "^11.1.0", + "phaser": "^3.60.0", + "rollup": "^3.20.2", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-serve": "^2.0.2", + "tslib": "^2.5.0", + "typescript": "^5.0.3", + "vite-plugin-static-copy": "^0.15.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz", + "integrity": "sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@rollup/plugin-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz", + "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz", + "integrity": "sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.0.tgz", + "integrity": "sha512-86flrfE+bSHB69znnTV6kVjkncs2LBMhcTCyxWgRxLyfXfQrxg4UwlAqENnjrrxnSNS/XKCDJCl8EkdFJVHOxw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "dependencies": { + "node-fetch": "^2.6.11" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", + "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/i18next": { + "version": "22.4.15", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.15.tgz", + "integrity": "sha512-yYudtbFrrmWKLEhl6jvKUYyYunj4bTBCe2qIUYAxbXoPusY7YmdwPvOE6fx6UIfWvmlbCWDItr7wIs8KEBZ5Zg==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.20.6" + } + }, + "node_modules/i18next-http-backend": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.2.1.tgz", + "integrity": "sha512-ZXIdn/8NJIBJ0X4hzXfc3STYxKrCKh1fYjji9HPyIpEJfvTvy8/ZlTl8RuTizzCPj2ZcWrfaecyOMKs6bQ7u5A==", + "dependencies": { + "cross-fetch": "3.1.6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", + "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/papaparse": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/phaser": { + "version": "3.60.0", + "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.60.0.tgz", + "integrity": "sha512-IKUy35EnoEVcl2EmJ8WOyK4X8OoxHYdlhZLgRGpNrvD1fEagYffhVmwHcapE/tGiLgyrnezmXIo5RrH2NcrTHw==", + "dev": true, + "dependencies": { + "eventemitter3": "^5.0.0" + } + }, + "node_modules/phaser3-rex-plugins": { + "version": "1.60.1", + "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.60.1.tgz", + "integrity": "sha512-tMHLwtNa18RH0U59lF+J5PSRPOwnJMv6Pw78TFOBgwXz2ezaceLgw85iE4MRV+I5KybfdU3hDTZsYOrfxOqRPQ==", + "dependencies": { + "eventemitter3": "^3.1.2", + "i18next": "^22.4.14", + "i18next-http-backend": "^2.2.0", + "js-yaml": "^4.1.0", + "papaparse": "^5.4.1", + "webfontloader": "^1.6.28" + } + }, + "node_modules/phaser3-rex-plugins/node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "3.21.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.7.tgz", + "integrity": "sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-commonjs": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", + "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "rollup": ">=1.12.0" + } + }, + "node_modules/rollup-plugin-serve": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-serve/-/rollup-plugin-serve-2.0.2.tgz", + "integrity": "sha512-ALqyTbPhlf7FZ5RzlbDvMYvbKuCHWginJkTo6dMsbgji/a78IbsXox+pC83HENdkTRz8OXrTj+aShp3+3ratpg==", + "dev": true, + "dependencies": { + "mime": ">=2.4.6", + "opener": "1" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.16.8", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", + "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tslib": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", + "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/vite": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.5.tgz", + "integrity": "sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==", + "dev": true, + "peer": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-static-copy": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.15.0.tgz", + "integrity": "sha512-Ww+/Ug9guV45oIfIi/lA2z8v3K+lLHV9zCJqTVO4FTdqrJoZBj68VgGBSH1fi0N4q/EHW32RsL3ympi4Wlsq5w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^11.1.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true, + "peer": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "dependencies": { + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz", + "integrity": "sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "dependencies": { + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + } + } + }, + "@rollup/plugin-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz", + "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.27.0" + }, + "dependencies": { + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@rollup/plugin-terser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz", + "integrity": "sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==", + "dev": true, + "requires": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + } + }, + "@rollup/plugin-typescript": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.0.tgz", + "integrity": "sha512-86flrfE+bSHB69znnTV6kVjkncs2LBMhcTCyxWgRxLyfXfQrxg4UwlAqENnjrrxnSNS/XKCDJCl8EkdFJVHOxw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "requires": { + "node-fetch": "^2.6.11" + } + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "peer": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "eventemitter3": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", + "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "i18next": { + "version": "22.4.15", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.15.tgz", + "integrity": "sha512-yYudtbFrrmWKLEhl6jvKUYyYunj4bTBCe2qIUYAxbXoPusY7YmdwPvOE6fx6UIfWvmlbCWDItr7wIs8KEBZ5Zg==", + "requires": { + "@babel/runtime": "^7.20.6" + } + }, + "i18next-http-backend": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.2.1.tgz", + "integrity": "sha512-ZXIdn/8NJIBJ0X4hzXfc3STYxKrCKh1fYjji9HPyIpEJfvTvy8/ZlTl8RuTizzCPj2ZcWrfaecyOMKs6bQ7u5A==", + "requires": { + "cross-fetch": "3.1.6" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", + "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", + "dev": true + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "peer": true + }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "papaparse": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "phaser": { + "version": "3.60.0", + "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.60.0.tgz", + "integrity": "sha512-IKUy35EnoEVcl2EmJ8WOyK4X8OoxHYdlhZLgRGpNrvD1fEagYffhVmwHcapE/tGiLgyrnezmXIo5RrH2NcrTHw==", + "dev": true, + "requires": { + "eventemitter3": "^5.0.0" + } + }, + "phaser3-rex-plugins": { + "version": "1.60.1", + "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.60.1.tgz", + "integrity": "sha512-tMHLwtNa18RH0U59lF+J5PSRPOwnJMv6Pw78TFOBgwXz2ezaceLgw85iE4MRV+I5KybfdU3hDTZsYOrfxOqRPQ==", + "requires": { + "eventemitter3": "^3.1.2", + "i18next": "^22.4.14", + "i18next-http-backend": "^2.2.0", + "js-yaml": "^4.1.0", + "papaparse": "^5.4.1", + "webfontloader": "^1.6.28" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + } + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "dev": true, + "peer": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "3.21.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.7.tgz", + "integrity": "sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-commonjs": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", + "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-serve": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-serve/-/rollup-plugin-serve-2.0.2.tgz", + "integrity": "sha512-ALqyTbPhlf7FZ5RzlbDvMYvbKuCHWginJkTo6dMsbgji/a78IbsXox+pC83HENdkTRz8OXrTj+aShp3+3ratpg==", + "dev": true, + "requires": { + "mime": ">=2.4.6", + "opener": "1" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "peer": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "terser": { + "version": "5.16.8", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", + "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", + "dev": true + }, + "typescript": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", + "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "vite": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.5.tgz", + "integrity": "sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==", + "dev": true, + "peer": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "vite-plugin-static-copy": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.15.0.tgz", + "integrity": "sha512-Ww+/Ug9guV45oIfIi/lA2z8v3K+lLHV9zCJqTVO4FTdqrJoZBj68VgGBSH1fi0N4q/EHW32RsL3ympi4Wlsq5w==", + "dev": true, + "requires": { + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^11.1.0", + "picocolors": "^1.0.0" + } + }, + "webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + } + } +} diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 0000000000000000000000000000000000000000..c9c7ee281f4a81e06c962aae4fa42e09667d9914 --- /dev/null +++ b/ui/package.json @@ -0,0 +1,38 @@ +{ + "name": "phaser3-typescript-project-template", + "version": "1.2.0", + "description": "A Phaser 3 Project Template using Rollup and TypeScript", + "main": "src/index.ts", + "scripts": { + "dev": "rollup --config rollup.config.dev.mjs", + "build": "rollup --config rollup.config.dist.mjs", + "watch": "rollup --watch --config rollup.config.dev.mjs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/photonstorm/phaser3-typescript-project-template.git" + }, + "author": "Richard Davey (http://www.photonstorm.com)", + "license": "MIT", + "bugs": { + "url": "https://github.com/photonstorm/phaser3-typescript-project-template/issues" + }, + "homepage": "https://github.com/photonstorm/phaser3-typescript-project-template#readme", + "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/plugin-terser": "^0.4.0", + "@rollup/plugin-typescript": "^11.1.0", + "phaser": "^3.60.0", + "rollup": "^3.20.2", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-serve": "^2.0.2", + "typescript": "^5.0.3", + "vite-plugin-static-copy": "^0.15.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "phaser3-rex-plugins": "^1.60.1" + } +} diff --git a/ui/rollup.config.dev.mjs b/ui/rollup.config.dev.mjs new file mode 100644 index 0000000000000000000000000000000000000000..9f54404f89e1ca38ee73cc0940a0f7707c37eb0b --- /dev/null +++ b/ui/rollup.config.dev.mjs @@ -0,0 +1,75 @@ +import commonjs from '@rollup/plugin-commonjs'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import replace from '@rollup/plugin-replace'; +import serve from 'rollup-plugin-serve'; +import typescript from '@rollup/plugin-typescript'; + + +export default { + + // Our game entry point (edit as required) + input: [ + './src/index.ts' + ], + + // Where the build file is to be generated. + // Most games being built for distribution can use iife as the module type. + // You can also use 'umd' if you need to ingest your game into another system. + // If using Phaser 3.21 or **below**, add: `intro: 'var global = window;'` to the output object. + output: { + file: './dist/bundle.js', + name: 'MyGame', + format: 'iife', + sourcemap: true + }, + + plugins: [ + + // Toggle the booleans here to enable / disable Phaser 3 features: + replace({ + preventAssignment: true, + 'typeof CANVAS_RENDERER': JSON.stringify(true), + 'typeof WEBGL_RENDERER': JSON.stringify(true), + 'typeof WEBGL_DEBUG': JSON.stringify(true), + 'typeof EXPERIMENTAL': JSON.stringify(true), + 'typeof PLUGIN_CAMERA3D': JSON.stringify(false), + 'typeof PLUGIN_FBINSTANT': JSON.stringify(false), + 'typeof FEATURE_SOUND': JSON.stringify(true) + }), + + // Parse our .ts source files + nodeResolve({ + browser: true, + extensions: [ '.ts', '.tsx' ] + }), + + // We need to convert the Phaser 3 CJS modules into a format Rollup can use: + commonjs({ + include: [ + 'node_modules/eventemitter3/**', + 'node_modules/phaser/**' + ], + exclude: [ + 'node_modules/phaser/src/polyfills/requestAnimationFrame.js', + 'node_modules/phaser/src/phaser-esm.js' + ], + sourceMap: true, + ignoreGlobal: true + }), + + // See https://github.com/rollup/plugins/tree/master/packages/typescript for config options + typescript(), + + // See https://www.npmjs.com/package/rollup-plugin-serve for config options + serve({ + open: true, + contentBase: 'dist', + host: '127.0.0.1', + port: 10001, + headers: { + 'Access-Control-Allow-Origin': '*' + } + }) + + ] +}; diff --git a/ui/rollup.config.dist.mjs b/ui/rollup.config.dist.mjs new file mode 100644 index 0000000000000000000000000000000000000000..39ac16327755273b4a270245d8a6041d666c4759 --- /dev/null +++ b/ui/rollup.config.dist.mjs @@ -0,0 +1,65 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import replace from '@rollup/plugin-replace'; +import terser from '@rollup/plugin-terser'; +import typescript from '@rollup/plugin-typescript'; + +export default { + + // Our games entry point (edit as required) + input: [ + './src/index.ts' + ], + + // Where the build file is to be generated. + // Most games being built for distribution can use iife as the module type. + // You can also use 'umd' if you need to ingest your game into another system. + // If using Phaser 3.21 or **below**, add: `intro: 'var global = window;'` to the output object. + output: { + file: './dist/index.js', + name: 'MyGame', + format: 'iife', + sourcemap: false + }, + + plugins: [ + + // Toggle the booleans here to enable / disable Phaser 3 features: + replace({ + preventAssignment: true, + 'typeof CANVAS_RENDERER': JSON.stringify(true), + 'typeof WEBGL_RENDERER': JSON.stringify(true), + 'typeof WEBGL_DEBUG': JSON.stringify(false), + 'typeof EXPERIMENTAL': JSON.stringify(true), + 'typeof PLUGIN_CAMERA3D': JSON.stringify(false), + 'typeof PLUGIN_FBINSTANT': JSON.stringify(false), + 'typeof FEATURE_SOUND': JSON.stringify(true) + }), + + // Parse our .ts source files + nodeResolve({ + extensions: [ '.ts', '.tsx' ] + }), + + // We need to convert the Phaser 3 CJS modules into a format Rollup can use: + commonjs({ + include: [ + 'node_modules/eventemitter3/**', + 'node_modules/phaser/**' + ], + exclude: [ + 'node_modules/phaser/src/polyfills/requestAnimationFrame.js', + 'node_modules/phaser/src/phaser-esm.js' + ], + sourceMap: false, + ignoreGlobal: true + }), + + // See https://github.com/rollup/plugins/tree/master/packages/typescript for config options + typescript(), + + // See https://github.com/rollup/plugins/tree/master/packages/terser for config options + terser() + + ] +}; \ No newline at end of file diff --git a/ui/run.sh b/ui/run.sh new file mode 100644 index 0000000000000000000000000000000000000000..2bb43d0821af34207a3a9d8113e5e75c16cd40bf --- /dev/null +++ b/ui/run.sh @@ -0,0 +1,4 @@ +#npm install +npm run watch +#npm run dev +#npm run build diff --git a/ui/screenshot.png b/ui/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe056d6083e8060d74115fc282740ce58e32261 Binary files /dev/null and b/ui/screenshot.png differ diff --git a/ui/src/classes/actor.ts b/ui/src/classes/actor.ts new file mode 100644 index 0000000000000000000000000000000000000000..22c79a6a60f20635f0e4992841c4bcc72744102c --- /dev/null +++ b/ui/src/classes/actor.ts @@ -0,0 +1,54 @@ +import { Physics } from "phaser"; +export class Actor extends Physics.Arcade.Sprite { + constructor( + scene: Phaser.Scene, + x: number, + y: number, + texture: string, + frame?: string | number + ) { + super(scene, x, y, texture, frame); + scene.add.existing(this); + scene.physics.add.existing(this); + this.getBody().setCollideWorldBounds(true); + } + + protected getBody(): Physics.Arcade.Body { + return this.body as Physics.Arcade.Body; + } + + initAnimations(): void { + this.scene.anims.create({ + key: this.name + "-walk-down", + frames: this.scene.anims.generateFrameNumbers(this.name, { + start: 0, + end: 2, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: this.name + "-walk-up", + frames: this.scene.anims.generateFrameNumbers(this.name, { + start: 3, + end: 5, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: this.name + "-walk-left", + frames: this.scene.anims.generateFrameNumbers(this.name, { + start: 6, + end: 8, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: this.name + "-walk-right", + frames: this.scene.anims.generateFrameNumbers(this.name, { + start: 9, + end: 11, + }), + frameRate: 6, + }); + } +} diff --git a/ui/src/classes/event_center.ts b/ui/src/classes/event_center.ts new file mode 100644 index 0000000000000000000000000000000000000000..ff4cbb288f100e6b27b53ebb68aa389a21cea497 --- /dev/null +++ b/ui/src/classes/event_center.ts @@ -0,0 +1,5 @@ +import { Events } from "phaser"; + +const eventsCenter = new Events.EventEmitter(); + +export default eventsCenter; diff --git a/ui/src/classes/npc.ts b/ui/src/classes/npc.ts new file mode 100644 index 0000000000000000000000000000000000000000..452acc65bdc4d27eb8a16c60c83bb1159030de71 --- /dev/null +++ b/ui/src/classes/npc.ts @@ -0,0 +1,246 @@ +import { Actor } from "./actor"; +import { DIRECTION } from "../utils"; +import { + MoveTo, + PathFinder, + Board, +} from "../phaser3-rex-plugins/plugins/board-components"; +import { Label } from "../phaser3-rex-plugins/templates/ui/ui-components"; +import { COLOR_DARK, COLOR_LIGHT, COLOR_PRIMARY } from "../constants"; +import { TownScene } from "../scenes"; +import eventsCenter from "./event_center"; + +export class NPC extends Actor { + private moveTo: MoveTo; + private board: Board; + private canMove: boolean = true; + private talkWithPlayer: boolean = false; + private path: PathFinder.NodeType[] = []; + private finalDirection: number = undefined; + private targetLocation: string = undefined; + private targetNPC: NPC = undefined; + private textBox: Label = undefined; + + public id: number; + public direction: number = DIRECTION.DOWN; + + constructor( + scene: Phaser.Scene, + board: Board, + x: number, + y: number, + name: string, + id: number + ) { + super(scene, x, y, name); + + this.setName(name); + this.board = board; + this.id = id; + // PHYSICS + this.getBody().setSize(14, 16); + this.getBody().setOffset(0, 4); + this.getBody().setImmovable(true); + this.setOrigin(0, 0.2); + + this.initAnimations(); + this.moveTo = this.scene.rexBoard.add.moveTo(this, { + speed: 55, + sneak: true, + }); + this.listenToDirectionEvent(); + } + + update(): void { + if (this.path.length > 0 && !this.moveTo.isRunning && this.canMove) { + var tileXY = this.board.worldXYToTileXY(this.x, this.y); + if (tileXY.x == this.path[0].x) { + if (tileXY.y < this.path[0].y) this.changeDirection(DIRECTION.DOWN); + else if (tileXY.y > this.path[0].y) this.changeDirection(DIRECTION.UP); + } else if (tileXY.y == this.path[0].y) { + if (tileXY.x < this.path[0].x) this.changeDirection(DIRECTION.RIGHT); + else if (tileXY.x > this.path[0].x) + this.changeDirection(DIRECTION.LEFT); + } + var move = this.moveTo.moveTo(this.path.shift()); + move.removeAllListeners("complete"); + move.on("complete", () => { + if (this.path.length == 0) { + this.changeDirection(this.finalDirection); + this.emitTurnEvent(); + if (this.targetLocation != undefined) { + fetch("http://127.0.0.1:10002/update_location", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + credentials: "same-origin", + body: JSON.stringify({ + agent_locations: { + [this.name]: this.targetLocation, + }, + }), + }); + } + } + }); + } + + var text = ""; + switch (this.direction) { + case DIRECTION.UP: + text = "up"; + break; + case DIRECTION.DOWN: + text = "down"; + break; + case DIRECTION.LEFT: + text = "left"; + break; + case DIRECTION.RIGHT: + text = "right"; + break; + } + this.anims.play(this.name + "-walk-" + text, true); + if (this.anims.isPlaying && !this.moveTo.isRunning) + this.anims.setCurrentFrame(this.anims.currentAnim!.frames[0]); + this.updateTextBox(); + this.depth = this.y + this.height * 0.8; + } + + listenToDirectionEvent(): void { + eventsCenter.on(this.name + "-up", () => { + this.changeDirection(DIRECTION.UP); + }); + eventsCenter.on(this.name + "-down", () => { + this.changeDirection(DIRECTION.DOWN); + }); + eventsCenter.on(this.name + "-left", () => { + this.changeDirection(DIRECTION.LEFT); + }); + eventsCenter.on(this.name + "-right", () => { + this.changeDirection(DIRECTION.RIGHT); + }); + } + + emitTurnEvent(): void { + // Make the listener NPC turn to the speaker NPC. + if (this.targetNPC == undefined) return; + var direction = ""; + switch (this.finalDirection) { + case DIRECTION.UP: + direction = "down"; + break; + case DIRECTION.DOWN: + direction = "up"; + break; + case DIRECTION.LEFT: + direction = "right"; + break; + case DIRECTION.RIGHT: + direction = "left"; + break; + } + eventsCenter.emit(this.targetNPC.name + "-" + direction); + this.setTargetNPC(); + } + + updateTextBox(): void { + if (this.textBox == undefined) return; + this.textBox.setOrigin(0.5, 1.0); + var scale = this.scene.cameras.main.zoom; + this.textBox.setX(this.x + this.width / 2); + this.textBox.setY(this.y - this.height * 0.2); + this.textBox.depth = this.y + this.height * 0.8; + this.textBox.getChildren().forEach((child) => { + child.setDepth(this.y + this.height * 0.8); + }); + } + + public setTextBox(text: string): void { + this.destroyTextBox(); + var scale = this.scene.cameras.main.zoom; + var scene = this.scene as TownScene; + this.textBox = scene.rexUI.add + .label({ + x: this.x + this.width / 2, + y: this.y - this.height * 0.2, + width: 24 * scale, + orientation: "x", + background: scene.rexUI.add.roundRectangle( + 0, + 0, + 2, + 2, + 20, + COLOR_PRIMARY, + 0.7 + ), + text: scene.rexUI.wrapExpandText( + scene.add.text(0, 0, text, { + fontSize: 10, + }) + ), + expandTextWidth: true, + space: { + left: 10, + right: 10, + top: 10, + bottom: 10, + }, + }) + .setOrigin(0.5, 1.0) + .setScale(1 / scale, 1 / scale) + .setDepth(this.y + this.height * 0.8) + .layout(); + } + + public destroyTextBox(): void { + if (this.textBox != undefined) this.textBox.destroy(); + this.textBox = undefined; + } + + public changeDirection(direction: number): void { + if (direction == undefined) return; + this.direction = direction; + } + + public moveAlongPath( + path: PathFinder.NodeType[], + finalDirection: number = undefined, + targetLocation: string = undefined + ): void { + if (path.length == 0) return; + if (this.moveTo.isRunning) return; + if (this.path.length > 0) return; + this.path = path; + this.finalDirection = finalDirection; + this.targetLocation = targetLocation; + } + + public pauseMoving(): void { + this.moveTo.stop(); + this.canMove = false; + } + + public resumeMoving(): void { + this.moveTo.resume(); + this.canMove = true; + } + + public isMoving(): boolean { + return this.moveTo.isRunning || this.path.length > 0; + } + + public isTalking(): boolean { + return this.talkWithPlayer; + } + + public setTalking(talking: boolean): void { + this.talkWithPlayer = talking; + } + + public setTargetNPC(targetNPC: NPC = undefined): void { + this.targetNPC = targetNPC; + } +} diff --git a/ui/src/classes/player.ts b/ui/src/classes/player.ts new file mode 100644 index 0000000000000000000000000000000000000000..46be03186924d89a1cf7b92ac12e871aaaca6377 --- /dev/null +++ b/ui/src/classes/player.ts @@ -0,0 +1,66 @@ +import { Actor } from "./actor"; +export class Player extends Actor { + private keyW: Phaser.Input.Keyboard.Key; + private keyA: Phaser.Input.Keyboard.Key; + private keyS: Phaser.Input.Keyboard.Key; + private keyD: Phaser.Input.Keyboard.Key; + + constructor(scene: Phaser.Scene, x: number, y: number) { + super(scene, x, y, "Brendan"); + + this.setName("Brendan"); + + // Keys + this.initKeyboard(); + + // PHYSICS + this.getBody().setSize(14, 16); + this.getBody().setOffset(0, 5); + + // ANIMATIONS + this.initAnimations(); + } + + update(): void { + this.getBody().setVelocity(0); + + var pressed_flag = false; + if (this.keyW.enabled && this.keyW?.isDown) { + this.getBody().setVelocityY(-110); + this.anims.play(this.name + "-walk-up", true); + pressed_flag = true; + } + + if (this.keyA.enabled && this.keyA?.isDown) { + // this.getBody().setOffset(48, 15); + this.getBody().setVelocityX(-110); + this.anims.play(this.name + "-walk-left", true); + pressed_flag = true; + } + + if (this.keyS.enabled && this.keyS?.isDown) { + this.getBody().setVelocityY(110); + this.anims.play(this.name + "-walk-down", true); + pressed_flag = true; + } + + if (this.keyD.enabled && this.keyD?.isDown) { + this.getBody().setVelocityX(110); + this.anims.play(this.name + "-walk-right", true); + // this.getBody().setOffset(15, 15); + pressed_flag = true; + } + + if (!pressed_flag && this.anims.isPlaying) { + this.anims.setCurrentFrame(this.anims.currentAnim!.frames[0]); + } + this.depth = this.y + 0.5 * this.height; + } + + initKeyboard(): void { + this.keyW = this.scene.input.keyboard!.addKey("W"); + this.keyA = this.scene.input.keyboard!.addKey("A"); + this.keyS = this.scene.input.keyboard!.addKey("S"); + this.keyD = this.scene.input.keyboard!.addKey("D"); + } +} diff --git a/ui/src/constants.ts b/ui/src/constants.ts new file mode 100644 index 0000000000000000000000000000000000000000..eb9cdfd032fa96bda12704a29f83704d7008392d --- /dev/null +++ b/ui/src/constants.ts @@ -0,0 +1,3 @@ +export const COLOR_PRIMARY = 0x4e342e; +export const COLOR_LIGHT = 0x7b5e57; +export const COLOR_DARK = 0x260e04; diff --git a/ui/src/index.ts b/ui/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..abae0ffb053f53e535759e8159bf87b55d9467a2 --- /dev/null +++ b/ui/src/index.ts @@ -0,0 +1,79 @@ +import { Game, Scale, Types, WEBGL } from "phaser"; + +import { TownScene, LoadingScene } from "./scenes"; +import UIPlugin from "./phaser3-rex-plugins/templates/ui/ui-plugin"; +import BoardPlugin from "./phaser3-rex-plugins/plugins/board-plugin"; + +declare global { + interface Window { + sizeChanged: () => void; + game: Game; + } +} + +export const gameConfig: Types.Core.GameConfig = { + title: "Phaser game tutorial", + type: WEBGL, + parent: "game", + // backgroundColor: '#351f1b', + scale: { + mode: Scale.ScaleModes.NONE, + width: window.innerWidth, + height: window.innerHeight, + }, + physics: { + default: "arcade", + arcade: { + debug: false, + }, + }, + render: { + antialiasGL: false, + pixelArt: true, + }, + callbacks: { + postBoot: () => { + window.sizeChanged(); + }, + }, + canvasStyle: `display: block; width: 100%; height: 100%;`, + autoFocus: true, + audio: { + disableWebAudio: false, + }, + scene: [LoadingScene, TownScene], + dom: { + createContainer: true, + }, + plugins: { + scene: [ + { + key: "rexUI", + plugin: UIPlugin, + mapping: "rexUI", + }, + { + key: "rexBoard", + plugin: BoardPlugin, + mapping: "rexBoard", + }, + ], + }, +}; + +window.sizeChanged = () => { + if (window.game.isBooted) { + setTimeout(() => { + window.game.scale.resize(window.innerWidth, window.innerHeight); + + window.game.canvas.setAttribute( + "style", + `display: block; width: ${window.innerWidth}px; height: ${window.innerHeight}px;` + ); + }, 100); + } +}; + +window.onresize = () => window.sizeChanged(); + +window.game = new Game(gameConfig); diff --git a/ui/src/phaser3-rex-plugins/plugins/alphamaskimage.d.ts b/ui/src/phaser3-rex-plugins/plugins/alphamaskimage.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8ee0790c6d60778cf82b66e286a9746dc7e5f6f6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/alphamaskimage.d.ts @@ -0,0 +1,2 @@ +import AlphaMaskImage from './gameobjects/canvas/alphamaskimage/AlphaMaskImage'; +export default AlphaMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/anchor-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/anchor-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5a908ac6d26d22b1904c953d72634cc0a000384d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/anchor-plugin.d.ts @@ -0,0 +1,9 @@ +import Anchor from './anchor' + +export default class AnchorPlugin extends Phaser.Plugins.BasePlugin { + add( + gameObject: Phaser.GameObjects.GameObject, + config?: Anchor.IConfig + ): Anchor; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/anchor.d.ts b/ui/src/phaser3-rex-plugins/plugins/anchor.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..207d995cab1fe31c1139350c244c546c2579f939 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/anchor.d.ts @@ -0,0 +1,2 @@ +import Anchor from './behaviors/anchor/Anchor'; +export default Anchor; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/arcadestepclock.js b/ui/src/phaser3-rex-plugins/plugins/arcadestepclock.js new file mode 100644 index 0000000000000000000000000000000000000000..e882542ceadf4ba360ad8d0fdbf0524cf3be5494 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/arcadestepclock.js @@ -0,0 +1,2 @@ +import ArcadeStepClock from './time/clock/ArcadeStepClock.js'; +export default ArcadeStepClock; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/arcadetcrp-plugin.js b/ui/src/phaser3-rex-plugins/plugins/arcadetcrp-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..31aeaa4243d034c5b752da58df010824851137c7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/arcadetcrp-plugin.js @@ -0,0 +1,39 @@ +import TCRP from './arcadetcrp.js'; + +const Recorder = TCRP.Recorder; +const Player = TCRP.Player; +const StepRunner = TCRP.StepRunner; + +class ArcadeTCRPPlugin extends Phaser.Plugins.BasePlugin { + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + addRecorder(parent, config) { + return new Recorder(parent, config); + } + + addPlayer(parent, config) { + return new Player(parent, config); + } + + addStepRunner(parent) { + return new StepRunner(parent); + } +} + +var methods = { + runCommands: TCRP.RunCommands +} + +Object.assign( + ArcadeTCRPPlugin.prototype, + methods +); + +export default ArcadeTCRPPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/arcadetcrp.js b/ui/src/phaser3-rex-plugins/plugins/arcadetcrp.js new file mode 100644 index 0000000000000000000000000000000000000000..18247f63b66fbdab78a3580c8521b410ee364882 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/arcadetcrp.js @@ -0,0 +1,11 @@ +import Recorder from './logic/runcommands/arcadetcrp/Recorder.js'; +import Player from './logic/runcommands/arcadetcrp/Player.js'; +import StepRunner from './logic/runcommands/arcadetcrp/StepRunner.js'; +import RunCommands from './logic/runcommands/RunCommands.js'; + +export default { + Recorder: Recorder, + Player: Player, + StepRunner: StepRunner, + RunCommands: RunCommands +}; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/board-plugin.js b/ui/src/phaser3-rex-plugins/plugins/board-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..c358d42156f143b9861fb57338d7aec7dd604aad --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/board-plugin.js @@ -0,0 +1,40 @@ +import ObjectFactory from './board/ObjectFactory.js'; + +import BoardFactory from './board/board/Factory.js'; +import HexagonFactory from './board/grid/hexagon/Factory.js'; +import QuadFactory from './board/grid/quad/Factory.js'; +import ShapeFactory from './board/shape/Factory.js'; + +import MoveToFactory from './board/moveto/Factory.js'; +import MatchFactory from './board/match/Factory.js'; +import PathFinderFactory from './board/pathfinder/Factory.js'; +import FieldOfViewFactory from './board/fieldofview/Factory.js'; +import MonopolyFactory from './board/monopoly/Factory.js'; + +import MiniBoardFactory from './board/miniboard/Factory.js'; + +import HexagonMap from './board/hexagonmap/index.js'; + +import CreateTileTexture from './board/texture/CreateTileTexture.js'; + +import CreateBoardFromTilemap from './board/tilemap/CreateBoardFromTilemap.js'; + +class BoardPlugin extends Phaser.Plugins.ScenePlugin { + constructor(scene, pluginManager) { + super(scene, pluginManager); + + this.add = new ObjectFactory(scene); + + // Helper functions + this.hexagonMap = HexagonMap; + this.createTileTexture = CreateTileTexture; + this.createBoardFromTilemap = CreateBoardFromTilemap; + } + + start() { + var eventEmitter = this.scene.sys.events; + eventEmitter.on('destroy', this.destroy, this); + } +} + +export default BoardPlugin; diff --git a/ui/src/phaser3-rex-plugins/plugins/boids-plugin.js b/ui/src/phaser3-rex-plugins/plugins/boids-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..5a26632e68f15aaf7645fd5cee33f94d998a3188 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/boids-plugin.js @@ -0,0 +1,18 @@ +import Boids from './boids.js'; + +class BoidsPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(gameObject, config) { + return new Boids(gameObject, config); + } +} +export default BoidsPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..35c21e4e3c37b5b8ac8518cf209b9c3cd879690a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.d.ts @@ -0,0 +1,8 @@ +import BracketParser from './bracketparser2'; + +export default class BracketParserPlugin extends Phaser.Plugins.BasePlugin { + add( + config?: BracketParser.IConfig + ): BracketParser; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.js b/ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..c1583f3d3363a08282915f18d7135ffef10767dc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/bracketparser2-plugin.js @@ -0,0 +1,18 @@ +import BracketParser from './bracketparser2.js'; + +class BracketParserPlugin extends Phaser.Plugins.BasePlugin { + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(config) { + return new BracketParser(config); + } +} + +export default BracketParserPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/bracketparser2.js b/ui/src/phaser3-rex-plugins/plugins/bracketparser2.js new file mode 100644 index 0000000000000000000000000000000000000000..58aa5da06534d60dbf80406d984916a151768399 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/bracketparser2.js @@ -0,0 +1,2 @@ +import BracketParser from './logic/bracketparser/bracketparser2/BracketParser.js'; +export default BracketParser; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/buffdata-plugin.js b/ui/src/phaser3-rex-plugins/plugins/buffdata-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..549667dec87822f4452e7a6e2f95bd69408bb023 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/buffdata-plugin.js @@ -0,0 +1,24 @@ +import DataManager from './data/buff/DataManager.js'; +import Extend from './data/buff/Extend.js'; + +class DataManagerPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(parent, eventEmitter) { + return new DataManager(parent, eventEmitter); + } + + extend(dataManager) { + return Extend(dataManager); + } +} + +export default DataManagerPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/buildarcadeobject.d.ts b/ui/src/phaser3-rex-plugins/plugins/buildarcadeobject.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..321651837ff46055d56ca195495dab1729e2cf06 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/buildarcadeobject.d.ts @@ -0,0 +1,2 @@ +import BuildArcadeObject from './utils/arcade/BuildArcadeObject'; +export default BuildArcadeObject; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/canvas.d.ts b/ui/src/phaser3-rex-plugins/plugins/canvas.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..832d2f676f680dbc52dbb91aa8c0bdcea3a3b0c2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/canvas.d.ts @@ -0,0 +1,2 @@ +import Canvas from './gameobjects/canvas/canvas/Canvas'; +export default Canvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/canvasdata-plugin.js b/ui/src/phaser3-rex-plugins/plugins/canvasdata-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..adeab6b04672fa264a42f1344dd2216bc2acf266 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/canvasdata-plugin.js @@ -0,0 +1,34 @@ +import Methods from './canvasdata.js'; + +const CanvasPool = Phaser.Display.Canvas.CanvasPool; + +class CanvasDataPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + + this._tmpCanvas = CanvasPool.create2D(this); + } + + destroy() { + CanvasPool.remove(this._tmpCanvas); + this._tmpCanvas = undefined; + super.destroy(); + } + + get textureManager() { + return this.game.textures; + } +} + +Object.assign( + CanvasDataPlugin.prototype, + Methods +); + +export default CanvasDataPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/canvasdata.d.ts b/ui/src/phaser3-rex-plugins/plugins/canvasdata.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8e83fa61cf2659c0248f5d05e7976c28051d9e93 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/canvasdata.d.ts @@ -0,0 +1,10 @@ +import CanvasObjectToBitmap from './data/canvasdata/CanvasObjectToBitmap'; +import TextureTColorMap from './data/canvasdata/TextureToColormap'; + +declare var Methods: { + textObjectToBitmap: typeof CanvasObjectToBitmap, + canvasObjectToBitmap: typeof CanvasObjectToBitmap, + textureTColorMap: typeof TextureTColorMap, +} + +export default Methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/canvasframemanager-plugin.js b/ui/src/phaser3-rex-plugins/plugins/canvasframemanager-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..b540b03c2550b81ed5a971fe71f05c9b784fc83f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/canvasframemanager-plugin.js @@ -0,0 +1,19 @@ +import CanvasFrameManager from './canvasframemanager.js'; + +class CanvasFrameManagerPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(scene, key, width, height, cellWidth, cellHeight, fillColor) { + return new CanvasFrameManager(scene, key, width, height, cellWidth, cellHeight, fillColor); + } +} + +export default CanvasFrameManagerPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/canvasinput.js b/ui/src/phaser3-rex-plugins/plugins/canvasinput.js new file mode 100644 index 0000000000000000000000000000000000000000..721c242b4fc04c350e8529377da255e11ce5bcf7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/canvasinput.js @@ -0,0 +1,2 @@ +import CanvasInput from './gameobjects/dynamictext/canvasinput/CanvasInput.js'; +export default CanvasInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/charactercache-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/charactercache-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..74673f76f53cff62cc8fe2c8ed34024988602537 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/charactercache-plugin.d.ts @@ -0,0 +1,9 @@ +import CharacterCache from './charactercache'; + +export default class CharacterCachePlugin extends Phaser.Plugins.BasePlugin { + add( + scene: Phaser.Scene, + config: CharacterCache.IConfig + ): CharacterCache; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/checkboxshape.js b/ui/src/phaser3-rex-plugins/plugins/checkboxshape.js new file mode 100644 index 0000000000000000000000000000000000000000..8fd1f63e356707ac2115c8660ce2d9573ee53a47 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/checkboxshape.js @@ -0,0 +1,2 @@ +import CheckboxShape from './gameobjects/shape/checkbox/CheckboxShape.js'; +export default CheckboxShape; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/clock-plugin.js b/ui/src/phaser3-rex-plugins/plugins/clock-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..4b5cb06716d93938b58e3b697342361c474301ca --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/clock-plugin.js @@ -0,0 +1,20 @@ +import Clock from './clock.js'; + +class ClockPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(scene, config) { + return new Clock(scene, config); + } + +} + +export default ClockPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/clock.d.ts b/ui/src/phaser3-rex-plugins/plugins/clock.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f1575f4e1098fcc9691c8796db9e0bf3fd2ee408 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/clock.d.ts @@ -0,0 +1,2 @@ +import Clock from './time/clock/Clock'; +export default Clock; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/clock.js b/ui/src/phaser3-rex-plugins/plugins/clock.js new file mode 100644 index 0000000000000000000000000000000000000000..edf6c603a64ca661c4c965f36f4d4dbfbad88c4b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/clock.js @@ -0,0 +1,2 @@ +import Clock from './time/clock/Clock.js'; +export default Clock; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/colorreplacepipeline.js b/ui/src/phaser3-rex-plugins/plugins/colorreplacepipeline.js new file mode 100644 index 0000000000000000000000000000000000000000..9f770a18f04f75c296ac9d801f3f9df5cbda23de --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/colorreplacepipeline.js @@ -0,0 +1,2 @@ +import ColorReplacePostFxPipeline from './shaders/colorreplace/ColorReplacePostFxPipeline.js'; +export default ColorReplacePostFxPipeline; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/containerlite-plugin.js b/ui/src/phaser3-rex-plugins/plugins/containerlite-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..bac1f94a2a83731c5b2d8084a73d410dd8a7c4c7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/containerlite-plugin.js @@ -0,0 +1,27 @@ +import Factory from './gameobjects/container/containerlite/Factory.js'; +import Creator from './gameobjects/container/containerlite/Creator.js'; +import ContainerLite from './gameobjects/container/containerlite/ContainerLite.js'; +import SetValue from './utils/object/SetValue.js'; + +class ContainerLitePlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + + // Register our new Game Object type + pluginManager.registerGameObject('rexContainerLite', Factory, Creator); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + getParent(child) { + return ContainerLite.GetParent(child); + } +} + +SetValue(window, 'RexPlugins.GameObjects.ContainerLite', ContainerLite); + +export default ContainerLitePlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/cover-plugin.js b/ui/src/phaser3-rex-plugins/plugins/cover-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..f9d9a37b78b81de6149c936af4c2137a5c2b77c4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/cover-plugin.js @@ -0,0 +1,23 @@ +import Factory from './gameobjects/shape/cover/Factory.js'; +import Creator from './gameobjects/shape/cover/Creator.js'; +import Cover from './gameobjects/shape/cover/Cover.js'; +import SetValue from './utils/object/SetValue.js'; + +class CoverPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + + // Register our new Game Object type + pluginManager.registerGameObject('rexCover', Factory, Creator); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } +} + +SetValue(window, 'RexPlugins.GameObjects.Cover', Cover); + +export default CoverPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/csvscenario-plugin.js b/ui/src/phaser3-rex-plugins/plugins/csvscenario-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..b3a2b87e2e7a8e894c2d8caba0f69d6c8ac8a246 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/csvscenario-plugin.js @@ -0,0 +1,18 @@ +import CSVScenario from './csvscenario.js'; + +class CSVScenarioPlugin extends Phaser.Plugins.BasePlugin { + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(scene, config) { + return new CSVScenario(scene, config); + } +} + +export default CSVScenarioPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/csvtoarray.d.ts b/ui/src/phaser3-rex-plugins/plugins/csvtoarray.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f99d1e6986a349a63358cc7c0028973d9b22da04 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/csvtoarray.d.ts @@ -0,0 +1,2 @@ +import CSVToArray from './data/csvtoarray/CSVToArray'; +export default CSVToArray; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/cursoratbound-plugin.js b/ui/src/phaser3-rex-plugins/plugins/cursoratbound-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..de774dc067abe4df57648c0796a6f8ec9d015ee4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/cursoratbound-plugin.js @@ -0,0 +1,20 @@ +import CursorAtBound from './cursoratbound.js'; + +class CursorAtBoundPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(scene, config) { + return new CursorAtBound(scene, config); + } + +} + +export default CursorAtBoundPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/cursoratbound.d.ts b/ui/src/phaser3-rex-plugins/plugins/cursoratbound.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bfbdcd41f1cb576c8add28af2c36816f7d80b6cb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/cursoratbound.d.ts @@ -0,0 +1,2 @@ +import CursorAtBound from './input/cursoratbound/CursorAtBound'; +export default CursorAtBound; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/dropdown-plugin.js b/ui/src/phaser3-rex-plugins/plugins/dropdown-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..58eda7d70194e94de5bb9f3cc827f30d68da4e59 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/dropdown-plugin.js @@ -0,0 +1,18 @@ +import DropDown from './behaviors/dropdown/DropDown.js'; + +class DropDownPlugin extends Phaser.Plugins.BasePlugin { + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(gameObject, config) { + return new DropDown(gameObject, config); + } +} + +export default DropDownPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/dynamictext.d.ts b/ui/src/phaser3-rex-plugins/plugins/dynamictext.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5220639d2bfccf2d8f1513110c8b6d46a29b9473 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/dynamictext.d.ts @@ -0,0 +1,2 @@ +import DynamicText from './gameobjects/dynamictext/dynamictext/DynamicText'; +export default DynamicText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/effectlayer-plugin.js b/ui/src/phaser3-rex-plugins/plugins/effectlayer-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..eb376b6ad8496bceca6547488431db5ac89bcdeb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/effectlayer-plugin.js @@ -0,0 +1,23 @@ +import Factory from './gameobjects/shader/effectlayer/effectlayer/Factory.js'; +import Creator from './gameobjects/shader/effectlayer/effectlayer/Creator.js'; +import EffectLayer from './gameobjects/shader/effectlayer/effectlayer/EffectLayer.js'; +import SetValue from './utils/object/SetValue.js'; + +class EffectLayerPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + + // Register our new Game Object type + pluginManager.registerGameObject('rexEffectLayer', Factory, Creator); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } +} + +SetValue(window, 'RexPlugins.GameObjects.EffectLayer', EffectLayer); + +export default EffectLayerPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/eventpromise-plugin.js b/ui/src/phaser3-rex-plugins/plugins/eventpromise-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..e4c14f9af5524ecb8853b5724e2a88cfbe8f51b6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/eventpromise-plugin.js @@ -0,0 +1,22 @@ +import { WaitEvent, WaitComplete, Delay } from './eventpromise.js' + +class EventPromisePlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } +} + +var methods = { + waitEvent: WaitEvent, + waitComplete: WaitComplete, + delay: Delay, +} + +// mixin +Object.assign( + EventPromisePlugin.prototype, + methods +); + +export default EventPromisePlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/expressionparser.js b/ui/src/phaser3-rex-plugins/plugins/expressionparser.js new file mode 100644 index 0000000000000000000000000000000000000000..806d32fdc4d7978e070edeb39df5b54b663ff0b9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/expressionparser.js @@ -0,0 +1,2 @@ +import ExpressionParser from './math/expressionparser/ExpressionParser.js'; +export default ExpressionParser; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/filechooser.js b/ui/src/phaser3-rex-plugins/plugins/filechooser.js new file mode 100644 index 0000000000000000000000000000000000000000..744ba71a24abdacee816c64875cbf67ce0b09d1c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/filechooser.js @@ -0,0 +1,3 @@ +import OpenFileChooser from './behaviors/filechooser/Open.js'; +import FileChooser from './gameobjects/dom/filechooser/FileChooser.js'; +export { OpenFileChooser, FileChooser }; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/flip-plugin.js b/ui/src/phaser3-rex-plugins/plugins/flip-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..9b82b16fabb55c225b0fd74f357f1ea23a7c786a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/flip-plugin.js @@ -0,0 +1,19 @@ +import Flip from './flip.js'; + +class FlipPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(gameObject, config) { + return new Flip(gameObject, config); + } +} + +export default FlipPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/fsm-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/fsm-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9bbd028b2de8925580170585f8aac9927f5688a6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/fsm-plugin.d.ts @@ -0,0 +1,8 @@ +import FSM from './fsm'; + +export default class FSMPlugin extends Phaser.Plugins.BasePlugin { + add( + config?: FSM.IConfig + ): FSM; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/fullwindowrectangle.js b/ui/src/phaser3-rex-plugins/plugins/fullwindowrectangle.js new file mode 100644 index 0000000000000000000000000000000000000000..a7c7ffddb30171b7a48410d4c5d26af4c6c1e61a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/fullwindowrectangle.js @@ -0,0 +1,2 @@ +import FullWindowRectangle from './gameobjects/shape/fullwindowrectangle/FullWindowRectangle.js'; +export default FullWindowRectangle; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/gashapon-plugin.js b/ui/src/phaser3-rex-plugins/plugins/gashapon-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..9315bb16999a7400e6965ac3203c13b1cae588d9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/gashapon-plugin.js @@ -0,0 +1,19 @@ +import Gashapon from './gashapon.js'; + +class GashaponPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(config) { + return new Gashapon(config); + } +} + +export default GashaponPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/graph-plugin.js b/ui/src/phaser3-rex-plugins/plugins/graph-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..a7a34dfc407d6789605037c60aea468f48eccb9a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/graph-plugin.js @@ -0,0 +1,13 @@ +import ObjectFactory from './graph/ObjectFactory.js'; + +import GraphFactory from './graph/graph/Factory.js'; + +class GraphPlugin extends Phaser.Plugins.ScenePlugin { + constructor(scene, pluginManager) { + super(scene, pluginManager); + + this.add = new ObjectFactory(scene); + } +} + +export default GraphPlugin; diff --git a/ui/src/phaser3-rex-plugins/plugins/grayscalepipeline-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/grayscalepipeline-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d39f3f5873d16798dbbe26e3a986d11138f63378 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/grayscalepipeline-plugin.d.ts @@ -0,0 +1,29 @@ +// import * as Phaser from 'phaser'; +import GrayScalePostFxPipeline from './grayscalepipeline'; + +export default GrayScalePipelinePlugin; + +declare namespace GrayScalePipelinePlugin { + + interface IConfig extends GrayScalePostFxPipeline.IConfig { + name?: string, + } + +} + +declare class GrayScalePipelinePlugin extends Phaser.Plugins.BasePlugin { + add( + gameObject: Phaser.GameObjects.GameObject, + config?: GrayScalePipelinePlugin.IConfig + ): GrayScalePostFxPipeline; + + remove( + gameObject: Phaser.GameObjects.GameObject, + name?: string + ): this; + + get( + gameObject: Phaser.GameObjects.GameObject, + name?: string + ): GrayScalePostFxPipeline | GrayScalePostFxPipeline[]; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/gridalign-plugin.js b/ui/src/phaser3-rex-plugins/plugins/gridalign-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..74cdb7adbe56090743b137541360cb8425d66586 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/gridalign-plugin.js @@ -0,0 +1,26 @@ +import { + HexagonGridAlign, + QuadGridAlign +} from './gridalign.js'; + +class GridAlignPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + hexagon(items, options) { + return HexagonGridAlign(items, options); + } + + quad(items, options) { + return QuadGridAlign(items, options); + } +} + +export default GridAlignPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/hsladjustpipeline.js b/ui/src/phaser3-rex-plugins/plugins/hsladjustpipeline.js new file mode 100644 index 0000000000000000000000000000000000000000..ff1f2f4cd96863e0c3624659c017a2931a50d48b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/hsladjustpipeline.js @@ -0,0 +1,2 @@ +import HslAdjustPostFxPipeline from './shaders/hsladjust/HslAdjustPostFxPipeline.js'; +export default HslAdjustPostFxPipeline; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/imagebox-plugin.js b/ui/src/phaser3-rex-plugins/plugins/imagebox-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..b13dd39dad69a765abecc3f310e66cc7c3df0e24 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/imagebox-plugin.js @@ -0,0 +1,23 @@ +import Factory from './gameobjects/container/imagebox/Factory.js'; +import Creator from './gameobjects/container/imagebox/Creator.js'; +import ImageBox from './gameobjects/container/imagebox/ImageBox.js'; +import SetValue from './utils/object/SetValue.js'; + +class ImageBoxPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + + // Register our new Game Object type + pluginManager.registerGameObject('rexImageBox', Factory, Creator); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } +} + +SetValue(window, 'RexPlugins.GameObjects.ImageBox', ImageBox); + +export default ImageBoxPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/interception-plugin.js b/ui/src/phaser3-rex-plugins/plugins/interception-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..4a23462d16c393b41acd4eeafc12b5256ead0b21 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/interception-plugin.js @@ -0,0 +1,13 @@ +import Interception from './interception.js'; + +class InterceptionPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + add(gameObject, config) { + return new Interception(gameObject, config); + } +} +export default InterceptionPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/kawaseblurpipeline-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/kawaseblurpipeline-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..dde746c865a482fb1dc8f71310aab1fc136e7ab9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/kawaseblurpipeline-plugin.d.ts @@ -0,0 +1,30 @@ +// import * as Phaser from 'phaser'; +import KawaseBlurFilterPostFxPipeline from './kawaseblurpipeline'; + + +export default KawaseBlurFilterPipelinePlugin; + +declare namespace KawaseBlurFilterPipelinePlugin { + + interface IConfig extends KawaseBlurFilterPostFxPipeline.IConfig { + name?: string, + } + +} + +declare class KawaseBlurFilterPipelinePlugin extends Phaser.Plugins.BasePlugin { + add( + gameObject: Phaser.GameObjects.GameObject | Phaser.Cameras.Scene2D.Camera, + config?: KawaseBlurFilterPipelinePlugin.IConfig + ): KawaseBlurFilterPostFxPipeline; + + remove( + gameObject: Phaser.GameObjects.GameObject, + name?: string + ): this; + + get( + gameObject: Phaser.GameObjects.GameObject, + name?: string + ): KawaseBlurFilterPostFxPipeline | KawaseBlurFilterPostFxPipeline[]; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/layermanager.d.ts b/ui/src/phaser3-rex-plugins/plugins/layermanager.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5bfa0d86b952307c67973124a38a0101c8bf1a6c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/layermanager.d.ts @@ -0,0 +1,2 @@ +import LayerManager from './gameobjects/layer/layermanager/LayerManager'; +export default LayerManager; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/line.d.ts b/ui/src/phaser3-rex-plugins/plugins/line.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..57e54ba53a414dd1a2538b0abd46c028b81a5309 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/line.d.ts @@ -0,0 +1,2 @@ +import Line from './gameobjects/rendertexture/line/Line.js'; +export default Line; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/line.js b/ui/src/phaser3-rex-plugins/plugins/line.js new file mode 100644 index 0000000000000000000000000000000000000000..57e54ba53a414dd1a2538b0abd46c028b81a5309 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/line.js @@ -0,0 +1,2 @@ +import Line from './gameobjects/rendertexture/line/Line.js'; +export default Line; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/live2d.d.ts b/ui/src/phaser3-rex-plugins/plugins/live2d.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a7643f51064340637f336640554ccf92c6da12bd --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/live2d.d.ts @@ -0,0 +1,11 @@ +import { + Live2dCoreScriptFileCallback, + Live2dFileCallback, + Live2dGameObject +} from './gameobjects/live2d/index'; + +export { + Live2dCoreScriptFileCallback, + Live2dFileCallback, + Live2dGameObject +}; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/localforage-files.d.ts b/ui/src/phaser3-rex-plugins/plugins/localforage-files.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4e91f51458f5c165129bc4745c828f37153e4b99 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/localforage-files.d.ts @@ -0,0 +1,2 @@ +import Files from './storage/localforage/files/Files'; +export default Files; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/localstorage-data.js b/ui/src/phaser3-rex-plugins/plugins/localstorage-data.js new file mode 100644 index 0000000000000000000000000000000000000000..898f8f9256f39b30d47106b3afdb158872108e31 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/localstorage-data.js @@ -0,0 +1,2 @@ +import DataManager from './storage/localstorage/data/DataManager.js'; +export default DataManager; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/lzstring-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/lzstring-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b5320db02fb83b864997d0a125a06e76d586a604 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/lzstring-plugin.d.ts @@ -0,0 +1,8 @@ +import LZString from './lzstring'; + +export default class LZStringPlugin extends Phaser.Plugins.BasePlugin { + add( + config?: LZString.IConfig + ): LZString; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/lzstring.d.ts b/ui/src/phaser3-rex-plugins/plugins/lzstring.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc2c6fe11b20a1b790aeb063bf49989157918a74 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/lzstring.d.ts @@ -0,0 +1,2 @@ +import LZString from './string/lzstring/LZString'; +export default LZString; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/lzstring.js b/ui/src/phaser3-rex-plugins/plugins/lzstring.js new file mode 100644 index 0000000000000000000000000000000000000000..7846c01e338c06be4538e532771e6f8a9fbb0fdb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/lzstring.js @@ -0,0 +1,2 @@ +import LZString from './string/lzstring/LZString.js'; +export default LZString; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/mousewheeltoupdown-plugin.js b/ui/src/phaser3-rex-plugins/plugins/mousewheeltoupdown-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..18f250b6b4248c631375bfe01b20d1009a3a99cb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/mousewheeltoupdown-plugin.js @@ -0,0 +1,20 @@ +import MouseWheelToUpDown from './mousewheeltoupdown.js'; + +class MouseWheelToUpDownPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(scene, config) { + return new MouseWheelToUpDown(scene, config); + } + +} + +export default MouseWheelToUpDownPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/mousewheeltoupdown.d.ts b/ui/src/phaser3-rex-plugins/plugins/mousewheeltoupdown.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0668fb6242346736cca84df35047be908befaaf3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/mousewheeltoupdown.d.ts @@ -0,0 +1,2 @@ +import MouseWheelToUpDown from './input/mousewheeltoupdown/MouseWheelToUpDown'; +export default MouseWheelToUpDown; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/moveto-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/moveto-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bb12e9c1d7cc0ca65c3631c998ecfbf2f390580d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/moveto-plugin.d.ts @@ -0,0 +1,9 @@ +import MoveTo from './moveto'; + +export default class MoveToPlugin extends Phaser.Plugins.BasePlugin { + add( + gameObject: Phaser.GameObjects.GameObject, + config?: MoveTo.IConfig + ): MoveTo; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/moveto.js b/ui/src/phaser3-rex-plugins/plugins/moveto.js new file mode 100644 index 0000000000000000000000000000000000000000..d6eb2c816226e4e1dc08a2431ea858d67686286f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/moveto.js @@ -0,0 +1,2 @@ +import MoveTo from './behaviors/moveto/MoveTo.js'; +export default MoveTo; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/ninepatch.js b/ui/src/phaser3-rex-plugins/plugins/ninepatch.js new file mode 100644 index 0000000000000000000000000000000000000000..b312ffb33b47f5751afca1aaeb86be8fe4625db2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/ninepatch.js @@ -0,0 +1,2 @@ +import NinePatch from './gameobjects/rendertexture/ninepatch/NinePatch.js'; +export default NinePatch; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/ninepatch2.d.ts b/ui/src/phaser3-rex-plugins/plugins/ninepatch2.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..74ee94f0e679fb40d985c43738068f77bba1aeff --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/ninepatch2.d.ts @@ -0,0 +1,2 @@ +import NinePatch from './gameobjects/blitter/ninepatch/NinePatch'; +export default NinePatch; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/outlinepipeline-plugin.js b/ui/src/phaser3-rex-plugins/plugins/outlinepipeline-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..297a021df32cad69b310b1bd9c60ad183562381c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/outlinepipeline-plugin.js @@ -0,0 +1,34 @@ +import OutlinePostFxPipeline from './outlinepipeline.js'; +import BasePostFxPipelinePlugin from './utils/renderer/postfxpipeline/BasePostFxPipelinePlugin.js'; +import SetValue from './utils/object/SetValue.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class OutlinePipelinePlugin extends BasePostFxPipelinePlugin { + constructor(pluginManager) { + super(pluginManager); + this.setPostPipelineClass(OutlinePostFxPipeline, 'rexOutlinePostFx'); + } + + add(gameObject, config) { + this.setQuality(GetValue(config, 'quality', this.quality)); + return super.add(gameObject, config); + } + + setQuality(value) { + OutlinePostFxPipeline.setQuality(value); + return this; + } + + set quality(value) { + this.setQuality(value); + } + + get quality() { + return OutlinePostFxPipeline.getQuality(); + } +} + +SetValue(window, 'RexPlugins.Pipelines.OutlinePostFx', OutlinePostFxPipeline); + +export default OutlinePipelinePlugin; diff --git a/ui/src/phaser3-rex-plugins/plugins/perlin.js b/ui/src/phaser3-rex-plugins/plugins/perlin.js new file mode 100644 index 0000000000000000000000000000000000000000..de0156982497fb008f82f08287c6a129724b95a3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/perlin.js @@ -0,0 +1,2 @@ +import Perlin from './utils/math/noise/Perlin.js'; +export default Perlin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/pngappender.d.ts b/ui/src/phaser3-rex-plugins/plugins/pngappender.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c00b5eed3e084ef4cf5490c3fd7fe6db41ba4eeb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/pngappender.d.ts @@ -0,0 +1,9 @@ +import AppendData from './data/pngappender/AppendData'; +import ExtractData from './data/pngappender/ExtractData'; + +declare var Methods: { + append: typeof AppendData, + extract: typeof ExtractData +}; + +export default Methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/quadimage-plugin.js b/ui/src/phaser3-rex-plugins/plugins/quadimage-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..f2605dba384bfe359d6f405d9821c3ead89407ab --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/quadimage-plugin.js @@ -0,0 +1,51 @@ +import QuadImageFactory from './gameobjects/mesh/quad/image/Factory.js'; +import QuadImageCreator from './gameobjects/mesh/quad/image/Creator.js'; +import QuadImage from './gameobjects/mesh/quad/image/Image.js'; + +import QuadRenderTextureFactory from './gameobjects/mesh/quad/rendertexture/Factory.js'; +import QuadRenderTextureCreator from './gameobjects/mesh/quad/rendertexture/Creator.js'; +import QuadRenderTexture from './gameobjects/mesh/quad/rendertexture/RenderTexture.js'; + +import SkewImageFactory from './gameobjects/mesh/quad/skewimage/Factory'; +import SkewImageCreator from './gameobjects/mesh/quad/skewimage/Creator.js'; +import SkewImage from './gameobjects/mesh/quad/skewimage/SkewImage.js'; + +import SkewRenderTextureFactory from './gameobjects/mesh/quad/skewrendertexture/Factory.js'; +import SkewRenderTextureCreator from './gameobjects/mesh/quad/skewrendertexture/Creator.js'; +import SkewRenderTexture from './gameobjects/mesh/quad/skewrendertexture/SkewRenderTexture.js'; + +import ContainerSkew from './behaviors/containerskew/ContainerSkew.js'; + +import SetValue from './utils/object/SetValue.js'; + +class QuadImagePlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + + // Register our new Game Object type + pluginManager.registerGameObject('rexQuadImage', QuadImageFactory, QuadImageCreator); + pluginManager.registerGameObject('rexQuadRenderTexture', QuadRenderTextureFactory, QuadRenderTextureCreator); + + pluginManager.registerGameObject('rexSkewImage', SkewImageFactory, SkewImageCreator); + pluginManager.registerGameObject('rexSkewRenderTexture', SkewRenderTextureFactory, SkewRenderTextureCreator); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + addContainerSkew(parentContainer, config) { + return new ContainerSkew(parentContainer, config); + } +} + +SetValue(window, 'RexPlugins.GameObjects.QuadImage', QuadImage); +SetValue(window, 'RexPlugins.GameObjects.QuadRenderTexture', QuadRenderTexture); +SetValue(window, 'RexPlugins.GameObjects.SkewImage', SkewImage); +SetValue(window, 'RexPlugins.GameObjects.SkewRenderTexture', SkewRenderTexture); + +SetValue(window, 'RexPlugins.GameObjects.ContainerSkew', ContainerSkew); + +export default QuadImagePlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/quadimage.js b/ui/src/phaser3-rex-plugins/plugins/quadimage.js new file mode 100644 index 0000000000000000000000000000000000000000..375544b7ee922540d35caba6acdeea51f848d2c1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/quadimage.js @@ -0,0 +1,13 @@ +import QuadImage from './gameobjects/mesh/quad/image/Image.js'; +import QuadRenderTexture from './gameobjects/mesh/quad/rendertexture/RenderTexture.js'; +import SkewImage from './gameobjects/mesh/quad/skewimage/SkewImage.js'; +import SkewRenderTexture from './gameobjects/mesh/quad/skewrendertexture/SkewRenderTexture.js'; +import ContainerSkew from './behaviors/containerskew/ContainerSkew.js'; + +export { + QuadImage, + QuadRenderTexture, + SkewImage, + SkewRenderTexture, + ContainerSkew +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/quest-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/quest-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..60ca6c951a9c15a202d41ecbb1af9cd57d9d150e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/quest-plugin.d.ts @@ -0,0 +1,8 @@ +import QuestionManager from './quest'; + +export default class QuestPlugin extends Phaser.Plugins.BasePlugin { + add( + config?: QuestionManager.IConfig + ): QuestionManager; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/raycaster-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/raycaster-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..31eff7f42e7a9127d1bf61897ae94c5a4c3841da --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/raycaster-plugin.d.ts @@ -0,0 +1,8 @@ +import Raycaster from './raycaster'; + +export default class RaycasterPlugin extends Phaser.Plugins.BasePlugin { + add( + config?: Raycaster.IConfig + ): Raycaster; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/raycaster.js b/ui/src/phaser3-rex-plugins/plugins/raycaster.js new file mode 100644 index 0000000000000000000000000000000000000000..54f68d5f946a2df52753312fd92625b184f4e541 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/raycaster.js @@ -0,0 +1,2 @@ +import Raycaster from './math/raycaster/Raycaster.js'; +export default Raycaster; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/requestdrag.js b/ui/src/phaser3-rex-plugins/plugins/requestdrag.js new file mode 100644 index 0000000000000000000000000000000000000000..1e401f3d62f9a2d78fb526b4c216cb0f3e6fc179 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/requestdrag.js @@ -0,0 +1,2 @@ +import RequestDrag from './utils/input/RequestDrag.js'; +export default RequestDrag; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/restorabledata-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/restorabledata-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..856720f9e2e894a03bd3b5e5eef432ad9177a908 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/restorabledata-plugin.d.ts @@ -0,0 +1,10 @@ +import DataManager from './restorabledata'; + +export default class DataManagerPlugin extends Phaser.Plugins.BasePlugin { + add( + parent: object, + eventEmitter?: Phaser.Events.EventEmitter, + config?: object + ): DataManager; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/rotate-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/rotate-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..609db44d262e411679d95ad1db5aa29db93ef05d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/rotate-plugin.d.ts @@ -0,0 +1,9 @@ +import Rotate from './rotate'; + +export default class RotatePlugin extends Phaser.Plugins.BasePlugin { + add( + gameObject: Phaser.GameObjects.GameObject, + config?: Rotate.IConfig + ): Rotate; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/rotateto-plugin.js b/ui/src/phaser3-rex-plugins/plugins/rotateto-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..1047bcee5aae39e2542819c857785df3bb32f500 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/rotateto-plugin.js @@ -0,0 +1,19 @@ +import RotateTo from './rotateto.js'; + +class RotateToPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(gameObject, config) { + return new RotateTo(gameObject, config); + } +} + +export default RotateToPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/roundrectangle.d.ts b/ui/src/phaser3-rex-plugins/plugins/roundrectangle.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..067fa3453affcc881bcefe796471fd4c0dcbd99e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/roundrectangle.d.ts @@ -0,0 +1,2 @@ +import RoundRectangle from './gameobjects/shape/roundrectangle/RoundRectangle'; +export default RoundRectangle; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/runcommands.d.ts b/ui/src/phaser3-rex-plugins/plugins/runcommands.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c500a01499609516f3b8a0cead1dae4372ee564b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/runcommands.d.ts @@ -0,0 +1,2 @@ +import RunCommands from './logic/runcommands/RunCommands'; +export default RunCommands; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/scale-plugin.js b/ui/src/phaser3-rex-plugins/plugins/scale-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..e86313f3c9b656e9692f076b3921fa152b3c1d27 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/scale-plugin.js @@ -0,0 +1,35 @@ +import Scale from './scale.js'; +import ScaleDown from './behaviors/scale/ScaleDown.js'; +import ScaleDownDestroy from './scale-down-destroy.js'; +import Popup from './popup.js'; +import Yoyo from './behaviors/scale/Yoyo.js'; + +class ScalePlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(gameObject, config) { + return new Scale(gameObject, config); + } +} + +// mixin +var methods = { + scaleDown: ScaleDown, + scaleDownDestroy: ScaleDownDestroy, + popup: Popup, + yoyo: Yoyo, +} +Object.assign( + ScalePlugin.prototype, + methods +); + +export default ScalePlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/scale.d.ts b/ui/src/phaser3-rex-plugins/plugins/scale.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a21bfca80b9f3727617264eba311df3f67b11986 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/scale.d.ts @@ -0,0 +1,2 @@ +import Scale from './behaviors/scale/Scale'; +export default Scale; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/scaleouter.js b/ui/src/phaser3-rex-plugins/plugins/scaleouter.js new file mode 100644 index 0000000000000000000000000000000000000000..8c82e35da14d1d9a0fdec3ef2f6feb57be6b7d8e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/scaleouter.js @@ -0,0 +1,2 @@ +import ScaleOuter from './scale/scaleouter/ScaleOuter.js'; +export default ScaleOuter; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/scroller-plugin.js b/ui/src/phaser3-rex-plugins/plugins/scroller-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..1d5b46231303c5b6d9e51c5a7eeacef91611ef48 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/scroller-plugin.js @@ -0,0 +1,20 @@ +import Scroller from './scroller.js'; + +class ScrollerPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(gameObject, config) { + return new Scroller(gameObject, config); + } + +} + +export default ScrollerPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/scroller.js b/ui/src/phaser3-rex-plugins/plugins/scroller.js new file mode 100644 index 0000000000000000000000000000000000000000..5f6bd2f00d882e55735af0a8592bfb6a9a694b0e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/scroller.js @@ -0,0 +1,2 @@ +import Scroller from './input/scroller/Scroller.js'; +export default Scroller; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/sequence.js b/ui/src/phaser3-rex-plugins/plugins/sequence.js new file mode 100644 index 0000000000000000000000000000000000000000..3aaf79a43af266f73e993e3f5abc2f48856debdf --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/sequence.js @@ -0,0 +1,2 @@ +import Sequence from './logic/runcommands/sequence/Sequence.js'; +export default Sequence; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/shakeposition-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/shakeposition-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..aaaae1ea2d1b305f6c7ce47475d7508195a724a8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/shakeposition-plugin.d.ts @@ -0,0 +1,9 @@ +import Shake from './shakeposition'; + +export default class ShakePlugin extends Phaser.Plugins.BasePlugin { + add( + gameObject: Phaser.GameObjects.GameObject, + config?: Shake.IConfig + ): Shake; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/shakeposition-plugin.js b/ui/src/phaser3-rex-plugins/plugins/shakeposition-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..197ac5b2bdd58e9f51aec10fe19a14a2dd4aa3b9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/shakeposition-plugin.js @@ -0,0 +1,19 @@ +import Shake from './shakeposition.js'; + +class ShakePlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(gameObject, config) { + return new Shake(gameObject, config); + } +} + +export default ShakePlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/shockwavepipeline-plugin.js b/ui/src/phaser3-rex-plugins/plugins/shockwavepipeline-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..2a85870ebed3858d7b943bb25adbdc6f1337c9fb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/shockwavepipeline-plugin.js @@ -0,0 +1,14 @@ +import ShockwavePostFxPipeline from './shockwavepipeline.js'; +import BasePostFxPipelinePlugin from './utils/renderer/postfxpipeline/BasePostFxPipelinePlugin.js'; +import SetValue from './utils/object/SetValue.js'; + +class ShockwavePipelinePlugin extends BasePostFxPipelinePlugin { + constructor(pluginManager) { + super(pluginManager); + this.setPostPipelineClass(ShockwavePostFxPipeline, 'rexShockwavePostFx'); + } +} + +SetValue(window, 'RexPlugins.Pipelines.ShockwavePostFx', ShockwavePostFxPipeline); + +export default ShockwavePipelinePlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/spiralcurve-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/spiralcurve-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1f1e5ce088c41839d7c859168f5ee7628dc0f161 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/spiralcurve-plugin.d.ts @@ -0,0 +1,15 @@ +import SpiralCurve from './spiralcurve'; + +export default class SpiralCurvePlugin extends Phaser.Plugins.BasePlugin { + add( + config?: SpiralCurve.IConfig + ): SpiralCurve; + + add( + x?: number, y?: number, + startRadius?: number, endRadius?: number, + startAngle?: number, endAngle?: number, + rotation?: number + ): SpiralCurve + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/stringtemplate.js b/ui/src/phaser3-rex-plugins/plugins/stringtemplate.js new file mode 100644 index 0000000000000000000000000000000000000000..6d42fbb0d0f5131372d8af3562e71f2738be7b60 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/stringtemplate.js @@ -0,0 +1,2 @@ +import StringTemplate from './string/stringtemplate/StringTemplate.js'; +export default StringTemplate; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/swirlpipeline.d.ts b/ui/src/phaser3-rex-plugins/plugins/swirlpipeline.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b8da9e6eadd01e3084e6d21fa1b3254dc6bdc13c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/swirlpipeline.d.ts @@ -0,0 +1,2 @@ +import SwirlPostFxPipeline from './shaders/swirl/SwirlPostFxPipeline'; +export default SwirlPostFxPipeline; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/tcrp-plugin.js b/ui/src/phaser3-rex-plugins/plugins/tcrp-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..62f4e67ac914c89fbb672b33b95fb4db4af644a2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/tcrp-plugin.js @@ -0,0 +1,34 @@ +import TCRP from './tcrp.js'; + +const Recorder = TCRP.Recorder; +const Player = TCRP.Player; + +class TCRPPlugin extends Phaser.Plugins.BasePlugin { + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + addRecorder(parent, config) { + return new Recorder(parent, config); + } + + addPlayer(parent, config) { + return new Player(parent, config); + } +} + +var methods = { + runCommands: TCRP.RunCommands +} + +Object.assign( + TCRPPlugin.prototype, + methods +); + +export default TCRPPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/texttranslation.js b/ui/src/phaser3-rex-plugins/plugins/texttranslation.js new file mode 100644 index 0000000000000000000000000000000000000000..cfc9efc10aac2b7ed442e71318457d95cff71161 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/texttranslation.js @@ -0,0 +1,2 @@ +import TextTranslation from './behaviors/texttranslation/TextTranslation.js'; +export default TextTranslation; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/toggleswitch.d.ts b/ui/src/phaser3-rex-plugins/plugins/toggleswitch.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a1f13eaf4d308d220f732a18b83134122c24dadc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/toggleswitch.d.ts @@ -0,0 +1,2 @@ +import ToggleSwitch from './gameobjects/shape/toggleswitch/ToggleSwitch'; +export default ToggleSwitch; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/toggleswitch.js b/ui/src/phaser3-rex-plugins/plugins/toggleswitch.js new file mode 100644 index 0000000000000000000000000000000000000000..145a30fed867f658b7aaec0c8fc47d9fb306af97 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/toggleswitch.js @@ -0,0 +1,2 @@ +import ToggleSwitch from './gameobjects/shape/toggleswitch/ToggleSwitch.js'; +export default ToggleSwitch; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/toggleswitchshape.d.ts b/ui/src/phaser3-rex-plugins/plugins/toggleswitchshape.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6050bdf04a84b72d4a17b715b7871663b1df208a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/toggleswitchshape.d.ts @@ -0,0 +1,2 @@ +import ToggleSwitchShape from './gameobjects/shape/toggleswitch/ToggleSwitchShape'; +export default ToggleSwitchShape; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/toonifypipeline.d.ts b/ui/src/phaser3-rex-plugins/plugins/toonifypipeline.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..61b0178bbe83e7ea81586fc0220006872ac2ed87 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/toonifypipeline.d.ts @@ -0,0 +1,2 @@ +import ToonifyPostFxPipeline from './shaders/toonify/ToonifyPostFxPipeline'; +export default ToonifyPostFxPipeline; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/touchcursor-plugin.js b/ui/src/phaser3-rex-plugins/plugins/touchcursor-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..0aba4335bee173e28c40e7fca4b14ea8529f3ac5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/touchcursor-plugin.js @@ -0,0 +1,20 @@ +import TouchCursor from './touchcursor.js'; + +class TouchCursorPlugin extends Phaser.Plugins.BasePlugin { + + constructor(pluginManager) { + super(pluginManager); + } + + start() { + var eventEmitter = this.game.events; + eventEmitter.on('destroy', this.destroy, this); + } + + add(gameObject, config) { + return new TouchCursor(gameObject, config); + } + +} + +export default TouchCursorPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/toucheventstop-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/toucheventstop-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e97fd03909c54fa736961a3b3f55aafbd5bb6c3e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/toucheventstop-plugin.d.ts @@ -0,0 +1,9 @@ +import TouchEventStop from './toucheventstop'; + +export default class TouchEventStopPlugin extends Phaser.Plugins.BasePlugin { + add( + gameObject: Phaser.GameObjects.GameObject, + config?: TouchEventStop.IConfig + ): TouchEventStop; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/warppipeline.js b/ui/src/phaser3-rex-plugins/plugins/warppipeline.js new file mode 100644 index 0000000000000000000000000000000000000000..76a32c287e9d57dc02bba3122d673b4dc202d593 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/warppipeline.js @@ -0,0 +1,2 @@ +import WarpPostFxPipeline from './shaders/warp/WarpPostFxPipeline.js'; +export default WarpPostFxPipeline; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/webfontloader-plugin.js b/ui/src/phaser3-rex-plugins/plugins/webfontloader-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..46a0add1067797ce4c8b14f34d0787631e920f43 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/webfontloader-plugin.js @@ -0,0 +1,15 @@ +import LoaderCallback from './loader/webfontloader/WebFontLoaderCallback.js'; + +class WebFontLoaderPlugin extends Phaser.Plugins.BasePlugin { + constructor(pluginManager) { + super(pluginManager); + + pluginManager.registerFileType('rexWebFont', LoaderCallback); + } + + addToScene(scene) { + scene.sys.load['rexWebFont'] = LoaderCallback; + } +} + +export default WebFontLoaderPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/ymlachievements-plugin.d.ts b/ui/src/phaser3-rex-plugins/plugins/ymlachievements-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..edeef7abaf9c27ed1a9258269be574a1ac3eee3c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/ymlachievements-plugin.d.ts @@ -0,0 +1,6 @@ +import Achievements from './ymlachievements'; + +export default class AchievementsPlugin extends Phaser.Plugins.BasePlugin { + add(): Achievements; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/plugins/ymlachievements.d.ts b/ui/src/phaser3-rex-plugins/plugins/ymlachievements.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b993b156a3131302c71c241d51a95d414bb64c88 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/plugins/ymlachievements.d.ts @@ -0,0 +1,2 @@ +import Achievements from './logic/achievements/ymlachievements/Achievements'; +export default Achievements; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/Bejeweled.d.ts b/ui/src/phaser3-rex-plugins/templates/bejeweled/Bejeweled.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d8f4e99c7143d53801fae58cb6a1636dfbbed535 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/Bejeweled.d.ts @@ -0,0 +1,192 @@ +import ComponentBase from '../../plugins/utils/componentbase/ComponentBase'; +import Board from '../../plugins/board/board/Board'; +import Match from '../../plugins/board/match/Match'; +import MoveTo from '../../plugins/board/moveto/MoveTo'; +import { TileXYType } from '../../plugins/board/types/Position'; + +export default Bejeweled; + +declare namespace Bejeweled { + + type ChessSymbol = number | string; + + type GenerateSymbolCallbackType = ( + board: Board, + tileX: number, tileY: number, + excluded: undefined | ChessSymbol[] + ) => ChessSymbol; + + type CreateChessCallbackType = ( + board: Board + ) => Phaser.GameObjects.GameObject; + + type SwapActionType = ( + chess1: Phaser.GameObjects.GameObject, + chess2: Phaser.GameObjects.GameObject, + board: Board, + bejeweled: Bejeweled, + ) => void; + + type EliminatingActionType = ( + chessArray: Phaser.GameObjects.GameObject[], + board: Board, + bejeweled: Bejeweled, + ) => void; + + type FallingActionType = ( + board: Board, + bejeweled: Bejeweled, + ) => void; + + interface IConfig { + rexBoard?: string, + + board: Board.IConfig, + match?: Match.IConfig, + + chess: { + symbols: ChessSymbol[] | GenerateSymbolCallbackType, + + create: CreateChessCallbackType, + + scope?: object, + + moveTo?: MoveTo.IConfig, + + tileZ?: number | string, + }, + + swapAction?: SwapActionType, + + undoSwapAction?: SwapActionType, + + eliminatingAction?: EliminatingActionType, + + fallingAction?: FallingActionType, + + input?: boolean, + + mask?: boolean, + + debug?: boolean, + + } + + namespace Events { + type Select1CallbackType = (board: Board, bejeweled: Bejeweled) => void; + + type Select2CallbackType = (board: Board, bejeweled: Bejeweled) => void; + + type SwapCallbackType = ( + selectedChess1: Phaser.GameObjects.GameObject, + selectedChess2: Phaser.GameObjects.GameObject, + board: Board, bejeweled: Bejeweled + ) => void; + + type MatchStartCallbackType = (board: Board, bejeweled: Bejeweled) => void; + + type MatchCallbackType = ( + lines: Phaser.Structs.Set[], + board: Board, bejeweled: Bejeweled + ) => void; + + type EliminateCallbackType = ( + chessArray: Phaser.GameObjects.GameObject[], + board: Board, bejeweled: Bejeweled + ) => void; + + type FallCallbackType = (board: Board, bejeweled: Bejeweled) => void; + + type FillCallbackType = (board: Board, bejeweled: Bejeweled) => void; + + type MatchEndCallbackType = (board: Board, bejeweled: Bejeweled) => void; + + type UndoSwapCallbackType = ( + selectedChess1: Phaser.GameObjects.GameObject, + selectedChess2: Phaser.GameObjects.GameObject, + board: Board, bejeweled: Bejeweled + ) => void; + + type SetDataCallback = ( + bejeweled: Bejeweled, + key: string, value: any + ) => void; + + type ChangeetAnyDataCallback = ( + bejeweled: Bejeweled, + key: string, value: any, previousValue: any + ) => void; + + type ChangeetDataCallback = ( + bejeweled: Bejeweled, + value: any, previousValue: any + ) => void; + } +} + +declare class Bejeweled extends ComponentBase { + constructor( + scene: Phaser.Scene, + config?: Bejeweled.IConfig + ); + + start(): this; + + setInputEnable(enable?: boolean): this; + + worldXYToChess( + worldX: number, + worldY: number + ): Phaser.GameObjects.GameObject; + + tileXYToChess( + tileX: number, + tileY: number + ): Phaser.GameObjects.GameObject; + + getNeighborChessAtAngle( + chess: Phaser.GameObjects.GameObject | TileXYType, + angle: number + ): Phaser.GameObjects.GameObject; + + getNeighborChessAtDirection( + chess: Phaser.GameObjects.GameObject | TileXYType, + direction: number + ): Phaser.GameObjects.GameObject; + + selectChess1( + chess: Phaser.GameObjects.GameObject + ): this; + getSelectedChess1(): Phaser.GameObjects.GameObject; + + selectChess2( + chess: Phaser.GameObjects.GameObject + ): this; + getSelectedChess2(): Phaser.GameObjects.GameObject; + + getChessMoveTo( + chess: Phaser.GameObjects.GameObject + ): MoveTo | undefined; + + getChessTileZ(): number | string; + + getBoard(): Board; + getMatch(): Match; + + // Custom eliminateChess, falling action + waitEvent( + eventEmitter: Phaser.Events.EventEmitter, + eventName?: string + ): this; + isWaitingEvent(): boolean; + + // Data manager + setDataEnabled(): this; + setData(key: string, value: any): this; + incData(key: string, value: number): this; + toggleData(key: string): this; + getData(key: string): any; + data: Phaser.Data.DataManager; + + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/Bejeweled.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/Bejeweled.js new file mode 100644 index 0000000000000000000000000000000000000000..84758f7f7909b7d70c4c655d0379ae413df511c4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/Bejeweled.js @@ -0,0 +1,82 @@ +import ComponentBase from '../../plugins/utils/componentbase/ComponentBase.js'; +import MainState from './states/MainState.js'; +import Board from './board/Board.js'; +import Input from './input/Input.js'; +import WaitEvents from '../../plugins/waitevents.js'; +import InputMethods from './methods/InputMethods.js'; +import BoardMethods from './methods/BoardMethods.js'; +import WaitEventMethods from './methods/WaitEventMethods.js'; +import DataManagerMethods from '../../plugins/utils/data/DataManagerMethods.js'; + + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Bejeweled extends ComponentBase { + constructor(scene, config) { + super(scene, config); + // this.scene + + var rexBoardKey = GetValue(config, 'rexBoard', 'rexBoard'); + this.rexBoard = scene[rexBoardKey]; + + this.board = new Board(this, config); + + var defaultInput = GetValue(config, 'input', true); + if (defaultInput) { + this.input = new Input(this, config); + } else { + this.input = undefined; + } + + this.waitEvents = new WaitEvents(); + + this.mainState = new MainState(this, config); + + this.boot(); + } + + boot() { + this.scene.events.once('shutdown', this.destroy, this); + } + + shutdown(fromScene) { + super.shutdown(fromScene); + + if (this.input) { + this.input.destroy(); + } + this.board.destroy(); + this.mainState.destroy(); + this.waitEvents.destroy(); + + this.destroyDataManager(); + + this.board = undefined; + this.mainState = undefined; + this.input = undefined; + this.waitEvents = undefined; + + return this; + } + + destroy(fromScene) { + this.emit('destroy'); + super.destroy(fromScene); + return this; + } + + start() { + this.mainState.goto('START'); + return this; + } +} + +Object.assign( + Bejeweled.prototype, + InputMethods, + BoardMethods, + WaitEventMethods, + DataManagerMethods +); + +export default Bejeweled; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/EliminateChess.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/EliminateChess.js new file mode 100644 index 0000000000000000000000000000000000000000..46e7140c214fddc39004bf597ffeb7434665378f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/EliminateChess.js @@ -0,0 +1,15 @@ +/* +1. Fade-out-destroy chess +*/ + +import FadeOutDestroy from '../../../plugins/fade-out-destroy.js'; + +var EliminateChess = function (chessArray, board, bejeweled) { + const duration = 500; //ms + for (var i = 0, cnt = chessArray.length; i < cnt; i++) { + var fade = FadeOutDestroy(chessArray[i], duration); + bejeweled.waitEvent(fade, 'complete'); + } +} + +export default EliminateChess; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/FallingAllChess.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/FallingAllChess.js new file mode 100644 index 0000000000000000000000000000000000000000..097d9d93cff45c870e2cf5ea104b81ad4d3c2785 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/FallingAllChess.js @@ -0,0 +1,26 @@ +/* +1. Falling down all chess +*/ + +var FallingAllChess = function (board, bejeweled) { + var tileZ = bejeweled.getChessTileZ(), + chess, moveTo; + + for (var tileY = (board.height - 1); tileY >= 0; tileY--) { // bottom to top + for (var tileX = 0, cnt = board.width; tileX < cnt; tileX++) { // left to right + chess = board.tileXYZToChess(tileX, tileY, tileZ); + if (chess === null) { + continue; + } + moveTo = bejeweled.getChessMoveTo(chess); + do { + moveTo.moveToward(1); + } while (moveTo.lastMoveResult) + if (moveTo.isRunning) { + bejeweled.waitEvent(moveTo, 'complete'); + } + } + } +} + +export default FallingAllChess; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/SelectChess.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/SelectChess.js new file mode 100644 index 0000000000000000000000000000000000000000..7e7ea454dd29e0cc8173cc4b4dc1c9bea68fa2c0 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/SelectChess.js @@ -0,0 +1,9 @@ +/* +Do nothing +*/ + +var SelectChess = function (chess, board, bejeweled) { + // Do nothing +} + +export default SelectChess; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/SwapChess.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/SwapChess.js new file mode 100644 index 0000000000000000000000000000000000000000..0bfb6c65ff1529561a56a741650a3895407874f1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/actions/SwapChess.js @@ -0,0 +1,30 @@ +var SwapChess = function (chess1, chess2, board, bejeweled) { + var tileXYZ1 = board.chessToTileXYZ(chess1); + var tileXYZ2 = board.chessToTileXYZ(chess2); + var tileX1 = tileXYZ1.x, + tileY1 = tileXYZ1.y, + tileX2 = tileXYZ2.x, + tileY2 = tileXYZ2.y, + tileZ = tileXYZ1.z; + + // TileZ of chess1 and chess2 are the same, change tileZ of chess2 to a different value + board.setChessTileZ(chess2, `#${tileZ}`); + + // Move chess1 to tileXYZ2, chess2 to tileXYZ1 + var moveTo1 = bejeweled.getChessMoveTo(chess1); + var moveTo2 = bejeweled.getChessMoveTo(chess2); + moveTo1.moveTo(tileX2, tileY2); + moveTo2.moveTo(tileX1, tileY1); + + // Change tileZ of chess2 back + board.setChessTileZ(chess2, tileZ); + + if (moveTo1.isRunning) { + bejeweled.waitEvent(moveTo1, 'complete'); + } + if (moveTo2.isRunning) { + bejeweled.waitEvent(moveTo2, 'complete'); + } +}; + +export default SwapChess; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Board.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Board.js new file mode 100644 index 0000000000000000000000000000000000000000..5a4d37f2007cf76afaabf5aff927bd1ca86062ed --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Board.js @@ -0,0 +1,152 @@ +// methods +import Init from './Init.js' +import Reset from './Reset.js'; +import CreateChess from './chess/CreateChess.js'; +import Fill from './Fill.js'; +import BreakMatch3 from './BreakMatch3.js'; +import PreTest from './PreTest.js'; +import GetAllMatch from './match/GetAllMatch.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Board { + constructor(bejeweled, config) { + var scene = bejeweled.scene; + this.scene = scene; + this.rexBoard = bejeweled.rexBoard; + + this.board = this.rexBoard.add.board(GetValue(config, 'board', undefined)); + this.match = this.rexBoard.add.match(GetValue(config, 'match', undefined)); + this.match.setBoard(this.board); + + this.initSymbolsMap = GetValue(config, 'initMap', undefined); // 2d array + // configuration of chess + this.chessTileZ = GetValue(config, 'chess.tileZ', 1); + this.candidateSymbols = GetValue(config, 'chess.symbols', undefined); + this.chessCallbackScope = GetValue(config, 'chess.scope', undefined); + this.chessCreateCallback = GetValue(config, 'chess.create', undefined); + this.chessMoveTo = GetValue(config, 'chess.moveTo', {}); + this.chessMoveTo.occupiedTest = true; + + // Mask & layer + this.rowMaskGameObject = undefined; + this.rowMask = undefined; + this.layer = undefined; + + if (GetValue(config, 'mask', false)) { + this.resetBoardMask(); + } + + if (GetValue(config, 'layer', false)) { + this.enableBoardLayer(); + } + } + + shutdown() { + this.match.destroy(); + this.board.destroy(); + + if (this.rowMaskGameObject) { + this.layer.setMask(); + this.rowMaskGameObject.destroy(); + this.rowMask.destroy(); + } + if (this.layer) { + this.layer.destroy(); + } + + this.board = undefined; + this.match = undefined; + + this.initSymbolsMap = undefined; + this.candidateSymbols = undefined; + this.chessCallbackScope = undefined; + this.chessCreateCallback = undefined; + this.chessMoveTo = undefined; + + return this; + } + + destroy() { + this.shutdown(); + return this; + } + + setBoardWidth(width) { + this.board.setBoardWidth(width); + return this; + } + + setBoardHeight(height) { + this.board.setBoardHeight(height); + return this; + } + + setInitSymbolsMap(map) { + this.initSymbolsMap = map; // 2d array + return this; + } + + enableBoardLayer() { + if (!this.layer) { + this.layer = this.scene.add.layer(); + } + return this; + } + + resetBoardMask() { + if (!this.rowMaskGameObject) { + this.rowMaskGameObject = this.scene.make.graphics().setVisible(false); + this.rowMask = this.rowMaskGameObject.createGeometryMask().setInvertAlpha(); + this.enableBoardLayer(); + this.layer.setMask(this.rowMask); + } + + // Rectangle of upper rows + var board = this.board; + var grid = board.grid; + var x = grid.x - (grid.width / 2); + var y = grid.y - (grid.height / 2); + var width = board.width * grid.width; + var height = (board.height / 2) * grid.height; + this.rowMaskGameObject.fillRect(x, y, width, height); + + return this; + } + + worldXYToChess(worldX, worldY) { + return this.board.worldXYToChess(worldX, worldY, this.chessTileZ); + } + + tileXYToChess(tileX, tileY) { + return this.board.tileXYZToChess(tileX, tileY, this.chessTileZ); + } + + getNeighborChessAtAngle(chess, angle) { + var direction = this.board.angleSnapToDirection(chess, angle); + return this.getNeighborChessAtDirection(chess, direction); + } + + getNeighborChessAtDirection(chess, direction) { + var neighborTileXY = this.board.getNeighborTileXY(chess, direction); + var neighborChess = (neighborTileXY) ? + this.board.tileXYZToChess(neighborTileXY.x, neighborTileXY.y, this.chessTileZ) : + null; + return neighborChess; + } +} + +var methods = { + init: Init, + reset: Reset, + createChess: CreateChess, + fill: Fill, + breakMatch3: BreakMatch3, + preTest: PreTest, + getAllMatch: GetAllMatch, +} +Object.assign( + Board.prototype, + methods +); +export default Board; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/BreakMatch3.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/BreakMatch3.js new file mode 100644 index 0000000000000000000000000000000000000000..f96ba7a090db0b8e25c2037cc357e23f025b0687 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/BreakMatch3.js @@ -0,0 +1,38 @@ +/* +1. Pick each match3 line +2. Pick a random chess in this match3 line +3. Change symbol to a different value of all neighbors +*/ + +import RefreshSymbolCache from './match/RefreshSymbolCache.js'; +import GetMatchN from './match/GetMatchN.js'; +import RandomSymbol from './chess/RandomSymobl.js'; + +const GetRandom = Phaser.Utils.Array.GetRandom; + +var BreakMatch3 = function () { + var tileZ = this.chessTileZ, + scope = this.chessCallbackScope, + symbols = this.candidateSymbols; + + RefreshSymbolCache.call(this); // only refresh symbol cache once + GetMatchN.call(this, 3, function (result, board) { + // Pick a random chess in this match3 line + var tileXY = GetRandom(result.tileXY); + var chess = board.tileXYZToChess(tileXY.x, tileXY.y, tileZ); + var neighborChess = board.getNeighborChess(chess, null); + // collect symbols of all neighbors + var excluded = []; + for (var i = 0, cnt = neighborChess.length; i < cnt; i++) { + excluded.push(neighborChess[i].getData('symbol')); + } + var newSymbol = RandomSymbol(board, tileXY.x, tileXY.y, symbols, scope, excluded); + if (newSymbol != null) { + // Change symbol to a different value of all neighbors. + // It also fires 'changedata_symbol' event. + chess.setData('symbol', newSymbol); + } + }); +} + +export default BreakMatch3; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Fill.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Fill.js new file mode 100644 index 0000000000000000000000000000000000000000..c9cce61937470aeec8490b4c3ea2f1522687ecb9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Fill.js @@ -0,0 +1,36 @@ +/* +1. Fill empty grids +*/ + +var Fill = function (map) { + var upperBoard = false; + if (typeof (map) === 'boolean') { + upperBoard = map; + map = undefined; + } + + var symbol; + var board = this.board, + symbols = this.candidateSymbols; + + var height = this.board.height; + if (upperBoard) { + height /= 2; + } + for (var tileY = 0; tileY < height; tileY++) { + for (var tileX = 0, width = this.board.width; tileX < width; tileX++) { + if (board.contains(tileX, tileY, this.chessTileZ)) { // not empty + continue; + } + + if (map !== undefined) { + symbol = map[tileX][tileY]; + if (symbol !== '?') { + symbols = symbol; + } + } + this.createChess(tileX, tileY, symbols); + } + } +} +export default Fill; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Init.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Init.js new file mode 100644 index 0000000000000000000000000000000000000000..65e5491bb1e2535bfb264f51fd2ed052cc6f4efa --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Init.js @@ -0,0 +1,9 @@ +/* +1. Fill background tiles +*/ +var Init = function () { + // TODO: assign symobls of board via callback + return this; +} + +export default Init; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/PreTest.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/PreTest.js new file mode 100644 index 0000000000000000000000000000000000000000..e2b90040e6e96887b214f66a347a16f62a0f49ed --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/PreTest.js @@ -0,0 +1,47 @@ +/* +1. Test if there has any matched line after chess swapping +*/ + +import RefreshSymbolCache from './match/RefreshSymbolCache.js'; +import AnyMatch from './match/AnyMatch.js'; + +var PreTest = function () { + var match = this.match; + var directions = this.board.grid.halfDirections; + var tileB; + RefreshSymbolCache.call(this); // only refresh symbol cache once + for (var tileY = (this.board.height / 2), rowCnt = this.board.height; tileY < rowCnt; tileY++) { + for (var tileX = 0, colCnt = this.board.width; tileX < colCnt; tileX++) { + tileA.x = tileX; + tileA.y = tileY; + for (var dir = 0, dirCnt = directions.length; dir < dirCnt; dir++) { + tileB = this.board.getNeighborTileXY(tileA, dir); + // swap symbol + swapSymbols(match, tileA, tileB); + // any match? + this.preTestResult = AnyMatch.call(this, 3); + // swap symbol back + swapSymbols(match, tileA, tileB); + + if (this.preTestResult) { + return true; + } + } + } + } + return false; +} + +var swapSymbols = function (match, tileA, tileB) { + var symbolA = match.getSymbol(tileA.x, tileA.y); + var symbolB = match.getSymbol(tileB.x, tileB.y); + match.setSymbol(tileA.x, tileA.y, symbolB); + match.setSymbol(tileB.x, tileB.y, symbolA); +}; + +var tileA = { + x: 0, + y: 0 +}; + +export default PreTest; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Reset.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Reset.js new file mode 100644 index 0000000000000000000000000000000000000000..0c61678652d10a777aa745690d8fc086fadaf3fb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/Reset.js @@ -0,0 +1,16 @@ +/* +1. Destroy all chess +2. Fill chess +3. Break match3 +*/ + +var Reset = function() { + // Destroy all chess + this.board.removeAllChess(); + // Fill chess (with initial symbol map) + this.fill(this.initSymbolsMap); + // Break match3 + this.breakMatch3(); +} + +export default Reset; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/chess/CreateChess.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/chess/CreateChess.js new file mode 100644 index 0000000000000000000000000000000000000000..f5b974794370eb7f2b97bb3e875d507f8bdda9aa --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/chess/CreateChess.js @@ -0,0 +1,30 @@ +import RandomSymbol from './RandomSymobl.js'; + +var CreateChess = function (tileX, tileY, symbols) { + var scene = this.scene, + board = this.board, + scope = this.chessCallbackScope; + + // Get symbol + var symbol = RandomSymbol(board, tileX, tileY, symbols, scope); + // Create game object + var gameObject; + if (scope) { + gameObject = this.chessCreateCallback.call(scope, board); + } else { + gameObject = this.chessCreateCallback(board); + } + // Set symbol, it also fires 'changedata_symbol' event + gameObject.setData('symbol', symbol); + // Add to board + board.addChess(gameObject, tileX, tileY, this.chessTileZ, true); + // behaviors + gameObject.rexMoveTo = this.rexBoard.add.moveTo(gameObject, this.chessMoveTo); + + if (this.layer) { + // Move chess gameObject from scene to layer + this.layer.add(gameObject); + } +} + +export default CreateChess; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/chess/RandomSymobl.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/chess/RandomSymobl.js new file mode 100644 index 0000000000000000000000000000000000000000..cc8acc0dbf480e6ff875a50fe52c77e162b2462a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/chess/RandomSymobl.js @@ -0,0 +1,38 @@ +const GetRandom = Phaser.Utils.Array.GetRandom; + +var RandomSymbol = function (board, tileX, tileY, callback, scope, excluded) { + var symbol; + if (Array.isArray(callback)) { + // pick random symbol from symbol array + var symbols = callback; + // excluded: undefined or a symbol array + if (excluded !== undefined) { + for (var i = 0, cnt = symbols.length; i < cnt; i++) { + symbol = symbols[i]; + if (excluded.indexOf(symbol) !== -1) { + continue; + } + tmpSymbolArray.push(symbol); + } + symbol = GetRandom(tmpSymbolArray); + tmpSymbolArray.length = 0; + } else { + symbol = GetRandom(symbols); + } + + } else if (typeof (obj) === 'function') { + // symbols from return of callback + if (scope) { + symbol = callback.call(scope, board, tileX, tileY, excluded); + } else { + symbol = callback(board, tileX, tileY, excluded); + } + } else { + // symbol value + symbol = callback; + } + return symbol; +} + +var tmpSymbolArray = []; +export default RandomSymbol; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/AnyMatch.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/AnyMatch.js new file mode 100644 index 0000000000000000000000000000000000000000..d329e65ab67050497de9260cdb0cfb764233cf0f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/AnyMatch.js @@ -0,0 +1,5 @@ +var AnyMatch = function (n) { + return this.match.anyMatch(n); +} + +export default AnyMatch; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/GetAllMatch.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/GetAllMatch.js new file mode 100644 index 0000000000000000000000000000000000000000..14d32fba5ca13a13f3c2188e75e17e6818d3b159 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/GetAllMatch.js @@ -0,0 +1,35 @@ +import RefreshSymbolCache from './RefreshSymbolCache.js'; +import GetMatchN from './GetMatchN.js'; + +const SetStruct = Phaser.Structs.Set; +var GetAllMatch = function () { + RefreshSymbolCache.call(this) // only refresh symbol cache once + // Get match5, match4, match3 + var self = this; + var matchLines = []; + for (var n = 5; n >= 3; n--) { + GetMatchN.call(this, n, function (result, board) { + var newSet = new SetStruct(board.tileXYArrayToChessArray(result.tileXY, self.chessTileZ)); + for (var i = 0, cnt = matchLines.length; i < cnt; i++) { + if (subSetTest(matchLines[i], newSet)) { + return; // not a new set + } + } + matchLines.push(newSet); + }); + } + return matchLines; +} + +var subSetTest = function (setA, setB) { + // Return true if setB is a subset of setA + var itemsA = setA.entries; + for (var i = 0, cnt = itemsA.length; i < cnt; i++) { + if (!setB.contains(itemsA[i])) { + return false; + } + } + return true; +}; + +export default GetAllMatch; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/GetMatchN.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/GetMatchN.js new file mode 100644 index 0000000000000000000000000000000000000000..8d608ba8c17f6b3b0099e7f6e0537e8ff510d399 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/GetMatchN.js @@ -0,0 +1,6 @@ +var GetMatchN = function (n, callback, scope) { + this.match.match(n, callback, scope); + return this; +} + +export default GetMatchN; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/RefreshSymbolCache.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/RefreshSymbolCache.js new file mode 100644 index 0000000000000000000000000000000000000000..074a2fc4f31165caee17219fc1eeab7ca4e7c625 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/board/match/RefreshSymbolCache.js @@ -0,0 +1,15 @@ +var RefreshSymbolCache = function () { + this.match.refreshSymbols(function (tileXY, board) { + // Return null in upper board + if (tileXY.y < (board.height / 2)) { + return null; + } + var chess = board.tileXYZToChess(tileXY.x, tileXY.y, this.chessTileZ); + if (chess == null) { + return null; + } + return chess.getData('symbol'); + }, this); +}; + +export default RefreshSymbolCache; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/input/Input.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/input/Input.js new file mode 100644 index 0000000000000000000000000000000000000000..ce2f9a8cc6e50f2b0515bab18952d92ddd8582c9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/input/Input.js @@ -0,0 +1,64 @@ +const GetValue = Phaser.Utils.Objects.GetValue; +class Input { + constructor(bejeweled, config) { + this.bejeweled = bejeweled; // Bejeweled + this.scene = bejeweled.scene; // Bejeweled.scene + + this.setEnable(GetValue(config, 'input.enable', true)); + this.boot(); + } + + boot() { + // Touch control + this.scene.input + .on('pointerdown', this.selectChess1, this) + .on('pointermove', this.selectChess2, this); + } + + shutdown() { + this.scene.input + .off('pointerdown', this.selectChess1, this) + .off('pointermove', this.selectChess2, this); + this.bejeweled = undefined; + this.scene = undefined; + } + + destroy() { + this.shutdown(); + return this; + } + + setEnable(enabled) { + if (enabled === undefined) { + enabled = true; + } + this.enable = enabled; + return this; + } + + selectChess1(pointer) { + if (!this.enable) { + return this; + } + var chess = this.bejeweled.worldXYToChess(pointer.worldX, pointer.worldY); + if (chess) { + this.bejeweled.selectChess1(chess); + } + } + + selectChess2(pointer) { + if (!this.enable) { + return this; + } + + if (!pointer.isDown) { + return; + } + var chess = this.bejeweled.worldXYToChess(pointer.worldX, pointer.worldY); + if (chess && (chess !== this.bejeweled.getSelectedChess1())) { + this.bejeweled.selectChess2(chess); + } + } +} + +export default Input; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/BoardMethods.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/BoardMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..a4d91ec17c408da4a3ad5c1fd7f7c65b9d9d8e23 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/BoardMethods.js @@ -0,0 +1,41 @@ +export default { + setBoardSize(width, height) { + this.board.setBoardWidth(width).setBoardHeight(height); + return this; + }, + + // Chess properties + getChessMoveTo(chess) { + return (chess) ? chess.rexMoveTo : undefined; + }, + + getChessTileZ() { + return this.board.chessTileZ; + }, + + worldXYToChess(worldX, worldY) { + return this.board.worldXYToChess(worldX, worldY); + }, + + tileXYToChess(tileX, tileY) { + return this.board.tileXYToChess(tileX, tileY); + }, + + getNeighborChessAtAngle(chess, angle) { + return this.board.getNeighborChessAtAngle(chess, angle); + }, + + getNeighborChessAtDirection(chess, direction) { + return this.board.getNeighborChessAtDirection(chess, direction); + }, + + // Expose board instance + getBoard() { + return this.board.board; + }, + + // Expose match instance + getMatch() { + return this.board.match; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/InputMethods.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/InputMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..498db1d4d4ec506de5c9cc2109f2a8a24e7c1471 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/InputMethods.js @@ -0,0 +1,26 @@ +export default { + getSelectedChess1() { + return this.mainState.selectedChess1; + }, + + getSelectedChess2() { + return this.mainState.selectedChess2; + }, + + selectChess1(chess) { + this.mainState.selectChess1(chess); + return this; + }, + + selectChess2(chess) { + this.mainState.selectChess2(chess); + return this; + }, + + setInputEnable(enable) { + if (this.input) { + this.input.setEnable(enable); + } + return this; + }, +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/WaitEventMethods.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/WaitEventMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..58d5610c8ca14a043fbe0b59098c3491128455ec --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/methods/WaitEventMethods.js @@ -0,0 +1,13 @@ +export default { + waitEvent(eventEmitter, eventName) { + if (eventName === undefined) { + eventName = 'complete'; + } + this.waitEvents.waitEvent(eventEmitter, eventName); + return this; + }, + + isWaitingEvent() { + return !this.waitEvents.noWaitEvent; + }, +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/states/BaseState.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/states/BaseState.js new file mode 100644 index 0000000000000000000000000000000000000000..80a12629376ede43985e3a1a9ef272f3bd7d1dfe --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/states/BaseState.js @@ -0,0 +1,36 @@ +import FSM from '../../../plugins/fsm.js'; + +class BaseState extends FSM { + constructor(bejeweled, config) { + super(config); + + this.bejeweled = bejeweled; // Bejeweled + this.board = bejeweled.board; // Bejeweled.board + this.waitEvents = bejeweled.waitEvents; // Bejeweled.waitEvents + } + + shutdown() { + super.shutdown(); + this.bejeweled = undefined; + this.board = undefined; + this.waitEvents = undefined; + } + + destroy() { + this.shutdown(); + return this; + } + + next() { + // Wait until all events are completed + if (this.waitEvents.noWaitEvent) { + // Go to next state + super.next(); + } else { + // Try again later + this.waitEvents.setCompleteCallback(this.next, this); + } + } +} + +export default BaseState \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/states/MainState.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/states/MainState.js new file mode 100644 index 0000000000000000000000000000000000000000..9d094e9ff068aa951f2cc7325f8721772dff35bd --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/states/MainState.js @@ -0,0 +1,222 @@ +import BaseState from './BaseState.js'; +import MatchState from './MatchState.js'; +// Actions +import SelectChess from '../actions/SelectChess.js'; +import SwapChess from '../actions/SwapChess.js' + +const GetValue = Phaser.Utils.Objects.GetValue; + +class State extends BaseState { + constructor(bejeweled, config) { + super(bejeweled, config); + // this.bejeweled = bejeweled; // Bejeweled + // this.board = bejeweled.board; // Bejeweled.board + + this.selectedChess1; + this.selectedChess2; + this.matchState = new MatchState(bejeweled, config); // sub-state + + // Actions + // select1 action + this.select1Action = GetValue(config, 'select1Action', SelectChess); + // select2 action + this.select2Action = GetValue(config, 'select2Action', this.select1Action); + // Swap action + this.swapAction = GetValue(config, 'swapAction', SwapChess); + // UndoSwap action + this.undoSwapAction = GetValue(config, 'undoSwapAction', this.swapAction); + + var debug = GetValue(config, 'debug', false); + if (debug) { + this.on('statechange', this.printState, this); + } + } + + shutdown() { + super.shutdown(); + + this.matchState.shutdown(); + + this.matchState = undefined; + this.selectedChess1 = undefined; + this.selectedChess2 = undefined; + return this; + } + + // START + enter_START() { + this.board.init(); // Fill background tiles + this.next(); + } + next_START() { + return 'RESET'; + } + // START + + // RESET + enter_RESET() { + this.board.reset(); // Refill chess + this.next(); + } + next_RESET() { + return 'PRETEST'; + } + // RESET + + + // PRETEST + enter_PRETEST() { + this.next(); + } + next_PRETEST() { + var nextState; + if (this.board.preTest()) { + nextState = 'SELECT1START'; + } else { + nextState = 'RESET'; + } + return nextState; + } + // PRETEST + + // SELECT1START + enter_SELECT1() { + this.selectedChess1 = undefined; + this.selectedChess2 = undefined; + + this.bejeweled.emit('select1-start', this.board.board, this.bejeweled); + } + selectChess1(chess) { + if (this.state === 'SELECT1START') { + this.selectedChess1 = chess; + this.next(); + } + return this; + } + next_SELECT1START() { + var nextState; + if (this.selectedChess1) { + nextState = 'SELECT1'; + } + return nextState; + } + // SELECT1START + + // SELECT1 + enter_SELECT1() { + var board = this.board.board, + chess = this.selectedChess1; + + this.bejeweled.emit('select1', chess, board, this.bejeweled); + + this.select1Action(chess, board, this.bejeweled); + + // To next state when all completed + this.next(); + } + next_SELECT1() { + return 'SELECT2START'; + } + // SELECT1 + + // SELECT2START + enter_SELECT2START() { + this.bejeweled.emit('select2-start', this.board.board, this.bejeweled); + } + selectChess2(chess) { + if (this.state === 'SELECT2START') { + this.selectedChess2 = chess; + this.next(); + } + return this; + } + next_SELECT2START() { + var nextState; + if (this.selectedChess2 && + this.board.board.areNeighbors(this.selectedChess1, this.selectedChess2)) { + nextState = 'SELECT2'; + } else { + nextState = 'SELECT1START'; + } + return nextState; + } + // SELECT2START + + // SELECT2 + enter_SELECT2() { + var board = this.board.board, + chess = this.selectedChess2; + + this.bejeweled.emit('select2', chess, board, this.bejeweled); + + this.select2Action(chess, board, this.bejeweled); + + // To next state when all completed + this.next(); + } + next_SELECT2() { + return 'SWAP'; + } + // SELECT2 + + // SWAP + enter_SWAP() { + var board = this.board.board, + chess1 = this.selectedChess1, + chess2 = this.selectedChess2; + + this.bejeweled.emit('swap', chess1, chess2, board, this.bejeweled); + + this.swapAction(chess1, chess2, board, this.bejeweled); + + // To next state when all completed + this.next(); + } + next_SWAP() { + return 'MATCH3'; + } + // SWAP + + // MATCH3 + enter_MATCH3() { + this.matchState + .once('complete', this.next, this) + .goto('START'); + } + next_MATCH3() { + var nextState; + if (this.matchState.totalMatchedLinesCount === 0) { + nextState = 'UNDOSWAP'; + } else { + nextState = 'PRETEST'; + } + return nextState; + } + // MATCH3 + + // UNDO_SWAP + enter_UNDOSWAP() { + var board = this.board.board, + chess1 = this.selectedChess1, + chess2 = this.selectedChess2; + + this.bejeweled.emit('undo-swap', chess1, chess2, board, this.bejeweled); + + this.undoSwapAction(chess1, chess2, board, this.bejeweled); + + // To next state when all completed + this.next(); + } + next_UNDOSWAP() { + return 'SELECT1START'; + } + // UNDO_SWAP + + // debug + printState() { + console.log('Main state: ' + this.prevState + ' -> ' + this.state); + } + +} + +export default State; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/bejeweled/states/MatchState.js b/ui/src/phaser3-rex-plugins/templates/bejeweled/states/MatchState.js new file mode 100644 index 0000000000000000000000000000000000000000..9ebd32a310f56bfd26dd61842be0ae6913ae8741 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/bejeweled/states/MatchState.js @@ -0,0 +1,160 @@ +import BaseState from './BaseState.js'; +import EliminateChess from '../actions/EliminateChess.js'; +import FallingAllChess from '../actions/FallingAllChess.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; +const SetStruct = Phaser.Structs.Set; + +class State extends BaseState { + constructor(bejeweled, config) { + super(bejeweled, config); + // this.bejeweled = bejeweled; // Bejeweled + // this.board = bejeweled.board; // Bejeweled.board + + this.totalMatchedLinesCount = 0; + this.eliminatedChessArray; + + // Actions + // Eliminating action + this.eliminatingAction = GetValue(config, 'eliminatingAction', EliminateChess); + // on falling chess + this.fallingAction = GetValue(config, 'fallingAction', FallingAllChess); + + var debug = GetValue(config, 'debug', false); + if (debug) { + this.on('statechange', this.printState, this); + } + } + + shutdown() { + super.shutdown(); + + this.eliminatedChessArray = undefined; + // Actions + this.eliminatingAction = undefined; + this.fallingAction = undefined; + return this; + } + + destroy() { + this.shutdown(); + return this; + } + + // START + enter_START() { + this.totalMatchedLinesCount = 0; + + this.bejeweled.emit('match-start', this.board.board, this.bejeweled); + + this.next(); + } + next_START() { + return 'MATCH3'; + } + // START + + // MATCH3 + enter_MATCH3() { + var matchedLines = this.board.getAllMatch(); + + this.bejeweled.emit('match', matchedLines, this.board.board, this.bejeweled); + + var matchedLinesCount = matchedLines.length; + this.totalMatchedLinesCount += matchedLinesCount; + switch (matchedLinesCount) { + case 0: + this.eliminatedChessArray = []; + break; + case 1: + this.eliminatedChessArray = matchedLines[0].entries; + break; + default: + // Put all chess to a set + var newSet = new SetStruct(); + for (var i = 0; i < matchedLinesCount; i++) { + matchedLines[i].entries.forEach(function (value) { + newSet.set(value); + }); + } + this.eliminatedChessArray = newSet.entries; + break; + } + this.next(); + } + next_MATCH3() { + var nextState; + if (this.eliminatedChessArray.length === 0) { + nextState = 'END' + } else { + nextState = 'ELIMINATING'; + } + return nextState; + } + // MATCH3 + + // ELIMINATING + enter_ELIMINATING() { + var board = this.board.board, + chessArray = this.eliminatedChessArray; + + this.bejeweled.emit('eliminate', chessArray, board, this.bejeweled); + + this.eliminatingAction(chessArray, board, this.bejeweled); + + // Remove eliminated chess + chessArray.forEach(board.removeChess, board); + + // To next state when all completed + this.next(); + } + next_ELIMINATING() { + return 'FALLING'; + } + exit_ELIMINATING() { + this.eliminatedChessArray = undefined; + } + // ELIMINATING + + // FALLING + enter_FALLING() { + var board = this.board.board; + + this.bejeweled.emit('fall', board, this.bejeweled); + + this.fallingAction(board, this.bejeweled); + + // To next state when all completed + this.next(); + } + next_FALLING() { + return 'FILL'; + } + // FALLING + + // FILL + enter_FILL() { + this.board.fill(true); // Fill upper board only + + this.bejeweled.emit('fill', this.board.board, this.bejeweled); + + this.next(); + } + next_FILL() { + return 'MATCH3'; + } + // FILL + + // END + enter_END() { + this.bejeweled.emit('match-end', this.board.board, this.bejeweled); + + this.emit('complete'); + } + // END + + printState() { + console.log('Match state: ' + this.prevState + ' -> ' + this.state); + } +} +export default State; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/dialog-quest/DataMethods.js b/ui/src/phaser3-rex-plugins/templates/dialog-quest/DataMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..48e81fbd79156a8b044683ad55a538fe3bf35b2a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/dialog-quest/DataMethods.js @@ -0,0 +1,25 @@ +export default { + getData(key, defaultValue) { + return this.questionManager.getData(key, defaultValue); + }, + + setData(key, value) { + this.questionManager.setData(key, value); + return this; + }, + + incData(key, inc, defaultValue) { + this.questionManager.incData(key, inc, defaultValue); + return this; + }, + + mulData(key, mul, defaultValue) { + this.questionManager.mulData(key, mul, defaultValue); + return this; + }, + + clearData() { + this.questionManager.clearData(); + return this; + }, +}; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/dialog-quest/DialogQuest.d.ts b/ui/src/phaser3-rex-plugins/templates/dialog-quest/DialogQuest.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..be65378dd2beb8a83c9bb3a42891a7b4251a21d9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/dialog-quest/DialogQuest.d.ts @@ -0,0 +1,74 @@ +import { Dialog } from '../ui/ui-components'; +import QuestManager from '../../plugins/quest' + +export default DialogQuest; + +declare namespace DialogQuest { + interface IConfig extends QuestManager.IConfig { + dialog: Dialog, + } + + namespace Events { + type UpdateChoiceCallbackType = ( + choice: Phaser.GameObjects.GameObject, + option: QuestManager.QuestionType, + quest: QuestManager.Quest + ) => void; + + type UpdateDialogCallbackType = ( + dialog: Dialog, + question: QuestManager.QuestionType, + quest: QuestManager.Quest + ) => void; + + type ClickChoiceCallbackType = ( + choice: Phaser.GameObjects.GameObject, + dialog: Dialog, + quest: QuestManager.Quest + ) => void; + + type ClickActionCallbackType = ( + action: Phaser.GameObjects.GameObject, + dialog: Dialog, + quest: QuestManager.Quest + ) => void; + } +} + +declare class DialogQuest extends Phaser.Events.EventEmitter { + constructor( + config?: DialogQuest.IConfig + ); + + start(): this; + + next(key?: string): this; + + isLast(): boolean; + + getData( + key: string, + defaultValue?: any + ): any; + + getData(): any[]; + + setData( + key: string, + value: any + ): this; + + incData( + key: string, + inc: number, + defaultValue?: number + ): this; + + mulData( + key: string, + mul: number, + defaultValue?: number + ): this; + + clearData(): this; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/dialog-quest/DialogQuest.js b/ui/src/phaser3-rex-plugins/templates/dialog-quest/DialogQuest.js new file mode 100644 index 0000000000000000000000000000000000000000..9baab5b49bb65f1f906b9add11f580d18ab53d5d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/dialog-quest/DialogQuest.js @@ -0,0 +1,54 @@ +import QuestionManager from '../../plugins/logic/quest/questions/QuestionManager.js'; +import QuestMethods from './QuestMethods.js'; +import DataMethods from './DataMethods.js'; + +const EE = Phaser.Events.EventEmitter; +const GetValue = Phaser.Utils.Objects.GetValue; + +class DialogQuest extends EE { + constructor(config) { + super(); + + if (config === undefined) { + config = {}; + } + if (!config.quest) { + config.quest = true; + } + + this.dialog = GetValue(config, 'dialog', undefined); + this.questionManager = new QuestionManager(config); + + // Attach events + this.questionManager + .on('quest', function (question) { + var choices = this.dialog.getElement('choices'); + var options = question.options, option; + for (var i = 0, cnt = choices.length; i < cnt; i++) { + option = options[i]; + if (option) { + this.dialog.showChoice(i); + this.emit('update-choice', choices[i], option, this); + } else { + this.dialog.hideChoice(i); + } + } + this.emit('update-dialog', this.dialog, question, this); + }, this); + + this.dialog + .on('button.click', function (button, groupName, index) { + var eventName = 'click-' + ((groupName === 'choices') ? 'choice' : 'action'); + this.emit(eventName, button, this.dialog, this); + }, this) + } +} + +Object.assign( + DialogQuest.prototype, + QuestMethods, + DataMethods +); + + +export default DialogQuest; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/dialog-quest/QuestMethods.js b/ui/src/phaser3-rex-plugins/templates/dialog-quest/QuestMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..90feacdc52cdbceb93f5f2e75d738be3e7a2e3f2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/dialog-quest/QuestMethods.js @@ -0,0 +1,18 @@ +export default { + start(key) { + this.questionManager + .restartQuest() + .getNextQuestion(key); + return this; + }, + + next(key) { + this.questionManager + .getNextQuestion(key); + return this; + }, + + isLast() { + return this.questionManager.isLastQuestion(); + }, +}; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/ObjectFactory.js b/ui/src/phaser3-rex-plugins/templates/spinner/ObjectFactory.js new file mode 100644 index 0000000000000000000000000000000000000000..56a37cdc697266749a0c400fb94b2bf9c8bf3896 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/ObjectFactory.js @@ -0,0 +1,20 @@ +class ObjectFactory { + constructor(scene) { + this.scene = scene; + this.displayList = scene.sys.displayList; + this.updateList = scene.sys.updateList; + + scene.events.once('destroy', this.destroy, this); + } + + destroy() { + this.scene = null; + this.displayList = null; + this.updateList = null; + } + + static register(type, callback) { + ObjectFactory.prototype[type] = callback; + } +}; +export default ObjectFactory; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/audio/Audio.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/audio/Audio.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a487b578dbdd1bf2c8108de33e85071904df464f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/audio/Audio.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Audio extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/audio/Audio.js b/ui/src/phaser3-rex-plugins/templates/spinner/audio/Audio.js new file mode 100644 index 0000000000000000000000000000000000000000..1567f4059bcb352444e96582c9811a1328a095b4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/audio/Audio.js @@ -0,0 +1,61 @@ +import Base from '../base/Base.js'; +import { Line } from '../utils/Geoms.js'; + +const Linear = Phaser.Math.Linear; + +class Audio extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerAudio'; + } + + buildShapes() { + for (var i = 0; i < 4; i++) { + this.addShape(new Line()); + } + this.prevValue = undefined; + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var leftBound = centerX - radius; + var bottomBound = centerY + radius; + var maxLineHeight = radius * 2; + + var shapes = this.getShapes(), + cnt = shapes.length; + var cellWidth = (radius * 2) / cnt; + var lineWidth = cellWidth * 0.7; + + // Reset range of value + if ((this.prevValue === undefined) || (this.prevValue > this.value)) { + for (var i = 0; i < cnt; i++) { + var line = shapes[i]; + var from = (this.prevValue === undefined) ? Math.random() : line.getData('to'); + line + .setData('from', from) + .setData('to', Math.random()) + } + } + this.prevValue = this.value; + + for (var i = 0; i < cnt; i++) { + var line = shapes[i]; + var from = line.getData('from'), + to = line.getData('to'), + current = Linear(from, to, this.value); + var lineHeight = current * maxLineHeight; + var x = leftBound + (cellWidth * (i + 0.5)); + + line + .lineStyle(lineWidth, this.color, 1) + .setP0(x, bottomBound) + .setP1(x, (bottomBound - lineHeight)); + + } + } +} + +export default Audio; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/audio/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/audio/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d960987c303d916cb55d0c261ddaef5af2777d9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/audio/Factory.d.ts @@ -0,0 +1,6 @@ +import Audio from './Audio'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Audio; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/audio/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/audio/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..1d68b7edad1661771396c15b22c854f7ae7e1e99 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/audio/Factory.js @@ -0,0 +1,13 @@ +import Audio from './Audio.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('audio', function (config) { + var gameObject = new Audio(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Audio', Audio); + +export default Audio; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/ball/Ball.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/ball/Ball.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2e1d6076c75d1adc8a639b5c7410d8905f84a046 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/ball/Ball.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Ball extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/ball/Ball.js b/ui/src/phaser3-rex-plugins/templates/spinner/ball/Ball.js new file mode 100644 index 0000000000000000000000000000000000000000..1029e82aa2b7b4cb1022b01b94c799c5e7baa8cb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/ball/Ball.js @@ -0,0 +1,45 @@ +import Base from '../base/Base.js'; +import { Circle } from '../utils/Geoms.js' +import Yoyo from '../utils/Yoyo.js'; + +const Linear = Phaser.Math.Linear; + +class Ball extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerBall'; + } + + buildShapes() { + for (var i = 0; i < 3; i++) { + this.addShape(new Circle()); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var ballRadius = radius * 0.1; + var lineWidth = Math.ceil(ballRadius * 0.25); + + var t = 1 - Yoyo(this.value); + var trackRadius = Linear(0.3, 0.9, t) * radius; + + var shapes = this.getShapes(); + for (var i = 0, cnt = shapes.length; i < cnt; i++) { + var ball = shapes[i]; + var t = (this.value + (i / cnt)) % 1; + var angle = Math.PI * 2 * t; + ball + .lineStyle(lineWidth, this.color) + .setRadius(ballRadius) + .setCenterPosition( + centerX + Math.cos(angle) * trackRadius, + centerY + Math.sin(angle) * trackRadius + ); + } + } +} + +export default Ball; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/ball/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/ball/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bea8880b9858725e2646f2dadd854685fe1d2d6d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/ball/Factory.d.ts @@ -0,0 +1,6 @@ +import Ball from './Ball'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Ball; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/ball/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/ball/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..7f85ebb1283bc434998ea7ce8a49d42b2623d67a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/ball/Factory.js @@ -0,0 +1,13 @@ +import Ball from './Ball.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('ball', function (config) { + var gameObject = new Ball(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Ball', Ball); + +export default Ball; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/bars/Bars.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/bars/Bars.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7e276c5ce4bccd4db0eff24b19204ff8dd9cee73 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/bars/Bars.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Bars extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/bars/Bars.js b/ui/src/phaser3-rex-plugins/templates/spinner/bars/Bars.js new file mode 100644 index 0000000000000000000000000000000000000000..871654a3e9a459fc292883ad2f23a585a74920b7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/bars/Bars.js @@ -0,0 +1,54 @@ +import Base from '../base/Base.js'; +import { Line } from '../utils/Geoms.js'; +import Yoyo from '../utils/Yoyo.js'; + +const Linear = Phaser.Math.Linear; +const ExpoIn = Phaser.Math.Easing.Expo.In; + +class Bars extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerBars'; + } + + buildShapes() { + var cnt = 5; + for (var i = 0; i < cnt; i++) { + var line = new Line(); + this.addShape(line); + var offset = Yoyo(i / (cnt - 1)) / 2; + line.setData('offset', offset); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var leftBound = centerX - radius; + var maxLineHeight = radius * 2; + + var shapes = this.getShapes(), + cnt = shapes.length; + var cellWidth = (radius * 2) / cnt; + var lineWidth = cellWidth * 0.7; + + + for (var i = 0; i < cnt; i++) { + var line = shapes[i]; + var t = (this.value + line.getData('offset')) % 1; + t = ExpoIn(Yoyo(t)); + + var lineHeight = Linear(0.4, 1, t) * maxLineHeight; + var x = leftBound + (cellWidth * (i + 0.5)) + + line + .lineStyle(lineWidth, this.color, 1) + .setP0(x, (centerY - (lineHeight / 2))) + .setP1(x, (centerY + (lineHeight / 2))); + + } + } +} + +export default Bars; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/bars/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/bars/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..46db880bc5072d7990ca1f87f829e75f37b124df --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/bars/Factory.d.ts @@ -0,0 +1,6 @@ +import Bars from './Bars'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Bars; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/bars/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/bars/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..3e78250a71f12c46b0044a95101c99e21c05666a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/bars/Factory.js @@ -0,0 +1,13 @@ +import Bars from './Bars.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('bars', function (config) { + var gameObject = new Bars(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Bars', Bars); + +export default Bars; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/base/Base.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/base/Base.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..816e8c28c78951670544fe253a5432672031d948 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/base/Base.d.ts @@ -0,0 +1,48 @@ +// import * as Phaser from 'phaser'; +import BaseShape from '../../../plugins/gameobjects/shape/shapes/BaseShapes'; + +export default Base; + +declare namespace Base { + + interface IConfig { + x?: number, y?: number, + width?: number, height?: number, + color?: number, + + duration?: number, + start?: boolean, + + ease?: string, + } + +} + +declare class Base extends BaseShape { + constructor( + scene: Phaser.Scene, + config?: Base.IConfig + ) + + start(duration?: number): this; + pause(): this; + resume(): this; + stop(): this; + readonly isRunning: boolean; + + setValue(t: number): this; + value: number; + + setColor(color: number): this; + color: number; + + setDuration(duration: number): this; + duration: this; + + setEase(ease: string): this; + ease: string; + + readonly centerX: number; + readonly centerY: number; + readonly radius: number; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/base/Base.js b/ui/src/phaser3-rex-plugins/templates/spinner/base/Base.js new file mode 100644 index 0000000000000000000000000000000000000000..79318136741ce98d3d8b0958b918e14ac243c493 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/base/Base.js @@ -0,0 +1,112 @@ +import BaseShapes from '../../../plugins/gameobjects/shape/shapes/BaseShapes.js'; +import EaseValueMethods from './EaseValueMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Base extends BaseShapes { + constructor(scene, config) { + var x = GetValue(config, 'x', 0); + var y = GetValue(config, 'y', 0); + var width = GetValue(config, 'width', 64); + var height = GetValue(config, 'height', 64); + + super(scene, x, y, width, height); + + this.setDuration(GetValue(config, 'duration', 1000)); + this.setEase(GetValue(config, 'ease', 'Linear')); + this.setDelay(GetValue(config, 'delay', 0)); + this.setRepeatDelay(GetValue(config, 'repeatDelay', 0)); + var color = GetValue(config, 'color', 0xffffff); + var start = GetValue(config, 'start', true); + + this.buildShapes(config); + this.setColor(color); + this.setValue(0); + + if (start) { + this.start(); + } + } + + buildShapes() { + + } + + get centerX() { + return this.width / 2;; + } + + get centerY() { + return this.height / 2; + } + + get radius() { + return Math.min(this.centerX, this.centerY); + } + + get color() { + return this._color; + } + + set color(value) { + this.isColorChanged = this.isColorChanged || (this._color !== value); + this.dirty = this.dirty || this.isColorChanged; + this._color = value; + this.setShapesColor(value); + } + + setColor(color) { + this.color = color; + return this; + } + + setShapesColor(color) { + + } + + get value() { + return this._value; + } + + set value(value) { + value = Phaser.Math.Clamp(value, 0, 1); + this.dirty = this.dirty || (this._value != value); + this._value = value; + } + + setValue(value) { + this.value = value; + return this; + } + + setDuration(duration) { + this.duration = duration; + return this; + } + + setDelay(delay) { + this.delay = delay; + return this; + } + + setRepeatDelay(repeatDelay) { + this.repeatDelay = repeatDelay; + return this; + } + + setEase(ease) { + this.ease = ease; + return this; + } + + get isRunning() { + return (this.tweenTask) ? this.tweenTask.isRunning : false; + } +} + +Object.assign( + Base.prototype, + EaseValueMethods +); + +export default Base; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/base/EaseValueMethods.js b/ui/src/phaser3-rex-plugins/templates/spinner/base/EaseValueMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..b6ce2bd3ea4d850c7b073f5904261c8c10fe92ee --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/base/EaseValueMethods.js @@ -0,0 +1,67 @@ +import EaseValueTask from '../../../plugins/utils/ease/EaseValueTask.js'; + +var Start = function (duration) { + if (!this.easeValueTask) { + this.easeValueTask = new EaseValueTask(this, { eventEmitter: null }); + } + + if (duration !== undefined) { + this.duration = duration; + this.easeValueTask.stop(); // Will restart with new duration + } + + // Won't restart if easeValueTask is running + if (this.easeValueTask.isRunning) { + return this; + } + + // Start easeValueTask + this.easeValueTask.restart({ + key: 'value', + from: 0, to: 1, + duration: this.duration, + ease: this.ease, + repeat: -1, // -1: infinity + + delay: this.delay, + repeatDelay: this.repeatDelay + }); + + this.setDirty(); + + return this; +} + +var Stop = function () { + if (!this.easeValueTask) { + return this; + } + this.easeValueTask.stop(); + this.setDirty(); + return this; +} + +var Pause = function () { + if (!this.easeValueTask) { + return this; + } + this.easeValueTask.pause(); + this.setDirty(); + return this; +} + +var Resume = function () { + if (!this.easeValueTask) { + return this; + } + this.easeValueTask.pause(); + this.setDirty(); + return this; +} + +export default { + start: Start, + stop: Stop, + pause: Pause, + resume: Resume +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/box/Box.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/box/Box.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..878fd1b453568adc62244c84d3992011c97dd574 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/box/Box.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Box extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/box/Box.js b/ui/src/phaser3-rex-plugins/templates/spinner/box/Box.js new file mode 100644 index 0000000000000000000000000000000000000000..12bd96f617a3202c7e9617146c289b090a182dba --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/box/Box.js @@ -0,0 +1,50 @@ +import Base from '../base/Base.js'; +import { Lines } from '../utils/Geoms.js'; + +class Box extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerCube'; + } + + buildShapes() { + this.addShape((new Lines()).setName('border')); + this.addShape((new Lines()).setName('fill')); + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + + var halfWidth = radius * 0.7; + var left = centerX - halfWidth, + top = centerY - halfWidth, + width = halfWidth * 2; + + this.getShape('border') + .lineStyle(2, this.color, 1) + .startAt(left, top).lineTo(width, 0, true) + .lineTo(0, width, true).lineTo(-width, 0, true) + .lineTo(0, -width, true).close(); + + if (this.value < 0.5) { + var t = (0.5 - this.value) * 2; + var height = width * t; + this.getShape('fill') + .fillStyle(this.color, 1) + .startAt(left, top).lineTo(width, 0, true) + .lineTo(0, height, true).lineTo(-width, 0, true) + .lineTo(0, -height, true).close(); + + } else { // Rotate + var t = (this.value - 0.5) * 2; + var angle = 180 * t; + + this.getShape('border').rotateAround(centerX, centerY, angle); + this.getShape('fill').fillStyle().lineStyle(); + } + } +} + +export default Box; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/box/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/box/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6282ec6e905f34f294c64731f1771aa285400b0d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/box/Factory.d.ts @@ -0,0 +1,6 @@ +import Box from './Box'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Box; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/box/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/box/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..6f8b5c576bd51fd9e9c882649e28c6192d10a90b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/box/Factory.js @@ -0,0 +1,13 @@ +import Box from './Box.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('box', function (config) { + var gameObject = new Box(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Box', Box); + +export default Box; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/clock/Clock.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/clock/Clock.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d85c7816afe5fa3eedae1ac6208a08e211c0851c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/clock/Clock.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Clock extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/clock/Clock.js b/ui/src/phaser3-rex-plugins/templates/spinner/clock/Clock.js new file mode 100644 index 0000000000000000000000000000000000000000..5905d65679e410c581179589c6a9ab29e0a69078 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/clock/Clock.js @@ -0,0 +1,67 @@ +import Base from '../base/Base.js'; +import { Circle, Line } from '../utils/Geoms.js' + +const RadToDeg = Phaser.Math.RadToDeg; +const WrapDegrees = Phaser.Math.Angle.WrapDegrees; +const WrapRad = Phaser.Math.Angle.Wrap; +const ShortestBetween = Phaser.Math.Angle.ShortestBetween; +const DegToRad = Phaser.Math.DegToRad; +const Rad270 = Phaser.Math.DegToRad(270); + +class Clock extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerClock'; + + this.minuteHandAngle = 0; + this.hourHandAngle = 0; + } + + buildShapes() { + this.addShape((new Circle()).setName('border')); + this.addShape((new Line()).setName('minuteHand')); + this.addShape((new Line()).setName('hourHand')); + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var lineWidth = Math.ceil(radius / 25); + var borderRadius = radius - (lineWidth / 2); + var minuteHandLength = radius * 0.8; + var hourHandLength = radius * 0.5; + + var prevMinuteHandAngle = this.minuteHandAngle; + this.minuteHandAngle = Math.PI * 2 * this.value; + var angle0 = WrapDegrees(RadToDeg(prevMinuteHandAngle)); + var angle1 = WrapDegrees(RadToDeg(this.minuteHandAngle)); + var deltaAngle = ShortestBetween(angle0, angle1); + this.hourHandAngle = WrapRad(this.hourHandAngle + (DegToRad(deltaAngle) / 12)) + + this.getShape('border') + .lineStyle(lineWidth, this.color) + .setRadius(borderRadius) + .setCenterPosition(centerX, centerY); + + var angle = this.minuteHandAngle + Rad270; + this.getShape('minuteHand') + .lineStyle(lineWidth, this.color) + .setP0(centerX, centerY) + .setP1( + centerX + (Math.cos(angle) * minuteHandLength), + centerY + (Math.sin(angle) * minuteHandLength) + ) + + var angle = this.hourHandAngle + Rad270; + this.getShape('hourHand') + .lineStyle(lineWidth, this.color) + .setP0(centerX, centerY) + .setP1( + centerX + (Math.cos(angle) * hourHandLength), + centerY + (Math.sin(angle) * hourHandLength) + ) + } +} + +export default Clock; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/clock/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/clock/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8748cf08e2b34063fbeb83ae8570a7fcfb8aca18 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/clock/Factory.d.ts @@ -0,0 +1,6 @@ +import Clock from './Clock'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Clock; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/clock/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/clock/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..fb5e0791b317d9b71a69e3ab82daeff8174b4f94 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/clock/Factory.js @@ -0,0 +1,13 @@ +import Clock from './Clock.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('clock', function (config) { + var gameObject = new Clock(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Clock', Clock); + +export default Clock; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/cube/Cube.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/cube/Cube.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4f0ad920b8a970ef840b2b35ed0cce8dfce02fdc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/cube/Cube.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Cube extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/cube/Cube.js b/ui/src/phaser3-rex-plugins/templates/spinner/cube/Cube.js new file mode 100644 index 0000000000000000000000000000000000000000..5354e3aaa5b81d30f074768530c30ce3606b646b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/cube/Cube.js @@ -0,0 +1,57 @@ +import Base from '../base/Base.js'; +import { Line } from '../utils/Geoms.js'; +import Yoyo from '../utils/Yoyo.js'; + +const Linear = Phaser.Math.Linear; +const ExpoIn = Phaser.Math.Easing.Expo.In; +const RowNum = 2; +const ColNum = 2; + +class Cube extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerCube'; + } + + buildShapes() { + var cnt = RowNum * ColNum; + for (var i = 0; i < cnt; i++) { + var line = new Line(); + this.addShape(line); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var leftBound = centerX - radius; + var topBound = centerY - radius; + var cellWidth = (radius * 2) / ColNum; + var cellHeight = (radius * 2) / RowNum; + + var shapes = this.getShapes(), + cnt = shapes.length; + for (var i = 0; i < cnt; i++) { + var colIdx = (i % ColNum); + var rowIdx = Math.floor(i / RowNum); + var x = leftBound + (cellWidth * (colIdx + 0.5)); + var y = topBound + (cellHeight * (rowIdx + 0.5)); + + var line = shapes[i]; + var t = (this.value + ((cnt - i) * 0.1)) % 1; + t = ExpoIn(Yoyo(t)); + + var lineAlpha = (cnt - i) / cnt; + var lineHeight = Linear(0.7, 1, t) * cellHeight; + var lineWidth = Linear(0.7, 1, t) * cellWidth; + + line + .lineStyle(lineWidth, this.color, lineAlpha) + .setP0(x - (lineHeight / 2), y) + .setP1(x + (lineHeight / 2), y); + } + } +} + +export default Cube; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/cube/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/cube/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..906d09335354a4794f3b54763fc62bc74f3e8e8a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/cube/Factory.d.ts @@ -0,0 +1,6 @@ +import Cube from './Cube'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Cube; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/cube/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/cube/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..c3450fc3bf7005a2f95344b2f2db97fd9eed79f7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/cube/Factory.js @@ -0,0 +1,13 @@ +import Cube from './Cube.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('cube', function (config) { + var gameObject = new Cube(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Cube', Cube); + +export default Cube; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/custom/Custom.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/custom/Custom.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ff04aebdfeb33c133b5f38922677ada549283e03 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/custom/Custom.d.ts @@ -0,0 +1,48 @@ +import Base from '../base/Base'; +import * as Geoms from '../../../plugins/gameobjects/shape/shapes/geoms'; + +export default Custom; + +declare namespace Custom { + + type NameTypes = string | string[] | number; + + type Arc = Geoms.Arc; + type Circle = Geoms.Circle; + type Curve = Geoms.Curve; + type Ellipse = Geoms.Ellipse; + type Line = Geoms.Line; + type Lines = Geoms.Lines; + type Rectangle = Geoms.Rectangle; + type RoundRectangle = Geoms.RoundRectangle; + type Triangle = Geoms.Triangle; + type ShapeTypes = Arc | Circle | Curve | Ellipse | + Line | Lines | Rectangle | RoundRectangle | Triangle; + + interface IConfig extends Base.IConfig { + create?: { + arc?: NameTypes, + circle?: NameTypes, + ellipse?: NameTypes, + line?: NameTypes, + lines?: NameTypes, + rectangle?: NameTypes, + triangle?: NameTypes, + } | ((this: Custom) => void); + + update?: (this: Custom) => void; + + type?: string, + } + +} + +declare class Custom extends Base { + constructor( + scene: Phaser.Scene, + config?: Custom.IConfig + ) + + getShape(name: string): Custom.ShapeTypes; + getShapes(): Custom.ShapeTypes[]; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/custom/Custom.js b/ui/src/phaser3-rex-plugins/templates/spinner/custom/Custom.js new file mode 100644 index 0000000000000000000000000000000000000000..c872b93303aa9ecaf56517b44c38cd587d23c26c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/custom/Custom.js @@ -0,0 +1,18 @@ +import Base from '../base/Base.js'; +import ShapesUpdateMethods from '../../../plugins/gameobjects/shape/customshapes/ShapesUpdateMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Custom extends Base { + constructor(scene, config) { + super(scene, config); + this.type = GetValue(config, 'type', 'rexSpinnerCustom'); + } +} + +Object.assign( + Custom.prototype, + ShapesUpdateMethods +); + +export default Custom; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/custom/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/custom/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..28a06b015f607770849c417a9fa37287905eb8bc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/custom/Factory.d.ts @@ -0,0 +1,5 @@ +import Custom from './Custom'; + +export default function Factory( + config?: Custom.IConfig +): Custom; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/custom/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/custom/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..70cf6df876d6e5f733628ebf2fb62652c1504e9d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/custom/Factory.js @@ -0,0 +1,13 @@ +import Custom from './Custom.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('custom', function (config) { + var gameObject = new Custom(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Custom', Custom); + +export default Custom; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/dots/Dots.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/dots/Dots.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ce28f829faf13c9f54a9678f087805b2426a81fe --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/dots/Dots.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Dots extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/dots/Dots.js b/ui/src/phaser3-rex-plugins/templates/spinner/dots/Dots.js new file mode 100644 index 0000000000000000000000000000000000000000..ee48586a6fcf6087eeb64dca8ef6f98cbda08c44 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/dots/Dots.js @@ -0,0 +1,54 @@ +import Base from '../base/Base.js'; +import { Circle } from '../utils/Geoms.js'; +import Yoyo from '../utils/Yoyo.js'; + + +const Linear = Phaser.Math.Linear; + +class Dots extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerDots'; + } + + buildShapes() { + var cnt = 3; + for (var i = 0; i < cnt; i++) { + var dot = new Circle(); + this.addShape(dot); + + var offset = Yoyo(i / (cnt - 1)) / 2; + dot.setData('offset', offset); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var leftBound = centerX - radius; + + var shapes = this.getShapes(), + cnt = shapes.length; + var cellWidth = (radius * 2) / cnt; + var maxDotRadius = cellWidth / 2; + + for (var i = 0; i < cnt; i++) { + var dot = shapes[i]; + var t = (this.value + dot.getData('offset')) % 1; + t = Yoyo(t); + + var dotAlpha = Linear(0.25, 1, t); + var dotRadius = Linear(0.5, 1, t) * maxDotRadius; + dot + .fillStyle(this.color, dotAlpha) + .setRadius(dotRadius) + .setCenterPosition( + leftBound + (cellWidth * (i + 0.5)), + centerY + ) + } + } +} + +export default Dots; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/dots/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/dots/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b7cd9933e65a0ca8be20d2be655d6f2a34144cc9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/dots/Factory.d.ts @@ -0,0 +1,6 @@ +import Dots from './Dots'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Dots; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/dots/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/dots/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..ac9a10ec258a5ecbafaf3e67bf78fb9cf9db9eb0 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/dots/Factory.js @@ -0,0 +1,13 @@ +import Dots from './Dots.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('dots', function (config) { + var gameObject = new Dots(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Dots', Dots); + +export default Dots; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Facebook.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Facebook.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..13b7106bc644b2b9dde10046b24f7ea99a1eff75 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Facebook.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Facebook extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Facebook.js b/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Facebook.js new file mode 100644 index 0000000000000000000000000000000000000000..26340812469e0a97771e5c1e1826f1c6de99bb79 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Facebook.js @@ -0,0 +1,50 @@ +import Base from '../base/Base.js'; +import { Line } from '../utils/Geoms.js'; +import Yoyo from '../utils/Yoyo.js'; + +const Linear = Phaser.Math.Linear; +const ExpoIn = Phaser.Math.Easing.Expo.In; + +class Facebook extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerFacebook'; + } + + buildShapes() { + for (var i = 0; i < 3; i++) { + var shape = new Line(); + this.addShape(shape); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var leftBound = centerX - radius; + + var shapes = this.getShapes(), + cnt = shapes.length; + var cellWidth = (radius * 2) / cnt; + var cellHeight = radius * 2; + + for (var i = 0; i < cnt; i++) { + var line = shapes[i]; + var t = (this.value + ((cnt - i) * 0.1)) % 1; + t = ExpoIn(Yoyo(t)); + + var lineAlpha = (i + 1) / cnt; + var lineHeight = Linear(0.7, 1, t) * cellHeight; + var lineWidth = Linear(0.7, 1, t) * cellWidth; + var x = leftBound + (cellWidth * (i + 0.5)); + + line + .lineStyle(lineWidth, this.color, lineAlpha) + .setP0(x, centerY - (lineHeight / 2)) + .setP1(x, centerY + (lineHeight / 2)); + } + } +} + +export default Facebook; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f51d5e0eb32f49a194bf575f37e274534802e709 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Factory.d.ts @@ -0,0 +1,6 @@ +import Facebook from './Facebook'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Facebook; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..83564c35a3f25fc726d71742fd6388ed6d8cc7db --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/facebook/Factory.js @@ -0,0 +1,13 @@ +import Facebook from './Facebook.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('facebook', function (config) { + var gameObject = new Facebook(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Facebook', Facebook); + +export default Facebook; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/grid/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/grid/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..003176bf2cb455a4b195beba83e55683de3a4147 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/grid/Factory.d.ts @@ -0,0 +1,6 @@ +import Grid from './Grid'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Grid; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/grid/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/grid/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..37c342597af1c74a196ab07376073ddc3a7dd16c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/grid/Factory.js @@ -0,0 +1,13 @@ +import Grid from './Grid.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('grid', function (config) { + var gameObject = new Grid(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Grid', Grid); + +export default Grid; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/grid/Grid.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/grid/Grid.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e3ed12a39479f273c1f9dc6a86d35396cb55ba5c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/grid/Grid.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Grid extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/grid/Grid.js b/ui/src/phaser3-rex-plugins/templates/spinner/grid/Grid.js new file mode 100644 index 0000000000000000000000000000000000000000..9690f11462dab772746954220f1b8cb1e2e45c54 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/grid/Grid.js @@ -0,0 +1,60 @@ +import Base from '../base/Base.js'; +import { Circle } from '../utils/Geoms.js'; +import Yoyo from '../utils/Yoyo.js'; + + +const Linear = Phaser.Math.Linear; +const RowNum = 3; +const ColNum = 3; + +class Grid extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerGrid'; + } + + buildShapes() { + var cnt = RowNum * ColNum; + for (var i = 0; i < cnt; i++) { + var dot = new Circle(); + this.addShape(dot); + + dot.setData('offset', Math.random()); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var isSizeChanged = this.isSizeChanged; + + var leftBound = centerX - radius; + var topBound = centerY - radius; + var cellWidth = (radius * 2) / ColNum; + var cellHeight = (radius * 2) / RowNum; + var maxDotRadius = (Math.min(cellWidth, cellHeight) / 2) * 0.8; + + + var shapes = this.getShapes(); + for (var i = 0, cnt = shapes.length; i < cnt; i++) { + var colIdx = (i % ColNum); + var rowIdx = Math.floor(i / RowNum); + var x = leftBound + cellWidth * (colIdx + 0.5); + var y = topBound + cellHeight * (rowIdx + 0.5); + + var dot = shapes[i]; + var t = (this.value + dot.getData('offset')) % 1; + t = Yoyo(t); + dot.fillStyle(this.color, Linear(0.25, 1, t)); + + if (isSizeChanged) { + dot + .setRadius(maxDotRadius) + .setCenterPosition(x, y) + } + } + } +} + +export default Grid; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/los/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/los/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7c8335e714242d07b7db3a47298d6fff7ee78920 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/los/Factory.d.ts @@ -0,0 +1,6 @@ +import Los from './Los'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Los; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/los/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/los/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..92ec48bc7c36d6c3bbc482e7159b653f7d2ff8c6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/los/Factory.js @@ -0,0 +1,13 @@ +import Los from './Los.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('los', function (config) { + var gameObject = new Los(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Los', Los); + +export default Los; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/los/Los.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/los/Los.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7cd197f7f75b364f06e612b1731e6f0c39905984 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/los/Los.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Los extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/los/Los.js b/ui/src/phaser3-rex-plugins/templates/spinner/los/Los.js new file mode 100644 index 0000000000000000000000000000000000000000..d498cc6c7e7ddcc023bae52cbc017584b35b76d6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/los/Los.js @@ -0,0 +1,49 @@ +import Base from '../base/Base.js'; +import { Line } from '../utils/Geoms.js' + +const Linear = Phaser.Math.Linear; + +class Los extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerLos'; + } + + buildShapes() { + for (var i = 0; i < 12; i++) { + this.addShape(new Line()); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var isSizeChanged = this.isSizeChanged; + + var radius = this.radius; + var startRadius = radius / 2; + var lineWidth = Math.ceil(radius / 20); + var shapes = this.getShapes(); + for (var i = 0, cnt = shapes.length; i < cnt; i++) { + var line = shapes[i]; + var t = i / cnt; + var angle = Math.PI * 2 * t; + var alpha = Linear(0.25, 1, (1 - this.value + t) % 1); + line.lineStyle(lineWidth, this.color, alpha); + + if (isSizeChanged) { + line + .setP0( + centerX + Math.cos(angle) * startRadius, + centerY + Math.sin(angle) * startRadius + ) + .setP1( + centerX + Math.cos(angle) * radius, + centerY + Math.sin(angle) * radius + ) + } + } + } +} + +export default Los; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..aab7ee58391a2d2ffb6b6aac3db61d9c34158a3b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Factory.d.ts @@ -0,0 +1,6 @@ +import Orbit from './Orbit'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Orbit; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..f182c5c5b04cd0fcbc25acb052d253e1fc0a8e5d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Factory.js @@ -0,0 +1,13 @@ +import Orbit from './Orbit.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('orbit', function (config) { + var gameObject = new Orbit(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Orbit', Orbit); + +export default Orbit; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Orbit.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Orbit.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..32c61a155cbd38a5342d07e92444a9146bd131fe --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Orbit.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Orbit extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Orbit.js b/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Orbit.js new file mode 100644 index 0000000000000000000000000000000000000000..eb02a4333ce396e5ad9908bb09b87af9bd22cbca --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/orbit/Orbit.js @@ -0,0 +1,39 @@ +import Base from '../base/Base.js'; +import { Circle } from '../utils/Geoms.js' + +class Orbit extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerOrbit'; + } + + buildShapes() { + this.addShape((new Circle()).setName('track')); + this.addShape((new Circle()).setName('thumb')); + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var trackRadius = radius * 0.9; + var trackThickness = Math.ceil(trackRadius/25); + var thumbRadius = radius * 0.1; + var thumbAngle = Math.PI * 2 * this.value; + + this.getShape('track') + .lineStyle(trackThickness, this.color, 0.7) + .setRadius(trackRadius) + .setCenterPosition(centerX, centerY); + + this.getShape('thumb') + .fillStyle(this.color) + .setRadius(thumbRadius) + .setCenterPosition( + centerX + Math.cos(thumbAngle) * trackRadius, + centerY + Math.sin(thumbAngle) * trackRadius + ); + } +} + +export default Orbit; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/oval/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/oval/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..50fdb31626ade2f4518f92aff058a6ef45c464bc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/oval/Factory.d.ts @@ -0,0 +1,6 @@ +import Oval from './Oval'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Oval; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/oval/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/oval/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..9d68b3357604dcb84d81b7e54a065823a630d51e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/oval/Factory.js @@ -0,0 +1,13 @@ +import Oval from './Oval.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('oval', function (config) { + var gameObject = new Oval(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Oval', Oval); + +export default Oval; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/oval/Oval.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/oval/Oval.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ddc61085922e3c898be90dca25892c1735b6c0d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/oval/Oval.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Oval extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/oval/Oval.js b/ui/src/phaser3-rex-plugins/templates/spinner/oval/Oval.js new file mode 100644 index 0000000000000000000000000000000000000000..81870e20017f24c505c20a412d3001d38ec41839 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/oval/Oval.js @@ -0,0 +1,39 @@ +import Base from '../base/Base.js'; +import { Arc, Circle } from '../utils/Geoms.js' + + +class Oval extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerOval'; + } + + buildShapes() { + this.addShape((new Circle()).setName('track')); + this.addShape((new Arc()).setName('arc')); + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var lineWidth = Math.ceil(radius / 25); + var maxRadius = radius - (lineWidth / 2); + + this.getShape('track') + .lineStyle(lineWidth, this.color, 0.5) + .setRadius(maxRadius) + .setCenterPosition(centerX, centerY); + + var startAngle = this.value * 360; + var endAngle = startAngle + 60; + this.getShape('arc') + .lineStyle(lineWidth, this.color, 1) + .setRadius(maxRadius) + .setCenterPosition(centerX, centerY) + .setAngle(startAngle, endAngle); + + } +} + +export default Oval; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/pie/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/pie/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7adcad880bd5db601ebbd78a400339513098236 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/pie/Factory.d.ts @@ -0,0 +1,6 @@ +import Pie from './Pie'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Pie; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/pie/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/pie/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..a5861a1d60a723f7ab999022b3216880972d892c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/pie/Factory.js @@ -0,0 +1,13 @@ +import Pie from './Pie.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('pie', function (config) { + var gameObject = new Pie(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Pie', Pie); + +export default Pie; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/pie/Pie.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/pie/Pie.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3cc4591ead8c6a9d9c178e8449dd84cb7d631572 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/pie/Pie.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Pie extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/pie/Pie.js b/ui/src/phaser3-rex-plugins/templates/spinner/pie/Pie.js new file mode 100644 index 0000000000000000000000000000000000000000..9a7fc283c563322f244ee00cdf8ac986c8688b88 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/pie/Pie.js @@ -0,0 +1,68 @@ +import Base from '../base/Base.js'; +import { Arc } from '../utils/Geoms.js'; + +const Linear = Phaser.Math.Linear; + +class Pie extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerPie'; + } + + buildShapes() { + for (var i = 0; i < 4; i++) { + var pie = (new Arc()).setPie(); + this.addShape(pie); + + pie.setData('speed', Linear(180, 360, Math.random())); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + + var deltaValue; + if (this.prevValue !== undefined) { + deltaValue = this.value - this.prevValue; + if (this.prevValue > this.value) { + deltaValue += 1; + } + } + + var shapes = this.getShapes(); + for (var i = 0, cnt = shapes.length; i < cnt; i++) { + var pie = shapes[i]; + var pieAlpha = (i + 1) / cnt; + + if (this.prevValue === undefined) { + var startAngle = (i / cnt) * 360; + var endAngle = startAngle + 90; + pie + .fillStyle(this.color, pieAlpha) + .setRadius(radius) + .setCenterPosition(centerX, centerY) + .setAngle(startAngle, endAngle) + .setData('angle', startAngle); + } else { + var startAngle = pie.getData('angle') + pie.getData('speed') * deltaValue; + startAngle = startAngle % 360; + var endAngle = startAngle + 90; + pie + .fillStyle(this.color, pieAlpha) + .setRadius(radius) + .setCenterPosition(centerX, centerY) + .setAngle(startAngle, endAngle) + .setData('angle', startAngle); + + } + + } + + this.prevValue = this.value; + + } +} + +export default Pie; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/puff/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/puff/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4fb5fe2cdf16c830681a037ec04fbd07e38c2094 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/puff/Factory.d.ts @@ -0,0 +1,6 @@ +import Puff from './Puff'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Puff; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/puff/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/puff/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..fc6c647eda3e594ee880fa1d557f5ea1b1ca9f5b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/puff/Factory.js @@ -0,0 +1,13 @@ +import Puff from './Puff.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('puff', function (config) { + var gameObject = new Puff(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Puff', Puff); + +export default Puff; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/puff/Puff.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/puff/Puff.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..dfe78f8463022a04291f0776ab05f5d20f6a20ba --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/puff/Puff.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Puff extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/puff/Puff.js b/ui/src/phaser3-rex-plugins/templates/spinner/puff/Puff.js new file mode 100644 index 0000000000000000000000000000000000000000..268eb96977d72caab29a350306bdde1d5273ecc1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/puff/Puff.js @@ -0,0 +1,31 @@ +import Base from '../base/Base.js'; +import { Circle } from '../utils/Geoms.js'; +import Yoyo from '../utils/Yoyo.js'; + + +class Puff extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerPuff'; + } + + buildShapes() { + this.addShape(new Circle()); + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var puffRadius = radius * this.value; + var lineWidth = Math.ceil(radius / 25); + var alpha = Yoyo(this.value); + + this.getShapes()[0] + .lineStyle(lineWidth, this.color, alpha) + .setRadius(puffRadius) + .setCenterPosition(centerX, centerY) + } +} + +export default Puff; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/radio/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/radio/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..37ead645989dc3f7b058f5920fc7e2e79d8405ff --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/radio/Factory.d.ts @@ -0,0 +1,6 @@ +import Radio from './Radio'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Radio; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/radio/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/radio/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..a6f52cb02f4632c401342ad938966af9f5d9fe34 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/radio/Factory.js @@ -0,0 +1,13 @@ +import Radio from './Radio.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('radio', function (config) { + var gameObject = new Radio(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Radio', Radio); + +export default Radio; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/radio/Radio.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/radio/Radio.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..68294654f42b0675b2073a5eee5a75a90f6e2e7e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/radio/Radio.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Radio extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/radio/Radio.js b/ui/src/phaser3-rex-plugins/templates/spinner/radio/Radio.js new file mode 100644 index 0000000000000000000000000000000000000000..af01a3584e9e5e330c2929b2dbc7b89875e21f8f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/radio/Radio.js @@ -0,0 +1,82 @@ +import Base from '../base/Base.js'; +import { Circle, Lines } from '../utils/Geoms.js'; +import Yoyo from '../utils/Yoyo.js'; + +const Linear = Phaser.Math.Linear; +const ExpoIn = Phaser.Math.Easing.Expo.In; + +class Radio extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerRadio'; + } + + buildShapes() { + this.addShape((new Circle()).setName('center')); + this.addShape((new Lines()).setName('arc0')); + this.addShape((new Lines()).setName('arc1')); + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var isSizeChanged = this.isSizeChanged; + + var centerRadius = (radius * 2) / 6; + var x = centerX - radius + centerRadius; + var y = centerY + radius - centerRadius; + + var shapes = this.getShapes(); + for (var i = 0, cnt = shapes.length; i < cnt; i++) { + var shape = shapes[i]; + + var t = (this.value + ((cnt - i) * 0.1)) % 1; + t = ExpoIn(Yoyo(t)); + + switch (shape.name) { + case 'center': + shape.fillStyle(this.color, Linear(0.25, 1, t)) + + if (isSizeChanged) { + shape + .setRadius(centerRadius) + .setCenterPosition(x, y); + } + break; + case 'arc0': + shape.fillStyle(this.color, Linear(0.25, 1, t)); + + if (isSizeChanged) { + var radius0 = centerRadius * 2, + radius1 = centerRadius * 3; + shape + .startAt(x, y - radius0) + .lineTo(x, y - radius1) + .setIterations(8).arc(x, y, radius1, 270, 360) + .lineTo(x + radius0, y) + .setIterations(6).arc(x, y, radius0, 360, 270, true) + .close(); + } + break; + case 'arc1': + shape.fillStyle(this.color, Linear(0.25, 1, t)); + + if (isSizeChanged) { + var radius0 = centerRadius * 4, + radius1 = centerRadius * 5; + shape + .startAt(x, y - radius0) + .lineTo(x, y - radius1) + .setIterations(8).arc(x, y, radius1, 270, 360) + .lineTo(x + radius0, y) + .setIterations(6).arc(x, y, radius0, 360, 270, true) + .close(); + } + break; + } + } + } +} + +export default Radio; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/rings/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/rings/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0c2572b6395e340f4577395e5870cca3f5ea11c5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/rings/Factory.d.ts @@ -0,0 +1,6 @@ +import Rings from './Rings'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Rings; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/rings/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/rings/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..93ffb4d3e8fbec62f5372fc2b9b3decbe46a94d2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/rings/Factory.js @@ -0,0 +1,13 @@ +import Rings from './Rings.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('rings', function (config) { + var gameObject = new Rings(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Rings', Rings); + +export default Rings; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/rings/Rings.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/rings/Rings.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..07d49107c172fe7fb69d24bd10b4615032b16217 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/rings/Rings.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Rings extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/rings/Rings.js b/ui/src/phaser3-rex-plugins/templates/spinner/rings/Rings.js new file mode 100644 index 0000000000000000000000000000000000000000..5a0707cf2e8306f37395a60b9d1cf719ad4d9c50 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/rings/Rings.js @@ -0,0 +1,38 @@ +import Base from '../base/Base.js'; +import { Circle } from '../utils/Geoms.js' +import Yoyo from '../utils/Yoyo.js'; + + +class Rings extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerRings'; + } + + buildShapes() { + for (var i = 0; i < 2; i++) { + this.addShape(new Circle()); + } + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var lineWidth = Math.ceil(radius / 25); + var maxRingRadius = radius - lineWidth; + + var shapes = this.getShapes(); + for (var i = 0, cnt = shapes.length; i < cnt; i++) { + var ring = shapes[i]; + var t = (this.value + (i / cnt)) % 1; + var alpha = Yoyo(t); + ring + .lineStyle(lineWidth, this.color, alpha) + .setRadius(t * maxRingRadius) + .setCenterPosition(centerX, centerY) + } + } +} + +export default Rings; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/spinner-components.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/spinner-components.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3ca2d056b688d512a66eb74af75ec20e637f8752 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/spinner-components.d.ts @@ -0,0 +1,39 @@ +import Audio from './audio/Audio'; +import Ball from './ball/Ball'; +import Bars from './bars/Bars'; +import Box from './box/Box'; +import Clock from './clock/Clock'; +import Cube from './cube/Cube'; +import Custom from './custom/Custom'; +import Dots from './dots/Dots'; +import Facebook from './facebook/Facebook'; +import Grid from './grid/Grid'; +import Los from './los/Los'; +import Orbit from './orbit/Orbit'; +import Oval from './oval/Oval'; +import Pie from './pie/Pie'; +import Puff from './puff/Puff'; +import Radio from './radio/Radio'; +import Rings from './rings/Rings'; +import Spinner from './spinner/Spinner'; + +export { + Audio, + Ball, + Bars, + Box, + Clock, + Cube, + Custom, + Dots, + Facebook, + Grid, + Los, + Orbit, + Oval, + Pie, + Puff, + Radio, + Rings, + Spinner +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/spinner-components.js b/ui/src/phaser3-rex-plugins/templates/spinner/spinner-components.js new file mode 100644 index 0000000000000000000000000000000000000000..f059f3eb560f8debddacfb5db161c0080274dcfa --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/spinner-components.js @@ -0,0 +1,39 @@ +import Audio from './audio/Audio.js'; +import Ball from './ball/Ball.js'; +import Bars from './bars/Bars.js'; +import Box from './box/Box.js'; +import Clock from './clock/Clock.js'; +import Cube from './cube/Cube.js'; +import Custom from './custom/Custom.js'; +import Dots from './dots/Dots.js'; +import Facebook from './facebook/Facebook.js'; +import Grid from './grid/Grid.js'; +import Los from './los/Los.js'; +import Orbit from './orbit/Orbit.js'; +import Oval from './oval/Oval.js'; +import Pie from './pie/Pie.js'; +import Puff from './puff/Puff.js'; +import Radio from './radio/Radio.js'; +import Rings from './rings/Rings.js'; +import Spinner from './spinner/Spinner.js'; + +export { + Audio, + Ball, + Bars, + Box, + Clock, + Cube, + Custom, + Dots, + Facebook, + Grid, + Los, + Orbit, + Oval, + Pie, + Puff, + Radio, + Rings, + Spinner +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/spinner-plugin.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/spinner-plugin.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c8a8f3bc193c719ddc408628c1e1df077b8870a3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/spinner-plugin.d.ts @@ -0,0 +1,87 @@ +import AudioFactory from './audio/Factory'; +import BallFactory from './ball/Factory'; +import BarsFactory from './bars/Factory'; +import BoxFactory from './box/Factory'; +import ClockFactory from './clock/Factory'; +import CubeFactory from './cube/Factory'; +import CustomFactory from './custom/Factory'; +import DotsFactory from './dots/Factory'; +import FacebookFactory from './facebook/Factory'; +import GridFactory from './grid/Factory'; +import LosFactory from './los/Factory'; +import OrbitFactory from './orbit/Factory'; +import OvalFactory from './oval/Factory'; +import PieFactory from './pie/Factory'; +import PuffFactory from './puff/Factory'; +import RadioFactory from './radio/Factory'; +import RingsFactory from './rings/Factory'; +import SpinnerFactory from './spinner/Factory'; + +export default SpinnerPlugins; + +declare class Factories { + audio: typeof AudioFactory; + ball: typeof BallFactory; + bars: typeof BarsFactory; + box: typeof BoxFactory; + clock: typeof ClockFactory; + cube: typeof CubeFactory; + custom: typeof CustomFactory; + dots: typeof DotsFactory; + facebook: typeof FacebookFactory; + grid: typeof GridFactory; + los: typeof LosFactory; + orbit: typeof OrbitFactory; + oval: typeof OvalFactory; + pie: typeof PieFactory; + puff: typeof PuffFactory; + radio: typeof RadioFactory; + rings: typeof RingsFactory; + spinner: typeof SpinnerFactory; +} + +declare class SpinnerPlugins { + constructor(scene: Phaser.Scene); + + add: Factories; +} + +import AudioClass from './audio/Audio'; +import BallClass from './ball/Ball'; +import BarsClass from './bars/Bars'; +import BoxClass from './box/Box'; +import ClockClass from './clock/Clock'; +import CubeClass from './cube/Cube'; +import CustomClass from './custom/Custom'; +import DotsClass from './dots/Dots'; +import FacebookClass from './facebook/Facebook'; +import GridClass from './grid/Grid'; +import LosClass from './los/Los'; +import OrbitClass from './orbit/Orbit'; +import OvalClass from './oval/Oval'; +import PieClass from './pie/Pie'; +import PuffClass from './puff/Puff'; +import RadioClass from './radio/Radio'; +import RingsClass from './rings/Rings'; +import SpinnerClass from './spinner/Spinner'; + +declare namespace SpinnerPlugins { + type Audio = AudioClass; + type Ball = BallClass; + type Bars = BarsClass + type Box = BoxClass; + type Clock = ClockClass; + type Cube = CubeClass; + type Custom = CustomClass; + type Dots = DotsClass; + type Facebook = FacebookClass; + type Grid = GridClass; + type Los = LosClass; + type Orbit = OrbitClass; + type Oval = OvalClass; + type Pie = PieClass; + type Puff = PuffClass; + type Radio = RadioClass; + type Rings = RingsClass; + type Spinner = SpinnerClass; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/spinner-plugin.js b/ui/src/phaser3-rex-plugins/templates/spinner/spinner-plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..df5d2cc999cceb328457f68e14f36a0742c04eb3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/spinner-plugin.js @@ -0,0 +1,35 @@ +import ObjectFactory from './ObjectFactory.js'; + +import AudioFactory from './audio/Factory.js'; +import BallFactory from './ball/Factory.js'; +import BarsFactory from './bars/Factory.js'; +import BoxFactory from './box/Factory.js'; +import ClockFactory from './clock/Factory.js'; +import CubeFactory from './cube/Factory.js'; +import CustomFactory from './custom/Factory.js'; +import DotsFactory from './dots/Factory.js'; +import FacebookFactory from './facebook/Factory.js'; +import GridFactory from './grid/Factory.js'; +import LosFactory from './los/Factory.js'; +import OrbitFactory from './orbit/Factory.js'; +import OvalFactory from './oval/Factory.js'; +import PieFactory from './pie/Factory.js'; +import PuffFactory from './puff/Factory.js'; +import RadioFactory from './radio/Factory.js'; +import RingsFactory from './rings/Factory.js'; +import SpinnerFactory from './spinner/Factory.js'; + + +class SpinnerPlugin extends Phaser.Plugins.ScenePlugin { + constructor(scene, pluginManager) { + super(scene, pluginManager); + + this.add = new ObjectFactory(scene); + } + + start() { + var eventEmitter = this.scene.events; + eventEmitter.on('destroy', this.destroy, this); + } +} +export default SpinnerPlugin; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..73eac30cfdb18fe89aed3fc06a19ebb09909d734 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Factory.d.ts @@ -0,0 +1,6 @@ +import Spinner from './Spinner'; +import Base from '../base/Base'; + +export default function Factory( + config?: Base.IConfig +): Spinner; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Factory.js b/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..88b0621cd1ff3f8939eccec9dba8330ca499eea0 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Factory.js @@ -0,0 +1,13 @@ +import Spinner from './Spinner.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('spinner', function (config) { + var gameObject = new Spinner(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.Spinner.Spinner', Spinner); + +export default Spinner; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Spinner.d.ts b/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Spinner.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..22dfb7c559f16321cb373f77d0200c1d6201d848 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Spinner.d.ts @@ -0,0 +1,2 @@ +import Base from '../base/Base'; +export default class Spinner extends Base { } \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Spinner.js b/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Spinner.js new file mode 100644 index 0000000000000000000000000000000000000000..5227a4bd76d71bd9194cc5dee0b2c7d895f9f9f7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/spinner/Spinner.js @@ -0,0 +1,34 @@ +import Base from '../base/Base.js'; +import { Arc } from '../utils/Geoms.js' +import Yoyo from '../utils/Yoyo.js'; + +class Spinner extends Base { + constructor(scene, config) { + super(scene, config); + this.type = 'rexSpinnerSpinner'; + } + + buildShapes() { + this.addShape((new Arc()).setName('arc')); + } + + updateShapes() { + var centerX = this.centerX; + var centerY = this.centerY; + var radius = this.radius; + var lineWidth = Math.ceil(radius / 10); + var maxRadius = radius - lineWidth; + + var endAngle = this.value * 720; + var arcAngle = Yoyo(this.value) * 180; + var startAngle = endAngle - arcAngle; + this.getShape('arc') + .lineStyle(lineWidth, this.color, 1) + .setRadius(maxRadius) + .setCenterPosition(centerX, centerY) + .setAngle(startAngle + 315, endAngle + 315); + + } +} + +export default Spinner; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/utils/Geoms.js b/ui/src/phaser3-rex-plugins/templates/spinner/utils/Geoms.js new file mode 100644 index 0000000000000000000000000000000000000000..7bb21ff0af88259411094e12b3e0920d5c74d972 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/utils/Geoms.js @@ -0,0 +1,23 @@ +import { + Arc, + Circle, + Curve, + Ellipse, + Line, + Lines, + Rectangle, + RoundRectangle, + Triangle +} from '../../../plugins/gameobjects/shape/shapes/geoms'; + +export { + Arc, + Circle, + Curve, + Ellipse, + Line, + Lines, + Rectangle, + RoundRectangle, + Triangle +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/spinner/utils/Yoyo.js b/ui/src/phaser3-rex-plugins/templates/spinner/utils/Yoyo.js new file mode 100644 index 0000000000000000000000000000000000000000..7d1430b877a480359f744be55c9236d527ab5dfd --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/spinner/utils/Yoyo.js @@ -0,0 +1,2 @@ +import Yoyo from '../../../plugins/utils/math/Yoyo.js' +export default Yoyo; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/ObjectFactory.js b/ui/src/phaser3-rex-plugins/templates/ui/ObjectFactory.js new file mode 100644 index 0000000000000000000000000000000000000000..56a37cdc697266749a0c400fb94b2bf9c8bf3896 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/ObjectFactory.js @@ -0,0 +1,20 @@ +class ObjectFactory { + constructor(scene) { + this.scene = scene; + this.displayList = scene.sys.displayList; + this.updateList = scene.sys.updateList; + + scene.events.once('destroy', this.destroy, this); + } + + destroy() { + this.scene = null; + this.displayList = null; + this.updateList = null; + } + + static register(type, callback) { + ObjectFactory.prototype[type] = callback; + } +}; +export default ObjectFactory; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/AlphaMaskImage.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/AlphaMaskImage.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..892d49c9e59447c2f5ca8cca2d7d39f795a5c0df --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/AlphaMaskImage.d.ts @@ -0,0 +1,2 @@ +import AlphaMaskImage from '../../../plugins/alphamaskimage'; +export default AlphaMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/AlphaMaskImage.js b/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/AlphaMaskImage.js new file mode 100644 index 0000000000000000000000000000000000000000..7bfad1377a8e736d5f7f4dd2a39d403c68aa68db --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/AlphaMaskImage.js @@ -0,0 +1,2 @@ +import AlphaMaskImage from '../../../plugins/alphamaskimage.js'; +export default AlphaMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7c79ae1884116842e69ee7f18896ebf96ced35a5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/Factory.d.ts @@ -0,0 +1,7 @@ +import AlphaMaskImage from './AlphaMaskImage'; + +export default function ( + x?: number, y?: number, + key?: string, frame?: string, + config?: AlphaMaskImage.IConfig +): AlphaMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..a0df36403ee53a70343ee4199af9f1141e228f3e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/alphamaskimage/Factory.js @@ -0,0 +1,13 @@ +import AlphaMaskImage from './AlphaMaskImage.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('alphaMaskImage', function (x, y, key, frame, config) { + var gameObject = new AlphaMaskImage(this.scene, x, y, key, frame, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.AlphaMaskImage', AlphaMaskImage); + +export default AlphaMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/anchor/Anchor.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/anchor/Anchor.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..cffd99e192cb929c71d7fc3dfb54a69774b2f2ab --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/anchor/Anchor.d.ts @@ -0,0 +1,2 @@ +import Anchor from '../../../plugins/behaviors/anchor/Anchor'; +export default Anchor; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/anchor/Anchor.js b/ui/src/phaser3-rex-plugins/templates/ui/anchor/Anchor.js new file mode 100644 index 0000000000000000000000000000000000000000..664b937ad293e26ea0a32be9251637bd949e6857 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/anchor/Anchor.js @@ -0,0 +1,2 @@ +import Anchor from '../../../plugins/behaviors/anchor/Anchor.js'; +export default Anchor; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/anchor/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/anchor/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1d0955e69b2e994396aaad6fbf93545829691d0f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/anchor/Factory.d.ts @@ -0,0 +1,7 @@ +// import * as Phaser from 'phaser'; +import Anchor from "./Anchor"; + +export default function ( + gameObject: Phaser.GameObjects.GameObject, + config?: Anchor.IConfig +): Anchor; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/anchor/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/anchor/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..87311e1d1036e0a6ef13b482cc5d17b34945e778 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/anchor/Factory.js @@ -0,0 +1,11 @@ +import Anchor from "./Anchor.js"; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('anchor', function (gameObject, config) { + return new Anchor(gameObject, config); +}); + +SetValue(window, 'RexPlugins.UI.Anchor', Anchor); + +export default Anchor; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/BadgeLabel.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/BadgeLabel.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a63bf75bc550c3df5d69bfe5fdafa745b276da26 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/BadgeLabel.d.ts @@ -0,0 +1,30 @@ +// import * as Phaser from 'phaser'; +import OverlapSizer from '../overlapsizer/OverlapSizer'; + +export default BadgeLabel; + +declare namespace BadgeLabel { + + interface IConfig extends OverlapSizer.IConfig { + background?: Phaser.GameObjects.GameObject, + main?: Phaser.GameObjects.GameObject, + + leftTop?: Phaser.GameObjects.GameObject, + centerTop?: Phaser.GameObjects.GameObject, + rightTop?: Phaser.GameObjects.GameObject, + leftCenter?: Phaser.GameObjects.GameObject, + center?: Phaser.GameObjects.GameObject, + rightCenter?: Phaser.GameObjects.GameObject, + leftBottom?: Phaser.GameObjects.GameObject, + centerBottom?: Phaser.GameObjects.GameObject, + rightBottom?: Phaser.GameObjects.GameObject, + } +} + +declare class BadgeLabel extends OverlapSizer { + + constructor( + scene: Phaser.Scene, + config?: BadgeLabel.IConfig + ); +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/BadgeLabel.js b/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/BadgeLabel.js new file mode 100644 index 0000000000000000000000000000000000000000..fdbb2bbddb07c115c020040c7be6cad1ec4973e4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/BadgeLabel.js @@ -0,0 +1,49 @@ +import OverlapSizer from '../overlapsizer/OverlapSizer.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; +const BadgeKeys = { + leftTop: 'left-top', centerTop: 'center-top', rightTop: 'right-top', + leftCenter: 'left-center', center: 'center', rightCenter: 'right-center', + leftBottom: 'left-bottom', centerBottom: 'center-bottom', rightBottom: 'right-bottom' +} + +class Badge extends OverlapSizer { + constructor(scene, config) { + // Create sizer + super(scene, config); + this.type = 'rexBadge'; + + // Add elements + var background = GetValue(config, 'background', undefined); + if (background) { + this.addBackground(background); + } + this.addChildrenMap('background', background); + + // Base item + var main = GetValue(config, 'main', undefined); + if (main) { + this.add(main, { + key: 'main', + align: 'center', + expand: false, + }) + } + this.addChildrenMap('main', main); + + // Badges + for (var key in BadgeKeys) { + var badge = GetValue(config, key, undefined); + if (badge) { + this.add(badge, { + key: key, + align: BadgeKeys[key], + expand: false, + }) + this.addChildrenMap(key, badge); + } + } + } +} + +export default Badge; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..05a39fbaa32a7bbf5c1bbc0243372ea8ef40c9a1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/Factory.d.ts @@ -0,0 +1,5 @@ +import BadgeLabel from './BadgeLabel'; + +export default function ( + config?: BadgeLabel.IConfig +): BadgeLabel; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..1e182ab94fb869fc3961f59ea1288f5a0555fe78 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/badgelabel/Factory.js @@ -0,0 +1,13 @@ +import BadgeLabel from './BadgeLabel.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('badgeLabel', function (config) { + var gameObject = new BadgeLabel(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.BadgeLabel', BadgeLabel); + +export default BadgeLabel; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/AddChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/AddChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..c487e69bfa40464df25aebde554cba6f22318241 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/AddChildMethods.js @@ -0,0 +1,37 @@ +import GetBoundsConfig from '../utils/GetBoundsConfig.js'; +import AddChild from './utils/AddChild.js'; + +export default { + addBackground(gameObject, paddingConfig, childKey) { + if (this.backgroundChildren === undefined) { + this.backgroundChildren = []; + } + + if (typeof (paddingConfig) === 'string') { + childKey = paddingConfig; + paddingConfig = undefined; + } + + if (paddingConfig === undefined) { + paddingConfig = 0; + } + + AddChild.call(this, gameObject); + this.backgroundChildren.push(gameObject); + + var config = this.getSizerConfig(gameObject); + config.padding = GetBoundsConfig(paddingConfig); + + if (childKey !== undefined) { + this.addChildrenMap(childKey, gameObject) + } + return this; + }, + + isBackground(gameObject) { + if (this.backgroundChildren === undefined) { + return false; + } + return (this.backgroundChildren.indexOf(gameObject) !== -1); + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/AddChildrenMap.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/AddChildrenMap.js new file mode 100644 index 0000000000000000000000000000000000000000..2a234643e1ea5779a769871b2e6929928207ade5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/AddChildrenMap.js @@ -0,0 +1,6 @@ +var AddChildrenMap = function (key, gameObject) { + this.childrenMap[key] = gameObject; + return this; +} + +export default AddChildrenMap; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BaseSizer.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BaseSizer.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b773fbe4b06b99c4c7d1c354d392031ad794c7f4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BaseSizer.d.ts @@ -0,0 +1,739 @@ +// import * as Phaser from 'phaser'; +import ContainerLite from '../../../plugins/containerlite.js'; +import Anchor from '../anchor/Anchor'; +import Click from '../click/Click'; +import ClickOutside from '../clickoutside/ClickOutside'; +import InTouching from '../intouching/InTouching'; +import SetChildrenInteractive from '../utils/setchildreninteractive/SetChildrenInteractive'; +import { ModalBehavoir } from '../modal/Modal'; + +export default BaseSizer; + +declare namespace BaseSizer { + type AlignTypes = number | 'center' | 'left' | 'right' | 'top' | 'bottom' | + 'left-top' | 'left-center' | 'left-bottom' | + 'center-top' | 'center-center' | 'center-bottom' | + 'right-top' | 'right-center' | 'right-bottom'; + + type PaddingTypes = number | + { + left?: number, + right?: number, + top?: number, + bottom?: number + }; + + interface IConfig { + space?: { + left?: number, right?: number, top?: number, bottom?: number, + }, + + anchor?: Anchor.IConfig, + + name?: string, + + enableLayer?: boolean, + + draggable?: boolean | string | Phaser.GameObjects.GameObject, + + sizerEvents?: boolean, + } + + type PrevState = { + x: number, + y: number, + width: number, height: number, + displayWidth: number, displayHeight: number, + scaleX: number, scaleY: number + } + + type OnModalCloseCallbackType = ( + data: Object + ) => void; + +} + +declare class BaseSizer extends ContainerLite { + isRexSizer: true; + + space: { [name: string]: number }; + + constructor( + scene: Phaser.Scene, + x?: number, y?: number, + minWidth?: number, minHeight?: number, + config?: BaseSizer.IConfig + ); + + setMinSize(minWidth: number, minHeight: number): this; + + setMinWidth(minWidth: number): this; + + setMinHeight(minHeight: number): this; + + setDirty(dirty?: boolean): this; + + setSizerEventsEnable(enable?: boolean): this; + sizerEventsEnable: boolean; + + left: number; + + alignLeft(value: number): this; + + right: number; + + alignRight(value: number): this; + + centerX: number; + + alignCenterX(value: number): this; + + top: number; + + alignTop(value: number): this; + + bottom: number; + + alignBottom(value: number): this; + + centerY: number; + + alignCenterY(value: number): this; + + pushIntoBounds( + bounds?: Phaser.Geom.Rectangle | { left?: number, right?: number, top?: number, bottom?: number } + ): this; + + readonly innerLeft: number; + + readonly innerRight: number; + + readonly innerTop: number; + + readonly innerBottom: number; + + readonly innerWidth: number; + + readonly innerHeight: number; + + readonly minInnerWidth: number; + + readonly minInnerHeight: number; + + addBackground( + gameObject: Phaser.GameObjects.GameObject, + padding?: BaseSizer.PaddingTypes, + childKey?: string + ): this; + + isBackground( + gameObject: Phaser.GameObjects.GameObject + ): boolean; + + layout(): this; + + drawBounds( + graphics: Phaser.GameObjects.Graphics, + color?: number + ): this; + + drawBounds( + graphics: Phaser.GameObjects.Graphics, + config?: { + color?: number, + lineWidth?: number, + name?: boolean | + { + createTextCallback: (scene: Phaser.Scene) => Phaser.GameObjects.GameObject, + createTextCallbackScope?: object, + align?: BaseSizer.AlignTypes + } + } + ): this; + + childrenMap: { + [key: string]: + Phaser.GameObjects.GameObject + }; + addChildrenMap( + key: string, + gameObject: Phaser.GameObjects.GameObject + ): this; + + removeChildrenMap(key: string): this; + removeChildrenMap(gameObject: Phaser.GameObjects.GameObject): this; + + getElement( + name: string, + recursive?: boolean + ): Phaser.GameObjects.GameObject | + Phaser.GameObjects.GameObject[] | + { [name: string]: Phaser.GameObjects.GameObject } | + null; + + getParentSizer( + name?: string + ): BaseSizer | null; + + getParentSizer( + gameObject?: Phaser.GameObjects.GameObject, + name?: string + ): BaseSizer | null; + + getTopmostSizer( + gameObject?: Phaser.GameObjects.GameObject + ): BaseSizer | null; + + getSizerConfig( + gameObject?: Phaser.GameObjects.GameObject + ): { [name: string]: any }; + + getChildPrevState( + gameObject: Phaser.GameObjects.GameObject + ): BaseSizer.PrevState; + + isInTouching(): boolean; + + isInTouching( + pointer: Phaser.Input.Pointer, + gameObject?: Phaser.GameObjects.GameObject | string + ): boolean; + + isInTouching( + gameObject?: Phaser.GameObjects.GameObject | string + ): boolean; + + + moveFrom( + duration: number, + x: number, + y: number, + ease?: string + ): this; + + moveFrom( + config: { + x: number, + y: number, + speed?: number, + duration?: number, + ease?: string, + } + ): this; + + moveFromPromise( + duration: number, + x: number, + y: number, + ease?: string + ): Promise; + + moveFromPromise( + config: { + x: number, + y: number, + speed?: number, + duration?: number, + ease?: string, + } + ): Promise; + + moveFromDestroy( + duration: number, + x: number, + y: number, + ease?: string + ): this; + + moveFromDestroy( + config: { + x: number, + y: number, + speed?: number, + duration?: number, + ease?: string, + } + ): this; + + moveFromDestroyPromise( + duration: number, + x: number, + y: number, + ease?: string + ): Promise; + + moveFromDestroyPromise( + config: { + x: number, + y: number, + speed?: number, + duration?: number, + ease?: string, + } + ): Promise; + + moveTo( + duration: number, + x: number, + y: number, + ease?: string + ): this; + + moveTo( + config: { + x: number, + y: number, + speed?: number, + duration?: number, + ease?: string, + } + ): this; + + moveToPromise( + duration: number, + x: number, + y: number, + ease?: string + ): Promise; + + moveToPromise( + config: { + x: number, + y: number, + speed?: number, + duration?: number, + ease?: string, + } + ): Promise; + + moveToDestroy( + duration: number, + x: number, + y: number, + ease?: string + ): this; + + moveToDestroy( + config: { + x: number, + y: number, + speed?: number, + duration?: number, + ease?: string, + } + ): this; + + moveToDestroyPromise( + duration: number, + x: number, + y: number, + ease?: string + ): Promise; + + moveToDestroyPromise( + config: { + x: number, + y: number, + speed?: number, + duration?: number, + ease?: string, + } + ): Promise; + + moveStop(toEnd?: boolean): this; + + fadeIn( + duration: number, + alpha?: number + ): this; + + fadeInPromise( + duration: number, + alpha?: number + ): Promise; + + fadeOutDestroy( + duration: number + ): this; + + fadeOutDestroyPromise( + duration: number + ): Promise; + + fadeOut( + duration: number + ): this; + + fadeOutPromise( + duration: number + ): Promise; + + popUp( + duration: number, + orientation?: 0 | 1 | 'x' | 'y', + ease?: string + ): this; + + popUpPromise( + duration: number, + orientation?: 0 | 1 | 'x' | 'y', + ease?: string + ): Promise; + + scaleDownDestroy( + duration: number, + orientation?: 0 | 1 | 'x' | 'y', + ease?: string + ): this; + + scaleDownDestroyPromise( + duration: number, + orientation?: 0 | 1 | 'x' | 'y', + ease?: string + ): Promise; + + scaleDown( + duration: number, + orientation?: 0 | 1 | 'x' | 'y', + ease?: string + ): this; + + scaleDownPromise( + duration: number, + orientation?: 0 | 1 | 'x' | 'y', + ease?: string + ): Promise; + + scaleYoyo( + duration: number, + peakValue?: number, + repeat?: number, + orientation?: 0 | 1 | 'x' | 'y', + ease?: string + ): this; + + scaleYoyoPromise( + duration: number, + peakValue?: number, + repeat?: number, + orientation?: 0 | 1 | 'x' | 'y', + ease?: string + ): Promise; + + shake( + duration?: number, + magnitude?: number, + magnitudeMode?: 0 | 1 | 'constant' | 'decay' + ): this; + + shakePromise( + duration?: number, + magnitude?: number, + magnitudeMode?: 0 | 1 | 'constant' | 'decay' + ): Promise; + + easeDataTo( + key: string, + value: number, + duration?: number, + ease?: string + ): this; + + easeDataTo( + config: { + key: string, + value: number, + duration?: number, + ease?: string, + speed?: number + } + ): this; + + easeDataToPromise( + key: string, + value: number, + duration?: number, + ease?: string + ): Promise; + + easeDataToPromise( + config: { + key: string, + value: number, + duration?: number, + ease?: string, + speed?: number + } + ): Promise; + + stopEaseData( + key: string, + toEnd?: boolean + ): this; + + stopAllEaseData( + toEnd?: boolean + ): this; + + setAnchor(config: { + left?: string, right?: string, centerX?: string, x?: string, + top?: string, bottom?: string, centerY?: string, y?: string + }): this; + + setDraggable( + senser: boolean | string | Phaser.GameObjects.GameObject, + draggable?: boolean + ): this; + + onClick( + callback: ( + click: Click, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer, + event: Phaser.Types.Input.EventData + ) => void, + scope?: object, + config?: Click.IConfig + ): this; + + + onClick( + gameObject: Phaser.GameObjects.GameObject, + callback: ( + click: Click, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer, + event: Phaser.Types.Input.EventData + ) => void, + scope?: object, + config?: Click.IConfig + ): this; + + offClick( + callback: Function, + scope?: object + ): this; + + offClick( + gameObject: Phaser.GameObjects.GameObject, + callback: Function, + scope?: object + ): this; + + enableClick(enabled?: boolean): this; + + enableClick( + gameObject: Phaser.GameObjects.GameObject, + enabled?: boolean + ): this; + + disableClick(): this; + + disableClick(gameObject: Phaser.GameObjects.GameObject): this; + + onClickOutside( + callback: ( + clickOutside: ClickOutside, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer + ) => void, + scope?: object, + config?: ClickOutside.IConfig + ): this; + + onClickOutside( + gameObject: Phaser.GameObjects.GameObject, + callback: ( + clickOutside: ClickOutside, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer + ) => void, + scope?: object, + config?: ClickOutside.IConfig + ): this; + + offClickOutside( + callback: Function, + scope?: object + ): this; + + offClickOutside( + gameObject: Phaser.GameObjects.GameObject, + callback: Function, + scope?: object + ): this; + + + enableClickOutside(enabled?: boolean): this; + + enableClickOutside( + gameObject: Phaser.GameObjects.GameObject, + enabled?: boolean + ): this; + + disableClickOutside(): this; + + disableClickOutside(gameObject: Phaser.GameObjects.GameObject): this; + + isPointerInBounds(): boolean; + isPointerInBounds(gameObject: Phaser.GameObjects.GameObject): boolean; + isPointerInBounds(name: string): boolean; + + onTouching( + callback: ( + inTouch: InTouching, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer, + ) => void, + scope?: object, + config?: InTouching.IConfig + ): this; + + onTouching( + gameObject: Phaser.GameObjects.GameObject, + callback: ( + inTouch: InTouching, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer, + ) => void, + scope?: object, + config?: InTouching.IConfig + ): this; + + offTouching( + callback: Function, + scope?: object + ): this; + + offTouching( + gameObject: Phaser.GameObjects.GameObject, + callback: Function, + scope?: object + ): this; + + onTouchingEnd( + callback: ( + inTouch: InTouching, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer, + ) => void, + scope?: object, + config?: InTouching.IConfig + ): this; + + onTouchingEnd( + gameObject: Phaser.GameObjects.GameObject, + callback: ( + inTouch: InTouching, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer, + ) => void, + scope?: object, + config?: InTouching.IConfig + ): this; + + offTouchingEnd( + callback: Function, + scope?: object + ): this; + + offTouchingEnd( + gameObject: Phaser.GameObjects.GameObject, + callback: Function, + scope?: object + ): this; + + enableTouching(enable?: boolean): this; + + enableTouching( + gameObject: Phaser.GameObjects.GameObject, + enable?: boolean + ): this; + + disableTouching(): this; + + disableTouching(gameObject: Phaser.GameObjects.GameObject): this; + + setChildrenInteractive( + config: SetChildrenInteractive.IConfig + ): this; + + show( + gameObject?: Phaser.GameObjects.GameObject + ): this; + + hide( + gameObject?: Phaser.GameObjects.GameObject + ): this; + + isShow( + gameObject: Phaser.GameObjects.GameObject + ): boolean; + + onCreateModalBehavior: (self: this) => void; + + modal( + config?: ModalBehavoir.IConfig, + onClose?: BaseSizer.OnModalCloseCallbackType + ): this; + + modal( + onClose?: BaseSizer.OnModalCloseCallbackType + ): this; + + modalPromise( + config?: ModalBehavoir.IConfig + ): Promise; + + modalClose(closeEventData?: Object): this; + + broadcastEvent( + event: string, + ...args: any[] + ): this; + + getShownChildren( + out?: Phaser.GameObjects.GameObject[] + ): Phaser.GameObjects.GameObject[]; + + getAllShownChildren( + out?: Phaser.GameObjects.GameObject[] + ): Phaser.GameObjects.GameObject[]; + + getInnerPadding( + key?: string + ): number | { left: number, right: number, top: number, bottom: number }; + + setInnerPadding( + key: string | number | { left?: number, right?: number, top?: number, bottom?: number }, + value?: number + ): this; + + getOutterPadding( + key?: string + ): number | { left: number, right: number, top: number, bottom: number }; + + setOuterPadding( + key: string | number | { left?: number, right?: number, top?: number, bottom?: number }, + value?: number + ): this; + + getChildOutterPadding( + child: string | Phaser.GameObjects.GameObject, + key?: string + ): number | { left: number, right: number, top: number, bottom: number }; + + setChildOuterPadding( + child: string | Phaser.GameObjects.GameObject, + key: string | number | { left?: number, right?: number, top?: number, bottom?: number }, + value?: number + ): this; + + pointToChild( + x: number, + y: number, + preTest?: (gameObject: Phaser.GameObjects.GameObject, x: number, y: number) => boolean, + postTest?: (gameObject: Phaser.GameObjects.GameObject, x: number, y: number) => boolean, + children?: Phaser.GameObjects.GameObject[] + ): Phaser.GameObjects.GameObject; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BaseSizer.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BaseSizer.js new file mode 100644 index 0000000000000000000000000000000000000000..7b422f11d95974bf0add5f1824d99d8ae319f459 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BaseSizer.js @@ -0,0 +1,241 @@ +import Container from '../container/Container.js'; +import Methods from './Methods.js'; +import { GetDisplayWidth, GetDisplayHeight } from '../../../plugins/utils/size/GetDisplaySize.js'; +import Clear from '../../../plugins/utils/object/Clear.js' + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Base extends Container { + constructor(scene, x, y, minWidth, minHeight, config) { + super(scene, x, y, 1, 1); + + this.isRexSizer = true; + this.setMinSize(minWidth, minHeight); + this.setName(GetValue(config, 'name', '')); + this.rexSizer = {}; + this.space = {}; + this.backgroundChildren = undefined; + this.sizerChildren = undefined; // [] or {} + this.childrenMap = {}; + this.layoutedChildren = undefined; + + var anchorConfig = GetValue(config, 'anchor', undefined); + if (anchorConfig) { + this.setAnchor(anchorConfig); + } + + this.setInnerPadding(GetValue(config, 'space', 0)); + + var draggable = GetValue(config, 'draggable', false); + if (draggable) { + this.setDraggable(draggable); + } + + this.setSizerEventsEnable(GetValue(config, 'sizerEvents', false)); + this.setDirty(true); + + if (GetValue(config, 'enableLayer', false)) { + this.enableLayer(); + } + } + + destroy(fromScene) { + // This Game Object has already been destroyed + if (!this.scene || this.ignoreDestroy) { + return; + } + + if (fromScene) { + // In this case, children will be cleared and destroy in scene level + var sizers = this.getAllChildrenSizers([this]); + for (var i = 0, cnt = sizers.length; i < cnt; i++) { + sizers[i].sizerEventsEnable = false; + } + } + + super.destroy(fromScene); + + Clear(this.backgroundChildren); + Clear(this.sizerChildren); + this.childrenMap = undefined; + this.space = undefined; + this.rexSizer = undefined; + this.layoutedChildren = undefined; + } + + setMinSize(minWidth, minHeight) { + this.setMinWidth(minWidth).setMinHeight(minHeight); + return this; + } + + setMinWidth(minWidth) { + if (minWidth == null) { + minWidth = 0; + } + this.minWidth = minWidth; + return this; + } + + setMinHeight(minHeight) { + if (minHeight == null) { + minHeight = 0; + } + this.minHeight = minHeight; + return this; + } + + setDirty(dirty) { + if (dirty === undefined) { + dirty = true; + } + this.dirty = dirty; + return this; + } + + setSizerEventsEnable(enable) { + if (enable === undefined) { + enable = true; + } + + this.sizerEventsEnable = enable; + return this; + } + + get ignoreLayout() { + // Skip hidden or !dirty sizer + return this.rexSizer.hidden || (!this.dirty); + } + + get childrenWidth() { + if (this._childrenWidth === undefined) { + this._childrenWidth = this.getChildrenWidth(); + } + return this._childrenWidth; + } + + get childrenHeight() { + if (this._childrenHeight === undefined) { + this._childrenHeight = this.getChildrenHeight(); + } + return this._childrenHeight; + } + + get left() { + return this.x - (GetDisplayWidth(this) * this.originX); + } + + set left(value) { + this.x += (value - this.left); + } + + alignLeft(value) { + this.left = value; + return this; + } + + get right() { + return this.left + GetDisplayWidth(this); + } + + set right(value) { + this.x += (value - this.right); + } + + alignRight(value) { + this.right = value; + return this; + } + + get centerX() { + return this.left + (GetDisplayWidth(this) / 2); + } + + set centerX(value) { + this.x += (value - this.centerX); + } + + alignCenterX(value) { + this.centerX = value; + return this; + } + + get top() { + return this.y - (GetDisplayHeight(this) * this.originY); + } + + set top(value) { + this.y += (value - this.top); + } + + alignTop(value) { + this.top = value; + return this; + } + + get bottom() { + return this.top + GetDisplayHeight(this); + } + + set bottom(value) { + this.y += (value - this.bottom); + } + + alignBottom(value) { + this.bottom = value; + return this; + } + + get centerY() { + return this.top + (GetDisplayHeight(this) / 2); + } + + set centerY(value) { + this.y += (value - this.centerY); + } + + alignCenterY(value) { + this.centerY = value; + return this; + } + + get innerLeft() { + return this.left + this.space.left; + } + + get innerRight() { + return this.right - this.space.right; + } + + get innerTop() { + return this.top + this.space.top; + } + + get innerBottom() { + return this.bottom - this.space.bottom; + } + + get innerWidth() { + return this.width - this.space.left - this.space.right; + } + + get innerHeight() { + return this.height - this.space.top - this.space.bottom; + } + + get minInnerWidth() { + var result = this.minWidth - this.space.left - this.space.right; + return Math.max(result, 0); + } + + get minInnerHeight() { + var result = this.minHeight - this.space.top - this.space.bottom; + return Math.max(result, 0); + } +} + +Object.assign( + Base.prototype, + Methods +); + +export default Base; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BroadcastEvent.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BroadcastEvent.js new file mode 100644 index 0000000000000000000000000000000000000000..1d9008e99a0213b0546cd72b326dcf46015329a9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/BroadcastEvent.js @@ -0,0 +1,10 @@ +var BroadcastEvent = function () { + var gameObjects = this.getAllChildren([this]); + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + var gameObject = gameObjects[i]; + gameObject.emit.apply(gameObject, arguments); + } + return this; +} + +export default BroadcastEvent; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ClickMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ClickMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..7691bbebba8f3f93a4360318fb8827c382ef3744 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ClickMethods.js @@ -0,0 +1,65 @@ +import Click from '../click/Click.js'; + +export default { + onClick(gameObject, callback, scope, config) { + if (!gameObject) { + return this; + } + + if (typeof (gameObject) === 'function') { + config = scope; + scope = callback; + callback = gameObject; + gameObject = this; + } + + if (gameObject._click === undefined) { + gameObject._click = new Click(gameObject, config); + } + gameObject._click.on('click', callback, scope); + + return this; + }, + + offClick(gameObject, callback, scope) { + if (typeof (gameObject) === 'function') { + scope = callback; + callback = gameObject; + gameObject = this; + } + + if (gameObject._click === undefined) { + return this; + } + gameObject._click.off('click', callback, scope); + + return this; + }, + + enableClick(gameObject, enabled) { + if (gameObject && typeof (gameObject) !== 'object') { + enabled = gameObject; + gameObject = this; + } + + if (gameObject._click === undefined) { + return this; + } + + gameObject._click.setEnable(enabled); + return this; + }, + + disableClick(gameObject) { + if (gameObject && typeof (gameObject) !== 'object') { + gameObject = this; + } + + if (gameObject._click === undefined) { + return this; + } + gameObject._click.setEnable(false); + + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ClickOutsideMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ClickOutsideMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..ef5d6d4cdf6f493153ce199228a4d61570ee72b4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ClickOutsideMethods.js @@ -0,0 +1,65 @@ +import ClickOutside from '../clickoutside/ClickOutside.js'; + +export default { + onClickOutside(gameObject, callback, scope, config) { + if (!gameObject) { + return this; + } + + if (typeof (gameObject) === 'function') { + config = scope; + scope = callback; + callback = gameObject; + gameObject = this; + } + + if (gameObject._clickOutside === undefined) { + gameObject._clickOutside = new ClickOutside(gameObject, config); + } + gameObject._clickOutside.on('clickoutside', callback, scope); + + return this; + }, + + offClickOutside(gameObject, callback, scope) { + if (typeof (gameObject) === 'function') { + scope = callback; + callback = gameObject; + gameObject = this; + } + + if (gameObject._clickOutside === undefined) { + return this; + } + gameObject._clickOutside.off('clickoutside', callback, scope); + + return this; + }, + + enableClickOutside(gameObject, enabled) { + if (gameObject && typeof (gameObject) !== 'object') { + enabled = gameObject; + gameObject = this; + } + + if (gameObject._clickOutside === undefined) { + return this; + } + gameObject._clickOutside.setEnable(enabled); + + return this; + }, + + disableClickOutside(gameObject) { + if (gameObject && typeof (gameObject) !== 'object') { + gameObject = this; + } + + if (gameObject._clickOutside === undefined) { + return this; + } + gameObject._clickOutside.setEnable(false); + + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/DrawBounds.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/DrawBounds.js new file mode 100644 index 0000000000000000000000000000000000000000..159a8d12d689dad8878bf9ef23d344d6af9de8d2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/DrawBounds.js @@ -0,0 +1,90 @@ +import ALIGNMODE from '../utils/AlignConst.js'; +import AlignIn from '../../../plugins/utils/actions/AlignIn.js'; +import { GetBounds } from '../../../plugins/utils/bounds/GetBounds.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; +const Group = Phaser.GameObjects.Group; + +var DrawBounds = function (graphics, config) { + var scene = graphics.scene; + + var color, lineWidth; + var createTextCallback, createTextCallbackScope, textAlign; + if (typeof (config) === 'number') { + color = config; + } else { + color = GetValue(config, 'color'); + lineWidth = GetValue(config, 'lineWidth'); + var nameTextConfig = GetValue(config, 'name', false); + if (nameTextConfig) { + createTextCallback = GetValue(nameTextConfig, 'createTextCallback', DefaultCreateTextCallback); + createTextCallbackScope = GetValue(nameTextConfig, 'createTextCallbackScope', undefined); + textAlign = GetValue(nameTextConfig, 'align', 'left-top'); + if (typeof (textAlign) === 'string') { + textAlign = ALIGNMODE[textAlign]; + } + } + } + + if (color === undefined) { + color = 0xffffff; + } + if (lineWidth === undefined) { + lineWidth = 1; + } + + if (createTextCallback && !graphics.children) { + graphics.children = new Group(scene); + graphics.once('destroy', function (graphics, fromScene) { + graphics.children.destroy(!fromScene); + graphics.children = undefined; + }) + var graphicsClear = graphics.clear.bind(graphics); + graphics.clear = function () { + graphicsClear(); + graphics.children.clear(false, true); + } + } + + var children = this.getAllShownChildren([this]), child; + var nameText; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (child.getBounds || + ((child.width !== undefined) && (child.height !== undefined)) + ) { + GlobRect = GetBounds(child, GlobRect); + } else { + continue; + } + + if (color != null) { + graphics + .lineStyle(lineWidth, color) + .strokeRectShape(GlobRect); + } + + if (child.name && createTextCallback) { + if (createTextCallbackScope) { + nameText = createTextCallback.call(createTextCallbackScope, scene); + } else { + nameText = createTextCallback(scene); + } + if (nameText) { + nameText.setText(child.name); + graphics.children.add(nameText); + + AlignIn(nameText, GlobRect.x, GlobRect.y, GlobRect.width, GlobRect.height, textAlign); + } + } + } + return this; +} + +var DefaultCreateTextCallback = function (scene, child, childBoundsRect) { + return scene.add.text(0, 0, ''); +} + +var GlobRect = undefined; + +export default DrawBounds; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/EaseDataMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/EaseDataMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..b71567abae8a4e4a0a455b43a59265ee55f9e618 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/EaseDataMethods.js @@ -0,0 +1,44 @@ +import { EaseData } from '../../../plugins/easedata.js'; +import { WaitEvent } from '../utils/WaitEvent.js'; + +var OnInitEaseData = function (gameObject, easeData) { + // Route 'complete' of easeData to gameObject + easeData.on('complete', function (key) { + gameObject.emit(`easedata.${key}.complete`, gameObject); + gameObject.emit('easedata.complete', key, gameObject); + }) +} + +export default { + easeDataTo(key, value, duration, ease) { + if (!this._easeData) { + this._easeData = new EaseData(this); + OnInitEaseData(this, this._easeData); + } + this._easeData.easeTo(key, value, duration, ease); + return this; + }, + + easeDataToPromise(key, value, duration, ease) { + this.easeDataTo(key, value, duration, ease); + return WaitEvent(this._easeData, `complete-${key}`); + }, + + stopEaseData(key, toEnd) { + if (!this._easeData) { + return this; + } + + this._easeData.stopEase(key, toEnd); + return this; + }, + + stopAllEaseData(toEnd) { + if (!this._easeData) { + return this; + } + + this._easeData.stopAll(toEnd); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/EaseMoveMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/EaseMoveMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..04cbc921187b2c8ce026b590031135a28d00e937 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/EaseMoveMethods.js @@ -0,0 +1,120 @@ +import { EaseMoveTo, EaseMoveFrom } from '../easemove/EaseMove.js'; +import { WaitComplete } from '../utils/WaitEvent.js'; +import GetParentSizerMethods from './GetParentSizerMethods.js'; + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; +const DistanceBetween = Phaser.Math.Distance.Between; + +var OnInitEaseMove = function (gameObject, easeMove) { + // Route 'complete' of easeMove to gameObject + easeMove.completeEventName = undefined; + easeMove.on('complete', function () { + if (easeMove.completeEventName) { + gameObject.emit(easeMove.completeEventName, gameObject); + easeMove.completeEventName = undefined; + } + }) + + // Update local state + easeMove.on('update', function () { + var parent = GetParentSizerMethods.getParentSizer(gameObject); + if (parent) { + parent.resetChildPositionState(gameObject); + } + }) +} + +export default { + moveFrom(duration, x, y, ease, destroyMode) { + if (IsPlainObject(duration)) { + var config = duration; + x = config.x; + y = config.y; + if (config.hasOwnProperty('speed')) { + duration = (DistanceBetween(x, y, this.x, this.y) * 1000) / config.speed; + } else { + duration = config.duration; + } + + ease = config.ease; + } + + var isInit = (this._easeMove === undefined); + + this._easeMove = EaseMoveFrom(this, duration, x, y, ease, destroyMode, this._easeMove); + + if (isInit) { + OnInitEaseMove(this, this._easeMove); + } + + this._easeMove.completeEventName = 'movefrom.complete'; + + return this; + }, + + moveFromPromise(duration, x, y, ease, destroyMode) { + this.moveFrom(duration, x, y, ease, destroyMode); + return WaitComplete(this._easeMove); + }, + + moveFromDestroy(duration, x, y, ease) { + this.moveFrom(duration, x, y, ease, true); + return this; + }, + + moveFromDestroyPromise(duration, x, y, ease) { + this.moveFromDestroy(duration, x, y, ease); + return WaitComplete(this._easeMove); + }, + + moveTo(duration, x, y, ease, destroyMode) { + if (IsPlainObject(duration)) { + var config = duration; + x = config.x; + y = config.y; + if (config.hasOwnProperty('speed')) { + duration = (DistanceBetween(x, y, this.x, this.y) * 1000) / config.speed; + } else { + duration = config.duration; + } + + ease = config.ease; + } + + var isInit = (this._easeMove === undefined); + + this._easeMove = EaseMoveTo(this, duration, x, y, ease, destroyMode, this._easeMove); + + if (isInit) { + OnInitEaseMove(this, this._easeMove); + } + + this._easeMove.completeEventName = 'moveto.complete'; + + return this; + }, + + moveToPromise(duration, x, y, ease, destroyMode) { + this.moveTo(duration, x, y, ease, destroyMode); + return WaitComplete(this._easeMove); + }, + + moveToDestroy(duration, x, y, ease) { + this.moveTo(duration, x, y, ease, true) + return this; + }, + + moveToDestroyPromise(duration, x, y, ease) { + this.moveToDestroy(duration, x, y, ease, true); + return WaitComplete(this._easeMove); + }, + + moveStop(toEnd) { + if (!this._easeMove) { + return this; + } + + this._easeMove.stop(toEnd); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/FadeMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/FadeMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..8db7ef9321ce045a0483a84f34a4bbdd35ee1f58 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/FadeMethods.js @@ -0,0 +1,86 @@ +import { FadeIn, FadeOutDestroy } from '../fade/Fade.js'; +import { WaitComplete } from '../utils/WaitEvent.js'; +import GetParentSizerMethods from './GetParentSizerMethods.js'; + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; + +var OnInitFade = function (gameObject, fade) { + // Route 'complete' of fade to gameObject + fade.completeEventName = undefined; + fade.on('complete', function () { + if (fade.completeEventName) { + gameObject.emit(fade.completeEventName, gameObject); + fade.completeEventName = undefined; + } + }) + + // Update local state + fade.on('update', function () { + var parent = GetParentSizerMethods.getParentSizer(gameObject); + if (parent) { + parent.resetChildAlphaState(gameObject); + } + }) +} + +export default { + fadeIn(duration, alpha) { + if (IsPlainObject(duration)) { + var config = duration; + duration = config.duration; + alpha = config.alpha; + } + + var isInit = (this._fade === undefined); + + this._fade = FadeIn(this, duration, alpha, this._fade); + + if (isInit) { + OnInitFade(this, this._fade); + } + + this._fade.completeEventName = 'fadein.complete'; + + return this; + }, + + fadeInPromise(duration, alpha) { + this.fadeIn(duration, alpha); + return WaitComplete(this._fade); + }, + + fadeOutDestroy(duration, destroyMode) { + if (IsPlainObject(duration)) { + var config = duration; + duration = config.duration; + destroyMode = config.destroy; + } + + var isInit = (this._fade === undefined); + + this._fade = FadeOutDestroy(this, duration, destroyMode, this._fade); + + if (isInit) { + OnInitFade(this, this._fade); + } + + this._fade.completeEventName = 'fadeout.complete'; + + return this; + }, + + fadeOutDestroyPromise(duration, destroyMode) { + this.fadeOutDestroy(duration, destroyMode); + return WaitComplete(this._fade); + }, + + fadeOut(duration) { + this.fadeOutDestroy(duration, false); + return this; + }, + + fadeOutPromise(duration) { + this.fadeOut(duration); + return WaitComplete(this._fade); + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetAllChildrenSizers.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetAllChildrenSizers.js new file mode 100644 index 0000000000000000000000000000000000000000..0a5b3ddca672d265130ede86881c6ef97bb5d67b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetAllChildrenSizers.js @@ -0,0 +1,14 @@ +var GetAllChildrenSizers = function (out) { + if (out === undefined) { + out = []; + } + var startIdx = out.length; + var children = this.getChildrenSizers(out); + var endIdx = out.length; + for (var i = startIdx; i < endIdx; i++) { + children[i].getAllChildrenSizers(out); + } + + return out; +} +export default GetAllChildrenSizers; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..39b21a747986aa59a389ec37060d57c6176544d3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildHeight.js @@ -0,0 +1,17 @@ +import { GetDisplayHeight } from '../../../plugins/utils/size/GetDisplaySize.js'; + +var GetChildHeight = function (child) { + var childHeight; + if (child.isRexSizer) { // Sizer game object + childHeight = Math.max(child.minHeight, child.childrenHeight); + } else { // Normal game object + if (child.minHeight !== undefined) { // Force minHeight + childHeight = child.minHeight; + } else { + childHeight = GetDisplayHeight(child); + } + } + return childHeight; +} + +export default GetChildHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..0cc8c826c1dcec66e4c2684b245a1ee4376b88cf --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildWidth.js @@ -0,0 +1,18 @@ +import { GetDisplayWidth } from '../../../plugins/utils/size/GetDisplaySize.js'; + +var GetChildWidth = function (child) { + var childWidth; + if (child.isRexSizer) { // Sizer game object + childWidth = Math.max(child.minWidth, child.childrenWidth); + } else { // Normal game object + if (child.minWidth !== undefined) { // Force minWidth + childWidth = child.minWidth; + } else { + childWidth = GetDisplayWidth(child); + } + } + + return childWidth; +} + +export default GetChildWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..6ce92c6e53ee65733b153aff51598dfb8e19dcd6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenHeight.js @@ -0,0 +1,6 @@ +// Override +var GetChildrenHeight = function () { + return 0; +} + +export default GetChildrenHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenSizers.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenSizers.js new file mode 100644 index 0000000000000000000000000000000000000000..d46b3bb149d25663e4ff44d516e08ae136f16d27 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenSizers.js @@ -0,0 +1,8 @@ +// Default method +var GetChildrenSizers = function(out) { + if (out === undefined) { + out = []; + } + return out; +} +export default GetChildrenSizers; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..5284072d59d6823a4ebc9ffd56b39289c43a80cd --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetChildrenWidth.js @@ -0,0 +1,6 @@ +// Override +var GetChildrenWidth = function () { + return 0; +} + +export default GetChildrenWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetElement.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetElement.js new file mode 100644 index 0000000000000000000000000000000000000000..9e840eb4de4e1cf04a6c7bb6f2027092e58c3a78 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetElement.js @@ -0,0 +1,41 @@ +var GetElement = function (mapNameList, recursive) { + if (typeof (mapNameList) === 'string') { + mapNameList = mapNameList.split('.'); + } + if (mapNameList.length === 0) { + return undefined; + } + + var name = mapNameList.shift(), + element = null; + if (name.charAt(0) === '#') { // Get element by name + name = name.substring(1); + element = this.getByName(name, recursive); + } else if (name.indexOf('[') === (-1)) { // Get element by key + if (this.childrenMap) { + element = this.childrenMap[name]; + } + } else { // Get element by key[] + var innerMatch = name.match(RE_OBJ); + if (innerMatch != null) { + if (this.childrenMap) { + var elements = this.childrenMap[innerMatch[1]]; + if (elements) { + element = elements[innerMatch[2]]; + } + } + } + } + + if (mapNameList.length === 0) { + return element; + } else if (element && element.childrenMap) { + return element.getElement(mapNameList); + } else { + return null; + } +}; + +const RE_OBJ = /(\S+)\[(\d+)\]/i; + +export default GetElement; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetExpandedChildHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetExpandedChildHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..889b74c9e71ba7ff5b5817221e1f346a007d3e4b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetExpandedChildHeight.js @@ -0,0 +1,6 @@ +// Override +var GetExpandedChildHeight = function (child, parentHeight) { + return parentHeight; +} + +export default GetExpandedChildHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetExpandedChildWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetExpandedChildWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..37be007674b9ab605b93bdf845dde9a8f4ca0b7f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetExpandedChildWidth.js @@ -0,0 +1,6 @@ +// Override +var GetExpandedChildWidth = function (child, parentWidth) { + return parentWidth; +} + +export default GetExpandedChildWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetParentSizerMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetParentSizerMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..e047af02d68b89095a034a19029bcb46904e2ef7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetParentSizerMethods.js @@ -0,0 +1,56 @@ +var GetParent = function (gameObject, name) { + var parent = null; + if (name === undefined) { + if (gameObject.hasOwnProperty('rexContainer')) { + parent = gameObject.rexContainer.parent; + if (parent) { + if (!parent.isRexSizer) { + // Try to get sizer parent + parent = GetParent(parent); + } + } else { + parent = null; + } + } + + } else { + parent = GetParent(gameObject); + while (parent) { + if (parent.name === name) { + break; + } + parent = GetParent(parent); + } + } + return parent; +} + +var GetTopmostParent = function (gameObject) { + var parent = GetParent(gameObject); + while (parent) { + gameObject = parent; + parent = GetParent(parent); + } + return gameObject; +} + + +export default { + getParentSizer(gameObject, name) { + if (typeof (gameObject) === 'string') { + name = gameObject; + gameObject = undefined; + } + if (gameObject === undefined) { + gameObject = this; + } + return GetParent(gameObject, name); + }, + + getTopmostSizer(gameObject) { + if (gameObject === undefined) { + gameObject = this; + } + return GetTopmostParent(gameObject); + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetShownChildrenMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetShownChildrenMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..81af7c1607d6e79068b6be63edb16b1397e2e8f6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetShownChildrenMethods.js @@ -0,0 +1,43 @@ +export default { + getShownChildren(out) { + if (out === undefined) { + out = []; + } + var children = this.children, + child; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (child.rexSizer && child.rexSizer.hidden) { // Don't add hidden child + continue; + } + + out.push(child); + } + + return out; + }, + + getAllShownChildren(out) { + if (out === undefined) { + out = []; + } + + var queue = [this]; + while (queue.length > 0) { + var current = queue.shift(); + if (current.rexSizer && current.rexSizer.hidden) { + continue; + } + + if (current !== this) { + out.push(current); + } + + if (current.isRexContainerLite) { + queue.push(...current.children); + } + } + + return out; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetSizerConfig.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetSizerConfig.js new file mode 100644 index 0000000000000000000000000000000000000000..9034ff6196a162c9b012db1e61acd37671f68a12 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/GetSizerConfig.js @@ -0,0 +1,8 @@ +import GetSizerConfig from '../utils/GetSizerConfig.js'; + +export default function (gameObject) { + if (gameObject === undefined) { + gameObject = this; + } + return GetSizerConfig(gameObject); +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/HideMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/HideMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..456c4a4d1c8a9f51ecca578be2f31ce6a8d65794 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/HideMethods.js @@ -0,0 +1,30 @@ +import { + Show, + Hide, + IsShown, +} from '../utils/Hide.js'; + +export default { + show(gameObject) { + if (gameObject === undefined) { + gameObject = this; + } + Show(gameObject, false); + return this; + }, + + hide(gameObject) { + if (gameObject === undefined) { + gameObject = this; + } + Hide(gameObject, true); + return this; + }, + + isShow(gameObject) { + if (gameObject === undefined) { + gameObject = this; + } + return IsShown(gameObject); + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/IsInTouching.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/IsInTouching.js new file mode 100644 index 0000000000000000000000000000000000000000..53f39a744ab128e3a2d2aa0c0a293351b471f9ca --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/IsInTouching.js @@ -0,0 +1,19 @@ +import IsPointerInBounds from '../../../plugins/utils/input/IsPointerInBounds.js'; +import IsGameObject from '../../../plugins/utils/system/IsGameObject.js'; + +var IsInTouching = function (pointer, gameObject) { + if (IsGameObject(pointer) || (typeof (pointer) === 'string')) { + gameObject = pointer; + pointer = undefined; + } + + if (gameObject === undefined) { + gameObject = this; + } else if (typeof (gameObject) === 'string') { + gameObject = this.getElement(gameObject); + } + + return IsPointerInBounds(gameObject, pointer); +} + +export default IsInTouching; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/Layout.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/Layout.js new file mode 100644 index 0000000000000000000000000000000000000000..67bf7d7c76c58b604f6e2495f59b4fa27d41510c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/Layout.js @@ -0,0 +1,19 @@ +var Layout = function () { + // Save scale + var scaleXSave = this.scaleX; + var scaleYSave = this.scaleY; + var scale1 = (scaleXSave === 1) && (scaleYSave === 1); + if (!scale1) { + this.setScale(1); + } + + // Run layout with scale = 1 + this.runLayout(); + + // Restore scale + if (!scale1) { + this.setScale(scaleXSave, scaleYSave); + } + return this; +} +export default Layout; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/LayoutBackgrounds.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/LayoutBackgrounds.js new file mode 100644 index 0000000000000000000000000000000000000000..3cfa39b558496f3cc5759b679bf0513c9494eb73 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/LayoutBackgrounds.js @@ -0,0 +1,41 @@ +import ResizeGameObject from '../../../plugins/utils/size/ResizeGameObject.js'; +import PreLayoutChild from './utils/PreLayoutChild.js'; +import LayoutChild from './utils/LayoutChild.js'; + +const ALIGN_CENTER = Phaser.Display.Align.CENTER; + +var LayoutBackgrounds = function () { + if (this.backgroundChildren === undefined) { + return; + } + var backgrounds = this.backgroundChildren; + + var startX = this.left, + startY = this.top; + var parentWidth = this.width, + parentHeight = this.height; + var child, childConfig, padding, + x, y, width, height; + for (var i = 0, cnt = backgrounds.length; i < cnt; i++) { + child = backgrounds[i]; + childConfig = child.rexSizer; + if (childConfig.hidden) { + continue; + } + + padding = childConfig.padding; + + PreLayoutChild.call(this, child); + + x = startX + padding.left; + y = startY + padding.top; + width = parentWidth - padding.left - padding.right; + height = parentHeight - padding.top - padding.bottom; + + ResizeGameObject(child, width, height); + + LayoutChild.call(this, child, x, y, width, height, ALIGN_CENTER); + } +} + +export default LayoutBackgrounds; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/LayoutChildren.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/LayoutChildren.js new file mode 100644 index 0000000000000000000000000000000000000000..979b7317be6788173374491124cbb1f72810c7a3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/LayoutChildren.js @@ -0,0 +1,6 @@ +// Override +var LayoutChildren = function () { + +} + +export default LayoutChildren; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/Methods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/Methods.js new file mode 100644 index 0000000000000000000000000000000000000000..b8df9350805c81f7fcafdf96d8325f243c350abe --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/Methods.js @@ -0,0 +1,108 @@ +import GetSizerConfig from './GetSizerConfig.js'; +import GetChildPrevState from '../utils/GetChildPrevState.js'; +import PushIntoBounds from './PushIntoBounds.js'; +import DrawBounds from './DrawBounds.js'; +import AddChildMethods from './AddChildMethods.js'; +import RemoveChildMethods from './RemoveChildMethods.js'; +import AddChildrenMap from './AddChildrenMap.js'; +import RemoveChildrenMap from './RemoveChildrenMap.js'; +import GetElement from './GetElement.js'; +import PaddingMethods from './PaddingMethods.js'; +import ResolveWidth from './ResolveWidth.js'; +import ResolveChildrenWidth from './ResolveChildrenWidth.js'; +import ResolveHeight from './ResolveHeight.js'; +import PostResolveSize from './PostResolveSize.js'; +import GetChildWidth from './GetChildWidth.js'; +import GetChildHeight from './GetChildHeight.js'; +import GetExpandedChildWidth from './GetExpandedChildWidth.js'; +import GetExpandedChildHeight from './GetExpandedChildHeight.js'; +import GetChildrenWidth from './GetChildrenWidth.js'; +import GetChildrenHeight from './GetChildrenHeight.js'; +import GetAllChildrenSizers from './GetAllChildrenSizers.js'; +import GetChildrenSizers from './GetChildrenSizers.js'; +import GetShownChildrenMethods from './GetShownChildrenMethods.js'; +import PreLayout from './PreLayout.js'; +import Layout from './Layout.js'; +import RunLayout from './RunLayout.js'; +import LayoutChildren from './LayoutChildren.js'; +import PostLayout from './PostLayout.js'; +import RunWidthWrap from './RunWidthWrap.js'; + +import SetAnchor from './SetAnchor.js'; +import ScaleMethods from './ScaleMethods.js'; +import FadeMethods from './FadeMethods.js'; +import EaseMoveMethods from './EaseMoveMethods.js'; +import ShakeMethods from './ShakeMethods.js'; +import EaseDataMethods from './EaseDataMethods.js'; +import HideMethods from './HideMethods.js'; +import ModalMethods from './ModalMethods.js'; +import IsInTouching from './IsInTouching.js'; +import PointToChild from './PointToChild.js'; +import GetParentSizerMethods from './GetParentSizerMethods.js'; +import LayoutBackgrounds from './LayoutBackgrounds.js'; +import SetDraggable from './SetDraggable.js'; +import ClickMethods from './ClickMethods.js'; +import ClickOutsideMethods from './ClickOutsideMethods.js'; +import TouchingMethods from './TouchingMethods.js'; +import SetChildrenInteractive from './SetChildrenInteractive.js'; +import BroadcastEvent from './BroadcastEvent.js'; + +var methods = { + getSizerConfig: GetSizerConfig, + getChildPrevState: GetChildPrevState, + pushIntoBounds: PushIntoBounds, + drawBounds: DrawBounds, + resolveWidth: ResolveWidth, + resolveChildrenWidth: ResolveChildrenWidth, + resolveHeight: ResolveHeight, + postResolveSize: PostResolveSize, + getChildWidth: GetChildWidth, + getChildHeight: GetChildHeight, + getExpandedChildWidth: GetExpandedChildWidth, + getExpandedChildHeight: GetExpandedChildHeight, + + getChildrenWidth: GetChildrenWidth, + getChildrenHeight: GetChildrenHeight, + addChildrenMap: AddChildrenMap, + addElement: AddChildrenMap, + removeChildrenMap: RemoveChildrenMap, + getElement: GetElement, + getAllChildrenSizers: GetAllChildrenSizers, + getChildrenSizers: GetChildrenSizers, + preLayout: PreLayout, + layout: Layout, + runLayout: RunLayout, + layoutChildren: LayoutChildren, + runWidthWrap: RunWidthWrap, + layoutBackgrounds: LayoutBackgrounds, + postLayout: PostLayout, + + setAnchor: SetAnchor, + isInTouching: IsInTouching, + pointToChild: PointToChild, + setDraggable: SetDraggable, + setChildrenInteractive: SetChildrenInteractive, + broadcastEvent: BroadcastEvent, + +}; + +Object.assign( + methods, + PaddingMethods, + AddChildMethods, + RemoveChildMethods, + GetParentSizerMethods, + ScaleMethods, + FadeMethods, + EaseMoveMethods, + ShakeMethods, + EaseDataMethods, + ClickMethods, + ClickOutsideMethods, + TouchingMethods, + HideMethods, + ModalMethods, + GetShownChildrenMethods, +); + +export default methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ModalMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ModalMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..144c45c351835aab7863d7d63985dc2d08e93391 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ModalMethods.js @@ -0,0 +1,41 @@ +import { Modal, ModalClose } from '../modal/Modal.js'; +import IsFunction from '../../../plugins/utils/object/IsFunction.js'; + +export default { + // Override + // onCreateModalBehavior(self, config) { }, + + modal(config, onClose) { + if (IsFunction(config)) { + onClose = config; + config = undefined; + } + + if (this._modalBehavior === undefined) { + if (this.onCreateModalBehavior) { + this.onCreateModalBehavior(this, config); + } + this._modalBehavior = Modal(this, config); + } + + if (onClose) { + this._modalBehavior.once('close', onClose); + } + + this._modalBehavior.requestOpen(); + + return this; + }, + + modalPromise(config) { + var self = this; + return new Promise(function (resolve, reject) { + self.modal(config, resolve); + }); + }, + + modalClose(closeEventData) { + ModalClose(this, closeEventData); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PaddingMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PaddingMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..038e6bd56b1edfff75d06d99ac91c326eef4aba1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PaddingMethods.js @@ -0,0 +1,36 @@ +import { GetPadding, SetPadding } from '../../../plugins/utils/padding/PaddingMethods.js'; + +export default { + getInnerPadding(key) { + return GetPadding(this.space, key); + }, + + setInnerPadding(key, value) { + SetPadding(this.space, key, value); + return this; + }, + + getOuterPadding(key) { + return GetPadding(this.getSizerConfig(this).padding, key); + }, + + setOuterPadding(key, value) { + SetPadding(this.getSizerConfig(this).padding, key, value); + return this; + }, + + getChildOuterPadding(child, key) { + if (typeof (child) === 'string') { + child = this.getElement(child); + } + return GetPadding(this.getSizerConfig(child).padding, key); + }, + + setChildOuterPadding(child, key, value) { + if (typeof (child) === 'string') { + child = this.getElement(child); + } + SetPadding(this.getSizerConfig(child).padding, key, value); + return this; + }, +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PointToChild.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PointToChild.js new file mode 100644 index 0000000000000000000000000000000000000000..02539fdb4ae2cf356e809078cce80b3c5934f0d8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PointToChild.js @@ -0,0 +1,41 @@ +import IsFunction from '../../../plugins/utils/object/IsFunction.js'; +import IsArray from '../../../plugins/utils/object/IsArray.js'; +import ContainsPoint from '../utils/ContainsPoint.js'; + +var PointToChild = function (x, y, preTest, postTest, children) { + if (!IsFunction(preTest)) { + children = preTest; + preTest = undefined; + postTest = undefined; + } + + if (children === undefined) { + if (this.sizerChildren) { + children = this.sizerChildren; + } else { + children = this.children; + } + } + + if (IsArray(children)) { + var child; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (ContainsPoint(child, x, y, preTest, postTest)) { + return child; + } + } + } else { + var child; + for (var key in children) { + child = children[key]; + if (ContainsPoint(child, x, y, preTest, postTest)) { + return child; + } + } + } + + return null; +} + +export default PointToChild; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PostLayout.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PostLayout.js new file mode 100644 index 0000000000000000000000000000000000000000..0c65af357d21f35058b8d63e466a4300365f18b2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PostLayout.js @@ -0,0 +1,7 @@ +var PostLayout = function (parent, newWidth, newHeight) { + if (this._anchor) { + this._anchor.updatePosition(); + } + return this; +} +export default PostLayout; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PostResolveSize.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PostResolveSize.js new file mode 100644 index 0000000000000000000000000000000000000000..6aed56dd544c5d2e6467897cd6667c51cee8bdab --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PostResolveSize.js @@ -0,0 +1,4 @@ +var PostResolveSize = function (width, height) { +} + +export default PostResolveSize; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PreLayout.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PreLayout.js new file mode 100644 index 0000000000000000000000000000000000000000..6869558720041323d5bc41a1ac7e90f51c10468f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PreLayout.js @@ -0,0 +1,15 @@ +var PreLayout = function () { + this._childrenWidth = undefined; + this._childrenHeight = undefined; + + var children = this.getChildrenSizers(), + child; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (child.ignoreLayout) { + continue; + } + child.preLayout(); + } +} +export default PreLayout; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PushIntoBounds.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PushIntoBounds.js new file mode 100644 index 0000000000000000000000000000000000000000..e9b7fdf52e0b21a75161db9648a91da96d459e90 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/PushIntoBounds.js @@ -0,0 +1,15 @@ +import GetViewport from '../../../plugins/utils/system/GetViewport.js'; + +var PushIntoBounds = function (bounds) { + if (bounds === undefined) { + bounds = GetViewport(this.scene); + } + + this.left = Math.max(this.left, bounds.left); + this.right = Math.min(this.right, bounds.right); + this.top = Math.max(this.top, bounds.top); + this.bottom = Math.min(this.bottom, bounds.bottom); + return this; +} + +export default PushIntoBounds; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RemoveChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RemoveChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..8f1d88272679d2e4e94c689c9b4323073aec0af4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RemoveChildMethods.js @@ -0,0 +1,39 @@ +import RemoveChild from './utils/RemoveChild.js'; +import GetParentSizerMethods from './GetParentSizerMethods.js'; + +const RemoveItem = Phaser.Utils.Array.Remove; + +export default { + removeFromParentSizer() { + var parent = GetParentSizerMethods.getParentSizer(gameObject); + if (parent) { + parent.remove(this); + } + return this; + }, + + removeBackground(gameObject, destroyChild) { + if (this.backgroundChildren === undefined) { + return this; + } + + if (this.getParentSizer(gameObject) !== this) { + return this; + } + + RemoveItem(this.backgroundChildren, gameObject); + RemoveChild.call(this, gameObject, destroyChild); + return this; + }, + + removeAllBackgrounds(destroyChild) { + if (this.backgroundChildren === undefined) { + return this; + } + + for (var i = this.backgroundChildren.length - 1; i >= 0; i--) { + this.remove(this.backgroundChildren[i], destroyChild); + } + return this; + }, +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RemoveChildrenMap.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RemoveChildrenMap.js new file mode 100644 index 0000000000000000000000000000000000000000..e8087f593688cf0a5393d88c8688f90b9551537d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RemoveChildrenMap.js @@ -0,0 +1,17 @@ + +var RemoveChildrenMap = function (key) { + if (typeof (key) === 'object') { + var gameObject = key; + for (var key in this.childrenMap) { + if (this.childrenMap[key] === gameObject) { + delete this.childrenMap[key]; + return this; + } + } + } + + delete this.childrenMap[key]; + return this; +} + +export default RemoveChildrenMap; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveChildrenWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveChildrenWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..de20be2fcc2396817f998f7f01d239f91c802c99 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveChildrenWidth.js @@ -0,0 +1,14 @@ +var ResolveChildrenWidth = function (parentWidth) { + // Resolve width of sizer children + var child, childWidth; + for (var i in this.sizerChildren) { + child = this.sizerChildren[i]; + if (child && child.isRexSizer && !child.ignoreLayout) { + childWidth = this.getExpandedChildWidth(child, parentWidth); + childWidth = child.resolveWidth(childWidth); + child.resolveChildrenWidth(childWidth); + } + } +} + +export default ResolveChildrenWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..63cc461f42a6bb7c31b18f4cb5074cd11f5b4a3d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveHeight.js @@ -0,0 +1,14 @@ +var ResolveHeight = function (height) { + var minHeight = Math.max(this.childrenHeight, this.minHeight); + if (height === undefined) { + height = minHeight; + } else { + if (minHeight > height) { + // Warning + } + } + + return height; +} + +export default ResolveHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..b1e54851f803c0e29b8fdb502df966a02b602601 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ResolveWidth.js @@ -0,0 +1,16 @@ +var ResolveWidth = function (width) { + if (width === undefined) { + width = Math.max(this.childrenWidth, this.minWidth); + } else { + /* + var minWidth = Math.max(this.childrenWidth, this.minWidth); + if (minWidth > width) { + // Warning + } + */ + } + + return width; +} + +export default ResolveWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RunLayout.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RunLayout.js new file mode 100644 index 0000000000000000000000000000000000000000..ec91878f029cf6e7af0fc5ffeb670a630bb6bb37 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RunLayout.js @@ -0,0 +1,47 @@ +// Override +var RunLayout = function (parent, newWidth, newHeight) { + // Skip hidden or !dirty sizer + if (this.ignoreLayout) { + return this; + } + + var isTopmostParent = !parent; + // Preprocessor, top parent only + if (isTopmostParent) { + this.preLayout(); + } + + // Calculate parent width + newWidth = this.resolveWidth(newWidth); + // Calculate all children width, run width wrap + if (isTopmostParent) { + this.resolveChildrenWidth(newWidth); + this.runWidthWrap(newWidth); + } + // Calculate parent height + newHeight = this.resolveHeight(newHeight); + // The last chance of resolving size + this.postResolveSize(newWidth, newHeight); + // Resize parent + this.resize(newWidth, newHeight); + + if (this.sizerEventsEnable) { + if (this.layoutedChildren === undefined) { + this.layoutedChildren = []; + } + } + + // Layout children + this.layoutChildren(); + + // Layout background children + this.layoutBackgrounds(); + + if (this.sizerEventsEnable) { + this.emit('postlayout', this.layoutedChildren, this); + this.layoutedChildren.length = 0; + } + + return this.postLayout(); +} +export default RunLayout; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RunWidthWrap.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RunWidthWrap.js new file mode 100644 index 0000000000000000000000000000000000000000..1c489fdb634c903570b49e55f967fb7920406a67 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/RunWidthWrap.js @@ -0,0 +1,23 @@ +// Default method +var RunWidthWrap = function (parentWidth) { + var child, childWidth; + for (var i in this.sizerChildren) { + child = this.sizerChildren[i]; + if ( + (!child) || + (child.isRexSizer && child.ignoreLayout) || + (!child.runWidthWrap) + ) { + continue; + } + + childWidth = this.getExpandedChildWidth(child, parentWidth); + if (child.isRexSizer) { + childWidth = child.resolveWidth(childWidth); + } + child.runWidthWrap(childWidth); + } + return this; +} + +export default RunWidthWrap; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ScaleMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ScaleMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..3adcb9d0b047c20876baac7c402d3be7663e8ed5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ScaleMethods.js @@ -0,0 +1,121 @@ +import PopUp from '../../../plugins/popup.js'; +import ScaleDownDestroy from '../../../plugins/scale-down-destroy.js'; +import Yoyo from '../../../plugins/behaviors/scale/Yoyo.js'; +import { WaitComplete } from '../utils/WaitEvent.js' +import GetParentSizerMethods from './GetParentSizerMethods.js'; + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; + +var OnInitScale = function (gameObject, scale) { + // Route 'complete' of scale to gameObject + scale.completeEventName = undefined; + scale.on('complete', function () { + if (scale.completeEventName) { + gameObject.emit(scale.completeEventName, gameObject); + scale.completeEventName = undefined; + } + }) + + // Update local state + scale.on('update', function () { + var parent = GetParentSizerMethods.getParentSizer(gameObject) + if (parent) { + parent.resetChildPositionState(gameObject); + } + }) +} + +export default { + popUp(duration, orientation, ease) { + if (IsPlainObject(duration)) { + var config = duration; + duration = config.duration; + orientation = config.orientation; + ease = config.ease; + } + + var isInit = (this._scaleBehavior === undefined); + + this._scaleBehavior = PopUp(this, duration, orientation, ease, this._scaleBehavior); + + if (isInit) { + OnInitScale(this, this._scaleBehavior); + } + + this._scaleBehavior.completeEventName = 'popup.complete'; + + return this; + }, + + popUpPromise(duration, orientation, ease) { + this.popUp(duration, orientation, ease); + return WaitComplete(this._scaleBehavior); + }, + + scaleDownDestroy(duration, orientation, ease, destroyMode) { + if (IsPlainObject(duration)) { + var config = duration; + duration = config.duration; + orientation = config.orientation; + ease = config.ease; + destroyMode = config.destroy; + } + + var isInit = (this._scaleBehavior === undefined); + + this._scaleBehavior = ScaleDownDestroy(this, duration, orientation, ease, destroyMode, this._scaleBehavior); + + if (isInit) { + OnInitScale(this, this._scaleBehavior); + } + + this._scaleBehavior.completeEventName = 'scaledown.complete'; + + return this; + }, + + scaleDownDestroyPromise(duration, orientation, ease, destroyMode) { + this.scaleDownDestroy(duration, orientation, ease, destroyMode); + return WaitComplete(this._scaleBehavior); + }, + + scaleDown(duration, orientation, ease) { + this.scaleDownDestroy(duration, orientation, ease, false); + return this; + }, + + scaleDownPromise(duration, orientation, ease) { + this.scaleDown(duration, orientation, ease); + return WaitComplete(this._scaleBehavior); + }, + + scaleYoyo(duration, peakValue, repeat, orientation, ease) { + if (IsPlainObject(duration)) { + var config = duration; + duration = config.duration; + peakValue = config.peakValue; + repeat = config.repeat; + orientation = config.orientation; + ease = config.ease; + } + + var isInit = (this._scaleBehavior === undefined); + + this._scaleBehavior = Yoyo(this, duration, peakValue, repeat, orientation, ease, this._scaleBehavior); + + if (isInit) { + OnInitScale(this, this._scaleBehavior); + } + + this._scaleBehavior.completeEventName = 'scaleyoyo.complete'; + + return this; + }, + + scaleYoyoPromise(duration, peakValue, repeat, orientation, ease) { + this.scaleYoyo(duration, peakValue, repeat, orientation, ease); + return WaitComplete(this._scaleBehavior); + }, + + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetAnchor.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetAnchor.js new file mode 100644 index 0000000000000000000000000000000000000000..9733271a66d25717343e77c2748ccbcd94721784 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetAnchor.js @@ -0,0 +1,34 @@ +import Anchor from '../anchor/Anchor.js'; + +var SetAnchor = function (config) { + if (config === undefined) { + config = {}; + } + + // Assign default onResizeCallback if not given + var hasMinWidth = config.hasOwnProperty('width'); + var hasMinHeight = config.hasOwnProperty('height'); + var hasOnResizeCallback = config.hasOwnProperty('onResizeCallback'); + if ((hasMinWidth || hasMinHeight) && !hasOnResizeCallback) { + config.onResizeCallback = function (width, height, sizer) { + if (hasMinWidth) { + sizer.setMinWidth(width); + } + + if (hasMinHeight) { + sizer.setMinHeight(height); + } + + sizer.layout(); + } + } + + if (this._anchor === undefined) { + this._anchor = new Anchor(this, config); + } else { + this._anchor.resetFromJSON(config) + } + return this; +} + +export default SetAnchor; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetChildrenInteractive.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetChildrenInteractive.js new file mode 100644 index 0000000000000000000000000000000000000000..1a1eaf0829b62db9d4536d383d1bfb6859af3655 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetChildrenInteractive.js @@ -0,0 +1,8 @@ +import SetChildrenInteractive from '../utils/setchildreninteractive/SetChildrenInteractive.js'; + +var SetChildrenInteractiveWrap = function (config) { + SetChildrenInteractive(this, config); + return this; +} + +export default SetChildrenInteractiveWrap; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetDraggable.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetDraggable.js new file mode 100644 index 0000000000000000000000000000000000000000..61f89badbe2ecd3d42b2e4ac74e892676a190b6c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/SetDraggable.js @@ -0,0 +1,47 @@ +var SetDraggable = function (senser, draggable) { + var senserType = typeof (senser); + if (senserType === 'string') { + var senserName = senser; + senser = this.getElement(senserName); + if (!senser) { + console.error(`Can get element '${senserName}'`); + return this; + } + } else if ((senser === undefined) || (senserType != 'object')) { + draggable = senser; + senser = this; + } + if (draggable === undefined) { + draggable = true; + } + + if (senser.input && senser.input._dragTopmostSizer) { + // Draggable is already registered + senser.input.draggable = draggable; + } else if (draggable) { + // Register draggable + senser.setInteractive(); + senser.scene.input.setDraggable(senser); + senser + .on('drag', function (pointer, dragX, dragY) { + var topmostParent = this.getTopmostSizer(); + topmostParent.x += (dragX - senser.x); + topmostParent.y += (dragY - senser.y); + topmostParent.emit('sizer.drag', pointer, dragX, dragY); + }, this) + .on('dragstart', function (pointer, dragX, dragY) { + var topmostParent = this.getTopmostSizer(); + topmostParent.emit('sizer.dragstart', pointer, dragX, dragY); + }, this) + .on('dragend', function (pointer, dragX, dragY, dropped) { + var topmostParent = this.getTopmostSizer(); + topmostParent.emit('sizer.dragend', pointer, dragX, dragY, dropped); + }, this) + senser.input._dragTopmostSizer = true; + } else { + // Not draggable and draggable is not registered yet, do nothing + } + return this; +} + +export default SetDraggable; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ShakeMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ShakeMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..6a1bd46b9953122c929eda0b8d26aa8dd17b9f1a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/ShakeMethods.js @@ -0,0 +1,53 @@ +import Shake from '../shake/Shake.js'; +import { WaitComplete } from '../utils/WaitEvent.js' + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; + +var OnInitShake = function (gameObject, shake) { + // Route 'complete' of shake to gameObject + shake.on('complete', function () { + gameObject.emit('shake.complete', gameObject); + }) + + // Shake effect won't change position +} + +export default { + shake(duration, magnitude, magnitudeMode) { + if (IsPlainObject(duration)) { + var config = duration; + duration = config.duration; + magnitude = config.magnitude; + magnitudeMode = config.magnitudeMode; + } + + if (this._shake === undefined) { + this._shake = new Shake(this, { + mode: 0, + magnitudeMode: 1 + }); + OnInitShake(this, this._shake); + } + + if (duration !== undefined) { + this._shake.setDuration(duration); + } + + if (magnitude !== undefined) { + this._shake.setMagnitude(magnitude); + } + + if (magnitudeMode !== undefined) { + this._shake.setMagnitudeMode(magnitudeMode); + } + + this._shake.shake(); + + return this; + }, + + shakePromise(duration, alpha) { + this.shake(duration, alpha); + return WaitComplete(this._shake); + }, +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/TouchingMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/TouchingMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..05d6c32fb0af674fcfe5185159bdcb66814a7382 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/TouchingMethods.js @@ -0,0 +1,118 @@ +import InTouching from '../intouching/InTouching.js'; +import IsPointerInBounds from '../../../plugins/utils/input/IsPointerInBounds.js'; + +export default { + isPointerInBounds(target) { + if (target === undefined) { + target = this; + } else if (typeof (target) === 'string') { + target = this.getElement(target); + } + + if (!target) { + return false; + } + + return IsPointerInBounds(target); + }, + + onTouching(gameObject, callback, scope, config) { + if (!gameObject) { + return this; + } + + if (typeof (gameObject) === 'function') { + config = scope; + scope = callback; + callback = gameObject; + gameObject = this; + } + + if (gameObject._inTouching === undefined) { + gameObject._inTouching = new InTouching(gameObject, config); + } + gameObject._inTouching.on('intouch', callback, scope); + + return this; + }, + + offTouching(gameObject, callback, scope) { + if (typeof (gameObject) === 'function') { + scope = callback; + callback = gameObject; + gameObject = this; + } + + if (gameObject._inTouching === undefined) { + return this; + } + gameObject._inTouching.off('intouch', callback, scope); + + return this; + }, + + onTouchingEnd(gameObject, callback, scope, config) { + if (!gameObject) { + return this; + } + + if (typeof (gameObject) === 'function') { + config = scope; + scope = callback; + callback = gameObject; + gameObject = this; + } + + if (gameObject._inTouching === undefined) { + gameObject._inTouching = new InTouching(gameObject, config); + } + gameObject._inTouching.on('touchend', callback, scope); + + return this; + }, + + offTouchingEnd(gameObject, callback, scope) { + if (typeof (gameObject) === 'function') { + scope = callback; + callback = gameObject; + gameObject = this; + } + + if (gameObject._inTouching === undefined) { + return this; + } + gameObject._inTouching.off('touchend', callback, scope); + + return this; + }, + + + enableTouching(gameObject, enabled) { + if (gameObject && typeof (gameObject) !== 'object') { + enabled = gameObject; + gameObject = this; + } + + if (gameObject._inTouching === undefined) { + return this; + } + gameObject._inTouching.setEnable(enabled); + + return this; + }, + + disableTouching(gameObject) { + if (gameObject && typeof (gameObject) !== 'object') { + gameObject = this; + } + + if (gameObject._inTouching === undefined) { + return this; + } + gameObject._inTouching.setEnable(false); + + return this; + }, + + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/AddChild.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/AddChild.js new file mode 100644 index 0000000000000000000000000000000000000000..82d7c905be3a0318ae3a58580ebf4907cb74e172 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/AddChild.js @@ -0,0 +1,16 @@ +import Container from '../../container/Container.js'; + +const ContainerAdd = Container.prototype.add; + +var AddChild = function (gameObject) { + ContainerAdd.call(this, gameObject); + + if (this.sizerEventsEnable) { + gameObject.emit('sizer.add', gameObject, this); + this.emit('add', gameObject, this); + } + + return this; +} + +export default AddChild; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/CheckSize.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/CheckSize.js new file mode 100644 index 0000000000000000000000000000000000000000..cae321956abf23fdd008e7ffc326cee2faff3e26 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/CheckSize.js @@ -0,0 +1,12 @@ +var CheckSize = function (child, parent) { + if (child.width < child.childrenWidth) { + // Warning + console.warn(`Layout width error: Parent=${parent.constructor.name}, Child=${child.constructor.name}`); + } + if (child.height < child.childrenHeight) { + // Warning + console.warn(`Layout height error: Parent=${parent.constructor.name}, Child=${child.constructor.name}`); + } +} + +export default CheckSize; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/ClearChildren.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/ClearChildren.js new file mode 100644 index 0000000000000000000000000000000000000000..6a527b2be5b32c08db23656af96d16ed637bd0a5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/ClearChildren.js @@ -0,0 +1,29 @@ +import Container from '../../container/Container.js'; + +const ContainerClear = Container.prototype.clear; + +var ClearChildren = function (destroyChild) { + if (this.backgroundChildren) { + this.backgroundChildren.length = 0; + } + + var fireRemoveEvent = !destroyChild && this.sizerEventsEnable; + var children; + if (fireRemoveEvent) { + children = this.getChildren([]); + } + + ContainerClear.call(this, destroyChild); + + if (fireRemoveEvent) { + var gameObject; + for (var i = 0, cnt = children.length; i < cnt; i++) { + gameObject = children[i]; + gameObject.emit('sizer.remove', gameObject, this); + this.emit('remove', gameObject, this); + } + } + return this; +} + +export default ClearChildren; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/LayoutChild.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/LayoutChild.js new file mode 100644 index 0000000000000000000000000000000000000000..f188a5edc444b4eda25e2d12ed3c84476cec3ff4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/LayoutChild.js @@ -0,0 +1,20 @@ +import AlignIn from '../../../../plugins/utils/actions/AlignIn.js'; + +var LayoutChild = function (child, x, y, width, height, align, offsetX, offsetY) { + AlignIn(child, x, y, width, height, align); + + if (offsetX !== undefined) { + child.x += offsetX; + } + if (offsetY !== undefined) { + child.y += offsetY; + } + + this.resetChildPositionState(child); + + if (this.sizerEventsEnable) { + child.emit('sizer.postlayout', child, this); + } +} + +export default LayoutChild; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/PreLayoutChild.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/PreLayoutChild.js new file mode 100644 index 0000000000000000000000000000000000000000..05906a83232a6659fc09b8f1686f8a52466d833c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/PreLayoutChild.js @@ -0,0 +1,10 @@ +import CopyState from '../../utils/CopyState'; + +var PreLayoutChild = function (child) { + if (this.sizerEventsEnable) { + CopyState(child, this.getChildPrevState(child)); + this.layoutedChildren.push(child); + } +} + +export default PreLayoutChild; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/RemoveChild.js b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/RemoveChild.js new file mode 100644 index 0000000000000000000000000000000000000000..6b28d2a35106374bdc11ba6f80d6127a499977fc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/basesizer/utils/RemoveChild.js @@ -0,0 +1,19 @@ +import Container from '../../container/Container.js'; + +const RemoveItem = Phaser.Utils.Array.Remove; +const ContainerRemove = Container.prototype.remove; + +var RemoveChild = function (gameObject, destroyChild) { + if (this.isBackground(gameObject)) { + RemoveItem(this.backgroundChildren, gameObject); + } + ContainerRemove.call(this, gameObject, destroyChild); + + if (!destroyChild && this.sizerEventsEnable) { + gameObject.emit('sizer.remove', gameObject, this); + this.emit('remove', gameObject, this); + } + return this; +} + +export default RemoveChild; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/BBCodeText.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/BBCodeText.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f4364757e1811b0080605bba57631ccde17047b5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/BBCodeText.d.ts @@ -0,0 +1,2 @@ +import BBCodeText from '../../../plugins/bbcodetext'; +export default BBCodeText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/BBCodeText.js b/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/BBCodeText.js new file mode 100644 index 0000000000000000000000000000000000000000..dd09ba101dd0ce1fcb67f43e4fcfd0520f342bc9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/BBCodeText.js @@ -0,0 +1,2 @@ +import BBCodeText from '../../../plugins/bbcodetext.js'; +export default BBCodeText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef40eae87fd6edf8d7164e2ff3b5be0437c95b27 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/Factory.d.ts @@ -0,0 +1,7 @@ +import BBCodeText from './BBCodeText'; + +export default function ( + x?: number, y?: number, + content?: string, + style?: BBCodeText.TextStyle +): BBCodeText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..b737a8b65cf8657e69a41ec406d8ea7b8833e594 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/bbcodetext/Factory.js @@ -0,0 +1,13 @@ +import BBCodeText from './BBCodeText.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('BBCodeText', function (x, y, text, style) { + var gameObject = new BBCodeText(this.scene, x, y, text, style); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.BBCodeText', BBCodeText); + +export default BBCodeText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/buttons/AddChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/buttons/AddChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..da6ba4cea0d96cfc5a38bc0687159e526bbd3a87 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/buttons/AddChildMethods.js @@ -0,0 +1,85 @@ +import Sizer from '../sizer/Sizer.js'; +import IsArray from '../../../plugins/utils/object/IsArray.js'; + +const SizerAdd = Sizer.prototype.add; +const SizerAddSpace = Sizer.prototype.addSpace; + +var Add = function (gameObject) { + var isNormalGameObject = !gameObject.isRexSpace; + var proportion = (!isNormalGameObject || this.buttonsExpand) ? 1 : 0; + + if (this.sizerChildren.length === 0) { // First element + if (isNormalGameObject) { + // Add space at head + var hasHeadSpace = (!this.buttonsExpand) && + ((this.buttonsAlign === 'right') || (this.buttonsAlign === 'center') || (this.buttonsAlign === 'bottom')); + if (hasHeadSpace) { + SizerAddSpace.call(this); + } + + SizerAdd.call(this, + gameObject, + { proportion: proportion, expand: true } + ); + + // Add space at tail + var hasTailSpace = (!this.buttonsExpand) && (this.buttonsAlign === 'center'); + if (hasTailSpace) { + SizerAddSpace.call(this); + } + this.hasTailSpace = hasTailSpace; + + } else { // A space + SizerAdd.call(this, + gameObject, + { proportion: proportion, expand: true } + ); + this.hasTailSpace = false; + + } + + } else { // Others + if (this.hasTailSpace) { + var lastIndex = this.sizerChildren.length - 1; + SizerAdd.call(this, + gameObject, + { index: lastIndex, proportion: proportion, expand: true } + ); + + } else { + SizerAdd.call(this, + gameObject, + { proportion: proportion, expand: true } + ); + } + + } + + // Space or other game object as button + if (isNormalGameObject) { + this.buttonGroup.add(gameObject); + } + + return this; +}; + +export default { + addButton(gameObject) { + if (IsArray(gameObject)) { + var gameObjects = gameObject; + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + Add.call(this, gameObjects[i]); + } + } else { + Add.call(this, gameObject); + } + return this; + }, + + addButtons(gameObjects) { + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + Add.call(this, gameObjects[i]); + } + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/buttons/Buttons.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/buttons/Buttons.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..06bf44dc463eefb065beceee1912bdb51a1f6706 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/buttons/Buttons.d.ts @@ -0,0 +1,95 @@ +// import * as Phaser from 'phaser'; +import Sizer from '../sizer/Sizer'; +import { IConfig as IConfigButtons } from '../utils/buttongroup/Buttons'; + +export default Buttons; + +declare namespace Buttons { + + type AlignTypes = 'left' | 'top' | 'right' | 'bottom' | 'center'; + + interface IConfig extends Sizer.IConfig, IConfigButtons { + background?: Phaser.GameObjects.GameObject, + + buttons?: Phaser.GameObjects.GameObject[], + + expand?: boolean, + + align?: AlignTypes, + } +} + +declare class Buttons extends Sizer { + constructor( + scene: Phaser.Scene, + config?: Buttons.IConfig + ); + + emitButtonClick( + index: number | Phaser.GameObjects.GameObject + ): this; + + setButtonEnable( + index?: number | Phaser.GameObjects.GameObject | boolean, + enable?: boolean + ): this; + + toggleButtonEnable( + index?: number | Phaser.GameObjects.GameObject + ): this; + + getButtonEnable( + index: number | Phaser.GameObjects.GameObject + ): boolean; + + getButton( + index: number + ): Phaser.GameObjects.GameObject | null; + + addButton( + gameObject: Phaser.GameObjects.GameObject + ): this; + + removeButton( + gameObject: Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + clearButtons( + destroyChild?: boolean + ): this; + + showButton( + index: number | Phaser.GameObjects.GameObject + ): this; + + hideButton( + index: number | Phaser.GameObjects.GameObject + ): this; + + forEachButtton( + callback: (button: Phaser.GameObjects.GameObject, index: number, buttons: Phaser.GameObjects.GameObject[]) => void, + scop?: unknown + ): this; + + readonly buttons: Phaser.GameObjects.GameObject[]; + + value: unknown; + + setSelectedButtonName( + name: string + ): this; + + getSelectedButtonName(): string; + + setButtonState( + name: string, + state?: boolean + ): this; + + getButtonState( + name: string + ): boolean; + + getAllButtonsState(): { [name: string]: boolean }; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/buttons/Buttons.js b/ui/src/phaser3-rex-plugins/templates/ui/buttons/Buttons.js new file mode 100644 index 0000000000000000000000000000000000000000..e032cd4b66f11cc4f842264a575ebb6e1746a6d6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/buttons/Buttons.js @@ -0,0 +1,88 @@ +import Sizer from '../sizer/Sizer.js'; +import AddChildMethods from './AddChildMethods.js'; +import RemoveChildMethods from './RemoveChildMethods.js'; +import ButtonGroup from '../utils/buttongroup/ButtonGroup.js'; +import ButtonMethods from '../utils/buttongroup/ButtonMethods.js'; +import ButtonStateMethods from '../utils/buttongroup/ButtonStateMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Buttons extends Sizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + + var buttonSpace = config.space; + if (typeof (buttonSpace) === 'number') { + config.space = { item: buttonSpace }; + } + + // Create + super(scene, config); + this.type = 'rexButtons'; + this.buttonGroup = new ButtonGroup({ + parent: this, + eventEmitter: GetValue(config, 'eventEmitter', this), + groupName: GetValue(config, 'groupName', undefined), + clickConfig: GetValue(config, 'click', undefined) + }) + .setButtonsType(config) + + // Add elements + var background = GetValue(config, 'background', undefined); + var buttons = GetValue(config, 'buttons', undefined); + + // Buttons properties + this.buttonsExpand = GetValue(config, 'expand', false); + this.buttonsAlign = GetValue(config, 'align', undefined); // undefined/left/top: no space + + if (background) { + this.addBackground(background); + } + + if (buttons) { + this.addButtons(buttons); + } + + this.addChildrenMap('background', background); + this.addChildrenMap('buttons', this.buttonGroup.buttons); + } + + destroy(fromScene) { + // This Game Object has already been destroyed + if (!this.scene || this.ignoreDestroy) { + return; + } + + super.destroy(fromScene); + this.buttonGroup.destroy(); + this.buttonGroup = undefined; + } + + get buttons() { + return this.buttonGroup.buttons; + } + + get groupName() { + return this.buttonGroup.groupName; + } + + set groupName(value) { + this.buttonGroup.groupName = value; + } + + get eventEmitter() { + return this.buttonGroup.eventEmitter; + } +} + +Object.assign( + Buttons.prototype, + AddChildMethods, + RemoveChildMethods, + ButtonMethods, + ButtonStateMethods +); + +export default Buttons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/buttons/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/buttons/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f237142040ff05bd69da61cd4d2b1a6785eeb87b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/buttons/Factory.d.ts @@ -0,0 +1,5 @@ +import Buttons from './Buttons'; + +export default function ButtonsFactory( + config?: Buttons.IConfig +): Buttons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/buttons/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/buttons/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..ec3147a0eaf6f16320c6017af7c319cc01c11fe3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/buttons/Factory.js @@ -0,0 +1,13 @@ +import Buttons from './Buttons.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('buttons', function (config) { + var gameObject = new Buttons(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Buttons', Buttons); + +export default Buttons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/buttons/RemoveChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/buttons/RemoveChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..f07d12dc1e9506ed3a7027ddb9878f0bbd0d9596 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/buttons/RemoveChildMethods.js @@ -0,0 +1,55 @@ +import Sizer from '../sizer/Sizer.js'; +import IsArray from '../../../plugins/utils/object/IsArray.js'; + +const SizerRmove = Sizer.prototype.remove; +const SizerClear = Sizer.prototype.clear; + +var Remove = function (gameObject, destroyChild) { + if (this.getParentSizer(gameObject) !== this) { + return this; + } + + this.buttonGroup.remove(gameObject); + SizerRmove.call(this, gameObject, destroyChild); + return this; +}; + +export default { + remove(gameObject, destroyChild) { + // Remove gameObject no matter it is a button or not + if (IsArray(gameObject)) { + var gameObjects = gameObject; + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + Remove.call(this, gameObjects[i], destroyChild); + } + } else { + Remove.call(this, gameObject, destroyChild); + } + return this; + }, + + clear(destroyChild) { + var buttons = this.buttonGroup.buttons; + buttons.length = 0; + SizerClear.call(this, destroyChild); + return this; + }, + + removeButton(gameObject, destroyChild) { + var gameObject = this.getButton(gameObject); + // Don't remove this gameObject, it is not a button + if (!gameObject) { + return this; + } + this.remove(gameObject, destroyChild); + return this; + }, + + clearButtons(destroyChild) { + var buttons = this.buttonGroup.buttons; + for (var i = buttons.length - 1; i >= 0; i--) { + Remove.call(this, buttons[i], destroyChild); + } + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/canvas/Canvas.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/canvas/Canvas.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..899032d7a74d179477bbc81e263a1ebddb817e5a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/canvas/Canvas.d.ts @@ -0,0 +1,2 @@ +import Canvas from '../../../plugins/canvas'; +export default Canvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/canvas/Canvas.js b/ui/src/phaser3-rex-plugins/templates/ui/canvas/Canvas.js new file mode 100644 index 0000000000000000000000000000000000000000..2c979f6e3a8ddd87386e0b85e6a379eb93e51f38 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/canvas/Canvas.js @@ -0,0 +1,2 @@ +import Canvas from '../../../plugins/canvas.js'; +export default Canvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/canvas/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/canvas/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b1aa1554226f621a8f667e4a67cc4a9ca5ca7f2c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/canvas/Factory.d.ts @@ -0,0 +1,6 @@ +import Canvas from './Canvas'; + +export default function ( + x?: number, y?: number, + width?: number, height?: number +): Canvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/canvas/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/canvas/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..95444d0f02c7a7e72716c4fd03711fa1a1fcc4c9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/canvas/Factory.js @@ -0,0 +1,13 @@ +import Canvas from './Canvas.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('canvas', function (x, y, width, height) { + var gameObject = new Canvas(this.scene, x, y, width, height); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Canvas', Canvas); + +export default Canvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/CanvasInput.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/CanvasInput.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..fb4e9bc597379204076dccd2dc0325d887f478f1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/CanvasInput.d.ts @@ -0,0 +1,2 @@ +import CanvasInput from '../../../plugins/canvasinput'; +export default CanvasInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/CanvasInput.js b/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/CanvasInput.js new file mode 100644 index 0000000000000000000000000000000000000000..318c7182fb69ed5562fe4e8017c0dc3584fa6e24 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/CanvasInput.js @@ -0,0 +1,2 @@ +import CanvasInput from '../../../plugins/canvasinput.js'; +export default CanvasInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..686d181d7b317f3f2183ea8901b18239df31009b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/Factory.d.ts @@ -0,0 +1,7 @@ +import CanvasInput from './CanvasInput'; + +export default function ( + x?: number, y?: number, + fixedWidth?: number, fixedHeight?: number, + config?: CanvasInput.IConfig +): CanvasInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..33f0f109d95ed1ef44a345bfdfcbd8b8a14c672d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/canvasinput/Factory.js @@ -0,0 +1,13 @@ +import CanvasInput from './CanvasInput.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('canvasInput', function (x, y, fixedWidth, fixedHeight, config) { + var gameObject = new CanvasInput(this.scene, x, y, fixedWidth, fixedHeight, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.CanvasInput', CanvasInput); + +export default CanvasInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/Chart.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/chart/Chart.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9ed7bcd281de3630cab05ac9bae2609ef27f2a4f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/Chart.d.ts @@ -0,0 +1,42 @@ +// import * as Phaser from 'phaser'; +import Canvas from '../canvas/Canvas'; + +export default Chart; + +declare namespace Chart { + type IndexType = number | string; + + interface IConfig { + + } +} + +declare class Chart extends Canvas { + constructor( + scene: Phaser.Scene, + x: number, y: number, + width: number, height: number, + config?: Chart.IConfig + ); + + setChart(config: Chart.IConfig): this; + + getChartDataset( + datasetIndex: Chart.IndexType + ): { [index: Chart.IndexType]: number }; + + getChartData( + datasetIndex: Chart.IndexType, + dataIndex: Chart.IndexType + ): number; + + setChartData( + datasetIndex: Chart.IndexType, + dataIndex: Chart.IndexType, + value: number + ): this; + + updateChart(): this; + + chart: any; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/Chart.js b/ui/src/phaser3-rex-plugins/templates/ui/chart/Chart.js new file mode 100644 index 0000000000000000000000000000000000000000..ff54125a8ba66f8003c33ea9858f5491d8bfbf82 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/Chart.js @@ -0,0 +1,65 @@ +import Canvas from '../canvas/Canvas.js'; +import SetChart from './SetChart.js'; +import GetChartDataset from './GetChartDataset.js'; +import GetChartData from './GetChartData.js'; +import SetChartData from './SetChartData.js'; +import UpdateChart from './UpdateChart.js'; + +// This plugin does not contain chart.js +// Load chart.js in preload stage - +// scene.load.script('chartjs', 'https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.8.0/Chart.min.js'); + +class Chart extends Canvas { + constructor(scene, x, y, width, height, config) { + super(scene, x, y, width, height); + this.type = 'rexChart'; + this.chart = undefined; + + if (config !== undefined) { + this.setChart(config); + } + } + + destroy(fromScene) { + // This Game Object has already been destroyed + if (!this.scene) { + return; + } + if (this.chart) { + this.chart.destroy(); + this.chart = undefined; + } + super.destroy(fromScene); + } + + resize(width, height) { + if ((width === this.width) && (height === this.height)) { + return this; + } + + super.resize(width, height); + + if (this.chart) { + var chart = this.chart; + chart.height = this.canvas.height; + chart.width = this.canvas.width; + chart.aspectRatio = (chart.height) ? chart.width / chart.height : null; + chart.update(); + } + return this; + } +} + +var methods = { + setChart: SetChart, + getChartDataset: GetChartDataset, + getChartData: GetChartData, + setChartData: SetChartData, + updateChart: UpdateChart, +} +Object.assign( + Chart.prototype, + methods +); + +export default Chart; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/chart/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..94240ec543f7b1232355e85ac3cf3fbf6341734e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/Factory.d.ts @@ -0,0 +1,5 @@ +import Chart from './Chart'; + +export default function ChartFactory( + config?: Chart.IConfig +): Chart; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/chart/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..7b1ce6aefc4c185f293b84af6fe7cdaf6eb1c009 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/Factory.js @@ -0,0 +1,13 @@ +import Chart from './Chart.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('chart', function (x, y, width, height, config) { + var gameObject = new Chart(this.scene, x, y, width, height, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Chart', Chart); + +export default Chart; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/GetChartData.js b/ui/src/phaser3-rex-plugins/templates/ui/chart/GetChartData.js new file mode 100644 index 0000000000000000000000000000000000000000..220aeb86c9356d5e61078c2f9e3aa78578144552 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/GetChartData.js @@ -0,0 +1,15 @@ +var GetChartData = function (datasetIndex, dataIndex) { + var dataset = this.getChartDataset(datasetIndex); + if (dataset === undefined) { + return undefined; + } + if (typeof (dataIndex) === 'string') { + var labels = this.chart.data.labels; + dataIndex = labels.indexOf(dataIndex); + if (dataIndex === -1) { + return undefined; + } + } + return dataset.data[dataIndex]; +} +export default GetChartData; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/GetChartDataset.js b/ui/src/phaser3-rex-plugins/templates/ui/chart/GetChartDataset.js new file mode 100644 index 0000000000000000000000000000000000000000..1f8d3d5326788383d1edd115395c2a24f71d8d44 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/GetChartDataset.js @@ -0,0 +1,21 @@ +var GetChartDataset = function (datasetIndex) { + if (this.chart === undefined) { + return undefined; + } + + if (typeof (datasetIndex) === 'string') { + var datasets = this.chart.data.datasets, dataset; + for (var i = 0, cnt = datasets.length; i < cnt; i++) { + dataset = datasets[i]; + if (dataset.label === datasetIndex) { + return dataset; + } + } + } else { + return this.chart.data.datasets[datasetIndex]; + } + + return undefined; +} + +export default GetChartDataset; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/SetChart.js b/ui/src/phaser3-rex-plugins/templates/ui/chart/SetChart.js new file mode 100644 index 0000000000000000000000000000000000000000..7248679bdf7b9d284319038646f72fdf53c1a5d1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/SetChart.js @@ -0,0 +1,66 @@ +var SetChart = function (config) { + if (!window.Chart) { + var msg = `Can not find chartjs! Load chartjs in preload stage. +scene.load.script('chartjs', 'https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.8.0/Chart.min.js');` + console.error(msg); + return this; + } + + if (this.chart) { + this.chart.destroy(); + } + this.chart = new Chart(this.context, FillConfig(this, config)); + return this; +} + +var FillConfig = function (canvas, config) { + // Get options + if (config === undefined) { + config = {}; + } + if (config.options === undefined) { + config.options = {}; + } + var options = config.options; + + // Fill options + options.responsive = false; + options.maintainAspectRatio = false; + if (!options.hasOwnProperty('devicePixelRatio')) { + options.devicePixelRatio = 1; + } + + // Get animation config + var noAnimation = false; + if (options.animation === undefined) { + options.animation = {}; + } else if (options.animation === false) { + noAnimation = true; + options.animation = {}; + } + var animationConfig = options.animation; + + // Fill animation config + if (noAnimation) { + animationConfig.duration = 0; + } + + var onProgress = animationConfig.onProgress; + animationConfig.onProgress = function (animation) { + if (onProgress) { + onProgress(animation); + } + canvas.needRedraw(); + } + + var onComplete = animationConfig.onComplete; + animationConfig.onComplete = function (animation) { + if (onComplete) { + onComplete(animation); + } + canvas.needRedraw(); + } + return config; +} + +export default SetChart; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/SetChartData.js b/ui/src/phaser3-rex-plugins/templates/ui/chart/SetChartData.js new file mode 100644 index 0000000000000000000000000000000000000000..6acb2a8ae12faf1d13d02886fd339db5750bf383 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/SetChartData.js @@ -0,0 +1,17 @@ +var SetChartData = function (datasetIndex, dataIndex, value) { + if (this.chart === undefined) { + return this; + } + + var dataset = this.getChartDataset(datasetIndex); + if (typeof (dataIndex) === 'string') { + var labels = this.chart.data.labels; + dataIndex = labels.indexOf(dataIndex); + if (dataIndex === -1) { + return this; + } + } + dataset.data[dataIndex] = value; + return this; +}; +export default SetChartData; diff --git a/ui/src/phaser3-rex-plugins/templates/ui/chart/UpdateChart.js b/ui/src/phaser3-rex-plugins/templates/ui/chart/UpdateChart.js new file mode 100644 index 0000000000000000000000000000000000000000..84d6d49322e149b8d58c819b9136826813132096 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/chart/UpdateChart.js @@ -0,0 +1,8 @@ +var UpdateChart = function () { + if (this.chart === undefined) { + return this; + } + this.chart.update(); + return this; +} +export default UpdateChart; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Checkbox.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Checkbox.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..fb2e6098b7bebd90f5e0f4c2386ecf4c9e3ee832 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Checkbox.d.ts @@ -0,0 +1,2 @@ +import Checkbox from '../../../plugins/checkbox'; +export default Checkbox; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Checkbox.js b/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Checkbox.js new file mode 100644 index 0000000000000000000000000000000000000000..c991ae0f45c43e96fec5f19c36cef550be8d0d1a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Checkbox.js @@ -0,0 +1,2 @@ +import Checkbox from '../../../plugins/checkbox.js'; +export default Checkbox; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..fc386f2124c9223046bfe201e34db29368e80bcd --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Factory.d.ts @@ -0,0 +1,19 @@ +import Checkbox from './Checkbox'; + +export default function ( + x: number, y: number, + width: number, height: number, + color?: number, + config?: Checkbox.IConfig +): Checkbox; + +export default function ( + x: number, y: number, + width: number, height: number, + config?: Checkbox.IConfig +): Checkbox; + + +export default function ( + config?: Checkbox.IConfig +): Checkbox; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..f2e16442a0a20e5034c0daf713e70ee1fd43dcd3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/checkbox/Factory.js @@ -0,0 +1,13 @@ +import Checkbox from './Checkbox.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('checkbox', function (x, y, width, height, color, config) { + var gameObject = new Checkbox(this.scene, x, y, width, height, color, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Checkbox', Checkbox); + +export default Checkbox; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/CircleMaskImage.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/CircleMaskImage.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bb69ef4fe2799c2489d4206c1e992b1d5712e4c2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/CircleMaskImage.d.ts @@ -0,0 +1,2 @@ +import CircleMaskImage from '../../../plugins/circlemaskimage'; +export default CircleMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/CircleMaskImage.js b/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/CircleMaskImage.js new file mode 100644 index 0000000000000000000000000000000000000000..dafd452a231491a4edd777ee789ddbd6b6d04f5c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/CircleMaskImage.js @@ -0,0 +1,2 @@ +import CircleMaskImage from '../../../plugins/circlemaskimage.js'; +export default CircleMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a82d8c2f4a1501be8c7aca03fec84bb59fc1b755 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/Factory.d.ts @@ -0,0 +1,9 @@ +import CircleMaskImage from './CircleMaskImage'; + +export default function ( + x?: number, y?: number, + key?: string, frame?: string, + config?: + null | 0 | 1 | 2 | 'circle' | 'ellipse' | 'roundRectangle' | + CircleMaskImage.IConfig +): CircleMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..33a5423954aec44a4cbf70f229b09dfdfe66053a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circlemaskimage/Factory.js @@ -0,0 +1,13 @@ +import CircleMaskImage from './CircleMaskImage.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('circleMaskImage', function (x, y, key, frame, config) { + var gameObject = new CircleMaskImage(this.scene, x, y, key, frame, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.CircleMaskImage', CircleMaskImage); + +export default CircleMaskImage; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/CircularProgress.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/CircularProgress.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ae26052e994608094f338383256d05df49fc5c79 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/CircularProgress.d.ts @@ -0,0 +1,2 @@ +import CircularProgress from "../../../plugins/circularprogress"; +export default CircularProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/CircularProgress.js b/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/CircularProgress.js new file mode 100644 index 0000000000000000000000000000000000000000..bd8b0b1ac1db1e3980e2a6268ca5e84182f3eb22 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/CircularProgress.js @@ -0,0 +1,2 @@ +import CircularProgress from '../../../plugins/circularprogress.js'; +export default CircularProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b938fd0546c80efdd2f9a971d900de644992259e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/Factory.d.ts @@ -0,0 +1,13 @@ +import CircularProgress from './CircularProgress'; + +export default function ( + config?: CircularProgress.IConfig +): CircularProgress; + +export default function ( + x?: number, y?: number, + radius?: number, + barColor?: string | number, + value?: number, + config?: CircularProgress.IConfig +): CircularProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..44250496e81fda884353bb1c80da38d636728a16 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circularprogress/Factory.js @@ -0,0 +1,13 @@ +import CircularProgress from './CircularProgress.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('circularProgress', function (x, y, radius, barColor, value, config) { + var gameObject = new CircularProgress(this.scene, x, y, radius, barColor, value, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.CircularProgress', CircularProgress); + +export default CircularProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/CircularProgressCanvas.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/CircularProgressCanvas.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..93fff3e5b98cc18531d90504f37dd53c268e82b2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/CircularProgressCanvas.d.ts @@ -0,0 +1,2 @@ +import CircularProgressCanvas from "../../../plugins/circularprogresscanvas"; +export default CircularProgressCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/CircularProgressCanvas.js b/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/CircularProgressCanvas.js new file mode 100644 index 0000000000000000000000000000000000000000..a28f984413a285e8cace9ec5cbe0d2fa615b8cc6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/CircularProgressCanvas.js @@ -0,0 +1,2 @@ +import CircularProgressCanvas from '../../../plugins/circularprogresscanvas.js'; +export default CircularProgressCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2b95a752323b9ceb2669e63463490207a7f1a760 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/Factory.d.ts @@ -0,0 +1,13 @@ +import CircularProgressCanvas from './CircularProgressCanvas'; + +export default function ( + config?: CircularProgressCanvas.IConfig +): CircularProgressCanvas; + +export default function ( + x?: number, y?: number, + radius?: number, + barColor?: string | number, + value?: number, + config?: CircularProgressCanvas.IConfig +): CircularProgressCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..8676ce40640171e3346861edb0bbedb37c96ab77 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/circularprogresscanvas/Factory.js @@ -0,0 +1,13 @@ +import CircularProgressCanvas from './CircularProgressCanvas.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('circularProgressCanvas', function (x, y, radius, barColor, value, config) { + var gameObject = new CircularProgressCanvas(this.scene, x, y, radius, barColor, value, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.CircularProgressCanvas', CircularProgressCanvas); + +export default CircularProgressCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/click/Click.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/click/Click.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..01b6b406ece47310eb8e94ea58264fbabc1fc34b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/click/Click.d.ts @@ -0,0 +1,2 @@ +import Click from '../../../plugins/button'; +export default Click; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/click/Click.js b/ui/src/phaser3-rex-plugins/templates/ui/click/Click.js new file mode 100644 index 0000000000000000000000000000000000000000..093ae2ad896ba15f081f0fd5f1665938221c0439 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/click/Click.js @@ -0,0 +1,2 @@ +import Click from '../../../plugins/button.js' +export default Click; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/click/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/click/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..448177fa9e71a4fa977b2da4a9ded95e21d08a35 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/click/Factory.d.ts @@ -0,0 +1,7 @@ +// import * as Phaser from 'phaser'; +import Click from "./Click"; + +export default function ( + gameObject: Phaser.GameObjects.GameObject, + config?: Click.IConfig +): Click; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/click/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/click/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..9158fc1eb1df9be583d2b23d7601d216ecfdde3a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/click/Factory.js @@ -0,0 +1,11 @@ +import Click from './Click.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('click', function (gameObject, config) { + return new Click(gameObject, config); +}); + +SetValue(window, 'RexPlugins.UI.Click', Click); + +export default Click; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/ClickOutside.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/ClickOutside.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..576f9c7a5f5a5da09443c2fa211303a0c73fcb40 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/ClickOutside.d.ts @@ -0,0 +1,2 @@ +import ClickOutside from '../../../plugins/clickoutside'; +export default ClickOutside; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/ClickOutside.js b/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/ClickOutside.js new file mode 100644 index 0000000000000000000000000000000000000000..5527388e1dbf20ae4b9197790763693a0b740311 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/ClickOutside.js @@ -0,0 +1,2 @@ +import ClickOutside from '../../../plugins/clickoutside.js' +export default ClickOutside; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..744850f15da0f31086ed59345b7c2abb5a91cea6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/Factory.d.ts @@ -0,0 +1,7 @@ +// import * as Phaser from 'phaser'; +import ClickOutside from "./ClickOutside"; + +export default function ( + gameObject: Phaser.GameObjects.GameObject, + config?: ClickOutside.IConfig +): ClickOutside; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..0d818d15be8d8aa6866ba8e9869d97e5d2243f9a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/clickoutside/Factory.js @@ -0,0 +1,11 @@ +import ClickOutside from './ClickOutside.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('clickOutside', function (gameObject, config) { + return new ClickOutside(gameObject, config); +}); + +SetValue(window, 'RexPlugins.UI.ClickOutside', ClickOutside); + +export default ClickOutside; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/ColorComponents.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/ColorComponents.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..826d9628debf9f2424f136ccbd9c737c13113d39 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/ColorComponents.d.ts @@ -0,0 +1,60 @@ +import Sizer from '../../sizer/Sizer'; +import RoundRectangle from '../../roundrectangle/RoundRectangle'; +import Label from '../../label/Label'; +import CanvasInput from '../../canvasinput/CanvasInput'; + +export default ColorComponents; + +declare namespace ColorComponents { + + interface IFormatLabelConfig { + space?: { + left?: number, right?: number, top?: number, bottom?: number, + }, + + background?: RoundRectangle.IConfig, + + text?: Phaser.GameObjects.TextStyle, + expandTextWidth?: boolean, + expandTextHeight?: boolean, + + align?: Label.AlignTypes, + } + + interface IConfig extends Sizer.IConfig { + background?: Phaser.GameObjects.GameObject, + + formatLabel?: Phaser.GameObjects.GameObject | IFormatLabelConfig; + + inputText0?: Phaser.GameObjects.GameObject, + inputText1?: Phaser.GameObjects.GameObject, + inputText2?: Phaser.GameObjects.GameObject, + inputText?: CanvasInput.IConfig, + + proportion?: { + formatLabel?: number, + + }, + + valuechangeCallback: (newValue: number, oldValue: number, colorComponents: ColorComponents) => void, + + value?: number + } +} + +declare class ColorComponents extends Sizer { + constructor( + scene: Phaser.Scene, + config?: ColorComponents.IConfig + ); + + setValue(value: number): this; + value: number; + + setColor(color: number): this; + color: number; + + setColorFormat(colorFormat: 'RGB' | 'HSV'): this; + toggleColorFormat(): this; + colorFormat: 'RGB' | 'HSV'; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/ColorComponents.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/ColorComponents.js new file mode 100644 index 0000000000000000000000000000000000000000..1fdaed5282c2198c7fb17f7ee76f601f5a2e28b7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/ColorComponents.js @@ -0,0 +1,187 @@ +import Sizer from '../../sizer/Sizer.js'; +import IsGameObject from '../../../../plugins/utils/system/IsGameObject.js'; +import CreateLabel from '../../utils/build/CreateLabel.js'; +import CreateInputText from '../../utils/build/CreateInputText.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; +const Color = Phaser.Display.Color; +const ColorToRGBA = Phaser.Display.Color.ColorToRGBA; +const HSVToRGB = Phaser.Display.Color.HSVToRGB; +const Clamp = Phaser.Math.Clamp; + +class ColorComponents extends Sizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + config.orientation = 0; + super(scene, config); + this.type = 'rexColorComponents'; + + this.colorObject = new Color(); + + // Add elements + var background = GetValue(config, 'background', undefined); + + var formatLabel = GetValue(config, 'formatLabel', undefined); + if (!IsGameObject(formatLabel)) { + formatLabel = CreateLabel(scene, formatLabel) + .resetDisplayContent(); + } + + var components = []; + if (config.inputText0 && config.inputText1 && config.inputText2) { + components.push(config.inputText0); + components.push(config.inputText1); + components.push(config.inputText2); + } else { + var inputTextConfig = GetValue(config, 'inputText'); + for (var i = 0; i < 3; i++) { + var inputText = CreateInputText(scene, inputTextConfig) + .setMaxLength(3) + .setNumberInput() + + components.push(inputText); + } + } + + if (background) { + this.addBackground(background); + } + + var proportion = GetValue(config, 'proportion.formatLabel', 0); + var defaultExpand = (formatLabel.isRexContainerLite) ? true : false; + var expand = GetValue(config, 'expand.formatLabel', defaultExpand); + this.add( + formatLabel, + { proportion: proportion, expand: expand } + ); + + var proportion = (GetValue(inputTextConfig, 'width') === undefined) ? 1 : 0; + var expand = (GetValue(inputTextConfig, 'height') === undefined) ? true : false; + for (var i = 0, cnt = components.length; i < cnt; i++) { + this.add( + components[i], + { proportion: proportion, expand: expand } + ) + } + + this.addChildrenMap('background', background); + this.addChildrenMap('formatLabel', formatLabel); + this.addChildrenMap('components', components); + + this.onClick(formatLabel, this.toggleColorFormat, this); + + for (var i = 0, cnt = components.length; i < cnt; i++) { + components[i].on('close', function () { + this.updateColorObject(); + this.setValue(this.colorObject.color); + }, this); + } + + var callback = GetValue(config, 'valuechangeCallback', null); + if (callback !== null) { + var scope = GetValue(config, 'valuechangeCallbackScope', undefined); + this.on('valuechange', callback, scope); + } + + formatLabel.setText('RGB'); + this.setValue(GetValue(config, 'value', 0xffffff)); + } + + get value() { + return this._value; + } + + set value(value) { + value = Clamp(Math.floor(value), 0, 0xffffff); + + if (this._value === value) { + return; + } + + this._value = value; + + this.colorObject.setFromRGB(ColorToRGBA(value)); + this.updateComponents(); + + this.emit('valuechange', this._value); + } + + setValue(value) { + this.value = value; + return this; + } + + get color() { + return this._value; + } + + set color(color) { + this.value = color; + } + + setColor(color) { + this.color = color; + return this; + } + + get colorFormat() { + return this.childrenMap.formatLabel.text; + } + + set colorFormat(value) { + if (this.colorFormat === value) { + return; + } + this.childrenMap.formatLabel.setText(value); + this.updateComponents(); + } + + setColorFormat(colrType) { + this.colorFormat = colrType; + return this; + } + + toggleColorFormat() { + this.colorFormat = (this.colorFormat === 'RGB') ? 'HSV' : 'RGB'; + return this; + } + + updateComponents() { + var components = this.childrenMap.components; + var value0, value1, value2 + if (this.colorFormat === 'RGB') { + value0 = this.colorObject.red; + value1 = this.colorObject.green; + value2 = this.colorObject.blue; + } else { // colorFormat === 'HSV' + value0 = Math.floor(this.colorObject.h * 360); + value1 = Math.floor(this.colorObject.s * 100); + value2 = Math.floor(this.colorObject.v * 100); + } + + components[0].setValue(value0); + components[1].setValue(value1); + components[2].setValue(value2); + return this; + } + + updateColorObject() { + var components = this.childrenMap.components; + if (this.colorFormat === 'RGB') { + var red = Clamp(components[0].value, 0, 255); + var green = Clamp(components[1].value, 0, 255); + var blue = Clamp(components[2].value, 0, 255); + this.colorObject.setTo(red, green, blue); + } else { + var h = Clamp(components[0].value, 0, 359) / 360; + var s = Clamp(components[1].value, 0, 100) / 100; + var v = Clamp(components[2].value, 0, 100) / 100; + this.colorObject.setFromRGB(HSVToRGB(h, s, v)); + } + return this; + } +} + +export default ColorComponents; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..422b94cb2ab57cc7f7d2b8e051d837528b0d8c55 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/Factory.d.ts @@ -0,0 +1,5 @@ +import ColorComponents from './ColorComponents'; + +export default function ( + config?: ColorComponents.IConfig +): ColorComponents; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..ca04d2f0414a015c10fba58e92c8c9df16d19385 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorcomponents/Factory.js @@ -0,0 +1,13 @@ +import ColorComponents from './ColorComponents.js'; +import ObjectFactory from '../../ObjectFactory.js'; +import SetValue from '../../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('colorComponents', function (config) { + var gameObject = new ColorComponents(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.ColorComponents', ColorComponents); + +export default ColorComponents; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/ColorInput.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/ColorInput.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c4c51077af8f6ac7a90522915c567e39e6e8e75f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/ColorInput.d.ts @@ -0,0 +1,59 @@ +import ColorInputBase from '../colorinputbase/ColorInputBase'; +import RoundRectangle from '../../roundrectangle/RoundRectangle'; +import ColorComponents from '../colorcomponents/ColorComponents'; +import CanvasInput from '../../canvasinput/CanvasInput'; + +export default ColorInput; + +declare namespace ColorInput { + type TransitCallbackType = ( + gameObject: Phaser.GameObjects.GameObject, + duration: number + ) => void; + + interface IConfig extends ColorInputBase.IConfig { + colorPicker?: { + width?: number, height?: number, + + background?: RoundRectangle.IConfig, + createBackgroundCallback: ( + scene: Phaser.Scene, + ) => Phaser.GameObjects.GameObject, + + hPalettePosition?: 0 | 1 | 2 | 3 | 'bottom' | 'left' | 'top' | 'right', + + expandDirection?: 0 | 1 | 'down' | 'up', + + easeIn?: number, easeOut?: number, + + transitIn?: TransitCallbackType, + transitOut?: TransitCallbackType, + + bounds?: Phaser.Geom.Rectangle; + + space?: { + left?: number, right?: number, top?: number, bottom?: number, + item?: number, + } + }, + + colorComponents?: { + height?: number, + + formatLabel?: ColorComponents.IFormatLabelConfig, + + inputText?: CanvasInput.IConfig, + + space?: { + left?: number, right?: number, top?: number, bottom?: number, + }, + } + } +} + +declare class ColorInput extends ColorInputBase { + constructor( + scene: Phaser.Scene, + config?: ColorInput.IConfig + ); +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/ColorInput.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/ColorInput.js new file mode 100644 index 0000000000000000000000000000000000000000..0198f7609ccb248c57add02dad283c42528a9c56 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/ColorInput.js @@ -0,0 +1,91 @@ +import ColorInputBase from '../colorinputbase/ColorInputBase.js'; +import Methods from './methods/Methods.js'; +import CreateBackground from '../../utils/build/CreateBackground.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class ColorInput extends ColorInputBase { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + + super(scene, config); + this.type = 'rexColorInput'; + + if (!config.hasOwnProperty('colorPicker')) { + config.colorPicker = { + background: { color: 0x0 } + } + } + + var colorPickerConfig = config.colorPicker; + var hasColorPicker = (colorPickerConfig !== false) && (colorPickerConfig !== null); + + if (hasColorPicker) { + this.setColorPickerSize( + GetValue(colorPickerConfig, 'width', 160), + GetValue(colorPickerConfig, 'height', 170) + ); + + var createBackgroundCallback; + var background = GetValue(colorPickerConfig, 'background'); + if (background) { + createBackgroundCallback = function (scene) { + return CreateBackground(scene, background); + } + } else { + createBackgroundCallback = GetValue(colorPickerConfig, 'createBackgroundCallback'); + } + this.setCreateColorPickerBackgroundCallback(createBackgroundCallback); + + this.setColorPickerHPalettePosition(GetValue(colorPickerConfig, 'hPalettePosition', 0)); + this.setColorPickerExpandDirection(GetValue(colorPickerConfig, 'expandDirection')); + this.setColorPickerEaseInDuration(GetValue(colorPickerConfig, 'easeIn', 200)); + this.setColorPickerEaseOutDuration(GetValue(colorPickerConfig, 'easeOut', 200)); + this.setColorPickerTransitInCallback(GetValue(colorPickerConfig, 'transitIn')); + this.setColorPickerTransitOutCallback(GetValue(colorPickerConfig, 'transitOut')); + this.setColorPickerBounds(GetValue(colorPickerConfig, 'bounds')); + + var colorPickerSpaceConfig = GetValue(colorPickerConfig, 'space'); + if (colorPickerSpaceConfig === undefined) { + colorPickerSpaceConfig = { left: 10, right: 10, top: 10, bottom: 10, item: 8 } + } + this.setColorPickerSpace(colorPickerSpaceConfig); + } + + var colorComponentsConfig = config.colorComponents; + var hasColorComponents = (colorComponentsConfig !== false) && (colorComponentsConfig !== null); + if (hasColorPicker && hasColorComponents) { + this.setColorComponentsHeight(GetValue(colorComponentsConfig, 'height', 30)); + + this.setColorComponentsFormatLabelConfig(GetValue(colorComponentsConfig, 'formatLabel')); + + var colorComponentsInputTextConfig = GetValue(colorComponentsConfig, 'inputText'); + if (!colorComponentsInputTextConfig) { + colorComponentsInputTextConfig = GetValue(config, 'inputText'); + } + this.setColorComponentsInputTextConfig(colorComponentsInputTextConfig); + + var colorComponentsSpace = GetValue(colorComponentsConfig, 'space'); + if (colorComponentsSpace === undefined) { + colorComponentsSpace = { item: 8 } + } + this.setColorComponentsSpace(colorComponentsSpace); + } + + + + var swatch = this.childrenMap.swatch; + if (swatch && hasColorPicker) { + this.onClick(swatch, this.openColorPicker, this); + } + } +} + +Object.assign( + ColorInput.prototype, + Methods, +) + +export default ColorInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f1c9b668851c3225b8728905cd3bb1cc9776e2d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/Factory.d.ts @@ -0,0 +1,5 @@ +import ColorInput from './ColorInput'; + +export default function ( + config?: ColorInput.IConfig +): ColorInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..74c5e93b57599539426ec9ef2f6dd04856609f55 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/Factory.js @@ -0,0 +1,13 @@ +import ColorInput from './ColorInput.js'; +import ObjectFactory from '../../ObjectFactory.js'; +import SetValue from '../../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('colorInput', function (config) { + var gameObject = new ColorInput(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.ColorInput', ColorInput); + +export default ColorInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/ColorPicker.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/ColorPicker.js new file mode 100644 index 0000000000000000000000000000000000000000..22d36b3a727424b51fcaf2c1d4e169cb94021f9c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/ColorPicker.js @@ -0,0 +1,101 @@ +import Sizer from '../../../sizer/Sizer.js'; +import ColorPicker from '../../colorpicker/ColorPicker.js'; +import ColorComponents from '../../colorcomponents/ColorComponents.js'; +import TouchEventStop from '../../../toucheventstop/TouchEventStop.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class ColorPickerPanel extends Sizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + + config.orientation = 1; + super(scene, config); + this.type = 'rexColorInput.ColorPickerPanel'; + + // Add elements + var background = GetValue(config, 'background', undefined); + + var colorPicker = new ColorPicker(scene, { + hPalette: config.hPalette || {}, + svPalette: config.svPalette || {}, + space: { + item: GetValue(config, 'space.hPalette', 8) + } + }); + scene.add.existing(colorPicker); + + var colorComponents; + if (config.colorComponents) { + colorComponents = new ColorComponents(scene, config.colorComponents); + scene.add.existing(colorComponents); + } + + if (background) { + this.addBackground(background); + var touchEventStop = new TouchEventStop(background, { + stopAllLevels: false, + }); + } + + this.add( + colorPicker, + { proportion: 1, expand: true } + ); + + if (colorComponents) { + this.add( + colorComponents, + { proportion: 0, expand: true } + ); + } + + this.addChildrenMap('background', background); + this.addChildrenMap('colorPicker', colorPicker); + this.addChildrenMap('colorComponents', colorComponents); + + colorPicker.on('valuechange', function (value) { + this.setValue(value); + }, this) + + if (colorComponents) { + colorComponents.on('valuechange', function (value) { + this.setValue(value); + }, this) + } + + this.setValue(GetValue(config, 'value', 0xffffff)); + } + + get value() { + return this._value; + } + + set value(value) { + if (this._value === value) { + return; + } + + this._value = value; + + var colorPicker = this.childrenMap.colorPicker; + colorPicker.setValue(value); + + var colorComponents = this.childrenMap.colorComponents; + if (colorComponents) { + colorComponents.setValue(value); + } + + this.emit('valuechange', value); + } + + setValue(value) { + this.value = value; + return this; + } + +} + +export default ColorPickerPanel; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/ConfigurationMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/ConfigurationMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..22f9b489453fb0b1b5cedb6ea5a3fbdb4a99e231 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/ConfigurationMethods.js @@ -0,0 +1,107 @@ +var methods = { + // Color picker + setCreateColorPickerBackgroundCallback(callback) { + this.colorPickerCreateBackgroundCallback = callback; + return this; + }, + + setColorPickerHPalettePosition(position) { + this.colorPickerHPalettePosition = position; + return this; + }, + + setColorPickerExpandDirection(direction) { + if (typeof (direction) === 'string') { + direction = ColorPickerExpandDirections[direction]; + } + this.colorPickerExpandDirection = direction; + return this; + }, + + setColorPickerEaseInDuration(duration) { + if (duration === undefined) { + duration = 0; + } + this.colorPickerEaseInDuration = duration; + return this; + }, + + setColorPickerEaseOutDuration(duration) { + if (duration === undefined) { + duration = 0; + } + this.colorPickerEaseOutDuration = duration; + return this; + }, + + setColorPickerTransitInCallback(callback) { + this.colorPickerTransitInCallback = callback; + // callback = function(gameObject, duration) {} + return this; + }, + + setColorPickerTransitOutCallback(callback) { + this.colorPickerTransitOutCallback = callback; + // callback = function(gameObject, duration) {} + return this; + }, + + setColorPickerBounds(bounds) { + this.colorPickerBounds = bounds; + return this; + }, + + setColorPickerWidth(width) { + this.colorPickerWidth = width; + return this; + }, + + setColorPickerHeight(height) { + this.colorPickerHeight = height; + return this; + }, + + setColorPickerSize(width, height) { + this.setColorPickerWidth(width).setColorPickerHeight(height); + return this; + }, + + setColorPickerSpace(space) { + if (space === undefined) { + space = {}; + } + this.colorPickerSpace = space; + return this; + }, + + // Color components + setColorComponentsHeight(height) { + this.colorComponentsHeight = height; + return this; + }, + + setColorComponentsFormatLabelConfig(config) { + this.colorComponentsFormatLabelConfig = config; + return this; + }, + + setColorComponentsInputTextConfig(config) { + this.colorComponentsInputTextConfig = config; + return this; + }, + + setColorComponentsSpace(space) { + if (space === undefined) { + space = {}; + } + this.colorComponentsSpace = space; + return this; + }, +} + +const ColorPickerExpandDirections = { + down: 0, + up: 1 +} + +export default methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/CreateColorPicker.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/CreateColorPicker.js new file mode 100644 index 0000000000000000000000000000000000000000..b565e1514c4269cb366af861c62860676f42ce4b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/CreateColorPicker.js @@ -0,0 +1,56 @@ +import ColorPicker from './ColorPicker.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +var CreateColorPicker = function (scene) { + var scene = this.scene; + + var background; + var createBackgroundCallback = this.colorPickerCreateBackgroundCallback; + if (createBackgroundCallback) { + background = createBackgroundCallback.call(this, scene); + scene.add.existing(background); + } + + var width = this.colorPickerWidth; + if (width === undefined) { + width = this.width; + } + + var height = this.colorPickerHeight; + if (height === undefined) { + height = width; + } + + var colorComponentsConfig; + if (this.colorComponentsHeight > 0) { + colorComponentsConfig = { + height: this.colorComponentsHeight, + formatLabel: this.colorComponentsFormatLabelConfig, + inputText: this.colorComponentsInputTextConfig, + space: this.colorComponentsSpace, + } + } else { + colorComponentsConfig = false; + } + + var colorPicker = new ColorPicker(scene, { + width: width, height: height, + + background: background, + space: this.colorPickerSpace, + + hPalette: { + position: this.colorPickerHPalettePosition, + }, + + colorComponents: colorComponentsConfig, + + value: this.value + }); + scene.add.existing(colorPicker); + + return colorPicker; +} + +export default CreateColorPicker; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/Methods.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/Methods.js new file mode 100644 index 0000000000000000000000000000000000000000..e8e753b87237a5c0ec7c8e5fc94999e8b9d223a7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/Methods.js @@ -0,0 +1,13 @@ +import ConfigurationMethods from './ConfigurationMethods.js' +import OpenColorPicker from './OpenColorPicker.js'; + +var methods = { + openColorPicker: OpenColorPicker +} + +Object.assign( + methods, + ConfigurationMethods, +); + +export default methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/OpenColorPicker.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/OpenColorPicker.js new file mode 100644 index 0000000000000000000000000000000000000000..123c72353323009575fede993304ae21d56ce377 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinput/methods/OpenColorPicker.js @@ -0,0 +1,53 @@ +import CreateColorPicker from './CreateColorPicker.js'; +import DropDown from '../../../dropdown/DropDown.js'; + +var OpenColorPicker = function () { + if (this.colorPicker) { + return; + } + + // Layout it to get full height + var colorPicker = CreateColorPicker.call(this).layout(); + + var dropDownBehavior = new DropDown(colorPicker, { + // Transition + duration: { + in: this.colorPickerEaseInDuration, + out: this.colorPickerEaseOutDuration + }, + transitIn: this.colorPickerTransitInCallback, + transitOut: this.colorPickerTransitOutCallback, + + // Position + expandDirection: this.colorPickerExpandDirection, + + alignTargetX: this, + alignTargetY: this, + + bounds: this.colorPickerBounds, + + // Close condition + touchOutsideClose: true, + }) + .on('open', function () { + // After popping up + // Can click + colorPicker.on('valuechange', function (value) { + this.setValue(value); + }, this); + }, this) + + .on('close', function () { + this.colorPicker = undefined; + this.dropDownBehavior = undefined; + }, this) + + this.colorPicker = colorPicker; + this.dropDownBehavior = dropDownBehavior; + + this.pin(colorPicker); + + return this; +} + +export default OpenColorPicker; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/ColorInputBase.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/ColorInputBase.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b607ad0a73bb8629d56d198b91c079362ad12c2a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/ColorInputBase.d.ts @@ -0,0 +1,38 @@ +import Sizer from '../../sizer/Sizer'; +import RoundRectangle from '../../roundrectangle/RoundRectangle' +import CanvasInput from '../../canvasinput/CanvasInput'; + +export default ColorInputBase; + +declare namespace ColorInputBase { + interface ISwatchConfig extends RoundRectangle.IConfig { + size?: number, + } + + interface IConfig extends Sizer.IConfig { + background?: Phaser.GameObjects.GameObject, + + swatch?: Phaser.GameObjects.GameObject | ISwatchConfig, + swatchSize?: number, + squareExpandSwatch?: boolean, + + inputText?: CanvasInput.IConfig, + + valuechangeCallback: (newValue: number, oldValue: number, colorPicker: ColorInputBase) => void, + + value?: number | string + } +} + +declare class ColorInputBase extends Sizer { + constructor( + scene: Phaser.Scene, + config?: ColorInputBase.IConfig + ); + + setValue(value: number): this; + value: number; + + setColor(color: number): this; + color: number; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/ColorInputBase.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/ColorInputBase.js new file mode 100644 index 0000000000000000000000000000000000000000..015b25f700f51254fa04343aad382184d2b24bc9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/ColorInputBase.js @@ -0,0 +1,145 @@ +import Sizer from '../../sizer/Sizer.js'; +import CreateSwatch from './methods/CreateSwatch.js'; +import CreateInputText from '../../utils/build/CreateInputText.js'; +import ColorStringToInteger from '../../../../plugins/utils/color/ColorStringToInteger.js'; +import GetHexColorString from '../../../../plugins/utils/color/GetHexColorString.js'; +import SetSwatchColor from './methods/SetSwatchColor.js'; +import ResizeGameObject from '../../../../plugins/utils/size/ResizeGameObject.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; +const Clamp = Phaser.Math.Clamp; + +class ColorInput extends Sizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + config.orientation = 0; + super(scene, config); + this.type = 'rexColorInputLite'; + + // Add elements + var background = GetValue(config, 'background', undefined); + + var swatchConfig = GetValue(config, 'swatch'); + var swatchSize; + if (IsPlainObject(swatchConfig)) { + swatchSize = GetValue(swatchConfig, 'size'); + } + var swatch = CreateSwatch(scene, GetValue(config, 'swatch')); + + var inputTextConfig = GetValue(config, 'inputText', true); + var inputText; + if (inputTextConfig) { + inputText = CreateInputText(scene, inputTextConfig); + } + + if (background) { + this.addBackground(background); + } + + if (swatch) { + swatchSize = GetValue(config, 'swatchSize', swatchSize); + var squareExpandSwatch; + if (swatchSize !== undefined) { + ResizeGameObject(swatch, swatchSize, swatchSize); + squareExpandSwatch = false; + } else { + squareExpandSwatch = GetValue(config, 'squareExpandSwatch', true); + } + + var fitRatio = (squareExpandSwatch) ? 1 : 0; + this.add( + swatch, + { proportion: 0, expand: false, fitRatio: fitRatio } + ); + } + + if (inputText) { + var proportion = (GetValue(inputTextConfig, 'width') === undefined) ? 1 : 0; + var expand = (GetValue(inputTextConfig, 'height') === undefined) ? true : false; + this.add( + inputText, + { proportion: proportion, expand: expand } + ) + } + + this.addChildrenMap('background', background); + this.addChildrenMap('swatch', swatch); + this.addChildrenMap('inputText', inputText); + + + if (inputText) { + inputText.on('close', function () { + this.setValue(inputText.value); + }, this); + } + + var callback = GetValue(config, 'valuechangeCallback', null); + if (callback !== null) { + var scope = GetValue(config, 'valuechangeCallbackScope', undefined); + this.on('valuechange', callback, scope); + } + + this.setValue(GetValue(config, 'value', 0x0)); + } + + get value() { + return this._value; + } + + set value(value) { + if (typeof (value) === 'string') { + value = ColorStringToInteger(value); + if (value == null) { + var inputText = this.childrenMap.inputText; + if (inputText) { + inputText.setText(GetHexColorString(this._value)); + } + return; + } + } else { + value = Clamp(Math.floor(value), 0, 0xffffff); + } + + if (this._value === value) { + return; + } + + this._value = value; + + var swatch = this.childrenMap.swatch; + if (swatch) { + SetSwatchColor(swatch, value); + } + + var inputText = this.childrenMap.inputText; + if (inputText) { + inputText.setText(GetHexColorString(value)); + } + + this.emit('valuechange', this._value); + } + + setValue(value) { + this.value = value; + return this; + } + + get color() { + return this._value; + } + + set color(color) { + this.value = color; + } + + setColor(color) { + this.color = color; + return this; + } + +} + +export default ColorInput; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c28fc457fcdadf8ea5d9b056e6c6b5ec2b7bcdbb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/Factory.d.ts @@ -0,0 +1,5 @@ +import ColorInputBase from './ColorInputBase'; + +export default function ( + config?: ColorInputBase.IConfig +): ColorInputBase; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..d81af7fa2efcb971a7a4473a2f82e1c1010832e9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/Factory.js @@ -0,0 +1,13 @@ +import ColorInputBase from './ColorInputBase.js'; +import ObjectFactory from '../../ObjectFactory.js'; +import SetValue from '../../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('colorInputLite', function (config) { + var gameObject = new ColorInputBase(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.ColorInputBase', ColorInputBase); + +export default ColorInputBase; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/methods/CreateSwatch.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/methods/CreateSwatch.js new file mode 100644 index 0000000000000000000000000000000000000000..d3327ef6850d0225d7ca65ee43f9e2868b78c163 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/methods/CreateSwatch.js @@ -0,0 +1,16 @@ +import RoundRectangle from '../../../roundrectangle/RoundRectangle.js'; +import IsGameObject from '../../../../../plugins/utils/system/IsGameObject.js'; + +var CreateSwatch = function (scene, config) { + if (config === false) { + return null; + } else if (IsGameObject(config)) { + return config; + } + + var swatch = new RoundRectangle(scene, config); + scene.add.existing(swatch); + return swatch; +} + +export default CreateSwatch; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/methods/SetSwatchColor.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/methods/SetSwatchColor.js new file mode 100644 index 0000000000000000000000000000000000000000..85a00df87a18e3c8e01e12bdbe1d863895bb2340 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorinputbase/methods/SetSwatchColor.js @@ -0,0 +1,13 @@ +var SetSwatchColor = function (swatch, color) { + if (!swatch) { + return; + } + + if (swatch.setTint) { + swatch.setTint(color); + } else if (swatch.setFillStyle) { + swatch.setFillStyle(color); + } +} + +export default SetSwatchColor; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/ColorPicker.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/ColorPicker.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5e8ea508dc550d7f47e6eb46b6b23d848be5b39e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/ColorPicker.d.ts @@ -0,0 +1,38 @@ +import Sizer from '../../sizer/Sizer'; + +export default ColorPicker; + +declare namespace ColorPicker { + interface IConfig extends Sizer.IConfig { + background?: Phaser.GameObjects.GameObject, + + hPalette?: { + position?: 0 | 1 | 2 | 3 | 'bottom' | 'left' | 'top' | 'right', + size?: number, width?: number, height?: number, + }, + + svPalette?: { + width?: number, height?: number, + }, + + valuechangeCallback: (newValue: number, oldValue: number, colorPicker: ColorPicker) => void, + valuechangeCallbackScope?: Object, + + value?: number, + } +} + +declare class ColorPicker extends Sizer { + constructor( + scene: Phaser.Scene, + config?: ColorPicker.IConfig + ); + + setValue(value: number): this; + value: number; + + setColor(color: number): this; + color: number; + + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/ColorPicker.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/ColorPicker.js new file mode 100644 index 0000000000000000000000000000000000000000..4365258a5f33df8ad5bd5e09fe5455c5ae4ce034 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/ColorPicker.js @@ -0,0 +1,177 @@ +import Sizer from '../../sizer/Sizer.js'; +import HPalette from './methods/HPalette.js'; +import SVPalette from './methods/SVPalette.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class ColorPicker extends Sizer { + constructor(scene, config) { + super(scene, config); + this.type = 'rexColorPicker'; + this.freezePalettes = false; + + // orientation + var hPalettePosition = GetValue(config, 'hPalette.position', 0); + if (typeof (hPalettePosition) === 'string') { + hPalettePosition = HPalettePositionNamesMap[hPalettePosition]; + } + var orientation = ( + (hPalettePosition === 0) || // bottom + (hPalettePosition === 2) // top + ) ? 1 : // y + 0; // x + this.setOrientation(orientation) + + // Add elements + var background = GetValue(config, 'background', undefined); + + var hPaletteWidth, hPaletteHeight; + if (this.orientation === 0) { + var hPaletteWidth = GetValue(config, 'hPalette.width', undefined); + if (hPaletteWidth === undefined) { + hPaletteWidth = GetValue(config, 'hPalette.size', 10); + } + } else { + hPaletteHeight = GetValue(config, 'hPalette.height', undefined); + if (hPaletteHeight === undefined) { + hPaletteHeight = GetValue(config, 'hPalette.size', 10); + } + } + + var hPalette = new HPalette(scene, { + width: hPaletteWidth, + height: hPaletteHeight + }); + scene.add.existing(hPalette); + + var svPaletteWidth = GetValue(config, 'svPalette.width', undefined); + var svPaletteHeight = GetValue(config, 'svPalette.height', undefined); + + var svPalette = new SVPalette(scene, { + width: svPaletteWidth, + height: svPaletteHeight + }); + scene.add.existing(svPalette); + + if (background) { + this.addBackground(background); + } + + var hPaletteAddConfig = { + proportion: 0, expand: true + } + + var svPaletteProportion, svPaletteExpand; + if (this.orientation === 0) { + svPaletteProportion = (svPaletteWidth === undefined) ? 1 : 0; + svPaletteExpand = (svPaletteHeight === undefined) ? true : false; + } else { + svPaletteProportion = (svPaletteHeight === undefined) ? 1 : 0; + svPaletteExpand = (svPaletteWidth === undefined) ? true : false; + } + var svPaletteAddConfig = { + proportion: svPaletteProportion, expand: svPaletteExpand + } + + if ((hPalettePosition === 0) || (hPalettePosition === 3)) { // bottom, right + this + .add(svPalette, svPaletteAddConfig) + .add(hPalette, hPaletteAddConfig) + } else { // left, top + this + .add(hPalette, hPaletteAddConfig) + .add(svPalette, svPaletteAddConfig) + } + + hPalette + .on('input', function () { + svPalette.setHue(hPalette.getHue()); + this.setValue(svPalette.color, true); + }, this) + + svPalette + .on('input', function () { + this.setValue(svPalette.color, true); + }, this) + + this.addChildrenMap('background', background); + this.addChildrenMap('hPalette', hPalette); + this.addChildrenMap('svPalette', svPalette); + + var callback = GetValue(config, 'valuechangeCallback', null); + if (callback !== null) { + var scope = GetValue(config, 'valuechangeCallbackScope', undefined); + this.on('valuechange', callback, scope); + } + + this.setValue(GetValue(config, 'value', 0xffffff)); + } + + get value() { + return this._value; + } + + set value(value) { + if (this._value === value) { + return; + } + + var oldValue = this._value; + this._value = value; + + if (!this.freezePalettes) { + this.updatePalettes(); + } + + this.emit('valuechange', value, oldValue, this); + } + + setValue(value, freezePalettes) { + this.freezePalettes = !!freezePalettes; + this.value = value; + this.freezePalettes = false; + return this; + } + + get color() { + return this._value; + } + + set color(color) { + this.value = color; + } + + setColor(color) { + this.color = color; + return this; + } + + updatePalettes() { + this.childrenMap.hPalette.setColor(this.color); + this.childrenMap.svPalette.setColor(this.color); + return this; + } + + runLayout(parent, newWidth, newHeight) { + if (this.ignoreLayout) { + return this; + } + + super.runLayout(parent, newWidth, newHeight); + + this.childrenMap.hPalette.setMarkerPosition(this.value); + this.childrenMap.svPalette.setMarkerPosition(this.value); + + return this; + } + +} + +var HPalettePositionNamesMap = { + bottom: 0, + left: 1, + top: 2, + right: 3 +} + +export default ColorPicker; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a6c15e53d933125b0d5570f3e75765a7f2e58884 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/Factory.d.ts @@ -0,0 +1,5 @@ +import ColorPicker from './ColorPicker'; + +export default function ( + config?: ColorPicker.IConfig +): ColorPicker; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..ecb53c2aceb6be100e7a9808f49d38ea1ec4185c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/Factory.js @@ -0,0 +1,13 @@ +import ColorPicker from './ColorPicker.js'; +import ObjectFactory from '../../ObjectFactory.js'; +import SetValue from '../../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('colorPicker', function (config) { + var gameObject = new ColorPicker(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.ColorPicker', ColorPicker); + +export default ColorPicker; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/HPalette.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/HPalette.js new file mode 100644 index 0000000000000000000000000000000000000000..bf0bf116f1b707055144d99003aad0c5eb68cb6e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/HPalette.js @@ -0,0 +1,96 @@ +import OverlapSizer from '../../../overlapsizer/OverlapSizer.js'; +import HPaletteCanvas from './HPaletteCanvas.js'; +import RoundRectangle from '../../../roundrectangle/RoundRectangle.js'; +import { LocalToWorld } from './Transform.js'; + +class HPalette extends OverlapSizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + super(scene, config); + + var orientation = (config.width != null) ? 1 : 0; + var paletteCanvas = (new HPaletteCanvas(scene)) + .setOrientation(orientation) + scene.add.existing(paletteCanvas); + this.type = 'rexColorPicker.HPalette'; + + paletteCanvas + .setInteractive() + .on('pointerdown', this.onPaletteCanvasPointerDown, this) + .on('pointermove', this.onPaletteCanvasPointerDown, this) + + var marker = new RoundRectangle(scene, { strokeColor: 0xffffff, strokeWidth: 2 }); + scene.add.existing(marker); + + this + .add( + paletteCanvas, + { key: 'paletteCanvas', expand: true } + ) + .add( + marker, + { key: 'marker', expand: false } + ) + } + + resize(width, height) { + if ((this.width === width) && (this.height === height)) { + return this; + } + + super.resize(width, height); + + var size = Math.min(width, height); + this.childrenMap.marker.setSize(size, size); + + return this; + } + + onPaletteCanvasPointerDown(pointer, localX, localY, event) { + if (!pointer.isDown) { + return; + } + + var paletteCanvas = this.childrenMap.paletteCanvas; + var color = paletteCanvas.getColor(localX, localY); + this.setMarkerPosition(color); + + this.emit('input', color); + } + + get color() { + return this.childrenMap.paletteCanvas.color; + } + + setColor(color) { + if (this.color === color) { + return this; + } + + var paletteCanvas = this.childrenMap.paletteCanvas; + paletteCanvas.setColor(color); + this.setMarkerPosition(color); + + return this; + } + + setMarkerPosition(color) { + var paletteCanvas = this.childrenMap.paletteCanvas; + var marker = this.childrenMap.marker; + + var localXY = paletteCanvas.colorToLocalPosition(color, true); + LocalToWorld(paletteCanvas, localXY.x, localXY.y, marker); + this.resetChildPositionState(marker); + + return this; + } + + getHue(localX, localY) { + var paletteCanvas = this.childrenMap.paletteCanvas; + return paletteCanvas.getHue(localX, localY); + } +} + +export default HPalette; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/HPaletteCanvas.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/HPaletteCanvas.js new file mode 100644 index 0000000000000000000000000000000000000000..d1029c05ca60fa1ffca4528c92485efe960e05e1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/HPaletteCanvas.js @@ -0,0 +1,107 @@ +import Canvas from '../../../canvas/Canvas.js'; +import GetOrientationMode from '../../../utils/GetOrientationMode.js'; +import { DrawHPalette } from '../../../../../plugins/utils/canvas/DrawHSVPalette.js'; + +const Color = Phaser.Display.Color; +const Percent = Phaser.Math.Percent; +const ColorToRGBA = Phaser.Display.Color.ColorToRGBA; +const HSVToRGB = Phaser.Display.Color.HSVToRGB; + +class HPaletteCanvas extends Canvas { + constructor(scene, x, y, width, height, orientation) { + if (x === undefined) { x = 0; } + if (y === undefined) { y = 0; } + if (width === undefined) { width = 2; } + if (height === undefined) { height = 2; } + + super(scene, x, y, width, height); + this.type = 'rexColorPicker.HPaletteCanvas'; + + this.colorObject = new Color(); + + this.setOrientation(orientation); + this.setSize(width, height); + } + + setOrientation(orientation) { + this.orientation = GetOrientationMode(orientation); + return this; + } + + updateTexture() { + DrawHPalette(this.canvas, this.context, this.orientation); + super.updateTexture(); + return this; + } + + get color() { + return this.colorObject.color; + } + + get hue() { + return this._hue; + } + + set hue(value) { + this._hue = value; + } + + getHue(localX, localY) { + if (localX === undefined) { + return this.hue; + } + + if (this.orientation === 0) { + this.hue = Percent(localX, 0, this.width); + } else { + this.hue = Percent(localY, 0, this.height); + } + + return this.hue; + } + + getColor(localX, localY) { + if (localX === undefined) { + return this.color; + } + + var h = this.getHue(localX, localY); + this.colorObject.setFromRGB(HSVToRGB(h, 1, 1)); + return this.colorObject.color; + } + + setColor(color) { + if (this.color === color) { + return this; + } + + return this; + } + + colorToLocalPosition(color, out) { + if (out === undefined) { + out = {}; + } else if (out === true) { + if (LocalXY === undefined) { + LocalXY = {}; + } + out = LocalXY; + } + + this.colorObject.setFromRGB(ColorToRGBA(color)); + + if (this.orientation === 0) { + out.x = this.width * this.colorObject.h; + out.y = this.height / 2; + } else { + out.x = this.width / 2; + out.y = this.height * this.colorObject.h; + } + + return out; + } +} + +var LocalXY = undefined; + +export default HPaletteCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/SVPalette.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/SVPalette.js new file mode 100644 index 0000000000000000000000000000000000000000..747b4a87f9070ce70a424fe3b17d9fb429d5f59e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/SVPalette.js @@ -0,0 +1,79 @@ +import OverlapSizer from '../../../overlapsizer/OverlapSizer.js'; +import SVPaletteCanvas from './SVPaletteCanvas.js'; +import RoundRectangle from '../../../roundrectangle/RoundRectangle.js'; +import { LocalToWorld } from './Transform.js'; + +class SVPalette extends OverlapSizer { + constructor(scene, config) { + super(scene, config); + + var paletteCanvas = new SVPaletteCanvas(scene); + scene.add.existing(paletteCanvas); + this.type = 'rexColorPicker.SVPalette'; + + paletteCanvas + .setInteractive() + .on('pointerdown', this.onPaletteCanvasPointerDown, this) + .on('pointermove', this.onPaletteCanvasPointerDown, this) + + var marker = new RoundRectangle(scene, { radius: 5, strokeColor: 0xffffff, strokeWidth: 2 }); + scene.add.existing(marker); + + this + .add( + paletteCanvas, + { key: 'paletteCanvas', expand: true } + ) + .add( + marker, + { key: 'marker', expand: false } + ) + } + + onPaletteCanvasPointerDown(pointer, localX, localY, event) { + if (!pointer.isDown) { + return; + } + + var paletteCanvas = this.childrenMap.paletteCanvas; + var color = paletteCanvas.getColor(localX, localY); + this.setMarkerPosition(color); + + this.emit('input', color); + } + + get color() { + return this.childrenMap.paletteCanvas.color; + } + + setHue(hue) { + var paletteCanvas = this.childrenMap.paletteCanvas; + paletteCanvas.setHue(hue); // Redraw paletteCanvas + // Position of marker does not change + return this; + } + + setColor(color) { + if (this.color === color) { + return this; + } + + var paletteCanvas = this.childrenMap.paletteCanvas; + paletteCanvas.setColor(color); // Redraw paletteCanvas + this.setMarkerPosition(color); + return this; + } + + setMarkerPosition(color) { + var paletteCanvas = this.childrenMap.paletteCanvas; + var marker = this.childrenMap.marker; + + var localXY = paletteCanvas.colorToLocalPosition(color, true); + LocalToWorld(paletteCanvas, localXY.x, localXY.y, marker); + this.resetChildPositionState(marker); + + return this; + } +} + +export default SVPalette; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/SVPaletteCanvas.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/SVPaletteCanvas.js new file mode 100644 index 0000000000000000000000000000000000000000..7ba907a651432e2976f58175b041d9aa4a2470ea --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/SVPaletteCanvas.js @@ -0,0 +1,98 @@ +import Canvas from '../../../canvas/Canvas.js'; +import { DrawSVPalette } from '../../../../../plugins/utils/canvas/DrawHSVPalette.js'; + +const Color = Phaser.Display.Color; +const Percent = Phaser.Math.Percent; +const ColorToRGBA = Phaser.Display.Color.ColorToRGBA; +const HSVToRGB = Phaser.Display.Color.HSVToRGB; + +class SVPaletteCanvas extends Canvas { + constructor(scene, x, y, width, height, hue) { + if (x === undefined) { x = 0; } + if (y === undefined) { y = 0; } + if (width === undefined) { width = 2; } + if (height === undefined) { height = 2; } + + super(scene, x, y, width, height); + this.type = 'rexColorPicker.SVPaletteCanvas'; + + if (hue === undefined) { + hue = 1; + } + + this.colorObject = new Color(); + + this.setHue(hue); + this.setSize(width, height); + } + + get color() { + return this.colorObject.color; + } + + get hue() { + return this._hue; + } + + set hue(hue) { + if (this._hue === hue) { + return; + } + this._hue = hue; + this.colorObject.h = hue; + this.dirty = true; + } + + setHue(hue) { + this.hue = hue; + return this; + } + + updateTexture() { + DrawSVPalette(this.canvas, this.context, this.hue); + super.updateTexture(); + return this; + } + + getColor(localX, localY) { + if (localX === undefined) { + return this.colorObject.color; + } + + var s = Percent(localX, 0, this.width); + var v = 1 - Percent(localY, 0, this.height); + this.colorObject.setFromRGB(HSVToRGB(this.hue, s, v)); + return this.colorObject.color; + } + + setColor(color) { + if (this.color === color) { + return this; + } + + this.colorObject.setFromRGB(ColorToRGBA(color)); + this.setHue(this.colorObject.h); + return this; + } + + colorToLocalPosition(color, out) { + if (out === undefined) { + out = {}; + } else if (out === true) { + if (LocalXY === undefined) { + LocalXY = {}; + } + out = LocalXY; + } + + this.colorObject.setFromRGB(ColorToRGBA(color)); + out.x = this.width * this.colorObject.s; + out.y = this.height * (1 - this.colorObject.v); + + return out; + } +} + +var LocalXY = undefined; + +export default SVPaletteCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/Transform.js b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/Transform.js new file mode 100644 index 0000000000000000000000000000000000000000..945123d9c5c3efbe98b7558d164b14efa154df50 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/colorinput/colorpicker/methods/Transform.js @@ -0,0 +1,27 @@ +var RotateAround = Phaser.Math.RotateAround; +var LocalToWorld = function (gameObject, localX, localY, out) { + if (out === undefined) { + out = {}; + } else if (out === true) { + if (GlobOut === undefined) { + GlobOut = {}; + } + out = GlobOut; + } + + localX -= (gameObject.width * gameObject.originX); + localY -= (gameObject.height * gameObject.originY); + var point = { + x: localX * gameObject.scaleX, + y: localY * gameObject.scaleY + }; + RotateAround(point, 0, 0, -gameObject.rotation); + + out.x = gameObject.x + localX; + out.y = gameObject.y + localY; + + return out; +} + +var GlobOut; +export { LocalToWorld }; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/ConfirmDialog.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/ConfirmDialog.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..64644b76d2738b83cc935b6b33cff8f7504f4a1c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/ConfirmDialog.d.ts @@ -0,0 +1,127 @@ +import Dialog from '../dialog/Dialog'; +import { GeneralCreateGameObjectCallbackType } from '../utils/build/GeneralCreateGameObjectCallbackType'; +import CreateBackground from '../utils/build/CreateBackground'; +import SimpleLabel from '../simplelabel/SimpleLabel'; +import CreateTextArea from '../utils/build/CreateTextArea'; +import Label from '../label/Label'; + +export default ConfirmDialog; + +declare namespace ConfirmDialog { + type AlignTypes = number | 'left' | 'center' | 'right'; + + interface IConfigClick { + mode: 0 | 1 | 'pointerup' | 'pointerdown' | 'release' | 'press', + clickInterval?: number + } + + interface IConfig { + x?: number, + y?: number, + width?: number, + height?: number, + + space?: { + left?: number, right?: number, top?: number, bottom?: number, + + title?: number, + titleLeft?: number, + titleRight?: number, + + content?: number, + contentLeft?: number, + contentRight?: number, + + actionsLeft?: number, + actionsRight?: number, + action?: number, + + choices?: number, + choicesLeft?: number, + choicesRight?: number, + choice?: number, + choiceLine?: number, + choiceColumn?: number, choiceRow?: number, + choicesBackgroundLeft?: number, + choicesBackgroundRight?: number, + choicesBackgroundTop?: number, + choicesBackgroundBottom?: number, + }; + + background?: CreateBackground.IConfig, + + title?: SimpleLabel.IConfig, + + content?: SimpleLabel.IConfig | CreateTextArea.IConfig, + + buttonMode?: 0 | 1 | 2; + button?: SimpleLabel.IConfig, + buttonA?: SimpleLabel.IConfig, + buttonB?: SimpleLabel.IConfig, + + choicesType?: string, + choice?: SimpleLabel.IConfig, + choicesWidth?: number, + choicesHeight?: number, + + proportion?: { + title?: number, + content?: number, + actions?: number, + choices?: number, + }, + + expand?: { + title?: boolean, + content?: boolean, + actions?: boolean, + choices?: boolean, + }, + + align?: { + title?: AlignTypes, + content?: AlignTypes, + actions?: AlignTypes, + choices?: AlignTypes, + }, + + click?: IConfigClick + } + + interface IResetChoiceDisplayContentConfig extends Label.IResetDisplayContentConfig { + value?: any; + } + + interface IResetDisplayContentConfig { + title?: string | Label.IResetDisplayContentConfig, + + content?: string | Label.IResetDisplayContentConfig, + + buttonA?: string | Label.IResetDisplayContentConfig, + buttonB?: string | Label.IResetDisplayContentConfig, + + choices?: (string | IResetChoiceDisplayContentConfig)[] + } + + interface ICreatorsConfig { + background?: GeneralCreateGameObjectCallbackType, + title?: SimpleLabel.ICreatorsConfig, + content?: SimpleLabel.ICreatorsConfig | CreateTextArea.ICreatorsConfig, + button?: SimpleLabel.ICreatorsConfig, + buttonA?: SimpleLabel.ICreatorsConfig, + buttonB?: SimpleLabel.ICreatorsConfig, + choice?: SimpleLabel.ICreatorsConfig, + } +} + +declare class ConfirmDialog extends Dialog { + constructor( + scene: Phaser.Scene, + config?: ConfirmDialog.IConfig, + creators?: ConfirmDialog.ICreatorsConfig + ); + + resetDisplayContent( + config?: ConfirmDialog.IResetDisplayContentConfig + ): this; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/ConfirmDialog.js b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/ConfirmDialog.js new file mode 100644 index 0000000000000000000000000000000000000000..b11e24cc8d29f49a76d4f4f670a8d487fccd8ddd --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/ConfirmDialog.js @@ -0,0 +1,103 @@ +import Dialog from '../dialog/Dialog.js'; +import Methods from './methods/Methods.js'; +import RegisterEvents from './methods/RegisterEvents.js'; +import DeepClone from '../../../plugins/utils/object/DeepClone.js'; +import CreateBackground from '../utils/build/CreateBackground.js'; +import CreateLabel from '../utils/build/CreateLabel.js'; +import CreateContent from './methods/CreateContent.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; +import HasValue from '../../../plugins/utils/object/HasValue.js'; +import TextArea from '../textarea/TextArea.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class ConfirmDialog extends Dialog { + constructor(scene, config, creators) { + config = (config) ? DeepClone(config) : {}; + + if (creators === undefined) { + creators = {}; + } + + var createBackground = GetValue(creators, 'background', CreateBackground); + if (createBackground) { + config.background = createBackground(scene, config.background); + } else { + delete config.background; + } + + config.title = CreateLabel(scene, config.title, creators.title); + + config.content = CreateContent(scene, config.content, creators.content); + if (config.content instanceof TextArea) { + if (HasValue(config, 'height') && !HasValue(config, 'proportion.content')) { + SetValue(config, 'proportion.content', 1); + } + } + + var defaultButtonConfig = config.button; + var buttonAConfig = config.buttonA || defaultButtonConfig; + var buttonBConfig = config.buttonB || defaultButtonConfig; + var buttonMode = config.buttonMode; + if (buttonMode === undefined) { + buttonMode = (!!buttonAConfig && !!buttonBConfig) ? 2 : + (!!buttonAConfig) ? 1 : + 0; + } + + var defaultButtonCreator = creators.button; + var buttonACreators = creators.buttonA || defaultButtonCreator; + var buttonBCreators = creators.buttonB || defaultButtonCreator; + switch (buttonMode) { + case 2: + config.actions = [ + CreateLabel(scene, buttonAConfig, buttonACreators), + CreateLabel(scene, buttonBConfig, buttonBCreators), + ] + break; + + case 1: + config.actions = [ + CreateLabel(scene, buttonAConfig, buttonACreators), + ] + break; + + case 0: + break; + + default: + config.actions = []; + break; + } + + var defaultChoiceConfig = config.choice; + if (defaultChoiceConfig) { + config.choices = []; + } + + super(scene, config); + this.type = 'rexConfirmDialog'; + + this.buttonMode = buttonMode; + + this.defaultActionConfig = defaultButtonConfig; + this.defaultActionButtonCreator = defaultButtonCreator; + + this.defaultChoiceConfig = defaultChoiceConfig; + this.defaultChoiceCreator = creators.choice; + + var buttons = this.childrenMap.actions; + this.addChildrenMap('buttonA', (buttons) ? buttons[0] : null); + this.addChildrenMap('buttonB', (buttons) ? buttons[1] : null); + + // Interactive + RegisterEvents.call(this); + } +} + +Object.assign( + ConfirmDialog.prototype, + Methods +) + +export default ConfirmDialog; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f0e63af4d2daec3c5c32ee0b480f8b00b3abba8b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/Factory.d.ts @@ -0,0 +1,5 @@ +import ConfirmDialog from './ConfirmDialog'; + +export default function ( + config?: ConfirmDialog.IConfig +): ConfirmDialog; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..ec21019be8c06383c6534e2cecf9fb14427f7ab7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/Factory.js @@ -0,0 +1,13 @@ +import ConfirmDialog from './ConfirmDialog.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('confirmDialog', function (config, creators) { + var gameObject = new ConfirmDialog(this.scene, config, creators); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.ConfirmDialog', ConfirmDialog); + +export default ConfirmDialog; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/CreateContent.js b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/CreateContent.js new file mode 100644 index 0000000000000000000000000000000000000000..8efa6c58978118cc198cc05d75024aba8142fc14 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/CreateContent.js @@ -0,0 +1,32 @@ +import CreateLabel from '../../utils/build/CreateLabel.js'; +import CreateTextArea from '../../utils/build/CreateTextArea.js' + +const GetValue = Phaser.Utils.Objects.GetValue; + +var CreateContent = function (scene, config, creators) { + var type = GetValue(config, '$type'); + if (type === undefined) { + if (config && + (config.hasOwnProperty('slider') || config.hasOwnProperty('scroller')) + ) { + type = 'textarea'; + } + } + + + var gameObject; + switch (type) { + case 'textarea': + gameObject = new CreateTextArea(scene, config, creators); + break; + + default: + gameObject = new CreateLabel(scene, config, creators); + break; + } + + scene.add.existing(gameObject); + return gameObject; +} + +export default CreateContent; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/Methods.js b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/Methods.js new file mode 100644 index 0000000000000000000000000000000000000000..de92c508ece267fba20b4c9aa00d10dc17d75f3f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/Methods.js @@ -0,0 +1,9 @@ +import ResetDisplayContent from './ResetDisplayContent.js'; +import Modal from './Modal.js'; + +var Methods = { + resetDisplayContent: ResetDisplayContent, + modal: Modal, +} + +export default Methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/Modal.js b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/Modal.js new file mode 100644 index 0000000000000000000000000000000000000000..fea389a579f7f01fc8c1589bfe29d1bd9e623b0e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/Modal.js @@ -0,0 +1,29 @@ +import IsFunction from '../../../../plugins/utils/object/IsFunction.js'; +import ModalMethods from '../../basesizer/ModalMethods.js'; + +var Modal = function (config, onClose) { + if (IsFunction(config)) { + onClose = config; + config = undefined; + } + + if (config === undefined) { + config = {}; + } + + var zeroButtonMode = (this.buttonMode === 0); + + if (!config.hasOwnProperty('anyTouchClose')) { + config.anyTouchClose = zeroButtonMode; + } + + if (!config.hasOwnProperty('manualClose')) { + config.manualClose = !zeroButtonMode; + } + + ModalMethods.modal.call(this, config, onClose); + + return this; +} + +export default Modal; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/RegisterEvents.js b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/RegisterEvents.js new file mode 100644 index 0000000000000000000000000000000000000000..a393dc5bb9ef84cee26bc48e9ab25f345a932fb9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/RegisterEvents.js @@ -0,0 +1,41 @@ +var OnPointerOverCallback = function (button) { + if (button.setHoverState) { + button.setHoverState(true); + } +} + +var OnPointerOutCallback = function (button) { + if (button.setHoverState) { + button.setHoverState(false); + } +} + +var OnChoiceButtonStateChange = function (button, groupName, index, value) { + if (button.setActiveState) { + button.setActiveState(value); + } +} + +var OnButtonEnable = function (button) { + if (button.setDisableState) { + button.setDisableState(false); + } +} + +var OnButtonDisable = function (button) { + if (button.setDisableState) { + button.setDisableState(true); + } +} + +var RegisterEvents = function () { + this + .on('button.over', OnPointerOverCallback) + .on('button.out', OnPointerOutCallback) + .on('button.enable', OnButtonEnable) + .on('button.disable', OnButtonDisable) + .on('button.statechange', OnChoiceButtonStateChange) + +} + +export default RegisterEvents; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/ResetDisplayContent.js b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/ResetDisplayContent.js new file mode 100644 index 0000000000000000000000000000000000000000..3a21d143153f52b77d703499a2ab9e1c08ddf851 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/confirmdialog/methods/ResetDisplayContent.js @@ -0,0 +1,115 @@ +import CreateLabel from '../../utils/build/CreateLabel.js'; + +var ResetDisplayContent = function (config) { + if (config === undefined) { + config = {}; + } + + ResetTitle.call(this, config); + ResetContent.call(this, config); + ResetActions.call(this, config); + ResetChoices.call(this, config); + + return this; +} + +var ResetTitle = function (config) { + var title = this.childrenMap.title; + title.resetDisplayContent(config.title); +} + +var ResetContent = function (config) { + var content = this.childrenMap.content; + if (content.resetDisplayContent) { + // Label + content.resetDisplayContent(config.content); + } else { + // TextArea + var text = config.content || ''; + content.setText(text) + } +} + +var ResetActions = function (config) { + var actionButtons = this.childrenMap.actions; + if (!actionButtons) { + return; + } + + var buttonContentArray = config.buttons; + if (!buttonContentArray) { + var buttonA = actionButtons[0]; + if (buttonA) { + buttonA.resetDisplayContent(config.buttonA); + } + + var buttonB = actionButtons[1]; + if (buttonB) { + buttonB.resetDisplayContent(config.buttonB); + } + + } else { + var scene = this.scene; + var defaultActionConfig = this.defaultActionConfig; + var defaultActionButtonCreator = this.defaultActionButtonCreator; + for (var i = 0, cnt = buttonContentArray.length; i < cnt; i++) { + var buttonContent = buttonContentArray[i]; + var button = actionButtons[i]; + if (!button) { + button = CreateLabel(scene, defaultActionConfig, defaultActionButtonCreator); + this.addAction(button); + } + button.show().resetDisplayContent(buttonContent); + } + + this.buttonMode = buttonContentArray.length; + + for (var i = buttonContentArray.length, cnt = actionButtons.length; i < cnt; i++) { + actionButtons[i].hide(); + } + } +} + +var ResetChoices = function (config) { + var choices = this.childrenMap.choices; + if (!choices) { + return; + } + + var buttonContentArray = config.choices; + if (!buttonContentArray) { + buttonContentArray = []; + } + + var scene = this.scene; + var defaultChoiceConfig = this.defaultChoiceConfig; + var defaultActionButtonCreator = this.defaultActionButtonCreator; + for (var i = 0, cnt = buttonContentArray.length; i < cnt; i++) { + var buttonContent = buttonContentArray[i]; + if (typeof (buttonContent) === 'string') { + buttonContent = { text: buttonContent }; + } + + var button = choices[i]; + if (!button) { + button = CreateLabel(scene, defaultChoiceConfig, defaultActionButtonCreator); + this.addChoice(button); + } + + button.show().resetDisplayContent(buttonContent) + + var optionValue; + if (buttonContent.hasOwnProperty('value')) { + optionValue = buttonContent.value; + } else { + optionValue = buttonContent.text; + } + button.setName(optionValue) + } + + for (var i = buttonContentArray.length, cnt = choices.length; i < cnt; i++) { + choices[i].hide(); + } +} + +export default ResetDisplayContent; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/container/Container.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/container/Container.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..68dbf258f8f9d05190a114c6c8bb10933b842bf0 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/container/Container.d.ts @@ -0,0 +1,2 @@ +import Container from '../../../plugins/containerlite'; +export default Container; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/container/Container.js b/ui/src/phaser3-rex-plugins/templates/ui/container/Container.js new file mode 100644 index 0000000000000000000000000000000000000000..239256c5649e185499e8c0ea258881330b30a548 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/container/Container.js @@ -0,0 +1,2 @@ +import Container from '../../../plugins/containerlite.js'; +export default Container; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/container/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/container/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e95eba9ba06402ea6929098aa01be9747043d91a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/container/Factory.d.ts @@ -0,0 +1,8 @@ +// import * as Phaser from 'phaser'; +import Container from "./Container"; + +export default function ( + x?: number, y?: number, + width?: number, height?: number, + children?: Phaser.GameObjects.GameObject[] +): Container; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/container/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/container/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..7b7e558f751e4b706d88ce38bc51e360508a10d8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/container/Factory.js @@ -0,0 +1,13 @@ +import Container from './Container.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('container', function (x, y, width, height, children) { + var gameObject = new Container(this.scene, x, y, width, height, children); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Container', Container); + +export default Container; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/customprogress/CustomProgress.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/customprogress/CustomProgress.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8116e2f82a5b38a7394908436a6f4aea5339dc07 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/customprogress/CustomProgress.d.ts @@ -0,0 +1,2 @@ +import CustomProgress from '../../../plugins/customprogress'; +export default CustomProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/customprogress/CustomProgress.js b/ui/src/phaser3-rex-plugins/templates/ui/customprogress/CustomProgress.js new file mode 100644 index 0000000000000000000000000000000000000000..72c9f13ffb7702c440169158a2e4f4ba79c6e0ee --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/customprogress/CustomProgress.js @@ -0,0 +1,2 @@ +import CustomProgress from '../../../plugins/customprogress.js'; +export default CustomProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/customprogress/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/customprogress/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..54a5919382c93759cb9fd74af8b877dc93e24903 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/customprogress/Factory.d.ts @@ -0,0 +1,5 @@ +import CustomProgress from "./CustomProgress"; + +export default function ( + config?: CustomProgress.IConfig +): CustomProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/customprogress/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/customprogress/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..9be40cdee19d776e5eed254fa0be4cff4cf02d78 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/customprogress/Factory.js @@ -0,0 +1,13 @@ +import CustomProgress from './CustomProgress.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('customProgress', function (x, y, width, height, config) { + var gameObject = new CustomProgress(this.scene, x, y, width, height, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.CustomProgress', CustomProgress); + +export default CustomProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/customshapes/CustomShapes.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/customshapes/CustomShapes.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a7b6fc7bf5775962f7067cca8cbcddad6ae2cd1a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/customshapes/CustomShapes.d.ts @@ -0,0 +1,2 @@ +import CustomShapes from '../../../plugins/customshapes'; +export default CustomShapes; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/customshapes/CustomShapes.js b/ui/src/phaser3-rex-plugins/templates/ui/customshapes/CustomShapes.js new file mode 100644 index 0000000000000000000000000000000000000000..60aef11f9093da59a18203cd5bee1cda0235b608 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/customshapes/CustomShapes.js @@ -0,0 +1,2 @@ +import CustomShapes from '../../../plugins/customshapes.js'; +export default CustomShapes; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/customshapes/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/customshapes/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3b08950efe6d29bed2fa9523e10fc461ba18be6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/customshapes/Factory.d.ts @@ -0,0 +1,5 @@ +import CustomShapes from "./CustomShapes"; + +export default function ( + config?: CustomShapes.IConfig +): CustomShapes; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/customshapes/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/customshapes/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..e638bf05ff097a671831430ee190c9666b77207f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/customshapes/Factory.js @@ -0,0 +1,13 @@ +import CustomShapes from './CustomShapes.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('customShapes', function (x, y, width, height, config) { + var gameObject = new CustomShapes(this.scene, x, y, width, height, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.CustomShapes', CustomShapes); + +export default CustomShapes; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dialog/Dialog.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/dialog/Dialog.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1011ed3dc2700a0bf43a0ca916c93e7b87e0b9c0 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dialog/Dialog.d.ts @@ -0,0 +1,310 @@ +// import * as Phaser from 'phaser'; +import Sizer from '../sizer/Sizer'; +import { ModalBehavoir } from '../modal/Modal'; + +export default Dialog; + +declare namespace Dialog { + + type AlignTypes = number | 'left' | 'center' | 'right'; + + interface IConfigClick { + mode: 0 | 1 | 'pointerup' | 'pointerdown' | 'release' | 'press', + clickInterval?: number + } + + interface IConfig extends Sizer.IConfig { + space?: { + left?: number, right?: number, top?: number, bottom?: number, + + title?: number, + titleLeft?: number, + titleRight?: number, + + content?: number, + contentLeft?: number, + contentRight?: number, + + description?: number, + descriptionLeft?: number, + descriptionRight?: number, + + choices?: number, + choicesLeft?: number, + choicesRight?: number, + + choice?: number, + choiceLine?: number, + choiceColumn?: number, choiceRow?: number, + choicesBackgroundLeft?: number, + choicesBackgroundRight?: number, + choicesBackgroundTop?: number, + choicesBackgroundBottom?: number, + + actionsLeft?: number, + actionsRight?: number, + + action?: number, + + toolbarItem?: number, + leftToolbarItem?: number, + + }; + + background?: Phaser.GameObjects.GameObject, + + title?: Phaser.GameObjects.GameObject, + + toolbar?: Phaser.GameObjects.GameObject[], + + toolbarBackground?: Phaser.GameObjects.GameObject, + + leftToolbar?: Phaser.GameObjects.GameObject[], + + leftToolbarBackground?: Phaser.GameObjects.GameObject, + + content?: Phaser.GameObjects.GameObject, + + description?: Phaser.GameObjects.GameObject, + + choicesType?: string, + choicesWidth?: number, + choicesHeight?: number, + choices?: Phaser.GameObjects.GameObject[], + choicesBackground?: Phaser.GameObjects.GameObject, + + actions?: Phaser.GameObjects.GameObject[], + actionsBackground?: Phaser.GameObjects.GameObject, + + proportion?: { + title?: number, + content?: number, + description?: number, + choices?: number, + actions?: number, + }, + + expand?: { + title?: boolean, + content?: boolean, + description?: boolean, + choices?: boolean, + actions?: boolean, + }, + + align?: { + title?: AlignTypes, + content?: AlignTypes, + description?: AlignTypes, + choices?: AlignTypes, + actions?: AlignTypes, + }, + + click?: IConfigClick + } + + interface IModalConfig extends ModalBehavoir.IConfig { + defaultBehavior?: boolean, + } + + type CloseEventDataType = { + index: number, + text: string, + button: Phaser.GameObjects.GameObject, + dialog: Dialog, + value: any + } + + type OnModalCloseCallbackType = (data: CloseEventDataType | Dialog) => void; +} + +declare class Dialog extends Sizer { + constructor( + scene: Phaser.Scene, + config?: Dialog.IConfig + ); + + emitChoiceClick( + index: number | Phaser.GameObjects.GameObject + ): this; + + emitActionClick( + index: number | Phaser.GameObjects.GameObject + ): this; + + emitToolbarClick( + index: number | Phaser.GameObjects.GameObject + ): this; + + emitLeftToolbarClick( + index: number | Phaser.GameObjects.GameObject + ): this; + + setChoiceEnable( + index: number | Phaser.GameObjects.GameObject, + enable?: boolean + ): this; + + setActionEnable( + index: number | Phaser.GameObjects.GameObject, + enable?: boolean + ): this; + + setToolbarEnable( + index: number | Phaser.GameObjects.GameObject, + enable?: boolean + ): this; + + setLeftToolbarEnable( + index: number | Phaser.GameObjects.GameObject, + enable?: boolean + ): this; + + toggleChoiceEnable( + index: number | Phaser.GameObjects.GameObject + ): this; + + toggleActionEnable( + index: number | Phaser.GameObjects.GameObject + ): this; + + toggleToolbarEnable( + index: number | Phaser.GameObjects.GameObject + ): this; + + toggleLeftToolbarEnable( + index: number | Phaser.GameObjects.GameObject + ): this; + + getChoiceEnable( + index: number | Phaser.GameObjects.GameObject + ): boolean; + + getActionEnable( + index: number | Phaser.GameObjects.GameObject + ): boolean; + + getToolbarEnable( + index: number | Phaser.GameObjects.GameObject + ): boolean; + + getLeftToolbarEnable( + index: number | Phaser.GameObjects.GameObject + ): boolean; + + addChoice(gameObject: Phaser.GameObjects.GameObject): this; + + addAction(gameObject: Phaser.GameObjects.GameObject): this; + + addToolbar(gameObject: Phaser.GameObjects.GameObject): this; + + addLeftToolbar(gameObject: Phaser.GameObjects.GameObject): this; + + removeChoice( + index: number | Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + removeAction( + index: number | Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + removeToolbar( + index: number | Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + removeLeftToolbar( + index: number | Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + clearChoices(destroyChild?: boolean): this; + + clearActions(destroyChild?: boolean): this; + + clearToolbar(destroyChild?: boolean): this; + + clearLeftToolbar(destroyChild?: boolean): this; + + showChoice( + index: number | Phaser.GameObjects.GameObject + ): this; + + showAction( + index: number | Phaser.GameObjects.GameObject + ): this; + + showToolbar( + index: number | Phaser.GameObjects.GameObject + ): this; + + showLeftToolbar( + index: number | Phaser.GameObjects.GameObject + ): this; + + hideChoice( + index: number | Phaser.GameObjects.GameObject + ): this; + + hideAction( + index: number | Phaser.GameObjects.GameObject + ): this; + + hideToolbar( + index: number | Phaser.GameObjects.GameObject + ): this; + + hideLeftToolbar( + index: number | Phaser.GameObjects.GameObject + ): this; + + forEachChoice( + callback: (button: Phaser.GameObjects.GameObject, index: number, buttons: Phaser.GameObjects.GameObject[]) => void, + scop?: unknown + ): this; + + forEachAction( + callback: (button: Phaser.GameObjects.GameObject, index: number, buttons: Phaser.GameObjects.GameObject[]) => void, + scop?: unknown + ): this; + + forEachToolbar( + callback: (button: Phaser.GameObjects.GameObject, index: number, buttons: Phaser.GameObjects.GameObject[]) => void, + scop?: unknown + ): this; + + forEachLeftToolbar( + callback: (button: Phaser.GameObjects.GameObject, index: number, buttons: Phaser.GameObjects.GameObject[]) => void, + scop?: unknown + ): this; + + setAllButtonsEnable(enable?: boolean): this; + + getChoicesButtonState(name: string): boolean; + getChoicesButtonState(): { [name: string]: boolean }; + + getChoicessButtonStates(): { [name: string]: boolean }; + + setChoicesButtonState(name: string, state?: boolean): this; + + clearChoicesButtonStates(): this; + + getChoicesSelectButtonName(): string; + + modal( + config?: Dialog.IModalConfig, + onClose?: Dialog.OnModalCloseCallbackType + ): this; + + modal( + onClose?: Dialog.OnModalCloseCallbackType + ): this; + + modalPromise( + config?: Dialog.IModalConfig, + ): Promise; + + modalClose(closeEventData?: Dialog.CloseEventDataType): this; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dialog/Dialog.js b/ui/src/phaser3-rex-plugins/templates/ui/dialog/Dialog.js new file mode 100644 index 0000000000000000000000000000000000000000..d0731dd19b21505a95c46ce39cf63cdee77f2175 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dialog/Dialog.js @@ -0,0 +1,306 @@ +import Sizer from '../sizer/Sizer.js'; +import OverlapSizer from '../overlapsizer/OverlapSizer.js'; +import Buttons from '../buttons/Buttons.js'; +import FixWidthButtons from '../fixwidthbuttons/FixWidthButtons.js'; +import GridButtons from '../gridbuttons/GridButtons.js'; +import Methods from './methods/Methods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Dialog extends Sizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + // Create sizer + config.orientation = 1; // Top to bottom + super(scene, config); + this.type = 'rexDialog'; + this.eventEmitter = GetValue(config, 'eventEmitter', this); + + // Add elements + var background = GetValue(config, 'background', undefined); + var title = GetValue(config, 'title', undefined); + var toolbar = GetValue(config, 'toolbar', undefined); + var toolbarBackground = GetValue(config, 'toolbarBackground', undefined); + var leftToolbar = GetValue(config, 'leftToolbar', undefined); + var leftToolbarBackground = GetValue(config, 'leftToolbarBackground', undefined); + var content = GetValue(config, 'content', undefined); + var description = GetValue(config, 'description', undefined); + var choicesSizer; + var choices = GetValue(config, 'choices', undefined); + var choicesBackground = GetValue(config, 'choicesBackground', undefined); + var actionsSizer; + var actions = GetValue(config, 'actions', undefined); + var actionsBackground = GetValue(config, 'actionsBackground', undefined); + var clickConfig = GetValue(config, 'click', undefined); + + if (background) { + this.addBackground(background); + } + + var toolbarSizer; + if (toolbar) { + toolbarSizer = new Buttons(scene, { + groupName: 'toolbar', + background: toolbarBackground, + buttons: toolbar, + orientation: 0, // Left-right + space: { item: GetValue(config, 'space.toolbarItem', 0) }, + click: clickConfig, + eventEmitter: this.eventEmitter, + }); + } + + var leftToolbarSizer; + if (leftToolbar) { + leftToolbarSizer = new Buttons(scene, { + groupName: 'leftToolbar', + background: leftToolbarBackground, + buttons: leftToolbar, + orientation: 0, // Left-right + space: { item: GetValue(config, 'space.leftToolbarItem', 0) }, + click: clickConfig, + eventEmitter: this.eventEmitter, + }); + } + + // title or toolbar or leftToolbar + if (title || toolbar || leftToolbar) { + var titleExpandWidth = !!title && GetValue(config, 'expand.title', true); + var titleAlign = GetValue(config, 'align.title', 'center'); + var useOverlapSizer = + // Has title, title is not exapnd-width, title align to center + (title && !titleExpandWidth && (titleAlign === 'center')) || + // No title + (!title && (toolbar || leftToolbar)); + var useSizer = !useOverlapSizer; + + var titleSizer; + if (useSizer) { + titleSizer = new Sizer(scene, { orientation: 0 }); + } else { + titleSizer = new OverlapSizer(scene); + } + + var titleChildExpand = (useSizer) ? true : { height: true }; + + // Add leftToolbar + if (leftToolbarSizer) { + titleSizer.add( + leftToolbarSizer, + { align: 'left', expand: titleChildExpand } + ); + } + + // Add title + if (title) { + // Add space if not expand, align to right + if (useSizer && !titleExpandWidth && (titleAlign === 'right')) { + titleSizer.addSpace(); + } + + var padding = { + left: GetValue(config, 'space.titleLeft', 0), + right: GetValue(config, 'space.titleRight', 0) + } + var proportion = (titleExpandWidth) ? 1 : 0; + titleSizer.add( + title, + { align: titleAlign, proportion: proportion, expand: titleChildExpand, padding: padding } + ); + + // Add space if not expand, align to left + if (useSizer && !titleExpandWidth && (titleAlign === 'left')) { + titleSizer.addSpace(); + } + } + + // Add toolbar + if (toolbarSizer) { + // Add space if not title + if (useSizer && !title) { + titleSizer.addSpace(); + } + titleSizer.add( + toolbarSizer, + { align: 'right', expand: titleChildExpand } + ); + } + + // Add sizer to dialog + var titleSpace = GetValue(config, 'space.title', 0); + var padding; + if (content || description || choices || actions) { + padding = { bottom: titleSpace }; + } + var proportion = GetValue(config, 'proportion.title', 0); + this.add( + titleSizer, + { padding: padding, proportion: proportion, expand: true } + ); + } + + if (content) { + var align = GetValue(config, 'align.content', 'center'); + var contentSpace = GetValue(config, 'space.content', 0); + var padding = { + left: GetValue(config, 'space.contentLeft', 0), + right: GetValue(config, 'space.contentRight', 0), + bottom: ((description || choices || actions) ? contentSpace : 0) + } + var proportion = GetValue(config, 'proportion.content', 0); + var expand = GetValue(config, 'expand.content', true); + this.add( + content, + { align: align, padding: padding, proportion: proportion, expand: expand } + ); + } + + if (description) { + var align = GetValue(config, 'align.description', 'center'); + var descriptionSpace = GetValue(config, 'space.description', 0); + var padding = { + left: GetValue(config, 'space.descriptionLeft', 0), + right: GetValue(config, 'space.descriptionRight', 0), + bottom: ((choices || actions) ? descriptionSpace : 0) + } + var proportion = GetValue(config, 'proportion.description', 0); + var expand = GetValue(config, 'expand.description', true); + this.add( + description, + { align: align, padding: padding, proportion: proportion, expand: expand } + ); + } + + if (choices) { + var choicesType = GetValue(config, 'choicesType', '').split('-'); + var ButtonsClass = Contains(choicesType, 'wrap') ? FixWidthButtons : + Contains(choicesType, 'grid') ? GridButtons : + Buttons; + var buttonsType = Contains(choicesType, 'radio') ? 'radio' : + Contains(choicesType, 'checkboxes') ? 'checkboxes' : undefined; + + var space = { + left: GetValue(config, 'space.choicesBackgroundLeft', 0), + right: GetValue(config, 'space.choicesBackgroundRight', 0), + top: GetValue(config, 'space.choicesBackgroundTop', 0), + bottom: GetValue(config, 'space.choicesBackgroundBottom', 0), + }; + var itemSpace = GetValue(config, 'space.choice', 0); + if (ButtonsClass === Buttons) { + space.item = itemSpace; + } else if (ButtonsClass === FixWidthButtons) { + space.item = itemSpace; + space.line = GetValue(config, 'space.choiceLine', itemSpace); + } else { // GridButtons + space.column = GetValue(config, 'space.choiceColumn', itemSpace); + space.row = GetValue(config, 'space.choiceRow', itemSpace); + } + + var choicesConfig = { + width: GetValue(config, 'choicesWidth', undefined), + height: GetValue(config, 'choicesHeight', undefined), + groupName: 'choices', + buttonsType: buttonsType, + background: choicesBackground, + buttons: choices, + space: space, + click: clickConfig, + eventEmitter: this.eventEmitter, + setValueCallback: GetValue(config, 'choicesSetValueCallback', undefined), + setValueCallbackScope: GetValue(config, 'choicesSetValueCallbackScope', undefined) + }; + + if (ButtonsClass === Buttons) { + choicesConfig.orientation = Contains(choicesType, 'x') ? 0 : 1; + } + + choicesSizer = new ButtonsClass(scene, choicesConfig); + var choicesSpace = GetValue(config, 'space.choices', 0); + var padding = { + left: GetValue(config, 'space.choicesLeft', 0), + right: GetValue(config, 'space.choicesRight', 0), + bottom: ((actions) ? choicesSpace : 0) + } + var align = GetValue(config, 'align.choices', 'center'); + var proportion = GetValue(config, 'proportion.choices', 0); + var expand = GetValue(config, 'expand.choices', true); + this.add( + choicesSizer, + { align: align, padding: padding, proportion: proportion, expand: expand } + ); + + this.buttonsType = buttonsType; + } + + if (actions) { + actionsSizer = new Buttons(scene, { + groupName: 'actions', + background: actionsBackground, + buttons: actions, + orientation: 0, // Left-right + space: { item: GetValue(config, 'space.action', 0) }, + expand: GetValue(config, 'expand.actions', false), + align: GetValue(config, 'align.actions', 'center'), + click: clickConfig, + eventEmitter: this.eventEmitter, + }) + var padding = { + left: GetValue(config, 'space.actionsLeft', 0), + right: GetValue(config, 'space.actionsRight', 0) + } + var proportion = GetValue(config, 'proportion.action', 0); + this.add( + actionsSizer, + { align: 'center', padding: padding, proportion: proportion, expand: true } + ); + } + + EmitButtonEvent(this, 'click'); + EmitButtonEvent(this, 'over'); + EmitButtonEvent(this, 'out'); + EmitButtonEvent(this, 'enable'); + EmitButtonEvent(this, 'disable'); + + this.addChildrenMap('background', background); + this.addChildrenMap('title', title); + this.addChildrenMap('toolbar', toolbar); + this.addChildrenMap('leftToolbar', leftToolbar); + this.addChildrenMap('content', content); + this.addChildrenMap('description', description); + this.addChildrenMap('choices', (choicesSizer) ? choicesSizer.buttons : undefined); + this.addChildrenMap('actions', (actionsSizer) ? actionsSizer.buttons : undefined); + this.addChildrenMap('choicesSizer', choicesSizer); + this.addChildrenMap('actionsSizer', actionsSizer); + this.addChildrenMap('toolbarSizer', toolbarSizer); + this.addChildrenMap('leftToolbarSizer', leftToolbarSizer); + } +} + +var Contains = function (arr, item) { + return arr.indexOf(item) !== -1; +} + +var ButtonsGroupEventNameMap = { + actions: 'action', + choices: 'choice', + toolbar: 'toolbar', + leftToolbar: 'leftToolbar' +} + +var EmitButtonEvent = function (dialog, postEventName) { + dialog.on(`button.${postEventName}`, function (button, groupName, index, pointer, event) { + if (!ButtonsGroupEventNameMap.hasOwnProperty(groupName)) { + return + } + dialog.emit(`${ButtonsGroupEventNameMap[groupName]}.${postEventName}`, button, index, pointer, event); + }) +} + +Object.assign( + Dialog.prototype, + Methods +); + +export default Dialog; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dialog/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/dialog/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..571e99694446d8d3f225026bf6ef6fd83ac5eba1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dialog/Factory.d.ts @@ -0,0 +1,5 @@ +import Dialog from './Dialog'; + +export default function ( + config?: Dialog.IConfig +): Dialog; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dialog/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/dialog/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..93ee0876f5a37a4503c2c50c7a69a4f1108bde8a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dialog/Factory.js @@ -0,0 +1,13 @@ +import Dialog from './Dialog.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('dialog', function (config) { + var gameObject = new Dialog(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Dialog', Dialog); + +export default Dialog; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/ButtonMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/ButtonMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..585de5d015e63e885af5dd07571b2dea339a3f42 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/ButtonMethods.js @@ -0,0 +1,333 @@ +export default { + getChoice(index) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + return choicesSizer.getButton(index); + } else { + return undefined; + } + }, + + getAction(index) { + return this.childrenMap.actionsSizer.getButton(index); + }, + + getToolbar(index) { + return this.childrenMap.toolbarSizer.getButton(index); + }, + + getLeftToolbar(index) { + return this.childrenMap.leftToolbarSizer.getButton(index); + }, + + setChoiceEnable(index, enabled) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.setButtonEnable(index, enabled); + } + return this; + }, + + setActionEnable(index, enabled) { + this.childrenMap.actionsSizer.setButtonEnable(index, enabled); + return this; + }, + + setToolbarEnable(index, enabled) { + this.childrenMap.toolbarSizer.setButtonEnable(index, enabled); + return this; + }, + + setLeftToolbarEnable(index, enabled) { + this.childrenMap.leftToolbarSizer.setButtonEnable(index, enabled); + return this; + }, + + toggleChoiceEnable(index) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.toggleButtonEnable(index); + } + return this; + }, + + toggleActionEnable(index) { + this.childrenMap.actionsSizer.toggleButtonEnable(index); + return this; + }, + + toggleToolbarEnable(index) { + this.childrenMap.toolbarSizer.toggleButtonEnable(index); + return this; + }, + + toggleLeftToolbarEnable(index) { + this.childrenMap.leftToolbarSizer.toggleButtonEnable(index); + return this; + }, + + getChoiceEnable(index) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + return choicesSizer.getButtonEnable(index); + } else { + return false; + } + }, + + getActionEnable(index) { + return this.childrenMap.actionsSizer.getButtonEnable(index); + }, + + getToolbarEnable(index) { + return this.childrenMap.toolbarSizer.getButtonEnable(index); + }, + + getLeftToolbarEnable(index) { + return this.childrenMap.leftToolbarSizer.getButtonEnable(index); + }, + + emitChoiceClick(index) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.emitButtonClick(index); + } + return this; + }, + + emitActionClick(index) { + this.childrenMap.actionsSizer.emitButtonClick(index); + return this; + }, + + emitToolbarClick(index) { + this.childrenMap.toolbarSizer.emitButtonClick(index); + return this; + }, + + emitLeftToolbarClick(index) { + this.childrenMap.leftToolbarSizer.emitButtonClick(index); + return this; + }, + + showChoice(index) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.showButton(index); + } + return this; + }, + + showAction(index) { + this.childrenMap.actionsSizer.showButton(index); + return this; + }, + + showToolbar(index) { + this.childrenMap.toolbarSizer.showButton(index); + return this; + }, + + showLeftToolbar(index) { + this.childrenMap.leftToolbarSizer.showButton(index); + return this; + }, + + hideChoice(index) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.hideButton(index); + } + return this; + }, + + hideAction(index) { + this.childrenMap.actionsSizer.hideButton(index); + return this; + }, + + hideToolbar(index) { + this.childrenMap.toolbarSizer.hideButton(index); + return this; + }, + + hideLeftToolbar(index) { + this.childrenMap.leftToolbarSizer.hideButton(index); + return this; + }, + + addChoice(gameObject) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.addButton(gameObject); + } + return this; + }, + + addAction(gameObject) { + this.childrenMap.actionsSizer.addButton(gameObject); + return this; + }, + + addToolbar(gameObject) { + this.childrenMap.toolbarSizer.addButton(gameObject); + return this; + }, + + addLeftToolbar(gameObject) { + this.childrenMap.leftToolbarSizer.addButton(gameObject); + return this; + }, + + removeChoice(index, destroyChild) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.removeButton(index, destroyChild); + } + return this; + }, + + removeAction(index, destroyChild) { + this.childrenMap.actionsSizer.removeButton(index, destroyChild); + return this; + }, + + removeToolbar(index, destroyChild) { + this.childrenMap.toolbarSizer.removeButton(index, destroyChild); + return this; + }, + + removeLeftToolbar(index, destroyChild) { + this.childrenMap.leftToolbarSizer.removeButton(index, destroyChild); + return this; + }, + + clearChoices(destroyChild) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.clearButtons(destroyChild); + } + return this; + }, + + clearActions(destroyChild) { + this.childrenMap.actionsSizer.clearButtons(destroyChild); + return this; + }, + + clearToolbar(destroyChild) { + this.childrenMap.toolbarSizer.clearButtons(destroyChild); + return this; + }, + + clearLeftToolbar(destroyChild) { + this.childrenMap.leftToolbarSizer.clearButtons(destroyChild); + return this; + }, + + forEachChoice(callback, scope) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.forEachButtton(callback, scope); + } + return this; + }, + + forEachAction(callback, scope) { + this.childrenMap.actionsSizer.forEachButtton(callback, scope); + return this; + }, + + forEachToolbar(callback, scope) { + this.childrenMap.toolbarSizer.forEachButtton(callback, scope); + return this; + }, + + forEachLeftToolbar(callback, scope) { + this.childrenMap.leftToolbarSizer.forEachButtton(callback, scope); + return this; + }, + + setAllButtonsEnable(enabled) { + if (enabled === undefined) { + enabled = true; + } + + if (this.childrenMap.toolbarSizer) { + this.setToolbarEnable(enabled); + } + if (this.childrenMap.leftToolbarSizer) { + this.setLeftToolbarEnable(enabled); + } + if (this.childrenMap.actionsSizer) { + this.setActionEnable(enabled); + } + if (this.childrenMap.choicesSizer) { + this.setChoiceEnable(enabled); + } + + return this; + }, + + // Checkboxes + getChoicesButtonStates() { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + return choicesSizer.getAllButtonsState(); + } else { + return {}; + } + }, + + getChoicesButtonState(name) { + var choicesSizer = this.childrenMap.choicesSizer; + if (name === undefined) { + if (choicesSizer) { + return choicesSizer.getAllButtonsState(); + } else { + return {} + } + } else { + if (choicesSizer) { + return choicesSizer.getButtonState(name); + } else { + return false; + } + } + }, + + setChoicesButtonState(name, state) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.setButtonState(name, state); + } + return this; + }, + + clearChoicesButtonStates() { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.clearAllButtonsState(); + } + return this; + }, + + // Radio buttons + getChoicesSelectedButtonName() { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + return choicesSizer.getSelectedButtonName(); + } else { + return ''; + } + }, + + setChoicesSelectedButtonName(name) { + var choicesSizer = this.childrenMap.choicesSizer; + if (choicesSizer) { + choicesSizer.setSelectedButtonName(name); + } + return this; + }, + +}; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/Methods.js b/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/Methods.js new file mode 100644 index 0000000000000000000000000000000000000000..c768cbb73140461226f82a1a25f6ef99c3853385 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/Methods.js @@ -0,0 +1,12 @@ +import ButtonMethods from './ButtonMethods.js'; +import ModalMethods from './ModalMethods.js'; + +var Methods = {}; + +Object.assign( + Methods, + ButtonMethods, + ModalMethods, +) + +export default Methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/ModalMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/ModalMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..0d8a3787ad081b1ace3fc103d8c3778ebbae9bea --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dialog/methods/ModalMethods.js @@ -0,0 +1,43 @@ +import ModalMethods from '../../basesizer/ModalMethods.js'; + +export default { + onCreateModalBehavior(self) { + self.on('button.click', function (button, groupName, index, pointer, event) { + if (groupName !== 'actions') { + return; + } + + var closeEventData = { + index: index, + text: button.text, + button: button, + dialog: self + } + + + switch (self.buttonsType) { + case 'radio': + closeEventData.value = self.getChoicesSelectedButtonName(); + break; + case 'checkboxes': + closeEventData.value = self.getChoicesButtonStates(); + break; + default: + closeEventData.value = undefined; + } + + self.modalClose(closeEventData); + }); + }, + + modal(config, onClose) { + if (config && (config.defaultBehavior === false)) { + this.onCreateModalBehavior = false; + } else { + delete this.onCreateModalBehavior; + } + + ModalMethods.modal.call(this, config, onClose); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/drag/Drag.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/drag/Drag.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..979a4674c95916cddafa26a8246950f4e9d318f6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/drag/Drag.d.ts @@ -0,0 +1,2 @@ +import Drag from '../../../plugins/drag'; +export default Drag; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/drag/Drag.js b/ui/src/phaser3-rex-plugins/templates/ui/drag/Drag.js new file mode 100644 index 0000000000000000000000000000000000000000..732c06df1f2a0300bfdeb79685b58ed5cae452da --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/drag/Drag.js @@ -0,0 +1,2 @@ +import Drag from '../../../plugins/drag.js'; +export default Drag; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/drag/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/drag/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9dacc3d1a684c7317a7055cc27c8717c96706fe1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/drag/Factory.d.ts @@ -0,0 +1,7 @@ +// import * as Phaser from 'phaser'; +import Drag from "./Drag"; + +export default function ( + gameObject: Phaser.GameObjects.GameObject, + config?: Drag.IConfig +): Drag; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/drag/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/drag/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..4605f875b3d10c7ccf996e6b78238b32d2738749 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/drag/Factory.js @@ -0,0 +1,11 @@ +import Drag from './Drag.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('drag', function (gameObject, config) { + return new Drag(gameObject, config); +}); + +SetValue(window, 'RexPlugins.UI.Drag', Drag); + +export default Drag; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdown/DropDown.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdown/DropDown.js new file mode 100644 index 0000000000000000000000000000000000000000..4006d3e4e48968bfe39b01a131c52f013b47fc2a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdown/DropDown.js @@ -0,0 +1,3 @@ +import DropDown from '../../../plugins/dropdown.js'; + +export default DropDown; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/DropDownList.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/DropDownList.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3648d8717d74ed3f52e8197b344cde7777890d61 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/DropDownList.d.ts @@ -0,0 +1,130 @@ +import Label from '../label/Label'; + +export default DropDownList; + +declare namespace DropDownList { + type CreateButtonCallbackType = ( + this: DropDownList, + scene: Phaser.Scene, + option: any, + index: number, + options: any[] + ) => Phaser.GameObjects.GameObject; + + type CreateBackgroundCallbackType = ( + this: DropDownList, + scene: Phaser.Scene, + ) => Phaser.GameObjects.GameObject; + + type OnButtonClickCallbackType = ( + this: DropDownList, + button: Phaser.GameObjects.GameObject, + index: number, + pointer: Phaser.Input.Pointer, + event: Phaser.Types.Input.EventData + ) => void; + + type OnButtonOverCallbackType = ( + this: DropDownList, + button: Phaser.GameObjects.GameObject, + index: number, + pointer: Phaser.Input.Pointer, + event: Phaser.Types.Input.EventData + ) => void; + + type OnButtonOutCallbackType = ( + this: DropDownList, + button: Phaser.GameObjects.GameObject, + index: number, + pointer: Phaser.Input.Pointer, + event: Phaser.Types.Input.EventData + ) => void; + + type AlignParentType = 'text' | 'icon'; + + type ExpandDirectionType = 0 | 1 | 'down' | 'up'; + + type SetValueCallbackType = ( + dropDownList: DropDownList, + value?: any, + previousValue?: any, + ) => void; + + type ListSpaceType = { + left?: number, right?: number, top?: number, bottom?: number, item?: number + }; + + type WrapListSpaceType = { + left?: number, right?: number, top?: number, bottom?: number, item?: number, line?: number + } + + interface IConfig extends Label.IConfig { + options?: any[], + list?: { + createBackgroundCallback?: CreateBackgroundCallbackType; + createButtonCallback?: CreateButtonCallbackType; + + onButtonClick?: OnButtonClickCallbackType; + onButtonOver?: OnButtonOverCallbackType; + onButtonOut?: OnButtonOutCallbackType; + + easeIn?: number; + easeOut?: number; + + wrap?: boolean; + width?: number; + height?: number; + alignParent?: AlignParentType; + alignSide?: string; + expandDirection?: ExpandDirectionType; + bounds?: Phaser.Geom.Rectangle; + + space?: ListSpaceType | WrapListSpaceType; + + draggable?: boolean; + }, + + setValueCallback?: SetValueCallbackType; + setValueCallbackScope?: object; + value?: any; + } +} + +declare class DropDownList extends Label { + constructor( + scene: Phaser.Scene, + config?: DropDownList.IConfig + ); + + setOptions(options: any[]): this; + + openListPanel(): this; + closeListPanel(): this; + toggleListPanel(): this; + + setValue(value?: any): this; + value: any; + + setCreateButtonCallback(callback?: DropDownList.CreateBackgroundCallbackType): this; + setCreateBackgroundCallback(callback?: DropDownList.CreateBackgroundCallbackType): this; + + setButtonClickCallback(callback?: DropDownList.OnButtonClickCallbackType): this; + setButtonOverCallback(callback?: DropDownList.OnButtonOverCallbackType): this; + setButtonOutCallback(callback?: DropDownList.OnButtonOutCallbackType): this; + + setListEaseInDuration(duration?: number): this; + setListEaseOutDuration(duration?: number): this; + + setWrapEnable(enable?: boolean): this; + setListWidth(width?: number): this; + setListHeight(height?: number): this; + setListSize(width?: number, height?: number): this; + + setListAlignmentMode(mode?: DropDownList.AlignParentType): this; + setListAlignmentSide(side?: string): this; + setListBounds(bounds: Phaser.Geom.Rectangle): this; + + setListSpace(space?: DropDownList.ListSpaceType | DropDownList.WrapListSpaceType): this; + + setListDraggable(enable?: boolean): this; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/DropDownList.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/DropDownList.js new file mode 100644 index 0000000000000000000000000000000000000000..999395ca34e4c529d5e38ea0c43260655443870d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/DropDownList.js @@ -0,0 +1,119 @@ +import Label from '../label/Label.js'; +import Methods from './methods/Methods.js' + + +const GetValue = Phaser.Utils.Objects.GetValue; + +class DropDownList extends Label { + constructor(scene, config) { + super(scene, config); + this.type = 'rexDropDownList'; + this.timer = undefined; + + this.setOptions(GetValue(config, 'options')); + + var listConfig = GetValue(config, 'list'); + this.setWrapEnable(GetValue(listConfig, 'wrap', false)); + this.setCreateButtonCallback(GetValue(listConfig, 'createButtonCallback')); + this.setCreateListBackgroundCallback(GetValue(listConfig, 'createBackgroundCallback')); + this.setButtonClickCallback(GetValue(listConfig, 'onButtonClick')); + this.setButtonOverCallback(GetValue(listConfig, 'onButtonOver')); + this.setButtonOutCallback(GetValue(listConfig, 'onButtonOut')); + this.setListExpandDirection(GetValue(listConfig, 'expandDirection')); + this.setListEaseInDuration(GetValue(listConfig, 'easeIn', 500)); + this.setListEaseOutDuration(GetValue(listConfig, 'easeOut', 100)); + this.setListTransitInCallback(GetValue(listConfig, 'transitIn')); + this.settListTransitOutCallback(GetValue(listConfig, 'transitOut')); + this.setListSize(GetValue(listConfig, 'width'), GetValue(listConfig, 'height')); + this.setListAlignmentMode(GetValue(listConfig, 'alignParent', 'text')); + this.setListAlignmentSide(GetValue(listConfig, 'alignSide', '')); + this.setListBounds(GetValue(listConfig, 'bounds')); + this.setListSpace(GetValue(listConfig, 'space')); + this.setListDraggable(GetValue(listConfig, 'draggable', false)); + + this.setValueChangeCallback( + GetValue(config, 'setValueCallback'), + GetValue(config, 'setValueCallbackScope') + ); + this.setValue(GetValue(config, 'value')); + + this.onClick(this.toggleListPanel, this); + } + + destroy(fromScene) { + // This Game Object has already been destroyed + if (!this.scene || this.ignoreDestroy) { + return; + } + + if (this.listPanel) { + this.listPanel.destroy(fromScene); + this.listPanel = undefined; + } + + super.destroy(fromScene); + } + + setOptions(options) { + if (options === undefined) { + options = []; + } + this.options = options; + return this; + } + + setValueChangeCallback(callback, scope) { + this.valueChangeCallback = callback; + this.valueChangeCallbackScope = scope; + return this; + } + + setValue(value) { + this.value = value; + return this; + } + + get value() { + return this._value; + } + + set value(value) { + if (this._value === value) { + return; + } + + var previousValue = this._value; + this._value = value; + + var callback = this.valueChangeCallback, + scope = this.valueChangeCallbackScope; + if (callback) { + if (scope) { + callback.call(scope, this, value, previousValue); + } else { + callback(this, value, previousValue) + } + } + + this.emit('valuechange', this, value, previousValue); + + } + + emitButtonClick(index) { + var option = this.options[index]; + if (!option) { + return this; + } + + this.emit('button.click', this, undefined, option, index); + return this; + } + +} + +Object.assign( + DropDownList.prototype, + Methods, +); + +export default DropDownList; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7e6119454f2d19354c47c25ad79c82a0d5df5989 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/Factory.d.ts @@ -0,0 +1,5 @@ +import DropDownList from './DropDownList'; + +export default function ( + config?: DropDownList.IConfig +): DropDownList; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..9443aaf3102ae9b00989c411a1a95954bb63b779 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/Factory.js @@ -0,0 +1,13 @@ +import DropDownList from './DropDownList.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('dropDownList', function (config) { + var gameObject = new DropDownList(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.DropDownList', DropDownList); + +export default DropDownList; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/Methods.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/Methods.js new file mode 100644 index 0000000000000000000000000000000000000000..afa71232b7624b9c204f6206cbffbd5e17737091 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/Methods.js @@ -0,0 +1,18 @@ +import ConfigurationMethods from './listpanel/ConfigurationMethods.js'; +import OpenListPanel from './listpanel/OpenListPanel.js'; +import CloseListPanel from './listpanel/CloseListPanel.js'; +import ToggleListPanel from './listpanel/ToggleListPanel.js'; + +var Methods = { + openListPanel: OpenListPanel, + closeListPanel: CloseListPanel, + toggleListPanel: ToggleListPanel, +} + +Object.assign( + Methods, + ConfigurationMethods, +); + +export default Methods; + diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/CloseListPanel.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/CloseListPanel.js new file mode 100644 index 0000000000000000000000000000000000000000..343fd49ab604aea13871eeeef846fdd7b4a64d1b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/CloseListPanel.js @@ -0,0 +1,11 @@ +var CloseListPanel = function () { + if (!this.dropDownBehavior) { + return this; + } + + this.dropDownBehavior.requestClose(); + + return this; +} + +export default CloseListPanel; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/ConfigurationMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/ConfigurationMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..3a970b129c663b580fd98715e8434f488e3b08ed --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/ConfigurationMethods.js @@ -0,0 +1,129 @@ +var methods = { + setWrapEnable(enable) { + if (enable === undefined) { + enable = true; + } + + this.listWrapEnable = enable; + return this; + }, + + setCreateButtonCallback(callback) { + this.listCreateButtonCallback = callback; + return this; + }, + + setCreateListBackgroundCallback(callback) { + this.listCreateBackgroundCallback = callback; + return this; + }, + + setButtonClickCallback(callback) { + this.listOnButtonClick = callback; + return this; + }, + + setButtonOverCallback(callback) { + this.listOnButtonOver = callback; + return this; + }, + + setButtonOutCallback(callback) { + this.listOnButtonOut = callback; + return this; + }, + + setListExpandDirection(direction) { + if (typeof (direction) === 'string') { + direction = ListExpandDirections[direction]; + } + this.listExpandDirection = direction; + return this; + }, + + setListEaseInDuration(duration) { + if (duration === undefined) { + duration = 0; + } + this.listEaseInDuration = duration; + return this; + }, + + setListEaseOutDuration(duration) { + if (duration === undefined) { + duration = 0; + } + this.listEaseOutDuration = duration; + return this; + }, + + setListTransitInCallback(callback) { + this.listTransitInCallback = callback; + // callback = function(gameObject, duration) {} + return this; + }, + + settListTransitOutCallback(callback) { + this.listTransitOutCallback = callback; + // callback = function(gameObject, duration) {} + return this; + }, + + setListBounds(bounds) { + this.listBounds = bounds; + return this; + }, + + setListWidth(width) { + this.listWidth = width; + return this; + }, + + setListHeight(height) { + this.listHeight = height; + return this; + }, + + setListSize(width, height) { + this.setListWidth(width).setListHeight(height); + return this; + }, + + setListAlignmentMode(mode) { + this.listAlignMode = mode; + return this; + }, + + setListAlignmentSide(side) { + if (side === undefined) { + side = ''; + } + + this.listAlignSide = side; + return this; + }, + + setListSpace(space) { + if (space === undefined) { + space = {}; + } + this.listSpace = space; + return this; + }, + + setListDraggable(enable) { + if (enable === undefined) { + enable = true; + } + this.listDraggable = enable; + return this; + }, + +} + +const ListExpandDirections = { + down: 0, + up: 1 +} + +export default methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/CreateListPanel.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/CreateListPanel.js new file mode 100644 index 0000000000000000000000000000000000000000..d15bfe80776240be535b312768126ca6e934dec7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/CreateListPanel.js @@ -0,0 +1,64 @@ +import Buttons from '../../../buttons/Buttons.js'; +import FixWidthButtons from '../../../fixwidthbuttons/FixWidthButtons.js'; + +var CreateListPanel = function () { + var scene = this.scene; + + var background; + var createBackgroundCallback = this.listCreateBackgroundCallback; + if (createBackgroundCallback) { + background = createBackgroundCallback.call(this, scene); + scene.add.existing(background); + } + + var buttons = []; + var createButtonCallback = this.listCreateButtonCallback; + if (createButtonCallback) { + var options = this.options; + for (var i = 0, cnt = options.length; i < cnt; i++) { + var button = createButtonCallback.call(this, scene, options[i], i, options); + scene.add.existing(button); + buttons.push(button); + } + } + + var width = this.listWidth; + if (width === undefined) { + if (this.listAlignMode === 'text') { + width = this.getElement('text').width; + } else { + width = this.width; + } + } + var height = this.listHeight; + + var listPanel; + if (!this.listWrapEnable) { + listPanel = new Buttons(scene, { + width: width, height: height, + + orientation: 'y', + background: background, + buttons: buttons, + + space: this.listSpace, + draggable: this.listDraggable, + }); + } else { + listPanel = new FixWidthButtons(scene, { + width: width, height: height, + + background: background, + buttons: buttons, + + space: this.listSpace, + draggable: this.listDraggable, + }); + } + + scene.add.existing(listPanel); + + return listPanel; +} + +export default CreateListPanel; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/OpenListPanel.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/OpenListPanel.js new file mode 100644 index 0000000000000000000000000000000000000000..30455ed17dcc666dabc8557defea63d9e148190d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/OpenListPanel.js @@ -0,0 +1,83 @@ +import CreateListPanel from './CreateListPanel.js'; +import DropDown from '../../../dropdown/DropDown.js'; + +var OpenListPanel = function () { + if (this.listPanel) { + return this; + } + + var listPanel = CreateListPanel.call(this); + + // Button over/out + listPanel + .on('button.over', function (button, index, pointer, event) { + if (this.listOnButtonOver) { + this.listOnButtonOver.call(this, button, index, pointer, event); + } + + this.emit('button.over', this, listPanel, button, index, pointer, event); + }, this) + .on('button.out', function (button, index, pointer, event) { + if (this.listOnButtonOut) { + this.listOnButtonOut.call(this, button, index, pointer, event); + } + + this.emit('button.out', this, listPanel, button, index, pointer, event); + }, this); + + + var alignTargetX; + if (!this.listAlignMode || (this.listAlignMode === 'label')) { + alignTargetX = this; + } else { + alignTargetX = this.getElement(this.listAlignMode) + } + + var dropDownBehavior = new DropDown(listPanel, { + // Transition + duration: { + in: this.listEaseInDuration, + out: this.listEaseOutDuration + }, + transitIn: this.listTransitInCallback, + transitOut: this.listTransitOutCallback, + + // Position + expandDirection: this.listExpandDirection, + + alignTargetX: alignTargetX, + alignTargetY: this, + alignSide: this.listAlignSide, + + bounds: this.listBounds, + + // Close condition + anyTouchClose: true, + }) + .on('open', function () { + // After popping up + // Can click + listPanel.on('button.click', function (button, index, pointer, event) { + if (this.listOnButtonClick) { + this.listOnButtonClick.call(this, button, index, pointer, event); + } + this.emit('button.click', this, listPanel, button, index, pointer, event); + }, this); + + this.emit('list.open', this, listPanel); + }, this) + + .on('close', function () { + this.listPanel = undefined; + this.dropDownBehavior = undefined; + }, this) + + this.listPanel = listPanel; + this.dropDownBehavior = dropDownBehavior; + + this.pin(listPanel); + + return this; +} + +export default OpenListPanel; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/ToggleListPanel.js b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/ToggleListPanel.js new file mode 100644 index 0000000000000000000000000000000000000000..7394797ec6f76ccb6fefd8c35bb646e064be9274 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dropdownlist/methods/listpanel/ToggleListPanel.js @@ -0,0 +1,10 @@ +var ToggleListPanel = function () { + if (!this.listPanel) { + this.openListPanel(); + } else { + this.closeListPanel(); + } + return this; +} + +export default ToggleListPanel; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/DynamicText.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/DynamicText.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..29569d8c1ec895c23655cbe6a5e872f95fabe597 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/DynamicText.d.ts @@ -0,0 +1,2 @@ +import DynamicText from '../../../plugins/dynamictext'; +export default DynamicText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/DynamicText.js b/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/DynamicText.js new file mode 100644 index 0000000000000000000000000000000000000000..c244780d1854d087100eb69ce3aa6dcffb119089 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/DynamicText.js @@ -0,0 +1,2 @@ +import DynamicText from '../../../plugins/dynamictext.js'; +export default DynamicText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1187d805f4e244c96fd68e7640de62f787da5c2d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/Factory.d.ts @@ -0,0 +1,5 @@ +import DynamicText from "./DynamicText"; + +export default function ( + config?: DynamicText.IConfig +): DynamicText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..cc3a85051d8fae7a4980b54cbcb3173be3d949e5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/dynamictext/Factory.js @@ -0,0 +1,13 @@ +import DynamicText from './DynamicText.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('dynamicText', function (x, y, width, height, config) { + var gameObject = new DynamicText(this.scene, x, y, width, height, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.DynamicText', DynamicText); + +export default DynamicText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/easemove/EaseMove.js b/ui/src/phaser3-rex-plugins/templates/ui/easemove/EaseMove.js new file mode 100644 index 0000000000000000000000000000000000000000..8782c417d6922bc2efe8f486c42572908f4fdaf0 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/easemove/EaseMove.js @@ -0,0 +1,2 @@ +import { EaseMove, EaseMoveTo, EaseMoveFrom } from '../../../plugins/easemove.js'; +export { EaseMove, EaseMoveTo, EaseMoveFrom }; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/easemove/EaseMove.ts b/ui/src/phaser3-rex-plugins/templates/ui/easemove/EaseMove.ts new file mode 100644 index 0000000000000000000000000000000000000000..80fe9fa41b42426b2c71beb6fdf6ff3b2cd00762 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/easemove/EaseMove.ts @@ -0,0 +1,2 @@ +import { EaseMove, EaseMoveTo, EaseMoveFrom } from '../../../plugins/easemove'; +export { EaseMove, EaseMoveTo, EaseMoveFrom }; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fade/Fade.js b/ui/src/phaser3-rex-plugins/templates/ui/fade/Fade.js new file mode 100644 index 0000000000000000000000000000000000000000..f1d17dc9206447fb9c4d59f3e3685ad2fcb82166 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fade/Fade.js @@ -0,0 +1,5 @@ +import Fade from '../../../plugins/fade.js'; +import FadeIn from '../../../plugins/fade-in.js'; +import FadeOutDestroy from '../../../plugins/fade-out-destroy.js'; + +export { Fade, FadeIn, FadeOutDestroy }; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fade/Fade.ts b/ui/src/phaser3-rex-plugins/templates/ui/fade/Fade.ts new file mode 100644 index 0000000000000000000000000000000000000000..857a8cdc4d496b8654c585736eb788f2bdb5bbb5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fade/Fade.ts @@ -0,0 +1,5 @@ +import Fade from '../../../plugins/fade.js'; +import FadeIn from '../../../plugins/fade-in'; +import FadeOutDestroy from '../../../plugins/fade-out-destroy'; + +export { Fade, FadeIn, FadeOutDestroy }; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/filechooser/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/filechooser/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f1a7c08fd9880511b28ebc37e19a97dd1406fe1b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/filechooser/Factory.d.ts @@ -0,0 +1,5 @@ +import { FileChooser } from './FileChooser.js'; + +export default function ( + config?: FileChooser.IConfig +): FileChooser; diff --git a/ui/src/phaser3-rex-plugins/templates/ui/filechooser/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/filechooser/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..30abe8924a5d0c63015fd548211e90594b93f5aa --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/filechooser/Factory.js @@ -0,0 +1,13 @@ +import { FileChooser } from './FileChooser.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('fileChooser', function (config) { + var gameObject = new FileChooser(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.FileChooser', FileChooser); + +export default FileChooser; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/filechooser/FileChooser.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/filechooser/FileChooser.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..225ddcaa6d190a1aab33edcf8d494d8f899adac8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/filechooser/FileChooser.d.ts @@ -0,0 +1,2 @@ +import { OpenFileChooser, FileChooser } from '../../../plugins/filechooser'; +export { OpenFileChooser, FileChooser }; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/filechooser/FileChooser.js b/ui/src/phaser3-rex-plugins/templates/ui/filechooser/FileChooser.js new file mode 100644 index 0000000000000000000000000000000000000000..1cfe923e7b1766d895987381d47764c6ffa8a91d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/filechooser/FileChooser.js @@ -0,0 +1,2 @@ +import { OpenFileChooser, FileChooser } from '../../../plugins/filechooser.js'; +export { OpenFileChooser, FileChooser }; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ecb4da5b9d4dd004be9f728d8316d82f15e853e6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/Factory.d.ts @@ -0,0 +1,5 @@ +import FileDropZone from './FileDropZone.js'; + +export default function ( + config?: FileDropZone.IConfig +): FileDropZone; diff --git a/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..83919aa7643133520ec2ef239e87c917b87c47ed --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/Factory.js @@ -0,0 +1,13 @@ +import FileDropZone from './FileDropZone.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('fileDropZone', function (config) { + var gameObject = new FileDropZone(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.FileDropZone', FileDropZone); + +export default FileDropZone; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/FileDropZone.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/FileDropZone.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ff69253df113f2eee7d6f9250a6f61855303a8b1 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/FileDropZone.d.ts @@ -0,0 +1,2 @@ +import FileDropZone from '../../../plugins/filedropzone'; +export default FileDropZone; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/FileDropZone.js b/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/FileDropZone.js new file mode 100644 index 0000000000000000000000000000000000000000..daf209af32dbd77733298e37ac415438465ebc78 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/filedropzone/FileDropZone.js @@ -0,0 +1,2 @@ +import FileDropZone from '../../../plugins/filedropzone.js'; +export default FileDropZone; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b2a071090f6fbd8f4a54ab52b76d6a6d7954e500 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/Factory.d.ts @@ -0,0 +1,5 @@ +import FileSelectorButton from './FileSelectorButton.js'; + +export default function ( + config?: FileSelectorButton.IConfig +): FileSelectorButton; diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..dee98e108553db2b960b3a669f1bb27213ac82db --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/Factory.js @@ -0,0 +1,13 @@ +import FileSelectorButton from './FileSelectorButton.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('fileSelectorButton', function (config) { + var gameObject = new FileSelectorButton(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.FileSelectorButton', FileSelectorButton); + +export default FileSelectorButton; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileChooserMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileChooserMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..d030e07760b2c8b686d484b4435c9bc9ae947471 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileChooserMethods.js @@ -0,0 +1,21 @@ +export default { + setAccept(accept) { + this.childrenMap.fileChooser.setAccept(accept); + return this; + }, + + setMultiple(enabled) { + this.childrenMap.fileChooser.setMultiple(enabled); + return this; + }, + + loadFile(file, loaderType, key, cacheType, onComplete) { + this.childrenMap.fileChooser.loadFile(file, loaderType, key, cacheType, onComplete); + return this; + }, + + loadFilePromise(file, loaderType, key, cacheType) { + return this.childrenMap.fileChooser.loadFilePromise(file, loaderType, key, cacheType); + } + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileSelectorButton.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileSelectorButton.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..82bea2324e4be3ee27df75216da5425642e44321 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileSelectorButton.d.ts @@ -0,0 +1,45 @@ +import Label from '../label/Label'; + +export default FileSelectorButton; + +declare namespace FileSelectorButton { + interface IConfig extends Label.IConfig { + accept?: string, + multiple?: boolean, + } +} + +declare class FileSelectorButton extends Label { + constructor( + scene: Phaser.Scene, + config?: FileSelectorButton.IConfig + ); + + readonly files: File[]; + + setAccept(accept: string): this; + + setMultiple(multiple?: boolean): this; + + loadFile( + file: File, + loaderType: string, + key: string, + cacheType?: string + ): this; + + loadFile( + file: File, + loaderType: string, + key: string, + cacheType?: string, + onComplete?: (data: any) => void + ): this; + + loadFilePromise( + file: File, + loaderType: string, + key: string, + cacheType?: string + ): Promise; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileSelectorButton.js b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileSelectorButton.js new file mode 100644 index 0000000000000000000000000000000000000000..ed34d94e0a1a82731c19a24e3fc5fd7442529640 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fileselectorbutton/FileSelectorButton.js @@ -0,0 +1,45 @@ +import Label from '../label/Label.js'; +import { FileChooser } from '../filechooser/FileChooser.js'; +import FileChooserMethods from './FileChooserMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class FileSelectorButton extends Label { + constructor(scene, config) { + super(scene, config); + this.type = 'rexFileSelectorButton'; + + var fileChooser = new FileChooser(scene); + scene.add.existing(fileChooser); + this.addBackground(fileChooser); + + this.addChildrenMap('fileChooser', fileChooser); + + this.setAccept(GetValue(config, 'accept', '')); + this.setMultiple(GetValue(config, 'multiple', false)); + + fileChooser + .on('change', function (gameObject) { + var files = gameObject.files; + if (files.length === 0) { + return; + } + + files = Array.from(files); + this.emit('select', files, this); + }, this) + + } + + get files() { + return this.childrenMap.fileChooser.files; + } + +} + +Object.assign( + FileSelectorButton.prototype, + FileChooserMethods, +) + +export default FileSelectorButton; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/AddChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/AddChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..e06abf1b9af212df7db2577de650d5475a7fc69b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/AddChildMethods.js @@ -0,0 +1,46 @@ +import FixWidthSizer from '../fixwidthsizer/FixWidthSizer.js'; +import IsArray from '../../../plugins/utils/object/IsArray.js'; + +const SizerAdd = FixWidthSizer.prototype.add; + +var Add = function (gameObject) { + SizerAdd.call(this, gameObject); + this.buttonGroup.add(gameObject); + return this; +}; + +export default { + addButton(gameObject) { + if (IsArray(gameObject)) { + var gameObjects = gameObject; + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + Add.call(this, gameObjects[i]); + } + } else { + Add.call(this, gameObject); + } + return this; + }, + + addButtons(gameObjects) { + if (IsArray(gameObjects[0])) { + // 2d array + var lines = gameObjects, line; + for (var lineIdx = 0, lastLineIdx = (lines.length - 1); lineIdx <= lastLineIdx; lineIdx++) { + line = lines[lineIdx]; + for (var i = 0, cnt = line.length; i < cnt; i++) { + Add.call(this, line[i]); + } + if (lineIdx > lastLineIdx) { + SizerAdd.addNewLine(this); + } + } + } else { + // 1d array + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + Add.call(this, gameObjects[i]); + } + } + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..41489232aabf0a60dcbab81b71c0a4784c1621a8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/Factory.d.ts @@ -0,0 +1,5 @@ +import FixWidthButtons from './FixWidthButtons'; + +export default function ( + config?: FixWidthButtons.IConfig +): FixWidthButtons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..885f1f6a3b6c71027c21121488c329a37ccefbf9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/Factory.js @@ -0,0 +1,13 @@ +import FixWidthButtons from './FixWidthButtons.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('fixWidthButtons', function (config) { + var gameObject = new FixWidthButtons(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.FixWidthButtons', FixWidthButtons); + +export default FixWidthButtons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/FixWidthButtons.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/FixWidthButtons.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..db8767c8aefa115eb6502c94f46a5b342cef1cc8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/FixWidthButtons.d.ts @@ -0,0 +1,89 @@ +// import * as Phaser from 'phaser'; +import FixWidthSizer from '../fixwidthsizer/FixWidthSizer'; +import { IConfig as IConfigButtons } from '../utils/buttongroup/Buttons'; + + +export default FixWidthButtons; + +declare namespace FixWidthButtons { + + interface IConfig extends FixWidthSizer.IConfig, IConfigButtons { + background?: Phaser.GameObjects.GameObject, + + buttons?: Phaser.GameObjects.GameObject[], + } + +} + +declare class FixWidthButtons extends FixWidthSizer { + constructor( + scene: Phaser.Scene, + config?: FixWidthButtons.IConfig + ); + + emitButtonClick( + index: number | Phaser.GameObjects.GameObject + ): this; + + setButtonEnable( + index?: number | Phaser.GameObjects.GameObject | boolean, + enable?: boolean + ): this; + + toggleButtonEnable( + index?: number | Phaser.GameObjects.GameObject + ): this; + + getButtonEnable( + index: number | Phaser.GameObjects.GameObject + ): boolean; + + getButton( + index: number + ): Phaser.GameObjects.GameObject | null; + + addButton( + gameObject: Phaser.GameObjects.GameObject + ): this; + + removeButton( + gameObject: Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + clearButtons( + destroyChild?: boolean + ): this; + + showButton( + index: number | Phaser.GameObjects.GameObject + ): this; + + hideButton( + index: number | Phaser.GameObjects.GameObject + ): this; + + forEachButtton( + callback: (button: Phaser.GameObjects.GameObject, index: number, buttons: Phaser.GameObjects.GameObject[]) => void, + scop?: unknown + ): this; + + readonly buttons: Phaser.GameObjects.GameObject[]; + + value: unknown; + + setSelectedButtonName( + name: string + ): this; + + getSelectedButtonName(): string; + + setButtonState( + name: string, + state?: boolean + ): this; + + getButtonState( + name: string + ): boolean; +} diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/FixWidthButtons.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/FixWidthButtons.js new file mode 100644 index 0000000000000000000000000000000000000000..9c5c9e2f79ea2efefac9d05ddd5c563acb7400a5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/FixWidthButtons.js @@ -0,0 +1,87 @@ +import FixWidthSizer from '../fixwidthsizer/FixWidthSizer.js'; +import AddChildMethods from './AddChildMethods.js'; +import RemoveChildMethods from './RemoveChildMethods.js'; +import ButtonGroup from '../utils/buttongroup/ButtonGroup.js'; +import ButtonMethods from '../utils/buttongroup/ButtonMethods.js'; +import ButtonStateMethods from '../utils/buttongroup/ButtonStateMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Buttons extends FixWidthSizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + + var buttonSpace = config.space; + if (typeof (buttonSpace) === 'number') { + config.space = { item: buttonSpace, line: buttonSpace }; + } + + // Create + super(scene, config); + this.type = 'rexFixWidthButtons'; + this.buttonGroup = new ButtonGroup({ + parent: this, + eventEmitter: GetValue(config, 'eventEmitter', this), + groupName: GetValue(config, 'groupName', undefined), + clickConfig: GetValue(config, 'click', undefined) + }) + .setButtonsType(config); + + // Add elements + var background = GetValue(config, 'background', undefined); + var buttons = GetValue(config, 'buttons', undefined); + + // Buttons properties + this.buttonsAlign = GetValue(config, 'align', undefined); + + if (background) { + this.addBackground(background); + } + + if (buttons) { + this.addButtons(buttons); + } + + this.addChildrenMap('background', background); + this.addChildrenMap('buttons', this.buttonGroup.buttons); + } + + destroy(fromScene) { + // This Game Object has already been destroyed + if (!this.scene || this.ignoreDestroy) { + return; + } + + super.destroy(fromScene); + this.buttonGroup.destroy(); + this.buttonGroup = undefined; + } + + get buttons() { + return this.buttonGroup.buttons; + } + + get groupName() { + return this.buttonGroup.groupName; + } + + set groupName(value) { + this.buttonGroup.groupName = value; + } + + get eventEmitter() { + return this.buttonGroup.eventEmitter; + } +} + +Object.assign( + Buttons.prototype, + AddChildMethods, + RemoveChildMethods, + ButtonMethods, + ButtonStateMethods +); + +export default Buttons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/RemoveChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/RemoveChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..cbc46a21d6d9d7029a33997347a7e1e12a36eb21 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthbuttons/RemoveChildMethods.js @@ -0,0 +1,50 @@ +import FixWidthSizer from '../fixwidthsizer/FixWidthSizer.js'; +import IsArray from '../../../plugins/utils/object/IsArray.js'; + +const SizerRmove = FixWidthSizer.prototype.remove; +const SizerClear = FixWidthSizer.prototype.clear; + +var Remove = function (gameObject, destroyChild) { + var gameObject = this.getButton(gameObject); + if (!gameObject) { + return this; + } + + this.buttonGroup.remove(gameObject); + SizerRmove.call(this, gameObject, destroyChild); + return this; +}; + +export default { + remove(gameObject, destroyChild) { + if (IsArray(gameObject)) { + var gameObjects = gameObject; + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + Remove.call(this, gameObjects[i], destroyChild); + } + } else { + Remove.call(this, gameObject, destroyChild); + } + return this; + }, + + clear(destroyChild) { + var buttons = this.buttonGroup.buttons; + buttons.length = 0; + SizerClear.call(this, destroyChild); + return this; + }, + + removeButton(gameObject, destroyChild) { + this.remove(gameObject, destroyChild); + return this; + }, + + clearButtons(destroyChild) { + var buttons = this.buttonGroup.buttons; + for (var i = buttons.length - 1; i >= 0; i--) { + Remove.call(this, buttons[i], destroyChild); + } + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/AddChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/AddChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..af8c8d048ffc224fb38d87385b121c1aaa5aadb6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/AddChildMethods.js @@ -0,0 +1,74 @@ +import AddChild from '../basesizer/utils/AddChild.js'; +import GetBoundsConfig from '../utils/GetBoundsConfig.js'; +import IsArray from '../../../plugins/utils/object/IsArray.js'; +import GetNearestChildIndex from './GetNearestChildIndex.js'; + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; +const GetValue = Phaser.Utils.Objects.GetValue; +const ALIGN_CENTER = Phaser.Display.Align.CENTER; + +var Add = function (gameObject, paddingConfig, childKey, index) { + if (gameObject === '\n') { + this.addNewLine(); + return this; + } + + AddChild.call(this, gameObject); + + if (IsPlainObject(paddingConfig)) { + var config = paddingConfig; + paddingConfig = GetValue(config, 'padding', 0); + childKey = GetValue(config, 'key', undefined); + index = GetValue(config, 'index', undefined); + } + if (paddingConfig === undefined) { + paddingConfig = 0; + } + + var config = this.getSizerConfig(gameObject); + config.align = ALIGN_CENTER; + config.padding = GetBoundsConfig(paddingConfig); + if ((index === undefined) || (index >= this.sizerChildren.length)) { + this.sizerChildren.push(gameObject); + } else { + this.sizerChildren.splice(index, 0, gameObject); + } + + if (childKey !== undefined) { + this.addChildrenMap(childKey, gameObject) + } + return this; +}; + +export default { + add(gameObject, paddingConfig, childKey) { + if (IsArray(gameObject)) { + var gameObjects = gameObject; + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + Add.call(this, gameObjects[i], paddingConfig); + } + } else { + Add.call(this, gameObject, paddingConfig, childKey); + } + return this; + }, + + addNewLine() { + this.sizerChildren.push('\n'); + return this; + }, + + insert(index, gameObject, paddingConfig, childKey) { + Add.call(this, gameObject, paddingConfig, childKey, index); + return this; + }, + + insertAtPosition(x, y, gameObject, paddingConfig, childKey) { + var index = GetNearestChildIndex.call(this, x, y); + if (index === -1) { + index = undefined; + } + this.insert(index, gameObject, paddingConfig, childKey); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3f248fb6268476d2b4bd09c98d9ea702c1ddc10e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Factory.d.ts @@ -0,0 +1,17 @@ +import FixWidthSizer from './FixWidthSizer'; + + +export default function ( + config?: FixWidthSizer.IConfig +): FixWidthSizer; + +export default function ( + x: number, y: number, + config?: FixWidthSizer.IConfig +): FixWidthSizer; + +export default function ( + x: number, y: number, + width: number, height: number, + config?: FixWidthSizer.IConfig +): FixWidthSizer; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..d32aee99a5a66db03a0cd01d77f01e33ae568cc6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Factory.js @@ -0,0 +1,13 @@ +import FixWidthSizer from './FixWidthSizer.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('fixWidthSizer', function (x, y, minWidth, minHeight, config) { + var gameObject = new FixWidthSizer(this.scene, x, y, minWidth, minHeight, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.FixWidthSizer', FixWidthSizer); + +export default FixWidthSizer; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/FixWidthSizer.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/FixWidthSizer.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5bdc1da80b804fb0518b7c3ab351652f64e337f3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/FixWidthSizer.d.ts @@ -0,0 +1,124 @@ +// import * as Phaser from 'phaser'; +import BaseSizer from '../basesizer/BaseSizer.js'; + +export default FixWidthSizer; + +declare namespace FixWidthSizer { + type AlignTypes = 0 | 1 | 2 | 3 | 4 | 5 | + 'left' | 'right' | 'center' | 'justify' | 'justify-left' | 'justify-right' | 'justify-center'; + + type PaddingTypes = number | + { + left?: number, + right?: number, + top?: number, + bottom?: number + }; + + interface IConfig extends BaseSizer.IConfig { + x?: number, + y?: number, + width?: number, + height?: number, + + space?: { + left?: number, right?: number, top?: number, bottom?: number, + + item?: number, line?: number, + + indentLeftOdd?: number, indentLeftEven?: number, + indentTopOdd?: number, indentTopEven?: number, + }, + + rtl?: boolean, + + align?: AlignTypes; + } +} + +declare class FixWidthSizer extends BaseSizer { + sizerChildren: Phaser.GameObjects.GameObject[]; + + constructor( + scene: Phaser.Scene, + config?: FixWidthSizer.IConfig + ); + + constructor( + scene: Phaser.Scene, + x: number, y: number, + config?: FixWidthSizer.IConfig + ); + + constructor( + scene: Phaser.Scene, + x: number, y: number, + width: number, height: number, + config?: FixWidthSizer.IConfig + ); + + add( + gameObject: Phaser.GameObjects.GameObject, + config?: { + padding?: FixWidthSizer.PaddingTypes, + key?: string, + index?: number, + } + ): this; + + add( + gameObject: Phaser.GameObjects.GameObject, + padding?: FixWidthSizer.PaddingTypes, + key?: string, + index?: number + ): this; + + insert( + index: number, + gameObject: Phaser.GameObjects.GameObject, + config?: { + padding?: FixWidthSizer.PaddingTypes, + key?: string, + } + ): this; + + insert( + index: number, + gameObject: Phaser.GameObjects.GameObject, + paddingConfig?: FixWidthSizer.PaddingTypes, + key?: string + ): this; + + insertAtPosition( + x: number, + y: number, + gameObject: Phaser.GameObjects.GameObject, + config?: { + padding?: FixWidthSizer.PaddingTypes, + key?: string, + } + ): this; + + insertAtPosition( + x: number, + y: number, + gameObject: Phaser.GameObjects.GameObject, + paddingConfig?: FixWidthSizer.PaddingTypes, + key?: string + ): this; + + addNewLine(): this; + + remove( + gameObject: Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + removeAll( + destroyChild?: boolean + ): this; + + clear( + destroyChild?: boolean + ): this; +} diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/FixWidthSizer.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/FixWidthSizer.js new file mode 100644 index 0000000000000000000000000000000000000000..112b241a46dad5c1a5c20fbd284b8c811206db4c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/FixWidthSizer.js @@ -0,0 +1,124 @@ +import BaseSizer from '../basesizer/BaseSizer.js'; +import Methods from './Methods.js'; +import GetOrientationMode from '../utils/GetOrientationMode.js'; +import GetMaxChildWidth from './GetMaxChildWidth.js'; +import GetMaxChildHeight from './GetMaxChildHeight.js'; + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; +const GetValue = Phaser.Utils.Objects.GetValue; + +class FixWidthSizer extends BaseSizer { + constructor(scene, x, y, minWidth, minHeight, config) { + if (IsPlainObject(x)) { + config = x; + x = GetValue(config, 'x', 0); + y = GetValue(config, 'y', 0); + minWidth = GetValue(config, 'width', undefined); + minHeight = GetValue(config, 'height', undefined); + } else if (IsPlainObject(minWidth)) { + config = minWidth; + minWidth = GetValue(config, 'width', undefined); + minHeight = GetValue(config, 'height', undefined); + } + + super(scene, x, y, minWidth, minHeight, config); + + this.type = 'rexFixWidthSizer'; + this.sizerChildren = []; + this.setOrientation(GetValue(config, 'orientation', 0)); + this.setItemSpacing(GetValue(config, 'space.item', 0)); + this.setLineSpacing(GetValue(config, 'space.line', 0)); + this.setIntentLeft( + GetValue(config, 'space.indentLeftOdd', 0), + GetValue(config, 'space.indentLeftEven', 0) + ); + this.setIntentTop( + GetValue(config, 'space.indentTopOdd', 0), + GetValue(config, 'space.indentTopEven', 0) + ); + this.setAlign(GetValue(config, 'align', 0)); + this.setJustifyPercentage(GetValue(config, 'justifyPercentage', 0.25)); + this.setRTL(GetValue(config, 'rtl', false)); + + this.addChildrenMap('items', this.sizerChildren); + } + + setOrientation(orientation) { + this.orientation = GetOrientationMode(orientation); + return this; + } + + setItemSpacing(space) { + this.space.item = space; + return this; + } + + setLineSpacing(space) { + this.space.line = space; + return this; + } + + setIntentLeft(odd, even) { + this.space.indentLeftOdd = odd; + this.space.indentLeftEven = even; + return this; + } + + setIntentTop(odd, even) { + this.space.indentTopOdd = odd; + this.space.indentTopEven = even; + return this; + } + + setAlign(align) { + if (typeof (align) === 'string') { + align = ALIGN[align]; + } + this.align = align; + return this; + } + + setJustifyPercentage(value) { + this.justifyPercentage = value; + return this; + } + + setRTL(enabled) { + if (enabled === undefined) { + enabled = true; + } + this.rtl = enabled; + return this; + } + + get maxChildWidth() { + if (this._maxChildWidth === undefined) { + this._maxChildWidth = GetMaxChildWidth.call(this); + } + return this._maxChildWidth; + } + + get maxChildHeight() { + if (this._maxChildHeight === undefined) { + this._maxChildHeight = GetMaxChildHeight.call(this); + } + return this._maxChildHeight; + } +} + +const ALIGN = { + left: 0, top: 0, + right: 1, bottom: 1, + center: 2, + justify: 3, + 'justify-left': 3, 'justify-top': 3, + 'justify-right': 4, 'justify-bottom': 4, + 'justify-center': 5 +} + +Object.assign( + FixWidthSizer.prototype, + Methods +); + +export default FixWidthSizer; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..b5f4cbb684b00de857343986ef9248c480ec25c5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenHeight.js @@ -0,0 +1,10 @@ +var GetChildrenHeight = function () { + if (this.rexSizer.hidden) { + return 0; + } + + // After RunChildrenWrap + return this.widthWrapResult.height + this.space.top + this.space.bottom; +} + +export default GetChildrenHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenSizers.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenSizers.js new file mode 100644 index 0000000000000000000000000000000000000000..5ff1f5b54a0320a451f8c761bff2bf88cf2a7b13 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenSizers.js @@ -0,0 +1,17 @@ +var GetChildrenSizers = function (out) { + if (out === undefined) { + out = []; + } + var children = this.sizerChildren, child; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (child === '\n') { + continue; + } + if (child.isRexSizer) { + out.push(child); + } + } + return out; +} +export default GetChildrenSizers; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..fe142bdbf419880a5d58a1056f5675228c64be61 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetChildrenWidth.js @@ -0,0 +1,10 @@ +var GetChildrenWidth = function () { + if (this.rexSizer.hidden) { + return 0; + } + + // Before RunChildrenWrap + return this.maxChildWidth + this.space.left + this.space.right; +} + +export default GetChildrenWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetMaxChildHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetMaxChildHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..30bac27c98263ad6d93ecd375559a0339fd40f6d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetMaxChildHeight.js @@ -0,0 +1,22 @@ +import { GetDisplayHeight } from '../../../plugins/utils/size/GetDisplaySize.js'; + +var GetMaxChildHeight = function (children) { + if (children === undefined) { + children = this.sizerChildren; + } + var result = 0; + var child, childHeight; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (child === '\n') { + continue; + } + + childHeight = (child.isRexSizer) ? + Math.max(child.minHeight, child.childrenHeight) : + (child.hasOwnProperty('minHeight')) ? child.minHeight : GetDisplayHeight(child); + result = Math.max(childHeight, result); + } + return result; +} +export default GetMaxChildHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetMaxChildWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetMaxChildWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..eab557e60b10517a50985ce130b3336446945232 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetMaxChildWidth.js @@ -0,0 +1,18 @@ +var GetMaxChildWidth = function (children) { + if (children === undefined) { + children = this.sizerChildren; + } + var result = 0; + var child, childWidth; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (child === '\n') { + continue; + } + + childWidth = this.getChildWidth(child); + result = Math.max(childWidth, result); + } + return result; +} +export default GetMaxChildWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetNearestChildIndex.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetNearestChildIndex.js new file mode 100644 index 0000000000000000000000000000000000000000..e76113c0c4622afdbc1e4cedc4f06187c2eaccca --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/GetNearestChildIndex.js @@ -0,0 +1,41 @@ +const DistanceBetween = Phaser.Math.Distance.Between; + +var GetNearestChildIndex = function (x, y) { + var children = this.sizerChildren; + if (children.length === 0) { + return -1; + } + + var nearestIndex = -1, + minDistance = Infinity; + for (var i = 0, cnt = children.length; i < cnt; i++) { + var child = children[i]; + // position is not at this line + if (Math.abs(child.centerY - y) > (child.height / 2)) { + continue; + } + + // Check left bound + var distance = DistanceBetween(child.left, child.centerY, x, y); + if (minDistance > distance) { + minDistance = distance; + nearestIndex = i; + } + + // Is last child of this line + var nextChild = children[i + 1]; + if (nextChild && (nextChild.y === child.y)) { + continue; + } + + var distance = DistanceBetween(child.right, child.centerY, x, y); + if (minDistance > distance) { + minDistance = distance; + nearestIndex = i + 1; + } + } + + return nearestIndex; +} + +export default GetNearestChildIndex; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/LayoutChildren.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/LayoutChildren.js new file mode 100644 index 0000000000000000000000000000000000000000..e26bc91c852c02a6a2f213c5268544b5e9203c91 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/LayoutChildren.js @@ -0,0 +1,102 @@ +import PreLayoutChild from '../basesizer/utils/PreLayoutChild.js'; +import LayoutChild from '../basesizer/utils/LayoutChild.js'; +import { GetDisplayWidth, GetDisplayHeight } from '../../../plugins/utils/size/GetDisplaySize.js'; + + +var LayoutChildren = function () { + var innerLineWidth = this.innerWidth; + var justifyPercentage = this.justifyPercentage; + var itemSpace = this.space.item, + lineSpace = this.space.line, + indentLeftOdd = this.space.indentLeftOdd, + indentLeftEven = this.space.indentLeftEven, + indentTopOdd = this.space.indentTopOdd, + indentTopEven = this.space.indentTopEven; + + var child, childConfig, padding, justifySpace = 0, indentLeft, indentTop; + var startX = this.innerLeft, + startY = this.innerTop; + var x, y, width, height; // Align zone + var lines = this.widthWrapResult.lines; + var line, lineChlidren, remainderLineWidth; + + var itemX, + itemY = startY; + for (var i = 0, icnt = lines.length; i < icnt; i++) { + // Layout this line + line = lines[i]; + lineChlidren = line.children; + if (this.rtl) { + lineChlidren.reverse(); + } + + indentLeft = (i % 2) ? indentLeftEven : indentLeftOdd; + itemX = startX + indentLeft; + + remainderLineWidth = (innerLineWidth - line.width); + switch (this.align) { + case 0: // left + break; + case 1: // right + itemX += remainderLineWidth; + break; + case 2: // center + itemX += remainderLineWidth / 2; + break; + case 3: // justify-left + justifySpace = GetJustifySpace(innerLineWidth, remainderLineWidth, justifyPercentage, lineChlidren.length); + break; + case 4: // justify-right + justifySpace = GetJustifySpace(innerLineWidth, remainderLineWidth, justifyPercentage, lineChlidren.length); + if (justifySpace === 0) { + // Align right + itemX += remainderLineWidth; + } + break; + case 5: // justify-center + justifySpace = GetJustifySpace(innerLineWidth, remainderLineWidth, justifyPercentage, lineChlidren.length); + if (justifySpace === 0) { + // Align center + itemX += remainderLineWidth / 2; + } + break; + } + + var isFirstChild = true; + for (var j = 0, jcnt = lineChlidren.length; j < jcnt; j++) { + child = lineChlidren[j]; + if (child.rexSizer.hidden) { + continue; + } + + childConfig = child.rexSizer; + padding = childConfig.padding; + + PreLayoutChild.call(this, child); + + x = (itemX + padding.left); + + if (isFirstChild) { + isFirstChild = false; + } else { + x += itemSpace; + } + + indentTop = (j % 2) ? indentTopEven : indentTopOdd; + y = (itemY + indentTop + padding.top); + width = GetDisplayWidth(child); + height = GetDisplayHeight(child); + itemX = x + width + padding.right + justifySpace; + + LayoutChild.call(this, child, x, y, width, height, childConfig.align); + } + + itemY += line.height + lineSpace; + } +} + +var GetJustifySpace = function (total, remainder, justifyPercentage, childCount) { + return ((remainder / total) <= justifyPercentage) ? (remainder / (childCount - 1)) : 0; +} + +export default LayoutChildren; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Methods.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Methods.js new file mode 100644 index 0000000000000000000000000000000000000000..2780c443c61f2953af5720cea6752543544a2cc2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/Methods.js @@ -0,0 +1,25 @@ +import GetChildrenWidth from './GetChildrenWidth.js'; +import GetChildrenHeight from './GetChildrenHeight.js'; +import GetChildrenSizers from './GetChildrenSizers.js'; +import PreLayout from './PreLayout.js'; +import LayoutChildren from './LayoutChildren.js'; +import RunWidthWrap from './RunWidthWrap.js'; +import AddChildMethods from './AddChildMethods.js'; +import RemoveChildMethods from './RemoveChildMethods.js'; + +var methods = { + getChildrenWidth: GetChildrenWidth, + getChildrenHeight: GetChildrenHeight, + getChildrenSizers: GetChildrenSizers, + preLayout: PreLayout, + layoutChildren: LayoutChildren, + runWidthWrap: RunWidthWrap, +}; + +Object.assign( + methods, + AddChildMethods, + RemoveChildMethods +); + +export default methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/PreLayout.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/PreLayout.js new file mode 100644 index 0000000000000000000000000000000000000000..1d6b0b3d0c12c9725edd0ef11573493ad0720d36 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/PreLayout.js @@ -0,0 +1,9 @@ +import PreLayoutBase from '../basesizer/PreLayout.js'; + +var PreLayout = function () { + this._maxChildWidth = undefined; + this._maxChildHeight = undefined; + PreLayoutBase.call(this); + return this; +} +export default PreLayout; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RemoveChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RemoveChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..7e71690af162fcd6b829f4c30cd6a98c8f90c467 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RemoveChildMethods.js @@ -0,0 +1,28 @@ +import RemoveChild from '../basesizer/utils/RemoveChild.js'; +import ClearChildren from '../basesizer/utils/ClearChildren.js'; + +const RemoveItem = Phaser.Utils.Array.Remove; + +export default { + remove(gameObject, destroyChild) { + if (this.getParentSizer(gameObject) !== this) { + return this; + } + RemoveItem(this.sizerChildren, gameObject); + RemoveChild.call(this, gameObject, destroyChild); + return this; + }, + + removeAll(destroyChild) { + for (var i = this.sizerChildren.length - 1; i >= 0; i--) { + this.remove(this.sizerChildren[i], destroyChild); + } + return this; + }, + + clear(destroyChild) { + this.sizerChildren.length = 0; + ClearChildren.call(this, destroyChild); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RunChildrenWrap.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RunChildrenWrap.js new file mode 100644 index 0000000000000000000000000000000000000000..48eab787719ede6cb9e8145b0a44c31ba85f7260 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RunChildrenWrap.js @@ -0,0 +1,93 @@ +import { GetDisplayWidth, GetDisplayHeight } from '../../../plugins/utils/size/GetDisplaySize.js'; + +var RunChildrenWrap = function (lineWidth, out) { + if (out === undefined) { + out = { + lines: [], + width: 0, + height: 0 + } + } else { + out.lines.length = 0; + out.width = 0; + out.height = 0; + } + + var children = this.sizerChildren; + var itemSpace = this.space.item, + lineSpace = this.space.line, + indentLeftOdd = this.space.indentLeftOdd, + indentLeftEven = this.space.indentLeftEven, + indentTopOdd = this.space.indentTopOdd, + indentTopEven = this.space.indentTopEven; + var child, childWidth, childHeight, remainder = 0, indentLeft; + var lines = out.lines, + lastLine = undefined, + newLine; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (child === '\n') { + child = undefined; + childWidth = 0; + newLine = true; + } else { + if (child.rexSizer.hidden) { + continue; + } + + if (child.isRexSizer) { + child.layout(); // Use original size + } + + childWidth = GetChildWidth(child); + newLine = (remainder < childWidth) || (lastLine === undefined); + } + // New line + if (newLine) { + if (lastLine) { + lastLine.width = lineWidth - (remainder + itemSpace); + out.width = Math.max(out.width, lastLine.width); + out.height += lastLine.height + lineSpace; + } + + lastLine = { + children: [], + // width: 0, + height: 0 + }; + lines.push(lastLine); + + var indentLeft = (lines.length % 2) ? indentLeftOdd : indentLeftEven; + remainder = lineWidth - indentLeft; + } + + remainder -= (childWidth + itemSpace); + if (child) { + lastLine.children.push(child); + childHeight = GeChildHeight(child); + lastLine.height = Math.max(lastLine.height, childHeight); + } + } + + if (lastLine) { + lastLine.width = lineWidth - (remainder + itemSpace); + out.width = Math.max(out.width, lastLine.width); + out.height += lastLine.height; + } + + out.height += Math.max(indentTopOdd, indentTopEven); + + return out; +} + +var GetChildWidth = function (child) { + var padding = child.rexSizer.padding; + return GetDisplayWidth(child) + padding.left + padding.right; +} + +var GeChildHeight = function (child) { + var padding = child.rexSizer.padding; + return GetDisplayHeight(child) + padding.top + padding.bottom; +} + +export default RunChildrenWrap; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RunWidthWrap.js b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RunWidthWrap.js new file mode 100644 index 0000000000000000000000000000000000000000..eaaa36848fc4d18cf9793cad458b776e526aa1c0 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fixwidthsizer/RunWidthWrap.js @@ -0,0 +1,10 @@ +import RunChildrenWrapBase from '../basesizer/RunWidthWrap.js'; +import RunChildrenWrap from './RunChildrenWrap.js'; + +var RunWidthWrap = function (width) { + var innerWidth = width - this.space.left - this.space.right; + this.widthWrapResult = RunChildrenWrap.call(this, innerWidth, this.widthWrapResult); + RunChildrenWrapBase.call(this, width); +} + +export default RunWidthWrap; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/flip/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/flip/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f355849b85e0a2fd4df2cbf5a6e2f5e848733c7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/flip/Factory.d.ts @@ -0,0 +1,7 @@ +// import * as Phaser from 'phaser'; +import Flip from "./Flip"; + +export default function ( + gameObject: Phaser.GameObjects.GameObject, + config?: Flip.IConfig +): Flip; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/flip/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/flip/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..f5905bf841cf7c02778c08cb34cdbfc8617d6259 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/flip/Factory.js @@ -0,0 +1,11 @@ +import Flip from './Flip.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('flip', function (gameObject, config) { + return new Flip(gameObject, config); +}); + +SetValue(window, 'RexPlugins.UI.Flip', Flip); + +export default Flip; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/flip/Flip.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/flip/Flip.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a766f4a6988c87b99a79448c616e105da610127d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/flip/Flip.d.ts @@ -0,0 +1,2 @@ +import Flip from '../../../plugins/flip'; +export default Flip; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/flip/Flip.js b/ui/src/phaser3-rex-plugins/templates/ui/flip/Flip.js new file mode 100644 index 0000000000000000000000000000000000000000..5ebe8b6f76c124f8cc520b9fe6170725f2e6abe7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/flip/Flip.js @@ -0,0 +1,2 @@ +import Flip from '../../../plugins/flip.js'; +export default Flip; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/folder/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/folder/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..01ba897bbd4162789f83bffe8863ee381b70a543 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/folder/Factory.d.ts @@ -0,0 +1,5 @@ +import Folder from './Folder'; + +export default function ( + config?: Folder.IConfig +): Folder; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/folder/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/folder/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..733c026da998b9cdc043b538554af960fedf8ac3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/folder/Factory.js @@ -0,0 +1,13 @@ +import Folder from './Folder.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('folder', function (config) { + var gameObject = new Folder(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Folder', Folder); + +export default Folder; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/folder/Folder.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/folder/Folder.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..202d5f243587f166dbc733d2da38313ce3aa7607 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/folder/Folder.d.ts @@ -0,0 +1,65 @@ +// import * as Phaser from 'phaser'; +import Sizer from '../sizer/Sizer'; +import OpenCloseTransition from '../../../plugins/behaviors/openclosetransition/OpenCloseTransition'; + +export default Folder; + +declare namespace Folder { + + interface IConfig extends Sizer.IConfig { + background?: Phaser.GameObjects.GameObject, + + title: Phaser.GameObjects.GameObject, + + child: Phaser.GameObjects.GameObject, + customChildOrigin?: boolean, + + toggleByTarget?: Phaser.GameObjects.GameObject, + toggleClickConfig?: { + mode?: 0 | 1 | 'pointerdown' | 'pointerup' | 'press' | 'release', + clickInterval?: number, + threshold?: number, + }, + + align?: { + title?: Sizer.AlignTypes, + child?: Sizer.AlignTypes, + }, + + expand?: { + title?: boolean, + child?: boolean, + }, + + transition?: { + duration?: number, + expandCallback?: OpenCloseTransition.TransitCallbackType, + collapseCallback?: OpenCloseTransition.TransitCallbackType, + }, + + reLayoutTarget?: Phaser.GameObjects.GameObject, + + onExpandStart?: (folder: this) => void, + onExpandComplete?: (folder: this) => void, + onCollapseStart?: (folder: this) => void, + onCollapseComplete?: (folder: this) => void, + } +} + +declare class Folder extends Sizer { + constructor( + scene: Phaser.Scene, + config?: Folder.IConfig + ); + + setTransitionDuration(duration?: number): this; + transitionDuration: number; + + setExpandCallback(callback?: OpenCloseTransition.TransitCallbackType): this; + setCollapseCallback(callback?: OpenCloseTransition.TransitCallbackType): this; + + expand(duration?: number): this; + collapse(duration?: number): this; + toggle(duration?: number): this; + readonly expanded: boolean; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/folder/Folder.js b/ui/src/phaser3-rex-plugins/templates/ui/folder/Folder.js new file mode 100644 index 0000000000000000000000000000000000000000..a17543c0b68138e984d94ca2c6d71e602af30277 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/folder/Folder.js @@ -0,0 +1,122 @@ +import Sizer from '../sizer/Sizer'; +import ChildTransition from './methods/ChildTransition.js'; +import ExpandMethods from './methods/ExpandMethods.js'; +import ClickMethods from '../basesizer/ClickMethods'; +import ConfigurationMethods from './methods/ConfigurationMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Folder extends Sizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + + if (!config.hasOwnProperty('orientation')) { + config.orientation = 1; + } + + super(scene, config); + this.type = 'rexFolder'; + + this.expanded = undefined; + this.expandDirection = (this.orientation === 1) ? 'y' : 'x'; + + var background = config.background; + var title = config.title; + var child = config.child; + + // background + if (background) { + this.addBackground(background); + } + + // title + var defaultAlign = (this.orientation === 1) ? 'left' : 'top'; + var align = GetValue(config, 'align.title', defaultAlign); + var expand = GetValue(config, 'expand.title', true); + this.add( + title, + { + proportion: 0, align: align, expand: expand, + } + ); + + var toggleByTarget = GetValue(config, 'toggleByTarget', undefined); + var toggleClickConfig = GetValue(config, 'toggleClickConfig'); + + if (toggleByTarget === undefined) { + toggleByTarget = title; + } + if (toggleByTarget) { + ClickMethods.onClick.call( + toggleByTarget, + function () { + this.toggle(); + }, + this, + toggleClickConfig + ); + } + + // child + this.childTransition = new ChildTransition(child); + + var customOrigin = GetValue(config, 'customChildOrigin', false); + if (!customOrigin) { + var origin = (!this.rtl) ? 0 : 1; + child.setOrigin(origin); + } + + var align = GetValue(config, 'align.child', 'left'); + var expand = GetValue(config, 'expand.child', true); + var proportion = (expand) ? 1 : 0; + this.add( + child, + { + proportion: proportion, align: align, expand: expand, + + } + ); + + this.addChildrenMap('title', title); + this.addChildrenMap('child', child); + this.addChildrenMap('background', background); + + var transitionConfig = config.transition; + this.setTransitionDuration(GetValue(transitionConfig, 'duration', 200)); + this.setExpandCallback(GetValue(transitionConfig, 'expandCallback', undefined)); + this.setCollapseCallback(GetValue(transitionConfig, 'collapseCallback', undefined)); + + this.reLayoutTarget = GetValue(config, 'reLayoutTarget', undefined); + + var onExpandStart = config.onExpandStart; + if (onExpandStart) { + this.on('expand.start', onExpandStart); + } + + var onExpandComplete = config.onExpandComplete; + if (onExpandComplete) { + this.on('expand.complete', onExpandComplete); + } + + var onCollapseStart = config.onCollapseStart; + if (onCollapseStart) { + this.on('collapse.start', onCollapseStart); + } + + var onCollapseComplete = config.onCollapseComplete; + if (onCollapseComplete) { + this.on('collapse.complete', onCollapseComplete); + } + + } +} + +Object.assign( + Folder.prototype, + ExpandMethods, + ConfigurationMethods, +) + +export default Folder; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ChildTransition.js b/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ChildTransition.js new file mode 100644 index 0000000000000000000000000000000000000000..33cdd363322e7856bf9769c83459a54e5f356b9b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ChildTransition.js @@ -0,0 +1,24 @@ +import OpenCloseTransition from '../../../../plugins/behaviors/openclosetransition/OpenCloseTransition.js'; + +class Transition extends OpenCloseTransition { + constructor(gameObject, config) { + if (config === undefined) { + config = {}; + } + config.destroy = false; + super(gameObject, config); + } + + onOpen() { + this.emit('open', this.parent, this); + super.onOpen(); + } + + onClose() { + this.emit('close', this.parent, this); + super.onClose(); + } + +} + +export default Transition; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ConfigurationMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ConfigurationMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..8ec01518e198c67608cd48fbc7dd8f19d179aa24 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ConfigurationMethods.js @@ -0,0 +1,37 @@ +import ScaleMethods from '../../basesizer/ScaleMethods.js'; + +var DefaultExpandCallback = function (gameObject, duration) { + ScaleMethods.popUp.call(gameObject, duration, this.expandDirection); +}; + +var DefaultCollapseCallback = function (gameObject, duration) { + ScaleMethods.scaleDown.call(gameObject, duration, this.expandDirection) +} + +export default { + setTransitionDuration(duration) { + this.transitionDuration = duration; + + this.childTransition + .setTransitInTime(duration) + .setTransitOutTime(duration); + + return this; + }, + + setExpandCallback(callback) { + if (callback === undefined) { + callback = DefaultExpandCallback.bind(this); + } + this.childTransition.setTransitInCallback(callback); + return this; + }, + + setCollapseCallback(callback) { + if (callback === undefined) { + callback = DefaultCollapseCallback.bind(this); + } + this.childTransition.setTransitOutCallback(callback); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ExpandMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ExpandMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..61018ca59533ddcb76e96afddcbb54132d1d3c25 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/folder/methods/ExpandMethods.js @@ -0,0 +1,75 @@ +export default { + expand(duration) { + if (this.expanded === true) { + return this; + } + + if (duration === undefined) { + duration = this.transitionDuration; + } + + this.expanded = true; + + var title = this.childrenMap.title; + var child = this.childrenMap.child; + + this.show(child); + + var layoutTarget = (this.reLayoutTarget) ? this.reLayoutTarget : this.getTopmostSizer(); + layoutTarget.layout(); + + title.emit('folder.expand', duration, this); + child.emit('folder.expand', duration, this); + this.emit('expand.start', this); + + this.childTransition + .once('open', function () { + this.emit('expand.complete', this); + }, this) + .requestOpen(null, duration); + + return this; + }, + + collapse(duration) { + if (this.expanded === false) { + return this; + } + + if (duration === undefined) { + duration = this.transitionDuration; + } + + this.expanded = false; + + var title = this.childrenMap.title; + var child = this.childrenMap.child; + + title.emit('folder.collapse', duration, this); + child.emit('folder.collapse', duration, this); + this.emit('collapse.start', this); + + this.childTransition + .once('close', function () { + this.setChildScale(child, 1, 1).hide(child); + + var layoutTarget = (this.reLayoutTarget) ? this.reLayoutTarget : this.getTopmostSizer(); + layoutTarget.layout(); + + this.emit('collapse.complete', this); + }, this) + .requestClose(null, duration); + + return this; + }, + + toggle(duration) { + if (this.expanded) { + this.collapse(duration); + } else { + this.expand(duration); + } + + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1b79ee71393a8af52676c56ab69bad11c3f3f6b7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/Factory.d.ts @@ -0,0 +1,7 @@ +import FullWindowRectangle from './FullWindowRectangle'; + +export default function ( + fillColor?: number, + fillAlpha?: number + +): FullWindowRectangle; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..f191129b7b68a4a96feb5e3d2677cbe9558a7b73 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/Factory.js @@ -0,0 +1,13 @@ +import FullWindowRectangle from './FullWindowRectangle.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('fullWindowRectangle', function (fillColor, fillAlpha) { + var gameObject = new FullWindowRectangle(this.scene, fillColor, fillAlpha); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.FullWindowRectangle', FullWindowRectangle); + +export default FullWindowRectangle; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/FullWindowRectangle.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/FullWindowRectangle.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c711cc1d3243b55855a46a74a3b5c78397440191 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/FullWindowRectangle.d.ts @@ -0,0 +1,2 @@ +import FullWindowRectangle from "../../../plugins/fullwindowrectangle"; +export default FullWindowRectangle; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/FullWindowRectangle.js b/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/FullWindowRectangle.js new file mode 100644 index 0000000000000000000000000000000000000000..cb55f1263a62a7d85214db38c53049a08387588d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/fullwindowrectangle/FullWindowRectangle.js @@ -0,0 +1,2 @@ +import FullWindowRectangle from '../../../plugins/fullwindowrectangle.js'; +export default FullWindowRectangle; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/AddChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/AddChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..d8257ed547b85edf01ac8302b10147784f6081a9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/AddChildMethods.js @@ -0,0 +1,18 @@ +import GridSizer from '../gridsizer/GridSizer.js'; + +const SizerAdd = GridSizer.prototype.add; + +export default { + addButton(gameObject, columnIndex, rowIndex) { + SizerAdd.call(this, gameObject, columnIndex, rowIndex, undefined, 0, this.buttonsExpand); + this.buttonGroup.add(gameObject); + return this; + }, + + addButtons(gameObjects, rowThenColumn) { + for (var i = 0, cnt = gameObjects; i < cnt; i++) { + this.addButton(gameObjects[i], undefined, rowThenColumn); + } + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8bf397363c36979e1111534dbfc9ea693d45c318 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/Factory.d.ts @@ -0,0 +1,5 @@ +import GridButtons from './GridButtons'; + +export default function ( + config?: GridButtons.IConfig +): GridButtons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..092ec6ee89ad7de34476c6f43ae8348f19f1a8d4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/Factory.js @@ -0,0 +1,13 @@ +import GridButtons from './GridButtons.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('gridButtons', function (config) { + var gameObject = new GridButtons(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.GridButtons', GridButtons); + +export default GridButtons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/GridButtons.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/GridButtons.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..99ee01cdb6e3ab3b43f70e61e26bdd25f0728af8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/GridButtons.d.ts @@ -0,0 +1,101 @@ +// import * as Phaser from 'phaser'; +import GridSizer from '../gridsizer/GridSizer'; +import { IConfig as IConfigButtons } from '../utils/buttongroup/Buttons'; + + +export default GridButtons; + +declare namespace GridButtons { + type CreateCellContainerCallbackType = ( + scene: Phaser.Scene, + x: number, y: number, + config: { + column?: number, row?: number, + + align?: GridSizer.AlignTypes, + padding?: GridSizer.PaddingTypes, + expand?: boolean, + key?: string + } + ) => Phaser.GameObjects.GameObject; + + interface IConfig extends GridSizer.IConfig, IConfigButtons { + background?: Phaser.GameObjects.GameObject, + + buttons?: Phaser.GameObjects.GameObject[][], + createCellContainerCallback?: CreateCellContainerCallbackType + } +} + +declare class GridButtons extends GridSizer { + constructor( + scene: Phaser.Scene, + config?: GridButtons.IConfig + ); + + emitButtonClick( + index: number | Phaser.GameObjects.GameObject + ): this; + + setButtonEnable( + index?: number | Phaser.GameObjects.GameObject | boolean, + enable?: boolean + ): this; + + toggleButtonEnable( + index?: number | Phaser.GameObjects.GameObject + ): this; + + getButtonEnable( + index: number | Phaser.GameObjects.GameObject + ): boolean; + + getButton( + index: number + ): Phaser.GameObjects.GameObject | null; + + addButton( + gameObject: Phaser.GameObjects.GameObject + ): this; + + removeButton( + gameObject: Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + clearButtons( + destroyChild?: boolean + ): this; + + showButton( + index: number | Phaser.GameObjects.GameObject + ): this; + + hideButton( + index: number | Phaser.GameObjects.GameObject + ): this; + + forEachButtton( + callback: (button: Phaser.GameObjects.GameObject, index: number, buttons: Phaser.GameObjects.GameObject[]) => void, + scop?: unknown + ): this; + + readonly buttons: Phaser.GameObjects.GameObject[]; + + value: unknown; + + setSelectedButtonName( + name: string + ): this; + + getSelectedButtonName(): string; + + setButtonState( + name: string, + state?: boolean + ): this; + + getButtonState( + name: string + ): boolean; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/GridButtons.js b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/GridButtons.js new file mode 100644 index 0000000000000000000000000000000000000000..52d92f80fc797aaa46494b57c88b2a1a1cbd3108 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/GridButtons.js @@ -0,0 +1,124 @@ +import GridSizer from '../gridsizer/GridSizer.js'; +import AddChildMethods from './AddChildMethods.js'; +import RemoveChildMethods from './RemoveChildMethods.js'; +import ButtonGroup from '../utils/buttongroup/ButtonGroup.js'; +import ButtonMethods from '../utils/buttongroup/ButtonMethods.js'; +import ButtonStateMethods from '../utils/buttongroup/ButtonStateMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class GridButtons extends GridSizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + var rowCount = GetValue(config, 'row', 0); + var columnCount = GetValue(config, 'column', (config.col || 0)); + var createCellContainerCallback = GetValue(config, 'createCellContainerCallback'); + var buttons = GetValue(config, 'buttons', undefined); + var buttonsExpand = GetValue(config, 'expand', true); + var buttonProportion = (buttonsExpand) ? 1 : 0; + + if (createCellContainerCallback) { + config.createCellContainerCallback = undefined; + } + if (buttons !== undefined) { + rowCount = Math.max(rowCount, buttons.length); + for (var i = 0, cnt = buttons.length; i < cnt; i++) { + columnCount = Math.max(columnCount, buttons[i].length); + } + } + + config.row = rowCount; + config.column = columnCount; + config.columnProportions = buttonProportion; + config.rowProportions = buttonProportion; + + // Create + super(scene, config); + this.type = 'rexGridButtons'; + this.buttonGroup = new ButtonGroup({ + parent: this, + eventEmitter: GetValue(config, 'eventEmitter', this), + groupName: GetValue(config, 'groupName', undefined), + clickConfig: GetValue(config, 'click', undefined) + }) + .setButtonsType(config); + + // Add elements + var background = GetValue(config, 'background', undefined); + + // Buttons properties + this.buttonsExpand = buttonsExpand; + var space = GetValue(config, 'space', undefined); + if (typeof (space) === 'number') { + space = { itemX: space, itemY: space }; + } + + if (background) { + this.addBackground(background); + } + + if (buttons) { + var rowButtons, button; + for (var r = 0, rcnt = buttons.length; r < rcnt; r++) { // row + rowButtons = buttons[r]; + for (var c = 0, ccnt = rowButtons.length; c < ccnt; c++) { // col + button = rowButtons[c]; + if (button) { + this.addButton(button, c, r); + } + } + } + } else if (createCellContainerCallback) { + for (var y = 0; y < rowCount; y++) { + for (var x = 0; x < columnCount; x++) { + var button = createCellContainerCallback(scene, x, y); + if (button) { + this.addButton(button, x, y); + } + } + } + } + + this.addChildrenMap('background', background); + this.addChildrenMap('buttons', this.buttonGroup.buttons); + } + + destroy(fromScene) { + // This Game Object has already been destroyed + if (!this.scene || this.ignoreDestroy) { + return; + } + + super.destroy(fromScene); + this.buttonGroup.destroy(); + this.buttonGroup = undefined; + } + + get buttons() { + return this.buttonGroup.buttons; + } + + get groupName() { + return this.buttonGroup.groupName; + } + + set groupName(value) { + this.buttonGroup.groupName = value; + } + + get eventEmitter() { + return this.buttonGroup.eventEmitter; + } +} + +Object.assign( + GridButtons.prototype, + AddChildMethods, + RemoveChildMethods, + ButtonMethods, + ButtonStateMethods +); + +export default GridButtons; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/RemoveChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/RemoveChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..3a7022c3b2d15ee86c787f259ad04adfdf71923d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridbuttons/RemoveChildMethods.js @@ -0,0 +1,50 @@ +import GridSizer from '../gridsizer/GridSizer.js'; +import IsArray from '../../../plugins/utils/object/IsArray.js'; + +const SizerRmove = GridSizer.prototype.remove; +const SizerClear = GridSizer.prototype.clear; + +var Remove = function (gameObject, destroyChild) { + var gameObject = this.getButton(gameObject); + if (!gameObject) { + return this; + } + + this.buttonGroup.remove(gameObject); + SizerRmove.call(this, gameObject, destroyChild); + return this; +}; + +export default { + remove(gameObject, destroyChild) { + if (IsArray(gameObject)) { + var gameObjects = gameObject; + for (var i = 0, cnt = gameObjects.length; i < cnt; i++) { + Remove.call(this, gameObjects[i], destroyChild); + } + } else { + Remove.call(this, gameObject, destroyChild); + } + return this; + }, + + clear(destroyChild) { + var buttons = this.buttonGroup.buttons; + buttons.length = 0; + SizerClear.call(this, destroyChild); + return this; + }, + + removeButton(gameObject, destroyChild) { + this.remove(gameObject, destroyChild); + return this; + }, + + clearButtons(destroyChild) { + var buttons = this.buttonGroup.buttons; + for (var i = buttons.length - 1; i >= 0; i--) { + Remove.call(this, buttons[i], destroyChild); + } + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/AddChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/AddChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..deb49535fdbb2ea02abf872ffb42a229c64c6eb3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/AddChildMethods.js @@ -0,0 +1,112 @@ +import AddChild from '../basesizer/utils/AddChild.js'; +import GetBoundsConfig from '../utils/GetBoundsConfig.js'; +import ALIGNMODE from '../utils/AlignConst.js'; + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; +const GetValue = Phaser.Utils.Objects.GetValue; +const ALIGN_CENTER = Phaser.Display.Align.CENTER; + + +var GetEmptyCellIndex = function (columnIndex, rowIndex, cells, columnCount, rowCount) { + if ((typeof (columnIndex) === 'number') || (typeof (rowIndex) === 'number')) { + if (columnIndex === undefined) { + var idx; + for (var i = 0; i < columnCount; i++) { + idx = (rowIndex * columnCount) + i; + if (!cells[idx]) { + return idx; + } + } + } else if (rowIndex === undefined) { + var idx; + for (var i = 0; i < rowCount; i++) { + idx = (i * columnCount) + columnIndex; + if (!cells[idx]) { + return idx; + } + } + } else { + var idx = (rowIndex * columnCount) + columnIndex; + if (!cells[idx]) { + return idx; + } + } + + } else if (rowIndex === true) { + var idx; + for (var i = 0; i < columnCount; i++) { + for (var j = 0; j < rowCount; j++) { + idx = (j * columnCount) + i; + if (!cells[idx]) { + return idx; + } + } + } + } else { + for (var i = 0, cnt = cells.length; i < cnt; i++) { + if (!cells[i]) { + return i; + } + } + } + return null; +} + +var Add = function (gameObject, columnIndex, rowIndex, align, paddingConfig, expand, childKey) { + AddChild.call(this, gameObject); + if (IsPlainObject(columnIndex)) { + var config = columnIndex; + columnIndex = GetValue(config, 'column', undefined); + rowIndex = GetValue(config, 'row', undefined); + align = GetValue(config, 'align', ALIGN_CENTER); + paddingConfig = GetValue(config, 'padding', 0); + expand = GetValue(config, 'expand', false); + childKey = GetValue(config, 'key', undefined); + } + + // Get insert index + var itemIndex = GetEmptyCellIndex(columnIndex, rowIndex, this.sizerChildren, this.columnCount, this.rowCount); + if (itemIndex === null) { + // Specific index mode + if ((typeof (columnIndex) === 'number') && (typeof (rowIndex) === 'number')) { + return this; + } + + if ((rowIndex === true) || (typeof (rowIndex) === 'number')) { + this.addEmptyColumn(); + } else { + this.addEmptyRow(); + } + + // Get insert index again + itemIndex = GetEmptyCellIndex(columnIndex, rowIndex, this.sizerChildren, this.columnCount, this.rowCount); + } + + if (typeof (align) === 'string') { + align = ALIGNMODE[align]; + } + if (align === undefined) { + align = ALIGN_CENTER; + } + if (paddingConfig === undefined) { + paddingConfig = 0; + } + if (expand === undefined) { + expand = true; + } + + var config = this.getSizerConfig(gameObject); + config.align = align; + config.padding = GetBoundsConfig(paddingConfig); + config.expand = expand; + this.sizerChildren[itemIndex] = gameObject; + + if (childKey !== undefined) { + this.addChildrenMap(childKey, gameObject) + } + return this; +} + +export default { + add: Add +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5b146e27a82ea22aa73e851b38436b1451be351a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Factory.d.ts @@ -0,0 +1,24 @@ +import GridSizer from './GridSizer'; + + +export default function ( + config?: GridSizer.IConfig +): GridSizer; + +export default function ( + x: number, y: number, + config?: GridSizer.IConfig +): GridSizer; + +export default function ( + x: number, y: number, + width: number, height: number, + config?: GridSizer.IConfig +): GridSizer; + +export default function ( + x: number, y: number, + width: number, height: number, + column: number, row: number, + config?: GridSizer.IConfig +): GridSizer; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..27a65e2da42fc811c23fe96cb39ab1ec27fcf2f7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Factory.js @@ -0,0 +1,13 @@ +import GridSizer from './GridSizer.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('gridSizer', function (x, y, minWidth, minHeight, columnCount, rowCount, columnProportions, rowProportion, config) { + var gameObject = new GridSizer(this.scene, x, y, minWidth, minHeight, columnCount, rowCount, columnProportions, rowProportion, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.GridSizer', GridSizer); + +export default GridSizer; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..e4280856fee1a06e5bc5ef332c55d742710ac8db --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenHeight.js @@ -0,0 +1,49 @@ +import { GetDisplayHeight } from '../../../plugins/utils/size/GetDisplaySize.js'; +import Sum from '../../../plugins/utils/math/Sum.js'; + +var GetChildrenHeight = function (minimumMode) { + if (this.rexSizer.hidden) { + return 0; + } + + if (minimumMode === undefined) { + minimumMode = true; + } + + var result = 0, + rowHeight; + var children = this.sizerChildren; + var child, padding, childHeight, proportion; + + for (var i = 0; i < this.rowCount; i++) { + proportion = this.rowProportions[i]; + rowHeight = 0; + if ((proportion === 0) || minimumMode) { + for (var j = 0; j < this.columnCount; j++) { + child = children[(i * this.columnCount) + j]; + if (!child) { + continue; + } + if (child.rexSizer.hidden) { + continue; + } + + childHeight = (child.isRexSizer) ? + Math.max(child.minHeight, child.childrenHeight) : + (child.hasOwnProperty('minHeight')) ? child.minHeight : GetDisplayHeight(child); + padding = child.rexSizer.padding; + childHeight += (padding.top + padding.bottom); + rowHeight = Math.max(rowHeight, childHeight); + } + result += rowHeight; + } + // else,(proportion > 0) : rowHeight is 0 + this.rowHeight[i] = rowHeight; + } + + var space = this.space; + var indentTop = Math.max(space.indentTopOdd, space.indentTopEven); + return result + Sum(space.top, indentTop, ...space.row, space.bottom); +} + +export default GetChildrenHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenSizers.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenSizers.js new file mode 100644 index 0000000000000000000000000000000000000000..179c8baf0167d1378a80f701ca13048229791775 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenSizers.js @@ -0,0 +1,15 @@ +var GetChildrenSizers = function (out) { + if (out === undefined) { + out = []; + } + var children = this.sizerChildren, + child; + for (var i = 0, cnt = children.length; i < cnt; i++) { + child = children[i]; + if (child && child.isRexSizer) { + out.push(child); + } + } + return out; +} +export default GetChildrenSizers; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..77af5e398b719647cfa11c20e8b848163b42008c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetChildrenWidth.js @@ -0,0 +1,45 @@ +import Sum from '../../../plugins/utils/math/Sum.js'; + +var GetChildrenWidth = function (minimumMode) { + if (this.rexSizer.hidden) { + return 0; + } + + if (minimumMode === undefined) { + minimumMode = true; + } + + var result = 0, + columnWidth; + var children = this.sizerChildren; + var child, padding, childWidth, proportion; + + for (var i = 0; i < this.columnCount; i++) { + proportion = this.columnProportions[i]; + columnWidth = 0; + if ((proportion === 0) || minimumMode) { + for (var j = 0; j < this.rowCount; j++) { + child = children[(j * this.columnCount) + i]; + if (!child) { + continue; + } + if (child.rexSizer.hidden) { + continue; + } + + padding = child.rexSizer.padding; + childWidth = this.getChildWidth(child) + padding.left + padding.right; + columnWidth = Math.max(columnWidth, childWidth); + } + result += columnWidth; + } + // else,(proportion > 0) : columnWidth is 0 + this.columnWidth[i] = columnWidth; + } + + var space = this.space; + var indentLeft = Math.max(space.indentLeftOdd, space.indentLeftEven); + return result + Sum(space.left, indentLeft, ...space.column, space.right); +} + +export default GetChildrenWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetExpandedChildHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetExpandedChildHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..76b5e4880ceef6aed77ab5d5d4e4b1a1190219f7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetExpandedChildHeight.js @@ -0,0 +1,11 @@ +var GetExpandedChildHeight = function (child, rowHeight) { + var childHeight; + var childConfig = child.rexSizer; + if (childConfig.expand) { + var padding = childConfig.padding; + childHeight = rowHeight - padding.top - padding.bottom; + } + return childHeight; +} + +export default GetExpandedChildHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetExpandedChildWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetExpandedChildWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..73ab9a8a7157b497adabb7837c123c0713945d2f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetExpandedChildWidth.js @@ -0,0 +1,11 @@ +var GetExpandedChildWidth = function (child, colWidth) { + var childWidth; + var childConfig = child.rexSizer; + if (childConfig.expand) { + var padding = childConfig.padding; + childWidth = colWidth - padding.left - padding.right; + } + return childWidth; +} + +export default GetExpandedChildWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetTotalColumnProportions.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetTotalColumnProportions.js new file mode 100644 index 0000000000000000000000000000000000000000..8f440fdcdf070e24d5a7f49210bdfa2c41da5625 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetTotalColumnProportions.js @@ -0,0 +1,13 @@ +var GetTotalColumnProportions = function () { + var result = 0, + proportion; + for (var i = 0; i < this.columnCount; i++) { + proportion = this.columnProportions[i]; + if (proportion > 0) { + result += proportion; + } + } + return result; +} + +export default GetTotalColumnProportions; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetTotalRowProportions.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetTotalRowProportions.js new file mode 100644 index 0000000000000000000000000000000000000000..ac6f0efbcb84cfafdbccfdf79a5ff66c6b761a47 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GetTotalRowProportions.js @@ -0,0 +1,13 @@ +var GetTotalRowProportions = function () { + var result = 0, + proportion; + for (var i = 0; i < this.rowCount; i++) { + proportion = this.rowProportions[i]; + if (proportion > 0) { + result += proportion; + } + } + return result; +} + +export default GetTotalRowProportions; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GridSizer.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GridSizer.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c0a025ea672cd7b24a5a183320de33238b582ddc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GridSizer.d.ts @@ -0,0 +1,145 @@ +// import * as Phaser from 'phaser'; +import BaseSizer from '../basesizer/BaseSizer.js'; + +export default GridSizer; + +declare namespace GridSizer { + type AlignTypes = number | 'center' | 'left' | 'right' | 'top' | 'bottom' | + 'left-top' | 'left-center' | 'left-bottom' | + 'center-top' | 'center-center' | 'center-bottom' | + 'right-top' | 'right-center' | 'right-bottom'; + type PaddingTypes = number | + { + left?: number, + right?: number, + top?: number, + bottom?: number + }; + + type CreateCellContainerCallbackType = ( + scene: Phaser.Scene, + x: number, y: number, + config: { + column?: number, row?: number, + + align?: GridSizer.AlignTypes, + padding?: GridSizer.PaddingTypes, + expand?: boolean, + key?: string + } + ) => Phaser.GameObjects.GameObject; + + interface IConfig extends BaseSizer.IConfig { + x?: number, + y?: number, + width?: number, + height?: number, + + column?: number, + row?: number, + + columnProportions?: number | number[], + rowProportions?: number | number[], + + space?: { + left?: number, right?: number, top?: number, bottom?: number, + + column?: number | number[], + row?: number | number[], + + indentLeftOdd?: number, indentLeftEven?: number, + indentTopOdd?: number, indentTopEven?: number, + }, + + createCellContainerCallback?: CreateCellContainerCallbackType + } + +} + + +declare class GridSizer extends BaseSizer { + sizerChildren: (Phaser.GameObjects.GameObject | null)[]; + + constructor( + scene: Phaser.Scene, + config?: GridSizer.IConfig + ); + + constructor( + scene: Phaser.Scene, + x: number, y: number, + config?: GridSizer.IConfig + ); + + constructor( + scene: Phaser.Scene, + x: number, y: number, + width: number, height: number, + config?: GridSizer.IConfig + ); + + constructor( + scene: Phaser.Scene, + x: number, y: number, + width: number, height: number, + column: number, row: number, + config?: GridSizer.IConfig + ); + + setColumnProportion(columnIndex: number, proportion: number): this; + setRowProportion(rowIndex: number, proportion: number): this; + + add( + gameObject: Phaser.GameObjects.GameObject, + config?: { + column?: number | undefined, + row?: number | undefined | true, + align?: GridSizer.AlignTypes, + padding?: GridSizer.PaddingTypes, + expand?: boolean, + key?: string + } + ): this; + + add( + gameObject: Phaser.GameObjects.GameObject, + columnIndex?: number | undefined, + rowIndex?: number | undefined | true, + align?: GridSizer.AlignTypes, + padding?: GridSizer.PaddingTypes, + expand?: boolean, + key?: string + ): this; + + remove( + gameObject: Phaser.GameObjects.GameObject, + destroyChild?: boolean + ): this; + + removeAt( + columnIndex: number, + rowIndex: number, + destroyChild?: boolean + ): this; + + removeAll( + destroyChild?: boolean + ): this; + + clear( + destroyChild?: boolean + ): this; + + columnCount: number; + rowCount: number; + + resetGrid( + column: number, row: number, + columnProportions?: number | number[], + rowProportions?: number | number[], + space?: { + column?: number | number[], + row?: number | number[], + } + ): this; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GridSizer.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GridSizer.js new file mode 100644 index 0000000000000000000000000000000000000000..5c88ebe3e222bc11812428d37e80d9e1e21eb889 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/GridSizer.js @@ -0,0 +1,171 @@ +import BaseSizer from '../basesizer/BaseSizer.js'; +import Methods from './Methods.js'; +import GetTotalColumnProportions from './GetTotalColumnProportions.js'; +import GetTotalRowProportions from './GetTotalRowProportions.js'; + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; +const GetValue = Phaser.Utils.Objects.GetValue; + +class GridSizer extends BaseSizer { + constructor(scene, x, y, minWidth, minHeight, columnCount, rowCount, columnProportions, rowProportions, config) { + if (IsPlainObject(x)) { + config = x; + x = GetValue(config, 'x', 0); + y = GetValue(config, 'y', 0); + minWidth = GetValue(config, 'width', undefined); + minHeight = GetValue(config, 'height', undefined); + columnCount = GetValue(config, 'column', (config.col || 0)); + rowCount = GetValue(config, 'row', 0); + columnProportions = GetValue(config, 'columnProportions', 0); + rowProportions = GetValue(config, 'rowProportions', 0); + } else if (IsPlainObject(minWidth)) { + config = minWidth; + minWidth = GetValue(config, 'width', undefined); + minHeight = GetValue(config, 'height', undefined); + columnCount = GetValue(config, 'column', (config.col || 0)); + rowCount = GetValue(config, 'row', 0); + columnProportions = GetValue(config, 'columnProportions', 0); + rowProportions = GetValue(config, 'rowProportions', 0); + } else if (IsPlainObject(columnCount)) { + config = columnCount; + columnCount = GetValue(config, 'column', (config.col || 0)); + rowCount = GetValue(config, 'row', 0); + columnProportions = GetValue(config, 'columnProportions', 0); + rowProportions = GetValue(config, 'rowProportions', 0); + } else if (IsPlainObject(columnProportions)) { + config = columnProportions; + columnProportions = GetValue(config, 'columnProportions', 0); + rowProportions = GetValue(config, 'rowProportions', 0); + } + super(scene, x, y, minWidth, minHeight, config); + + this.type = 'rexGridSizer'; + this.resetGrid( + columnCount, rowCount, + columnProportions, rowProportions, + GetValue(config, 'space', undefined) + ); + + this.setIndentLeft( + GetValue(config, 'space.indentLeftOdd', 0), + GetValue(config, 'space.indentLeftEven', 0) + ); + this.setIndentTop( + GetValue(config, 'space.indentTopOdd', 0), + GetValue(config, 'space.indentTopEven', 0) + ); + + this.addChildrenMap('items', this.sizerChildren); + + var createCellContainerCallback = GetValue(config, 'createCellContainerCallback'); + if (createCellContainerCallback) { + for (var y = 0, ycnt = this.rowCount; y < ycnt; y++) { + for (var x = 0, xcnt = this.columnCount; x < xcnt; x++) { + var addConfig = { column: x, row: y }; + var child = createCellContainerCallback(scene, x, y, addConfig); + if (child) { + this.add(child, addConfig); + } + } + } + } + } + + destroy(fromScene) { + // This Game Object has already been destroyed + if (!this.scene || this.ignoreDestroy) { + return; + } + + super.destroy(fromScene); + + // More free resources + this.columnProportions = undefined; + this.rowProportions = undefined; + this.columnWidth = undefined; + this.rowHeight = undefined; + } + + setIndentLeft(odd, even) { + this.space.indentLeftOdd = odd; + this.space.indentLeftEven = even; + return this; + } + + setIndentTop(odd, even) { + this.space.indentTopOdd = odd; + this.space.indentTopEven = even; + return this; + } + + setColumnProportion(columnIndex, proportion) { + if (columnIndex >= this.columnProportions.length) { + return this; + } + this.columnProportions[columnIndex] = proportion; + return this; + } + + setRowProportion(rowIndex, proportion) { + if (rowIndex >= this.rowProportions.length) { + return this; + } + this.rowProportions[rowIndex] = proportion; + return this; + } + + get totalColumnProportions() { + if (this._totalColumnProportions === undefined) { + this._totalColumnProportions = GetTotalColumnProportions.call(this); + } + return this._totalColumnProportions; + } + + get totalRowProportions() { + if (this._totalRowProportions === undefined) { + this._totalRowProportions = GetTotalRowProportions.call(this); + } + return this._totalRowProportions; + } + + getChildAt(columnIndex, rowIndex) { + return this.sizerChildren[(rowIndex * this.columnCount) + columnIndex]; + } + + childToGridIndex(child, out) { + if (!child) { + return null; + } + + var index = this.sizerChildren.indexOf(child); + if (index === -1) { + return null; + } + + if (out === undefined) { + out = {}; + } + out.x = index % this.columnCount; + out.y = Math.floor(index / this.columnCount); + return out; + } + + getColumnWidth(columnIndex) { + var colProportion = this.columnProportions[columnIndex]; + var colWidth = (colProportion === 0) ? this.columnWidth[columnIndex] : (colProportion * this.proportionWidthLength); + return colWidth; + } + + getRowHeight(rowIndex) { + var rowProportion = this.rowProportions[rowIndex]; + var rowHeight = (rowProportion === 0) ? this.rowHeight[rowIndex] : (rowProportion * this.proportionHeightLength); + return rowHeight; + } +} + +Object.assign( + GridSizer.prototype, + Methods +); + +export default GridSizer; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/InsertEmptyColumn.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/InsertEmptyColumn.js new file mode 100644 index 0000000000000000000000000000000000000000..637859743ad78148726bc62380a877fcbcfd49ce --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/InsertEmptyColumn.js @@ -0,0 +1,34 @@ +var InsertEmptyColumn = function (colIndex, proportion, space) { + if (proportion === undefined) { + proportion = this.columnProportions[0] || 0; + } + if (space === undefined) { + space = this.space.column[0] || 0; + } + + this.columnCount += 1; + this.gridCount += this.rowCount; + + for (var i = this.rowCount - 1; i >= 0; i--) { + var insertIndex = (i * this.columnCount) + colIndex; + this.sizerChildren.splice(insertIndex, 0, null); + } + + this.columnProportions.push(proportion); + + this.columnWidth.length += 1; // this.columnWidth will be recalculated when layout() + + this.space.column.splice(colIndex, 0, space); + + return this; +} + +var AddEmptyColumn = function (proportion, space) { + InsertEmptyColumn.call(this, this.columnCount, proportion, space); + return this; +} + +export { + InsertEmptyColumn, + AddEmptyColumn +}; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/InsertEmptyRow.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/InsertEmptyRow.js new file mode 100644 index 0000000000000000000000000000000000000000..d1bfc7947a8ec1be7f9906277677fbad6ca25ed9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/InsertEmptyRow.js @@ -0,0 +1,35 @@ +var InseryEmptyRow = function (rowIndex, proportion, space) { + if (proportion === undefined) { + proportion = this.rowProportions[0] || 0; + } + if (space === undefined) { + space = this.space.row[0] || 0; + } + + this.rowCount += 1; + this.gridCount += this.columnCount; + + var args = [rowIndex * this.columnCount, 0]; + for (var i = 0; i < this.columnCount; i++) { + args.push(null); + } + this.sizerChildren.splice.apply(this.sizerChildren, args); + + this.rowProportions.push(proportion); + + this.rowHeight.length += 1; // this.rowHeight will be recalculated when layout() + + this.space.row.splice(rowIndex, 0, space); + + return this; +} + +var AddEmptyRow = function (proportion, space) { + InseryEmptyRow.call(this, this.rowCount, proportion, space); + return this; +} + +export { + InseryEmptyRow, + AddEmptyRow +}; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/LayoutChildren.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/LayoutChildren.js new file mode 100644 index 0000000000000000000000000000000000000000..62b172e89efe147620c79e920adbd2b6f7eb61dc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/LayoutChildren.js @@ -0,0 +1,68 @@ +import ResizeGameObject from '../../../plugins/utils/size/ResizeGameObject.js'; +import PreLayoutChild from '../basesizer/utils/PreLayoutChild.js'; +import LayoutChild from '../basesizer/utils/LayoutChild.js'; +import CheckSize from '../basesizer/utils/CheckSize.js'; + +var LayoutChildren = function () { + var child, childConfig, padding; + var startX = this.innerLeft, + startY = this.innerTop; + var itemX, + itemY = startY; + var x, y, width, height; // Align zone + var childWidth, childHeight; + // Layout grid children + var columnSpace = this.space.column, + rowSpace = this.space.row, + indentLeftOdd = this.space.indentLeftOdd, + indentLeftEven = this.space.indentLeftEven, + indentTopOdd = this.space.indentTopOdd, + indentTopEven = this.space.indentTopEven; + + var colWidth, rowHeight; + var indentLeft, indentTop; + for (var rowIndex = 0; rowIndex < this.rowCount; rowIndex++) { + rowHeight = this.getRowHeight(rowIndex); + + indentLeft = (rowIndex % 2) ? indentLeftEven : indentLeftOdd; + itemX = startX + indentLeft; + for (var columnIndex = 0; columnIndex < this.columnCount; columnIndex++) { + colWidth = this.getColumnWidth(columnIndex); + + child = this.getChildAt(columnIndex, rowIndex); + if ((!child) || (child.rexSizer.hidden)) { + itemX += (colWidth + columnSpace[columnIndex]); + continue; + } + + PreLayoutChild.call(this, child); + + childWidth = this.getExpandedChildWidth(child, colWidth); + childHeight = this.getExpandedChildHeight(child, rowHeight); + if (child.isRexSizer) { + child.runLayout(this, childWidth, childHeight); + CheckSize(child, this); + } else { + ResizeGameObject(child, childWidth, childHeight); + } + + childConfig = child.rexSizer; + padding = childConfig.padding; + + x = (itemX + padding.left); + width = colWidth - padding.left - padding.right; + + indentTop = (columnIndex % 2) ? indentTopEven : indentTopOdd; + y = (itemY + indentTop + padding.top); + height = rowHeight - padding.top - padding.bottom; + + LayoutChild.call(this, child, x, y, width, height, childConfig.align); + + itemX += (colWidth + columnSpace[columnIndex]); + } + + itemY += (rowHeight + rowSpace[rowIndex]); + } +} + +export default LayoutChildren; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Methods.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Methods.js new file mode 100644 index 0000000000000000000000000000000000000000..ab6d7f975ecda617ff549eab7d44e42c741f3ed6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/Methods.js @@ -0,0 +1,45 @@ +import GetChildrenWidth from './GetChildrenWidth.js'; +import GetChildrenHeight from './GetChildrenHeight.js'; +import GetExpandedChildWidth from './GetExpandedChildWidth.js'; +import GetExpandedChildHeight from './GetExpandedChildHeight.js'; +import GetChildrenSizers from './GetChildrenSizers.js'; +import PreLayout from './PreLayout.js'; +import LayoutChildren from './LayoutChildren.js'; +import ResolveWidth from './ResolveWidth.js'; +import ResolveHeight from './ResolveHeight.js'; +import ResolveChildrenWidth from './ResolveChildrenWidth.js'; +import RunWidthWrap from './RunWidthWrap.js'; +import AddChildMethods from './AddChildMethods.js'; +import RemoveChildMethods from './RemoveChildMethods.js'; +import ResetGrid from './ResetGrid.js'; +import { InseryEmptyRow, AddEmptyRow } from './InsertEmptyRow.js'; +import { InsertEmptyColumn, AddEmptyColumn } from './InsertEmptyColumn.js'; + + +var methods = { + getChildrenWidth: GetChildrenWidth, + getChildrenHeight: GetChildrenHeight, + getExpandedChildWidth: GetExpandedChildWidth, + getExpandedChildHeight: GetExpandedChildHeight, + getChildrenSizers: GetChildrenSizers, + preLayout: PreLayout, + layoutChildren: LayoutChildren, + resolveWidth: ResolveWidth, + resolveHeight: ResolveHeight, + resolveChildrenWidth: ResolveChildrenWidth, + runWidthWrap: RunWidthWrap, + + resetGrid: ResetGrid, + inseryEmptyRow: InseryEmptyRow, + addEmptyRow: AddEmptyRow, + insertEmptyColumn: InsertEmptyColumn, + addEmptyColumn: AddEmptyColumn, +}; + +Object.assign( + methods, + AddChildMethods, + RemoveChildMethods +); + +export default methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/PreLayout.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/PreLayout.js new file mode 100644 index 0000000000000000000000000000000000000000..2c04968530a6c7f179e46274f627873e73c2c2f4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/PreLayout.js @@ -0,0 +1,11 @@ +import PreLayoutBase from '../basesizer/PreLayout.js'; + +var PreLayout = function () { + this._totalColumnProportions = undefined; + this._totalRowProportions = undefined; + this.proportionWidthLength = undefined; + this.proportionHeightLength = undefined; + PreLayoutBase.call(this); + return this; +} +export default PreLayout; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/RemoveChildMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/RemoveChildMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..39335ca216debfe8a4812f8dd197a4740ec26d91 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/RemoveChildMethods.js @@ -0,0 +1,45 @@ +import RemoveChild from '../basesizer/utils/RemoveChild.js'; +import ClearChildren from '../basesizer/utils/ClearChildren.js'; +import ArrayFill from '../../../plugins/utils/array/Fill.js'; + +export default { + remove(gameObject, destroyChild) { + if (this.getParentSizer(gameObject) !== this) { + return this; + } + + var idx = this.sizerChildren.indexOf(gameObject); + if (idx !== -1) { + this.sizerChildren[idx] = null; + } + + RemoveChild.call(this, gameObject, destroyChild); + return this; + }, + + removeAt(columnIndex, rowIndex, destroyChild) { + var child = this.getChildAt(columnIndex, rowIndex); + if (child) { + this.remove(child, destroyChild); + } + return this; + }, + + removeAll(destroyChild) { + for (var i = this.sizerChildren.length - 1; i >= 0; i--) { + var child = this.sizerChildren[i]; + if (!child) { + continue; + } + + this.remove(child, destroyChild); + } + return this; + }, + + clear(destroyChild) { + ArrayFill(this.sizerChildren, null); + ClearChildren.call(this, destroyChild); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResetGrid.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResetGrid.js new file mode 100644 index 0000000000000000000000000000000000000000..37c5edb830311e5f0f4c07ca1c0584d7b738a32e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResetGrid.js @@ -0,0 +1,77 @@ +import ArrayFill from '../../../plugins/utils/array/Fill.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +var ResetGrid = function (columnCount, rowCount, columnProportions, rowProportions, space) { + if (columnProportions === undefined) { + columnProportions = 0; + } + if (rowProportions === undefined) { + rowProportions = 0; + } + + this.columnCount = columnCount; + this.rowCount = rowCount; + this.gridCount = columnCount * rowCount; + + // children + if (this.sizerChildren === undefined) { + this.sizerChildren = []; + } else { + this.removeAll(); + } + this.sizerChildren.length = columnCount * rowCount; + ArrayFill(this.sizerChildren, null); + + // proportions + this.columnProportions = []; + this.columnProportions.length = columnCount; + if (typeof (columnProportions) === 'number') { + ArrayFill(this.columnProportions, columnProportions); + } else { + for (var i = 0; i < columnCount; i++) { + this.columnProportions[i] = columnProportions[i] || 0; + } + } + this.rowProportions = []; + this.rowProportions.length = rowCount; + if (typeof (rowProportions) === 'number') { + ArrayFill(this.rowProportions, rowProportions); + } else { + for (var i = 0; i < rowCount; i++) { + this.rowProportions[i] = rowProportions[i] || 0; + } + } + + // width & height + this.columnWidth = []; + this.columnWidth.length = columnCount; + this.rowHeight = []; + this.rowHeight.length = rowCount; + + // space + this.space.column = []; + this.space.column.length = columnCount - 1; + var columnSpace = GetValue(space, 'column', 0); + if (typeof (columnSpace) === 'number') { + ArrayFill(this.space.column, columnSpace); + } else { + for (var i = 0, cnt = this.space.column.length; i < cnt; i++) { + this.space.column[i] = columnSpace[i] || 0; + } + } + this.space.row = []; + this.space.row.length = rowCount - 1; + var rowSpace = GetValue(space, 'row', 0); + if (typeof (rowSpace) === 'number') { + ArrayFill(this.space.row, rowSpace); + } else { + for (var i = 0, cnt = this.space.row.length; i < cnt; i++) { + this.space.row[i] = rowSpace[i] || 0; + } + } + + return this; +} + +export default ResetGrid; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveChildrenWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveChildrenWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..77e4f6b28113ac390185701f6a1782fb4331494e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveChildrenWidth.js @@ -0,0 +1,16 @@ +var ResolveChildrenWidth = function (parentWidth) { + // Resolve width of sizer children + var child, childWidth; + var colWidth; + for (var i in this.sizerChildren) { + child = this.sizerChildren[i]; + if (child && child.isRexSizer && !child.ignoreLayout) { + colWidth = this.getColumnWidth(parseInt(i) % this.columnCount); + childWidth = this.getExpandedChildWidth(child, colWidth); + childWidth = child.resolveWidth(childWidth); + child.resolveChildrenWidth(childWidth); + } + } +} + +export default ResolveChildrenWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveHeight.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveHeight.js new file mode 100644 index 0000000000000000000000000000000000000000..6a6ea91dc8a33e8181b5910e3d84aeb6a33ea382 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveHeight.js @@ -0,0 +1,24 @@ +import ResolveHeightBase from '../basesizer/ResolveHeight.js'; + +var ResolveHeight = function (height) { + var height = ResolveHeightBase.call(this, height); + + // Get proportionLength + if (this.proportionHeightLength === undefined) { + var totalRowProportions = this.totalRowProportions; + if (totalRowProportions > 0) { + var remainder = height - this.getChildrenHeight(false); + if (remainder >= 0) { + this.proportionHeightLength = remainder / totalRowProportions; + } else { + // Warning + } + } else { + this.proportionHeightLength = 0; + } + } + + return height; +} + +export default ResolveHeight; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveWidth.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveWidth.js new file mode 100644 index 0000000000000000000000000000000000000000..7c06bfdacf0edf88b2c8fb58a2a5e771851925a2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/ResolveWidth.js @@ -0,0 +1,24 @@ +import ResolveWidthBase from '../basesizer/ResolveWidth.js'; + +var ResolveWidth = function (width) { + var width = ResolveWidthBase.call(this, width); + + // Get proportionLength + if (this.proportionWidthLength === undefined) { + var totalColumnProportions = this.totalColumnProportions; + if (totalColumnProportions > 0) { + var remainder = width - this.getChildrenWidth(false); + if (remainder >= 0) { + this.proportionWidthLength = remainder / totalColumnProportions; + } else { + // Warning + } + } else { + this.proportionWidthLength = 0; + } + } + + return width; +} + +export default ResolveWidth; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/RunWidthWrap.js b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/RunWidthWrap.js new file mode 100644 index 0000000000000000000000000000000000000000..da329aec4eea6024e9876552bacc124da4f2cca0 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridsizer/RunWidthWrap.js @@ -0,0 +1,25 @@ +// Default method +var RunWidthWrap = function (width) { + var child, childWidth; + var colWidth; + for (var i in this.sizerChildren) { + child = this.sizerChildren[i]; + if ( + (!child) || + (child.isRexSizer && child.ignoreLayout) || + (!child.runWidthWrap) + ) { + continue; + } + + colWidth = this.getColumnWidth(parseInt(i) % this.columnCount); + childWidth = this.getExpandedChildWidth(child, colWidth); + if (child.isRexSizer) { + childWidth = child.resolveWidth(childWidth); + } + child.runWidthWrap(childWidth); + } + return this; +} + +export default RunWidthWrap; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..66c0f9145079da0cec900daf4c724f72ae4392d2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/Factory.d.ts @@ -0,0 +1,5 @@ +import GridTable from './GridTable'; + +export default function ( + config?: GridTable.IConfig +): GridTable; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..ae03ac32ca207ddd95b4bb6638a06ce554db40cb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/Factory.js @@ -0,0 +1,13 @@ +import GridTable from './GridTable.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('gridTable', function (config) { + var gameObject = new GridTable(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.GridTable', GridTable); + +export default GridTable; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/GridTable.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/GridTable.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..671601c0ca68e57b7cde20775ed6fef346f25209 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/GridTable.d.ts @@ -0,0 +1,63 @@ +// import * as Phaser from 'phaser'; +import Scrollable from '../utils/scrollable/Scrollable'; +import GridTableCore from '../../../plugins/gridtable' + +export default GridTable; + +declare namespace GridTable { + + type CreateCellContainerCallbackType = ( + cell: GridTableCore.CellData, + cellContainer: Phaser.GameObjects.GameObject | null + ) => Phaser.GameObjects.GameObject | null; + + interface IConfig extends Scrollable.IConfig { + space?: { + left?: number, right?: number, top?: number, bottom?: number, + + table?: number | { + left?: number, right?: number, top?: number, bottom?: number, + }, + + header?: number, + footer?: number, + }, + + scrollMode?: GridTableCore.ScrollModeType, + + table: { + width?: number | undefined, + height?: number | undefined, + + cellWidth?: number | undefined, + cellHeight?: number | undefined, + columns?: number, + mask?: GridTableCore.MaskConfig, + interactive?: boolean, + reuseCellContainer?: boolean, + }, + + createCellContainerCallback: CreateCellContainerCallbackType, + + items: unknown[] + } + +} + +declare class GridTable extends Scrollable { + constructor( + scene: Phaser.Scene, + config?: GridTable.IConfig + ); + + setItems(items?: unknown[]): this; + refresh(): this; + updateVisibleCell(cellIndex: number): this; + + getCell(cellIndex: number): GridTableCore.CellData; + getCellContainer(cellIndex: number): Phaser.GameObjects.GameObject | null; + startRowIndex: number; + + scrollToRow(rowIndex: number): this; + scrollToNextRow(rowCount?: number): this; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/GridTable.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/GridTable.js new file mode 100644 index 0000000000000000000000000000000000000000..2ec830ee3740748622b813fbb4d80a2105789a8f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/GridTable.js @@ -0,0 +1,140 @@ +import Scrollable from '../utils/scrollable/Scrollable.js'; +import GetScrollMode from '../utils/GetScrollMode.js'; +import GridTableCore from '../../../plugins/gridtable.js'; +import InjectProperties from './InjectProperties.js'; +import TableOnCellVisible from './TableOnCellVisible.js'; +import TableSetInteractive from './input/TableSetInteractive.js'; +import NOOP from '../../../plugins/utils/object/NOOP.js'; +import SetItems from './SetItems.js'; +import ScrollMethods from './ScrollMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class GridTable extends Scrollable { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + + // Create grid table core + var scrollMode = GetScrollMode(config); + var tableConfig = GetValue(config, 'table', undefined) + if (tableConfig === undefined) { + tableConfig = {}; + } + tableConfig.scrollMode = scrollMode; + tableConfig.clamplTableOXY = GetValue(config, 'clamplChildOY', false); + var tableWidth = GetValue(tableConfig, 'width', undefined); + var tableHeight = GetValue(tableConfig, 'height', undefined); + var table = new GridTableCore(scene, 0, 0, tableWidth, tableHeight, tableConfig); + scene.add.existing(table); // Important: Add to display list for touch detecting + var proportion, expand; + if (scrollMode === 0) { + proportion = (tableWidth === undefined) ? 1 : 0; + expand = (tableHeight === undefined); + } else { + proportion = (tableHeight === undefined) ? 1 : 0; + expand = (tableWidth === undefined); + } + // Inject properties for scrollable interface + InjectProperties(table); + // Set minWidth/minHeight to 0 if tableWidth/tableHeight is undefined + table._minWidth = (tableWidth === undefined) ? 0 : undefined; + table._minHeight = (tableHeight === undefined) ? 0 : undefined; + + // Fill config of scrollable + config.type = 'rexGridTable'; + config.child = { + gameObject: table, + proportion: proportion, + expand: expand, + }; + var spaceConfig = GetValue(config, 'space', undefined); + if (spaceConfig) { + spaceConfig.child = spaceConfig.table; + } + super(scene, config); + + this.addChildrenMap('table', table); + this.addChildrenMap('tableLayer', table.maskLayer); + + this.eventEmitter = GetValue(config, 'eventEmitter', this); + var callback = GetValue(config, 'createCellContainerCallback', NOOP); + var scope = GetValue(config, 'createCellContainerCallbackScope', undefined); + this.setCreateCellContainerCallback(callback, scope); + TableOnCellVisible.call(this, table); + + this.resizeControllerFlag = false; + var eventName = (scrollMode === 0) ? 'cellheightchange' : 'cellwidthchange'; + table.on(eventName, function () { + this.resizeControllerFlag = true; + }, this); + + if (GetValue(tableConfig, 'interactive', true)) { + TableSetInteractive.call(this, table, tableConfig); + } + this.setItems(GetValue(config, 'items', [])); + + scene.game.events.on('poststep', this.onPostStep, this); + } + + destroy(fromScene) { + // This Game Object has already been destroyed + if (!this.scene || this.ignoreDestroy) { + return; + } + + this.scene.game.events.off('poststep', this.onPostStep, this); + + super.destroy(fromScene); + } + + setCreateCellContainerCallback(callback, scope) { + this.createCellContainerCallback = callback; + this.createCellContainerCallbackScope = scope; + return this; + } + + refresh() { + this.setItems(this.items); + return this; + } + + getCell(cellIdx) { + var table = this.childrenMap.child; + return table.getCell(cellIdx); + } + + getCellContainer(cellIdx) { + var table = this.childrenMap.child; + return table.getCellContainer(cellIdx); + } + + updateVisibleCell(cellIdx) { + var table = this.childrenMap.child; + return table.updateVisibleCell(cellIdx); + } + + onPostStep() { + if (this.resizeControllerFlag) { + this.resizeController(); + this.resizeControllerFlag = false; + } + } + + get startRowIndex() { + var table = this.childrenMap.child; + return table.startRowIndex; + } +} + +var methods = { + setItems: SetItems +} +Object.assign( + GridTable.prototype, + ScrollMethods, + methods, +); + +export default GridTable; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/InjectProperties.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/InjectProperties.js new file mode 100644 index 0000000000000000000000000000000000000000..c1080c1089521c3cc5ad9dfb73bfe661a0567c06 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/InjectProperties.js @@ -0,0 +1,32 @@ +var InjectProperties = function (table) { + Object.defineProperty(table, 'childOY', { + configurable: true, + get: function () { + return table.tableOY; + }, + set: function (value) { + table.tableOY = value; + } + }); + Object.defineProperty(table, 'topChildOY', { + get: function () { + return table.topTableOY; + } + }); + Object.defineProperty(table, 'bottomChildOY', { + get: function () { + return table.bottomTableOY; + } + }); + Object.defineProperty(table, 'childVisibleHeight', { + get: function () { + return table.instHeight; + } + }); + Object.defineProperty(table, 'childHeight', { + get: function () { + return table.tableHeight; + } + }); +}; +export default InjectProperties; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/ScrollMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/ScrollMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..1e9b6f2cbd994bc57c8ee6f36b16bb6a5dbd9424 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/ScrollMethods.js @@ -0,0 +1,13 @@ +export default { + scrollToRow(rowIndex) { + var table = this.childrenMap.child; + table.scrollToRow(rowIndex); + return this; + }, + + scrollToNextRow(rowCount) { + var table = this.childrenMap.child; + table.scrollToNextRow(rowCount); + return this; + } +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/SetItems.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/SetItems.js new file mode 100644 index 0000000000000000000000000000000000000000..288da02b301d6f4bd0db7fa8b7933b18c35ea4c8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/SetItems.js @@ -0,0 +1,16 @@ +var SetItems = function (items) { + if (items === undefined) { + this.items = []; + } else { + this.items = items; + } + + var table = this.childrenMap.child; + table.setCellsCount(this.items.length); + table.updateTable(true); + + this.resizeController(); + return this; +} + +export default SetItems; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/TableOnCellVisible.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/TableOnCellVisible.js new file mode 100644 index 0000000000000000000000000000000000000000..936f044e395947b3d297cf75b97cf946c2b436d8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/TableOnCellVisible.js @@ -0,0 +1,28 @@ +var TableOnCellVisible = function (table) { + table.on('cellvisible', function (cell, cellContainer, table) { + var callback = this.createCellContainerCallback; + var scope = this.createCellContainerCallbackScope; + cell.item = this.items[cell.index]; + cell.items = this.items; + var cellContainer; + if (scope) { + cellContainer = callback.call(scope, cell, cellContainer, table); + } else { + cellContainer = callback(cell, cellContainer, table); + } + + if (cellContainer) { + if ((cell.cellContainerAlign == null) && cellContainer.setOrigin) { + cellContainer.setOrigin(0); + } + if (cellContainer.isRexSizer) { + cellContainer.layout(); // Use original size + } + } + + cell.item = undefined; + cell.items = undefined; + cell.setContainer(cellContainer); + }, this); +} +export default TableOnCellVisible; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/ClickCell.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/ClickCell.js new file mode 100644 index 0000000000000000000000000000000000000000..0449b7547244b6776e2edc1e9619539ba000d2cd --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/ClickCell.js @@ -0,0 +1,20 @@ +import Button from '../../../../plugins/input/button/Button.js'; +import EmitCellEvent from './EmitCellEvent.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +var ClickCell = function (table, tableConfig) { + var buttonConfig = GetValue(tableConfig, 'click', undefined); + if (buttonConfig === false) { + return; + } else if (buttonConfig === undefined) { + buttonConfig = {}; + } + buttonConfig.threshold = 10; + table._click = new Button(table, buttonConfig); + table._click.on('click', function (button, gameObject, pointer, event) { + EmitCellEvent(this.eventEmitter, 'cell.click', gameObject, pointer.worldX, pointer.worldY, pointer, event); + }, this); +}; + +export default ClickCell; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/EmitCellEvent.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/EmitCellEvent.js new file mode 100644 index 0000000000000000000000000000000000000000..50c0b7320e2b504223494d47eb8e5e466aefb81c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/EmitCellEvent.js @@ -0,0 +1,17 @@ +var EmitCellEvent = function (eventEmitter, eventName, table, x, y, pointer, event) { + var cellIndex; + if (y === undefined) { + cellIndex = x; + } else { + cellIndex = table.pointToCellIndex(x, y); + } + if ((cellIndex === null) || (cellIndex === undefined)) { + return; + } + var cellContainer = table.getCellContainer(cellIndex); + if (cellContainer) { + eventEmitter.emit(eventName, cellContainer, cellIndex, pointer, event); + } +} + +export default EmitCellEvent; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/OverCell.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/OverCell.js new file mode 100644 index 0000000000000000000000000000000000000000..bc35edf6422c5bfb3a95316480eb14126a62ceb3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/OverCell.js @@ -0,0 +1,30 @@ +import EmitCellEvent from './EmitCellEvent.js'; + +var OverCell = function (table, tableConfig) { + table + .on('pointermove', OnMove, this) + .on('pointerover', OnMove, this) + .on('pointerout', OnOut, this) // pointer-up is included too +} + +var OnMove = function (pointer, localX, localY, event) { + var table = this.childrenMap.child; + var cellIndex = table.pointToCellIndex(pointer.worldX, pointer.worldY); + if (cellIndex === table.input.lastOverCellIndex) { + return; + } + + var preCellIndex = table.input.lastOverCellIndex; + table.input.lastOverCellIndex = cellIndex; + EmitCellEvent(this.eventEmitter, 'cell.out', table, preCellIndex, undefined, pointer, event); + EmitCellEvent(this.eventEmitter, 'cell.over', table, cellIndex, undefined, pointer, event); +} + +var OnOut = function (pointer, event) { + var table = this.childrenMap.child; + var cellIndex = table.input.lastOverCellIndex; + table.input.lastOverCellIndex = undefined; + EmitCellEvent(this.eventEmitter, 'cell.out', table, cellIndex, undefined, pointer, event); +} + +export default OverCell; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/PointerUpDownCell.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/PointerUpDownCell.js new file mode 100644 index 0000000000000000000000000000000000000000..00cb1480b93aa4c6ae6316d94579cb4818fe9b94 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/PointerUpDownCell.js @@ -0,0 +1,13 @@ +import EmitCellEvent from './EmitCellEvent.js'; + +var PointerUpDownCell = function (table, tableConfig) { + table + .on('pointerdown', function (pointer, localX, localY, event) { + EmitCellEvent(this.eventEmitter, 'cell.down', table, pointer.worldX, pointer.worldY, pointer, event); + }, this) + .on('pointerup', function (pointer, localX, localY, event) { + EmitCellEvent(this.eventEmitter, 'cell.up', table, pointer.worldX, pointer.worldY, pointer, event); + }, this) +} + +export default PointerUpDownCell; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/PressCell.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/PressCell.js new file mode 100644 index 0000000000000000000000000000000000000000..8590d442600cf74a4c0300a2bd7c9e662535f94a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/PressCell.js @@ -0,0 +1,22 @@ +import Press from '../../press/Press.js'; +import EmitCellEvent from './EmitCellEvent.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +var PressCell = function (table, tableConfig) { + var pressConfig = GetValue(tableConfig, 'press', undefined); + if (pressConfig === false) { + return; + } + + table._press = new Press(table, pressConfig); + table._press + .on('pressstart', function (press, gameObject, lastPointer) { + EmitCellEvent(this.eventEmitter, 'cell.pressstart', table, press.worldX, press.worldY, lastPointer); + }, this) + .on('pressend', function (press, gameObject, lastPointer) { + EmitCellEvent(this.eventEmitter, 'cell.pressend', table, press.worldX, press.worldY, lastPointer); + }, this) +}; + +export default PressCell; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/SwipeCell.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/SwipeCell.js new file mode 100644 index 0000000000000000000000000000000000000000..673107d20d4df61ad6a0442d9c5baf517cab21dd --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/SwipeCell.js @@ -0,0 +1,26 @@ +import Swipe from '../../swipe/Swipe.js'; +import EmitCellEvent from './EmitCellEvent.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +var SwipeCell = function (table, tableConfig) { + var swipeConfig = GetValue(tableConfig, 'swipe', undefined); + if (swipeConfig === false) { + return; + } else if (swipeConfig === undefined) { + swipeConfig = {}; + } + swipeConfig.dir = '4dir'; + table._swipe = new Swipe(table, swipeConfig); + table._swipe + .on('swipe', function (swipe, gameObject, lastPointer) { + var dirName = + (swipe.left) ? 'left' : + (swipe.right) ? 'right' : + (swipe.up) ? 'up' : + 'down'; + EmitCellEvent(this.eventEmitter, `cell.swipe${dirName}`, table, swipe.worldX, swipe.worldY, lastPointer); + }, this) +}; + +export default SwipeCell; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/TableSetInteractive.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/TableSetInteractive.js new file mode 100644 index 0000000000000000000000000000000000000000..610fb992262378ad97c17e3d4a2bda96eb3aa1e3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/TableSetInteractive.js @@ -0,0 +1,19 @@ +import PointerUpDownCell from './PointerUpDownCell.js'; +import OverCell from './OverCell.js'; +import ClickCell from './ClickCell.js'; +import TapCell from './TapCell.js'; +import PressCell from './PressCell.js'; +import SwipeCell from './SwipeCell.js'; + +var TableSetInteractive = function (table, tableConfig) { + table.setInteractive(); + + PointerUpDownCell.call(this, table, tableConfig); + OverCell.call(this, table, tableConfig); + ClickCell.call(this, table, tableConfig); + TapCell.call(this, table, tableConfig); + PressCell.call(this, table, tableConfig); + SwipeCell.call(this, table, tableConfig); +} + +export default TableSetInteractive; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/TapCell.js b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/TapCell.js new file mode 100644 index 0000000000000000000000000000000000000000..dd9f63fb44c3350e5e7af506a9677d3b447a6ea8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/gridtable/input/TapCell.js @@ -0,0 +1,20 @@ +import Tap from '../../tap/Tap.js'; +import EmitCellEvent from './EmitCellEvent.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +var TapCell = function (table, tableConfig) { + var tapConfig = GetValue(tableConfig, 'tap', undefined); + if (tapConfig === false) { + return; + } + + table._tap = new Tap(table, tapConfig); + table._tap + .on('tap', function (tap, gameObject, lastPointer) { + var eventName = `cell.${tap.tapsCount}tap` + EmitCellEvent(this.eventEmitter, eventName, tap.gameObject, tap.worldX, tap.worldY, lastPointer); + }, this) +}; + +export default TapCell; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b7896df35ba8ba2b4cc772ef05b7a219050d6105 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/Factory.d.ts @@ -0,0 +1,6 @@ +import HiddenEdit from './HiddenEdit'; + +export default function ( + textObject: Phaser.GameObjects.GameObject, + config?: HiddenEdit.IConfig +): HiddenEdit; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..73488ef24fafc697b93de5b47c6fdad112c96ae2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/Factory.js @@ -0,0 +1,13 @@ +import HiddenEdit from './HiddenEdit.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('hiddenEdit', function (textObject, config) { + var gameObject = new HiddenEdit(textObject, config); + // Note: Don't add this game object into scene + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.HiddenEdit', HiddenEdit); + +export default HiddenEdit; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/HiddenEdit.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/HiddenEdit.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..322c6dff3917af1405798677a0021f0a31cb1ae9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/HiddenEdit.d.ts @@ -0,0 +1,2 @@ +import HiddenEdit from '../../../plugins/hiddeninputtext'; +export default HiddenEdit; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/HiddenEdit.js b/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/HiddenEdit.js new file mode 100644 index 0000000000000000000000000000000000000000..98a8d346e63097e8d1132ef562ad7aa5b10a4e43 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/hiddenedit/HiddenEdit.js @@ -0,0 +1,2 @@ +import HiddenEdit from '../../../plugins/hiddeninputtext.js'; +export default HiddenEdit; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e7fb9162a168ef34fcd6f9fc67807dbdc02dcdc7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/Factory.d.ts @@ -0,0 +1,5 @@ +import HolyGrail from './HolyGrail'; + +export default function ( + config?: HolyGrail.IConfig +): HolyGrail; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..336daaa3c50fc23fb72008cd1559b93b56442b99 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/Factory.js @@ -0,0 +1,13 @@ +import HolyGrail from './HolyGrail.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('holyGrail', function (config) { + var gameObject = new HolyGrail(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.HolyGrail', HolyGrail); + +export default HolyGrail; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/HolyGrail.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/HolyGrail.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..22fcc5bdd6dafb984bc8b7dd7df1124feb250c35 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/HolyGrail.d.ts @@ -0,0 +1,69 @@ +// import * as Phaser from 'phaser'; +import Sizer from '../sizer/Sizer'; + +export default HolyGrail; + +declare namespace HolyGrail { + + type HAlignTypes = number | 'left' | 'center' | 'right'; + type VAlignTypes = number | 'top' | 'center' | 'bottom'; + + interface IConfig extends Sizer.IConfig { + space?: { + left?: number, right?: number, top?: number, bottom?: number, + + header?: number | { left?: number, right?: number, top?: number, bottom?: number }, + leftSide?: number | { left?: number, right?: number, top?: number, bottom?: number }, + content?: { left?: number, right?: number, top?: number, bottom?: number }, + rightSide?: number | { left?: number, right?: number, top?: number, bottom?: number }, + footer?: number | { left?: number, right?: number, top?: number, bottom?: number }, + }; + + background?: Phaser.GameObjects.GameObject, + + header?: Phaser.GameObjects.GameObject, + + leftSide?: Phaser.GameObjects.GameObject, + + content?: Phaser.GameObjects.GameObject, + + rightSide?: Phaser.GameObjects.GameObject, + + footer?: Phaser.GameObjects.GameObject, + + layoutMode?: 0 | 1 | 2 | 3 | 'FFF' | 'LFF' | 'FFR' | 'LFR', + + proportion?: { + header?: number, + leftSide?: number, + content?: number, + rightSide?: number, + footer?: number, + }, + + expand?: { + header?: boolean, + leftSide?: boolean, + content?: boolean, + rightSide?: boolean, + footer?: boolean, + }, + + align?: { + header?: HAlignTypes, + leftSide?: VAlignTypes, + content?: HAlignTypes | VAlignTypes, + rightSide?: VAlignTypes, + footer?: HAlignTypes, + }, + + } +} + +declare class HolyGrail extends Sizer { + constructor( + scene: Phaser.Scene, + config?: HolyGrail.IConfig + ); + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/HolyGrail.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/HolyGrail.js new file mode 100644 index 0000000000000000000000000000000000000000..bd891f48cd1899074ee6778a25fbaaadbdeaa94f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/HolyGrail.js @@ -0,0 +1,28 @@ +import Sizer from '../sizer/Sizer.js'; +import Build from './methods/Build.js' + +class HolyGrail extends Sizer { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + + config.orientation = 1; // top-to-bottom + // Create sizer + super(scene, config); + this.type = 'rexHolyGrail'; + + this.build(config); + } +} + +var methods = { + build: Build, +} + +Object.assign( + HolyGrail.prototype, + methods, +) + +export default HolyGrail; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/Build.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/Build.js new file mode 100644 index 0000000000000000000000000000000000000000..f9f6db43215654b801f28ff3b840bbb9f0489598 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/Build.js @@ -0,0 +1,40 @@ +import LayoutMode0 from './LayoutMode0.js'; +import LayoutMode1 from './LayoutMode1.js'; +import LayoutMode2 from './LayoutMode2.js'; +import LayoutMode3 from './LayoutMode3.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; +const LayoutCallbacks = [LayoutMode0, LayoutMode1, LayoutMode2, LayoutMode3]; + +var Build = function (config) { + this.clear(true); + + // Add Background + var background = GetValue(config, 'background', undefined); + if (background) { + this.addBackground(background); + } + + var layoutMode = GetValue(config, 'layoutMode', 0); + if (typeof (layoutMode) === 'string') { + layoutMode = LayoutModesMap[layoutMode.toUpperCase()]; + } + var layoutCallback = LayoutCallbacks[layoutMode] || LayoutCallbacks[0]; + layoutCallback.call(this, config); + + this.addChildrenMap('background', config.background); + this.addChildrenMap('header', config.header); + this.addChildrenMap('leftSide', config.leftSide); + this.addChildrenMap('content', config.content); + this.addChildrenMap('rightSide', config.rightSide); + this.addChildrenMap('footer', config.footer); +} + +const LayoutModesMap = { + 'FFF': 0, + 'LFF': 1, + 'FFR': 2, + 'LFR': 3 +} + +export default Build; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/CreatExpandContainer.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/CreatExpandContainer.js new file mode 100644 index 0000000000000000000000000000000000000000..702ea005792329787a498422b7aa05d0a7f16c07 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/CreatExpandContainer.js @@ -0,0 +1,11 @@ +import Sizer from '../../sizer/Sizer.js'; + +var CreatExpandContainer = function (scene, orientation) { + var container = new Sizer(scene, { + orientation: orientation + }) + scene.add.existing(container); + return container; +} + +export default CreatExpandContainer; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/GetAddChildConfig.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/GetAddChildConfig.js new file mode 100644 index 0000000000000000000000000000000000000000..a10843a1c2fb59082791e6f7f4d862d1bddd4f4f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/GetAddChildConfig.js @@ -0,0 +1,70 @@ +const GetValue = Phaser.Utils.Objects.GetValue; + +var GetAddChildConfig = function (config, key, defaultValues) { + var proportion = GetValue(config, `proportion.${key}`, defaultValues.proportion); + var align = GetValue(config, `align.${key}`, 'center'); + var padding = GetValue(config, `space.${key}`, undefined); + if ((typeof (padding) === 'number') && defaultValues.paddingKey) { + var paddingNum = padding; + padding = {}; + padding[defaultValues.paddingKey] = paddingNum; + } + var expand = GetValue(config, `expand.${key}`, true); + + return { + proportion: proportion, + align: align, + padding: padding, + expand: expand, + } +} + +var GetAddHeaderConfig = function (config) { + return GetAddChildConfig(config, 'header', { + proportion: 0, + paddingKey: 'bottom' + }) +} + +var GetAddLeftSideConfig = function (config) { + return GetAddChildConfig(config, 'leftSide', { + proportion: 0, + paddingKey: 'right' + }) +} + +var GetAddContentConfig = function (config) { + return GetAddChildConfig(config, 'content', { + proportion: 1 + }) +} + +var GetAddRightSideConfig = function (config) { + return GetAddChildConfig(config, 'rightSide', { + proportion: 0, + paddingKey: 'left' + }) +} + +var GetAddFooterConfig = function (config) { + return GetAddChildConfig(config, 'footer', { + proportion: 0, + paddingKey: 'top' + }) +} + +var GetAddContainerConfig = function (config) { + return { + proportion: 1, + align: 'center', + padding: 0, + expand: true, + } +} + +export { + GetAddHeaderConfig, + GetAddLeftSideConfig, GetAddContentConfig, GetAddRightSideConfig, + GetAddFooterConfig, + GetAddContainerConfig +} diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode0.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode0.js new file mode 100644 index 0000000000000000000000000000000000000000..2a9698cbb4586340ea832d468e79d6ea173300a3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode0.js @@ -0,0 +1,58 @@ +/* +Elements: + ``` + HHH + LCR + FFF + ``` +*/ + +import { + GetAddHeaderConfig, + GetAddLeftSideConfig, GetAddContentConfig, GetAddRightSideConfig, + GetAddFooterConfig, + GetAddContainerConfig +} from './GetAddChildConfig.js'; +import CreatExpandContainer from './CreatExpandContainer.js'; + +var LayoutMode0 = function (config) { + var scene = this.scene; + + // Add Header + var header = config.header; + if (header) { + this.add(header, GetAddHeaderConfig(config)); + } + + /* + L C R + */ + var bodySizer = CreatExpandContainer(scene, 0); + this.add(bodySizer, GetAddContainerConfig(config)); + + // Add Left-side + var leftSide = config.leftSide; + if (leftSide) { + bodySizer.add(leftSide, GetAddLeftSideConfig(config)); + } + + // Add content + var content = config.content; + if (content) { + bodySizer.add(content, GetAddContentConfig(config)); + } + + // Add Right-side + var rightSide = config.rightSide; + if (rightSide) { + bodySizer.add(rightSide, GetAddRightSideConfig(config)); + } + + // Add Footer + var footer = config.footer; + if (footer) { + this.add(footer, GetAddFooterConfig(config)); + } +} + +export default LayoutMode0; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode1.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode1.js new file mode 100644 index 0000000000000000000000000000000000000000..33954d6ca7118e354b1d18090186ff680b4ab606 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode1.js @@ -0,0 +1,73 @@ +/* +Elements: + ``` + HHH + LCR + LFF + ``` +*/ + +import { + GetAddHeaderConfig, + GetAddLeftSideConfig, GetAddContentConfig, GetAddRightSideConfig, + GetAddFooterConfig, + GetAddContainerConfig +} from './GetAddChildConfig.js'; +import CreatExpandContainer from './CreatExpandContainer.js'; + +var LayoutMode1 = function (config) { + var scene = this.scene; + + // Add Header + var header = config.header; + if (header) { + this.add(header, GetAddHeaderConfig(config)); + } + + /* + L CR + L FF + */ + var bodySizer0 = CreatExpandContainer(scene, 0); + this.add(bodySizer0, GetAddContainerConfig(config)); + + // Add Left-side + var leftSide = config.leftSide; + if (leftSide) { + bodySizer0.add(leftSide, GetAddLeftSideConfig(config)); + } + + /* + CR + + FF + */ + var bodySizer1 = CreatExpandContainer(scene, 1); + bodySizer0.add(bodySizer1, GetAddContainerConfig(config)); + + /* + C R + */ + var bodySizer2 = CreatExpandContainer(scene, 0); + bodySizer1.add(bodySizer2, GetAddContainerConfig(config)); + + // Add content + var content = config.content; + if (content) { + bodySizer2.add(content, GetAddContentConfig(config)); + } + + // Add Right-side + var rightSide = config.rightSide; + if (rightSide) { + bodySizer2.add(rightSide, GetAddRightSideConfig(config)); + } + + // Add Footer + var footer = config.footer; + if (footer) { + bodySizer1.add(footer, GetAddFooterConfig(config)); + } +} + +export default LayoutMode1; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode2.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode2.js new file mode 100644 index 0000000000000000000000000000000000000000..05fbaf50598c07a3e3343180680e4bc4fcaaae49 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode2.js @@ -0,0 +1,74 @@ +/* +Elements: + ``` + HHH + LCR + FFR + ``` +*/ + +import { + GetAddHeaderConfig, + GetAddLeftSideConfig, GetAddContentConfig, GetAddRightSideConfig, + GetAddFooterConfig, + GetAddContainerConfig +} from './GetAddChildConfig.js'; +import CreatExpandContainer from './CreatExpandContainer.js'; + +var LayoutMode2 = function (config) { + var scene = this.scene; + + // Add Header + var header = config.header; + if (header) { + this.add(header, GetAddHeaderConfig(config)); + } + + /* + LC R + FF R + */ + var bodySizer0 = CreatExpandContainer(scene, 0); + this.add(bodySizer0, GetAddContainerConfig(config)); + + /* + LC + + FF + */ + var bodySizer1 = CreatExpandContainer(scene, 1); + bodySizer0.add(bodySizer1, GetAddContainerConfig(config)); + + /* + L C + */ + var bodySizer2 = CreatExpandContainer(scene, 0); + bodySizer1.add(bodySizer2, GetAddContainerConfig(config)); + + // Add Left-side + var leftSide = config.leftSide; + if (leftSide) { + bodySizer2.add(leftSide, GetAddLeftSideConfig(config)); + } + + // Add content + var content = config.content; + if (content) { + bodySizer2.add(content, GetAddContentConfig(config)); + } + + // Add Footer + var footer = config.footer; + if (footer) { + bodySizer1.add(footer, GetAddFooterConfig(config)); + } + + // Add Right-side + var rightSide = config.rightSide; + if (rightSide) { + bodySizer0.add(rightSide, GetAddRightSideConfig(config)); + } + +} + +export default LayoutMode2; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode3.js b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode3.js new file mode 100644 index 0000000000000000000000000000000000000000..d31a41f163fc817b83aa2f813807d654c478682a --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/holygrail/methods/LayoutMode3.js @@ -0,0 +1,68 @@ +/* +Elements: + ``` + HHH + LCR + LFR + ``` +*/ + +import { + GetAddHeaderConfig, + GetAddLeftSideConfig, GetAddContentConfig, GetAddRightSideConfig, + GetAddFooterConfig, + GetAddContainerConfig +} from './GetAddChildConfig.js'; +import CreatExpandContainer from './CreatExpandContainer.js'; + +var LayoutMode0 = function (config) { + var scene = this.scene; + + // Add Header + var header = config.header; + if (header) { + this.add(header, GetAddHeaderConfig(config)); + } + + /* + L C R + L F R + */ + var bodySizer0 = CreatExpandContainer(scene, 0); + this.add(bodySizer0, GetAddContainerConfig(config)); + + // Add Left-side + var leftSide = config.leftSide; + if (leftSide) { + bodySizer0.add(leftSide, GetAddLeftSideConfig(config)); + } + + /* + C + + F + */ + var bodySizer1 = CreatExpandContainer(scene, 1); + bodySizer0.add(bodySizer1, GetAddContainerConfig(config)); + + // Add content + var content = config.content; + if (content) { + bodySizer1.add(content, GetAddContentConfig(config)); + } + + // Add Footer + var footer = config.footer; + if (footer) { + bodySizer1.add(footer, GetAddFooterConfig(config)); + } + + // Add Right-side + var rightSide = config.rightSide; + if (rightSide) { + bodySizer0.add(rightSide, GetAddRightSideConfig(config)); + } + +} + +export default LayoutMode0; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/imagebox/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/imagebox/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c693cd4eaa24bb8c879a50ed253ac665a96157b4 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/imagebox/Factory.d.ts @@ -0,0 +1,7 @@ +import ImageBox from './ImageBox'; + +export default function ( + x?: number, y?: number, + texture?: string, frame?: string, + config?: ImageBox.IConfig +): ImageBox; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/imagebox/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/imagebox/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..3ce469ff2b6729dc5341f285c7c1a1cc4ceb8739 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/imagebox/Factory.js @@ -0,0 +1,13 @@ +import ImageBox from './ImageBox.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('imageBox', function (x, y, texture, frame, config) { + var gameObject = new ImageBox(this.scene, x, y, texture, frame, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.ImageBox', ImageBox); + +export default ImageBox; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/imagebox/ImageBox.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/imagebox/ImageBox.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..81266c1f4ad18fe4f5dddae362f1de9d1b772bc6 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/imagebox/ImageBox.d.ts @@ -0,0 +1,2 @@ +import ImageBox from '../../../plugins/imagebox'; +export default ImageBox; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/imagebox/ImageBox.js b/ui/src/phaser3-rex-plugins/templates/ui/imagebox/ImageBox.js new file mode 100644 index 0000000000000000000000000000000000000000..027c59e8877e97bd0e56e95a194f25a542a29a2e --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/imagebox/ImageBox.js @@ -0,0 +1,2 @@ +import ImageBox from '../../../plugins/imagebox.js'; +export default ImageBox; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/inputtext/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/inputtext/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..24c4f07c0bcaff2b97d7a94963a0a8d9e5e5fedb --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/inputtext/Factory.d.ts @@ -0,0 +1,5 @@ +import InputText from './InputText.js'; + +export default function ( + config?: InputText.IConfig +): InputText; diff --git a/ui/src/phaser3-rex-plugins/templates/ui/inputtext/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/inputtext/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..869c845863e41ff695a184dc9a6b10e67b202078 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/inputtext/Factory.js @@ -0,0 +1,13 @@ +import InputText from './InputText.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('inputText', function (config) { + var gameObject = new InputText(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.InputText', InputText); + +export default InputText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/inputtext/InputText.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/inputtext/InputText.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0312cf859572c6636998ad00a7a48a04d6505bb3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/inputtext/InputText.d.ts @@ -0,0 +1,2 @@ +import InputText from '../../../plugins/inputtext'; +export default InputText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/inputtext/InputText.js b/ui/src/phaser3-rex-plugins/templates/ui/inputtext/InputText.js new file mode 100644 index 0000000000000000000000000000000000000000..ffa341b71b2999adf7fbe98460a9e0688e8a59de --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/inputtext/InputText.js @@ -0,0 +1,2 @@ +import InputText from '../../../plugins/inputtext.js'; +export default InputText; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/intouching/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/intouching/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b2179188715c8c8d246c767978ec7f9df7e6c314 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/intouching/Factory.d.ts @@ -0,0 +1,7 @@ +// import * as Phaser from 'phaser'; +import InTouching from './InTouching'; + +export default function ( + gameObject: Phaser.GameObjects.GameObject, + config?: InTouching.IConfig +): InTouching; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/intouching/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/intouching/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..adbe4aae65efc9f4ecfcc899a1b1b505f2100cfc --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/intouching/Factory.js @@ -0,0 +1,11 @@ +import InTouching from './InTouching.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('inTouching', function (gameObject, config) { + return new InTouching(gameObject, config); +}); + +SetValue(window, 'RexPlugins.UI.InTouching', InTouching); + +export default InTouching; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/intouching/InTouching.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/intouching/InTouching.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7ed6b4e2f6280bf9a8e638204180a8764ac9dbf7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/intouching/InTouching.d.ts @@ -0,0 +1,2 @@ +import InTouching from '../../../plugins/intouching' +export default InTouching; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/intouching/InTouching.js b/ui/src/phaser3-rex-plugins/templates/ui/intouching/InTouching.js new file mode 100644 index 0000000000000000000000000000000000000000..7434aeebcc68b323468f86aa4199b8fdd302d904 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/intouching/InTouching.js @@ -0,0 +1,2 @@ +import InTouching from '../../../plugins/intouching.js' +export default InTouching; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/knob/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/knob/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ebf230eb007189e6691a52807c8eed0baff2fe99 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/knob/Factory.d.ts @@ -0,0 +1,5 @@ +import Knob from './Knob'; + +export default function ( + config?: Knob.IConfig +): Knob; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/knob/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/knob/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..737bba643c80944e1ebb0c1a04744d46f5116fe2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/knob/Factory.js @@ -0,0 +1,13 @@ +import Knob from './Knob.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('knob', function (config) { + var gameObject = new Knob(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Knob', Knob); + +export default Knob; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/knob/Knob.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/knob/Knob.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3ebdac9b0d70cfaa13dab9531a620d5eadaf6d9c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/knob/Knob.d.ts @@ -0,0 +1,63 @@ +// import * as Phaser from 'phaser'; +import OverlapSizer from '../overlapsizer/OverlapSizer'; + + +export default Knob; + +declare namespace Knob { + + type InputTypes = 0 | 1 | -1 | 'drag' | 'pan' | 'click' | 'none'; + + interface IConfig extends OverlapSizer.IConfig { + background?: Phaser.GameObjects.GameObject, + + color?: number | string, + trackColor?: number | string, + centerColor?: number | string, + thickness?: number, + startAngle?: number, + anticlockwise?: boolean, + knobDepth?: number, + + text?: Phaser.GameObjects.GameObject, + textFormatCallback?: (value: number) => string, + textFormatCallbackScope?: object, + + input?: InputTypes, + + value?: number, + + gap?: number, + + easeValue?: { + duration?: number, + ease?: string + }, + + valuechangeCallback: (newValue: number, oldValue: number, knob: Knob) => void, + + enable?: boolean, + + } + +} + +declare class Knob extends OverlapSizer { + constructor( + scene: Phaser.Scene, + config?: Knob.IConfig + ); + + value: number; + getValue(min?: number, max?: number): number; + setValue(value?: number, min?: number, max?: number): this; + addValue(inc?: number, min?: number, max?: number): this; + + easeValueTo(value?: number, min?: number, max?: number): this; + stopEaseValue(): this; + setEaseValueDuration(duration: number): this; + setEaseValueFunction(ease: string): this; + + setEnable(enable?: boolean): this; + enable: boolean; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/knob/Knob.js b/ui/src/phaser3-rex-plugins/templates/ui/knob/Knob.js new file mode 100644 index 0000000000000000000000000000000000000000..5bafb65979100af33e3c47df898884b441feb19b --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/knob/Knob.js @@ -0,0 +1,123 @@ +import OverlapSizer from '../overlapsizer/OverlapSizer.js'; +import ProgressBase from '../../../plugins/utils/progressbase/ProgressBase.js'; +import CircularProgress from '../circularprogress/CircularProgress.js'; +import InstallTouchPadEvents from './input/OnTouchPad.js'; +import InstallPanPadEvents from './input/OnPanPad.js'; +import TextObjectMethods from './TextObjectMethods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; +const SnapTo = Phaser.Math.Snap.To; + +class Knob extends ProgressBase(OverlapSizer) { + constructor(scene, config) { + if (config === undefined) { + config = {}; + } + + // Create sizer + super(scene, config); + this.type = 'rexKnob'; + + this.bootProgressBase(config); + + // Add elements + var background = GetValue(config, 'background', undefined); + var textObject = GetValue(config, 'text', undefined); + + if (background) { + this.addBackground(background); + } + // Get text object + if (textObject) { + // Don't draw text on knob directly + config.textColor = undefined; + config.textStrokeColor = undefined; + this.setTextFormatCallback( + GetValue(config, 'textFormatCallback', undefined), + GetValue(config, 'textFormatCallbackScope', undefined) + ); + } + // Create circular progress object + var knob = new CircularProgress(scene, config); + knob.setDepth(GetValue(config, 'knobDepth', 0)); + knob._value = -1; // To trigger text updating + scene.add.existing(knob); + + this.add(knob, 'knob'); + if (textObject) { + this.add(textObject, 'text', 'center', 0, false); + scene.children.moveBelow(knob, textObject); // Move knob below textObject + } + + this.addChildrenMap('background', background); + this.addChildrenMap('knob', knob); + this.addChildrenMap('text', textObject); + + this.setEnable(GetValue(config, 'enable', undefined)); + + this.setGap(GetValue(config, 'gap', undefined)); + this.setValue(GetValue(config, 'value', 0), GetValue(config, 'min', undefined), GetValue(config, 'max', undefined)); + + // Input + var inputMode = GetValue(config, 'input', 0); + if (typeof (inputMode) === 'string') { + inputMode = INPUTMODE[inputMode]; + } + switch (inputMode) { + case 0: // 'pan' + InstallPanPadEvents.call(this); + break; + case 1: // 'click' + InstallTouchPadEvents.call(this); + break; + } + } + + setEnable(enable) { + if (enable === undefined) { + enable = true; + } + this.enable = enable; + return this; + } + + setGap(gap) { + this.gap = gap; + return this; + } + + // Override + get value() { + return this.sizerChildren.knob.value; + } + + // Override + set value(value) { + if (this.gap !== undefined) { + value = SnapTo(value, this.gap); + } + var oldValue = this.value; + this.sizerChildren.knob.value = value; + + var newValue = this.value; + if (oldValue !== newValue) { + this.updateText(); + this.eventEmitter.emit('valuechange', newValue, oldValue, this.eventEmitter); + } + } + +} + +const INPUTMODE = { + pan: 0, + drag: 0, + click: 1, + none: -1, +} + +Object.assign( + Knob.prototype, + TextObjectMethods, +); + +export default Knob; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/knob/TextObjectMethods.js b/ui/src/phaser3-rex-plugins/templates/ui/knob/TextObjectMethods.js new file mode 100644 index 0000000000000000000000000000000000000000..b1638cb02c38be3ef60c37ec4beb3ab1ccff2337 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/knob/TextObjectMethods.js @@ -0,0 +1,36 @@ +var SetTextFormatCallback = function (callback, scope) { + this.textFormatCallback = callback; + this.textFormatCallbackScope = scope; + return this; +} + +var GetFormatText = function (value) { + if (value === undefined) { + value = this.value; + } + + var text; + if (this.textFormatCallbackScope) { + text = this.textFormatCallback(value); + } else { + text = this.textFormatCallback.call(this.textFormatCallbackScope, value); + } + return text; +} + +var UpdateText = function (value) { + var textObject = this.sizerChildren.text; + if (textObject && this.textFormatCallback) { + textObject.setText(GetFormatText.call(this, value)); + if (textObject.layout) { + textObject.layout(); + } + } + return this; +} + +export default { + setTextFormatCallback: SetTextFormatCallback, + getFormatText: GetFormatText, + updateText: UpdateText +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/knob/input/IsLocalPointInKnob.js b/ui/src/phaser3-rex-plugins/templates/ui/knob/input/IsLocalPointInKnob.js new file mode 100644 index 0000000000000000000000000000000000000000..8ae388e261c7914ab6f379bdff60ebfb839cb68c --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/knob/input/IsLocalPointInKnob.js @@ -0,0 +1,8 @@ +var GetDistance = Phaser.Math.Distance.Between; + +var IsLocalPointInKnob = function (knob, localX, localY) { + var centerX = knob.width / 2; + return GetDistance(centerX, centerX, localX, localY) <= centerX; +} + +export default IsLocalPointInKnob; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/knob/input/OnPanPad.js b/ui/src/phaser3-rex-plugins/templates/ui/knob/input/OnPanPad.js new file mode 100644 index 0000000000000000000000000000000000000000..801c85df260b080efd476440bea031184eca34c7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/knob/input/OnPanPad.js @@ -0,0 +1,90 @@ +import IsLocalPointInKnob from './IsLocalPointInKnob.js'; + +const GetAngle = Phaser.Math.Angle.Between; +const WrapAngle = Phaser.Math.Angle.Wrap; + +var OnPointerDown = function (pointer, localX, localY) { + if ((!this.enable) || (this.panPointer)) { + return; + } + var knob = this.sizerChildren.knob; + if (!IsLocalPointInKnob(knob, localX, localY)) { + return; + } + + OnPanStart.call(this, pointer); +} + +var OnPointerMove = function (pointer, localX, localY) { + if (!this.enable) { + return; + } + if (!pointer.isDown) { + return; + } + + var knob = this.sizerChildren.knob; + switch (this.panState) { + case TOUCH0: + if (IsLocalPointInKnob(knob, localX, localY)) { + OnPanStart.call(this, pointer); + } + break; + + case TOUCH1: + if (IsLocalPointInKnob(knob, localX, localY)) { + OnPan.call(this); + } else { + OnPanEnd.call(this); + } + break; + } +} + +var OnPointerUp = function (pointer, localX, localY) { + if ((!this.enable) || (this.panPointer !== pointer)) { + return; + } + + OnPanEnd.call(this); +} + +var OnPanStart = function (pointer) { + this.panPointer = pointer; + this.panState = TOUCH1; +} + +var OnPanEnd = function () { + this.panPointer = undefined; + this.panState = TOUCH0; +} + +var OnPan = function () { + var p0 = this.panPointer.prevPosition, + p1 = this.panPointer.position; + var knob = this.sizerChildren.knob; + var startAngle = GetAngle(knob.x, knob.y, p0.x, p0.y), + endAngle = GetAngle(knob.x, knob.y, p1.x, p1.y); + var deltaAngle = (knob.anticlockwise) ? (startAngle - endAngle) : (endAngle - startAngle); + var deltaValue = WrapAngle(deltaAngle) / (Math.PI * 2); + + this.stopEaseValue(); + this.value += deltaValue; +} + +const TOUCH0 = 0; +const TOUCH1 = 1; + +var InstallEvents = function () { + var knob = this.sizerChildren.knob; + knob + .on('pointerdown', OnPointerDown, this) + .on('pointermove', OnPointerMove, this) + .on('pointerup', OnPointerUp, this) + .setInteractive() + + this.panPointer = undefined; + this.panState = TOUCH0; +} + +export default InstallEvents; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/knob/input/OnTouchPad.js b/ui/src/phaser3-rex-plugins/templates/ui/knob/input/OnTouchPad.js new file mode 100644 index 0000000000000000000000000000000000000000..08ca2c2c5225fc192771cbe61bd719e499b652c5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/knob/input/OnTouchPad.js @@ -0,0 +1,40 @@ +import IsLocalPointInKnob from './IsLocalPointInKnob.js'; + +const GetAngle = Phaser.Math.Angle.Between; +const NormalizeAngle = Phaser.Math.Angle.Normalize; + +var OnTouchPad = function (pointer, localX, localY) { + if (!this.enable) { + return; + } + if (!pointer.isDown) { + return; + } + var knob = this.sizerChildren.knob; + if (!IsLocalPointInKnob(knob, localX, localY)) { + return; + } + + var centerX = knob.width / 2; + var startAngle = knob.startAngle; + var endAngle = GetAngle(centerX, centerX, localX, localY); + var deltaAngle = (knob.anticlockwise) ? (startAngle - endAngle) : (endAngle - startAngle); + var value = NormalizeAngle(deltaAngle) / (2 * Math.PI); + + this.stopEaseValue(); + if ((this.easeValueDuration === 0) || (Math.abs(this.value - value) < 0.1)) { + this.value = value; + } else { + this.easeValueTo(value); + } +} + +var InstallEvents = function () { + var knob = this.sizerChildren.knob; + knob + .on('pointerdown', OnTouchPad, this) + .on('pointermove', OnTouchPad, this) + .setInteractive() +} + +export default InstallEvents; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/label/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/label/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0692cd9954161f061f4333cf8360e2248af33f09 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/label/Factory.d.ts @@ -0,0 +1,5 @@ +import Label from './Label'; + +export default function ( + config?: Label.IConfig +): Label; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/label/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/label/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..0ebb6962e2eaaddfce53a4532b014bfd54035f53 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/label/Factory.js @@ -0,0 +1,13 @@ +import Label from './Label.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('label', function (config) { + var gameObject = new Label(this.scene, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.Label', Label); + +export default Label; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/label/Label.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/label/Label.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..452fab3138a8ebe49deb33a507468cbc11936c56 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/label/Label.d.ts @@ -0,0 +1,100 @@ +// import * as Phaser from 'phaser'; +import Sizer from '../sizer/Sizer'; + +export default Label; + +declare namespace Label { + + type AlignTypes = 'left' | 'top' | 'right' | 'bottom' | 'center'; + + interface IConfig extends Sizer.IConfig { + space?: { + left?: number, right?: number, top?: number, bottom?: number, + + icon?: number, + text?: number, + }, + + background?: Phaser.GameObjects.GameObject, + + icon?: Phaser.GameObjects.GameObject, + iconMask?: boolean, + squareFitIcon?: boolean, + iconSize?: number, iconWidth?: number, iconHeight?: number, + + text?: Phaser.GameObjects.GameObject, + expandTextWidth?: boolean, + expandTextHeight?: boolean, + + action?: Phaser.GameObjects.GameObject, + squareFitAction?: boolean, + actionMask?: boolean, + actionSize?: number, actionWidth?: number, actionHeight?: number, + + align?: AlignTypes, + } + + interface IResetDisplayContentConfig { + text?: string, + + icon?: string | Phaser.Textures.Texture, + iconFrame?: string | number, + iconSize?: number, + + action?: string | Phaser.Textures.Texture, + actionFrame?: string | number, + actionSize?: number, + } +} + +declare class Label extends Sizer { + constructor( + scene: Phaser.Scene, + config?: Label.IConfig + ); + + text: string; + setText(text: string): this; + appendText( + text: string | number | string[], + addCR?: boolean + ): this; + + setTexture( + key: string | Phaser.Textures.Texture, + frame?: string | number + ): this; + readonly texture: Phaser.Textures.Texture | Phaser.Textures.CanvasTexture; + readonly frame: Phaser.Textures.Frame; + + setIconTexture( + key: string | Phaser.Textures.Texture, + frame?: string | number + ): this; + + setIconSize( + width?: number, + height?: number + ): this; + iconWidth: number; + iconHeight: number; + + setActionTexture( + key: string | Phaser.Textures.Texture, + frame?: string | number + ): this; + readonly actionTexture: Phaser.Textures.Texture | Phaser.Textures.CanvasTexture; + readonly actionFrame: Phaser.Textures.Frame; + + setActionSize( + width?: number, + height?: number + ): this; + actionWidth: number; + actionHeight: number; + + resetDisplayContent( + config?: string | Label.IResetDisplayContentConfig + ): this; + +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/label/Label.js b/ui/src/phaser3-rex-plugins/templates/ui/label/Label.js new file mode 100644 index 0000000000000000000000000000000000000000..7fd126d772a0f42dc26439814b6a1105746a791f --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/label/Label.js @@ -0,0 +1,297 @@ +import Sizer from '../sizer/Sizer.js'; +import AddChildMask from '../../../plugins/gameobjects/container/containerlite/mask/AddChildMask.js'; +import SetDisplaySize from '../../../plugins/utils/size/SetDisplaySize.js'; +import Methods from './methods/Methods.js'; + +const GetValue = Phaser.Utils.Objects.GetValue; + +class Label extends Sizer { + constructor(scene, config) { + // Create sizer + super(scene, config); + this.type = 'rexLabel'; + + // Add elements + var background = GetValue(config, 'background', undefined); + var icon = GetValue(config, 'icon', undefined); + var iconMask = GetValue(config, 'iconMask', undefined); + var text = GetValue(config, 'text', undefined); + var action = GetValue(config, 'action', undefined); + var actionMask = GetValue(config, 'actionMask', undefined); + // Align + var align = GetValue(config, 'align', undefined); // undefined/left/top: no space + + + if (background) { + this.addBackground(background); + } + + // Add space + if ( + (align === 'right') || + (align === 'bottom') || + (align === 'center') + ) { + this.addSpace(); + } + + if (icon) { + var iconSpace = GetValue(config, 'space.icon', 0); + var padding; + if (this.orientation === 0) { + if (text || action) { + padding = { right: iconSpace }; + } + } else { + if (text || action) { + padding = { bottom: iconSpace }; + } + } + var fitRatio = GetValue(config, 'squareFitIcon', false) ? 1 : 0; + + this.add( + icon, + { proportion: 0, padding: padding, fitRatio: fitRatio } + ); + + if (iconMask) { + iconMask = AddChildMask.call(this, icon, icon, 1); // Circle mask + } + + if (!fitRatio) { + var iconSize = GetValue(config, 'iconSize', undefined); + this.setIconSize( + GetValue(config, 'iconWidth', iconSize), + GetValue(config, 'iconHeight', iconSize) + ); + } + } + + + if (text) { + var textSpace = GetValue(config, 'space.text', 0); + var expandTextWidth = GetValue(config, 'expandTextWidth', false); + var expandTextHeight = GetValue(config, 'expandTextHeight', false); + var proportion, padding, expand; + if (this.orientation === 0) { + proportion = (expandTextWidth) ? 1 : 0; + if (action) { + padding = { right: textSpace }; + } + expand = expandTextHeight; + } else { + proportion = (expandTextHeight) ? 1 : 0; + if (action) { + padding = { bottom: textSpace }; + } + expand = expandTextWidth; + } + + this.add( + text, + { proportion: proportion, expand: expand, padding: padding, } + ); + } + + if (action) { + var fitRatio = GetValue(config, 'squareFitAction', false) ? 1 : 0; + this.add( + action, + { proportion: 0, fitRatio: fitRatio } + ); + + if (actionMask) { + actionMask = AddChildMask.call(this, action, action, 1); // Circle mask + } + + if (!fitRatio) { + var actionSize = GetValue(config, 'actionSize'); + this.setActionSize( + GetValue(config, 'actionWidth', actionSize), + GetValue(config, 'actionHeight', actionSize) + ); + } + } + + // Add space + if (align === 'center') { + this.addSpace(); + } + + this.addChildrenMap('background', background); + this.addChildrenMap('icon', icon); + this.addChildrenMap('iconMask', iconMask); + this.addChildrenMap('text', text); + this.addChildrenMap('action', action); + this.addChildrenMap('actionMask', actionMask); + } + + // Access text game object + get text() { + var textObject = this.childrenMap.text; + if (textObject === undefined) { + return ''; + } + return textObject.text; + } + + set text(value) { + var textObject = this.childrenMap.text; + if (textObject === undefined) { + return; + } + textObject.setText(value); + } + + setText(value) { + this.text = value; + return this; + } + + // Access icon game object + setIconTexture(key, frame) { + var imageObject = this.childrenMap.icon; + if (imageObject === undefined) { + return this; + } + imageObject.setTexture(key, frame); + + if (this.iconWidth !== undefined) { + SetDisplaySize(imageObject, this.iconWidth, this.iconHeight); + this.resetChildScaleState(imageObject); + } + + return this; + } + + setTexture(key, frame) { + this.setIconTexture(key, frame); + return this; + } + + setIconSize(width, height) { + if (height === undefined) { + height = width; + } + + this.iconWidth = width; + this.iconHeight = height; + + return this; + } + + get texture() { + var imageObject = this.childrenMap.icon; + if (imageObject === undefined) { + return undefined; + } + return imageObject.texture; + } + + get frame() { + var imageObject = this.childrenMap.icon; + if (imageObject === undefined) { + return undefined; + } + return imageObject.frame; + } + + setActionTexture(key, frame) { + var imageObject = this.childrenMap.action; + if (imageObject === undefined) { + return this; + } + imageObject.setTexture(key, frame); + + if (this.actionWidth !== undefined) { + SetDisplaySize(imageObject, this.actionWidth, this.actionHeight); + this.resetChildScaleState(imageObject); + } + + return this; + } + + get actionTexture() { + var imageObject = this.childrenMap.action; + if (imageObject === undefined) { + return undefined; + } + return imageObject.texture; + } + + get actionFrame() { + var imageObject = this.childrenMap.action; + if (imageObject === undefined) { + return undefined; + } + return imageObject.frame; + } + + setActionSize(width, height) { + if (height === undefined) { + height = width; + } + + this.actionWidth = width; + this.actionHeight = height; + + return this; + } + + preLayout() { + var icon = this.childrenMap.icon; + if (icon && (this.iconWidth !== undefined)) { + SetDisplaySize(icon, this.iconWidth, this.iconHeight); + } + + var action = this.childrenMap.action; + if (action && (this.actionWidth !== undefined)) { + SetDisplaySize(action, this.actionWidth, this.actionHeight); + } + + super.preLayout(); + } + + runLayout(parent, newWidth, newHeight) { + if (this.ignoreLayout) { + return this; + } + + super.runLayout(parent, newWidth, newHeight); + // Pin icon-mask to icon game object + var iconMask = this.childrenMap.iconMask; + if (iconMask) { + iconMask.setPosition(); + this.resetChildPositionState(iconMask); + } + // Pin action-mask to action game object + var actionMask = this.childrenMap.actionMask; + if (actionMask) { + actionMask.setPosition(); + this.resetChildPositionState(actionMask); + } + return this; + } + + resize(width, height) { + super.resize(width, height); + // Resize icon-mask to icon game object + var iconMask = this.childrenMap.iconMask; + if (iconMask) { + iconMask.resize(); + } + // Resize action-mask to icon game object + var actionMask = this.childrenMap.actionMask; + if (actionMask) { + actionMask.resize(); + } + return this; + } +} + +Object.assign( + Label.prototype, + Methods, +) + +export default Label; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/label/methods/Methods.js b/ui/src/phaser3-rex-plugins/templates/ui/label/methods/Methods.js new file mode 100644 index 0000000000000000000000000000000000000000..01c7cbb7aa674e6135ba0c3651dbdc946ce532e8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/label/methods/Methods.js @@ -0,0 +1,9 @@ +import AppendText from '../../../../plugins/utils/text/AppendText.js'; +import ResetDisplayContent from './ResetDisplayContent.js'; + +var methods = { + appendText: AppendText, + resetDisplayContent: ResetDisplayContent, +} + +export default methods; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/label/methods/ResetDisplayContent.js b/ui/src/phaser3-rex-plugins/templates/ui/label/methods/ResetDisplayContent.js new file mode 100644 index 0000000000000000000000000000000000000000..2dd9719ad1856c4cfddafea2f1fcecaae96c53a7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/label/methods/ResetDisplayContent.js @@ -0,0 +1,53 @@ +var ResetDisplayContent = function (config) { + if (config === undefined) { + config = {}; + } else if (typeof (config) === 'string') { + config = { + text: config, + } + } + + var text = config.text || ''; + this.setText(text); + + var iconGameObjct = this.childrenMap.icon; + if (iconGameObjct) { + if (config.icon === undefined) { + this.hide(iconGameObjct); + } else { + this.show(iconGameObjct); + } + var iconSize = config.iconSize; + if (iconSize) { + this.setChildDisplaySize(iconGameObjct, iconSize, iconSize); + + if (this.iconWidth !== undefined) { + this.setIconSize(iconSize); + } + } + this.setIconTexture(config.icon, config.iconFrame); + } + + var actionGameObjct = this.childrenMap.action; + if (actionGameObjct) { + if (config.action === undefined) { + this.hide(actionGameObjct); + } else { + this.show(actionGameObjct); + } + var actionSize = config.actionSize; + if (actionSize) { + this.setChildDisplaySize(actionGameObjct, actionSize, actionSize); + + if (this.actionWidth !== undefined) { + this.setActionSize(actionSize); + } + + } + this.setActionTexture(config.action, config.actionFrame); + } + + return this; +} + +export default ResetDisplayContent; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..cca4b2dbf92f6b198c262e729ccc5975e222b0d7 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/Factory.d.ts @@ -0,0 +1,13 @@ +import LineProgress from './LineProgress'; + +export default function ( + config?: LineProgress.IConfig +): LineProgress; + +export default function ( + x?: number, y?: number, + radius?: number, + barColor?: string | number, + value?: number, + config?: LineProgress.IConfig +): LineProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..5657fb9d2343d4c3255f3e4aeae247329e5185d8 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/Factory.js @@ -0,0 +1,13 @@ +import LineProgress from './LineProgress.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('lineProgress', function (x, y, width, height, barColor, value, config) { + var gameObject = new LineProgress(this.scene, x, y, width, height, barColor, value, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.LineProgress', LineProgress); + +export default LineProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/LineProgress.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/LineProgress.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..84c06a0fe439f27612fed70498b99d0d94c284f5 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/LineProgress.d.ts @@ -0,0 +1,2 @@ +import LineProgress from '../../../plugins/lineprogress'; +export default LineProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/LineProgress.js b/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/LineProgress.js new file mode 100644 index 0000000000000000000000000000000000000000..f1c34031dda22bd1ee7281ed8d6797f1596930e9 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/lineprogress/LineProgress.js @@ -0,0 +1,2 @@ +import LineProgress from '../../../plugins/lineprogress.js'; +export default LineProgress; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..aaf8ac9b9887b8877190b68bfeada277b7ace5e3 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/Factory.d.ts @@ -0,0 +1,19 @@ +import LineProgressCanvas from './LineProgressCanvas'; + +export default function ( + config?: LineProgressCanvas.IConfig +): LineProgressCanvas; + +export default function ( + x?: number, y?: number, + width?: number, height?: number, + config?: LineProgressCanvas.IConfig +): LineProgressCanvas; + +export default function ( + x?: number, y?: number, + width?: number, height?: number, + barColor?: string | number, + value?: number, + config?: LineProgressCanvas.IConfig +): LineProgressCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..e182045fa63b8a22d7195f48a411d1ed3abb2478 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/Factory.js @@ -0,0 +1,13 @@ +import LineProgressCanvas from './LineProgressCanvas.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('circularProgressCanvas', function (x, y, width, height, barColor, value, config) { + var gameObject = new LineProgressCanvas(this.scene, x, y, width, height, barColor, value, config); + this.scene.add.existing(gameObject); + return gameObject; +}); + +SetValue(window, 'RexPlugins.UI.LineProgressCanvas', LineProgressCanvas); + +export default LineProgressCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/LineProgressCanvas.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/LineProgressCanvas.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d855d01aa179ebe72cd5319c2ba17858eb86634 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/LineProgressCanvas.d.ts @@ -0,0 +1,2 @@ +import LineProgressCanvas from "../../../plugins/lineprogresscanvas"; +export default LineProgressCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/LineProgressCanvas.js b/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/LineProgressCanvas.js new file mode 100644 index 0000000000000000000000000000000000000000..66268530aa676e631ad1c7a9bc6334f7e059cb97 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/lineprogresscanvas/LineProgressCanvas.js @@ -0,0 +1,2 @@ +import LineProgressCanvas from '../../../plugins/lineprogresscanvas.js'; +export default LineProgressCanvas; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/Factory.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/maker/Factory.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a4c82c77174a9c9ac277bc32958c2d588b0dedc2 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/Factory.d.ts @@ -0,0 +1,6 @@ +import Maker from './Maker'; + +export default function ( + styles?: Object | string, + customBuilders?: Maker.BuildersType +): Maker; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/Factory.js b/ui/src/phaser3-rex-plugins/templates/ui/maker/Factory.js new file mode 100644 index 0000000000000000000000000000000000000000..5be2f18eb71a0e6967c56a0160f811096080f23d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/Factory.js @@ -0,0 +1,11 @@ +import Maker from './Maker.js'; +import ObjectFactory from '../ObjectFactory.js'; +import SetValue from '../../../plugins/utils/object/SetValue.js'; + +ObjectFactory.register('maker', function (styles, customBuilders) { + return new Maker(this.scene, styles, customBuilders); +}); + +SetValue(window, 'RexPlugins.UI.Maker', Maker); + +export default Maker; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/Make.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/maker/Make.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6c3c9a72a70abf8f29d6419a4018a266cf8d4026 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/Make.d.ts @@ -0,0 +1,15 @@ +import Builders from './builders/Builders'; +export default Make; + +declare namespace Make { + type BuilderType = Builders.BuilderType; + type BuildersType = { [name: string]: BuilderType } +} + +declare function Make( + scene: Phaser.Scene, + data: Object, + view?: Object, + styles?: Object, + customBuilders?: Make.BuildersType +): Phaser.GameObjects.GameObject; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/Make.js b/ui/src/phaser3-rex-plugins/templates/ui/maker/Make.js new file mode 100644 index 0000000000000000000000000000000000000000..8ec075092110ec31f9a840f4cfdc3d2fdd9c94af --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/Make.js @@ -0,0 +1,31 @@ +import GetTypeName from './builders/utils/GetTypeName.js'; +import Builders from './builders/Builders.js'; + +var Make = function (scene, data, view, styles, customBuilders) { + var type = GetTypeName(data, styles); + if (!type) { + console.warn(`rexUI.Make: Can't get type name in ${JSON.stringify(data)}`) + return undefined; + } + + var callback; + if (customBuilders) { + callback = customBuilders[type] + } + if (!callback) { + callback = Builders[type]; + } + if (!callback) { + console.warn(`rexUI.Make: Can't create ${type} game object.`) + return undefined; + } + + var gameObject = callback(scene, data, view, styles, customBuilders); + if (data.name) { + gameObject.setName(data.name); + } + + return gameObject; +} + +export default Make; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/Maker.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/maker/Maker.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..02616fd56e0404afc09851dc75f5a6cdb8e44635 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/Maker.d.ts @@ -0,0 +1,35 @@ +import Make from './Make'; + +export default Maker; + +declare namespace Maker { + type BuilderType = Make.BuilderType; + type BuildersType = Make.BuildersType; +} + +declare class Maker { + constructor( + scene: Phaser.Scene, + styles?: Object | string, + customBuilders?: Maker.BuildersType + ); + + setScene(scene: Phaser.Scene): this; + scene: Phaser.Scene; + + setStyles(styles?: Object | string): this; + addStyle(key: string, style: Object | string): this; + addStyle(styles: Object | string): this; + clearStyles(): this; + styles: Object | undefined; + + setBuilders(builders?: Maker.BuildersType): this; + addBuilder(key: string, builder: Maker.BuilderType): this; + clearBuilder(): this; + customBuilders: Maker.BuildersType | undefined; + + make( + data: Object | string, + view?: Object | string + ): Phaser.GameObjects.GameObject; +} \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/Maker.js b/ui/src/phaser3-rex-plugins/templates/ui/maker/Maker.js new file mode 100644 index 0000000000000000000000000000000000000000..ee17a0ee553c7be89751b81c273d6df4644c306d --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/Maker.js @@ -0,0 +1,80 @@ +import ParseYAML from './utils/ParseYAML.js'; +import YAMLMake from './YAMLMake.js'; + +const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; + +class Maker { + constructor(scene, styles, customBuilders) { + this.setScene(scene); + this.setStyles(styles); + this.setBuilders(customBuilders); + } + + setScene(scene) { + this.scene = scene; + return this; + } + + setStyles(styles) { + this.styles = ParseYAML(styles); + return this; + } + + addStyle(key, style) { + if (this.styles === undefined) { + this.styles = {}; + } + + if ((typeof (key) === 'string') && (style === undefined)) { + key = ParseYAML(key); + } + + if (IsPlainObject(key)) { + var styles = key; + for (key in styles) { + this.styles[key] = styles[key]; + } + } else { + this.styles[key] = ParseYAML(style); + } + + return this; + } + + clearStyles() { + this.setStyles(); + return this; + } + + setBuilders(customBuilders) { + this.customBuilders = customBuilders; + return this; + } + + addBuilder(key, customBuilder) { + if (this.customBuilders === undefined) { + this.customBuilders = {}; + } + + if (IsPlainObject(key)) { + var customBuilders = key; + for (key in customBuilders) { + this.customBuilders[key] = customBuilders[key]; + } + } else { + this.customBuilders[key] = customBuilder; + } + return this; + } + + clearBuilder() { + this.setBuilders(); + return this; + } + + make(data, view) { + return YAMLMake(this.scene, data, view, this.styles, this.customBuilders); + } +} + +export default Maker; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/YAMLMake.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/maker/YAMLMake.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e2b225621796992d6002854700331fc5df314b19 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/YAMLMake.d.ts @@ -0,0 +1,15 @@ +import Builders from './builders/Builders'; +export default YAMLMake; + +declare namespace YAMLMake { + type BuilderType = Builders.BuilderType; + type BuildersType = { [name: string]: BuilderType } +} + +declare function YAMLMake( + scene: Phaser.Scene, + data: Object | string, + view?: Object | string, + styles?: Object | string, + customBuilders?: YAMLMake.BuildersType +): Phaser.GameObjects.GameObject; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/YAMLMake.js b/ui/src/phaser3-rex-plugins/templates/ui/maker/YAMLMake.js new file mode 100644 index 0000000000000000000000000000000000000000..211c152887986b5d45be7c8469d3e8f9445d1031 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/YAMLMake.js @@ -0,0 +1,35 @@ +import ParseYAML from './utils/ParseYAML.js'; +import Make from './Make.js'; + +var YAMLMake = function (scene, data, view, styles, customBuilders) { + data = ParseYAML(data); + if (Array.isArray(data)) { + // Parsing result of YAML data might be an array, + // Only last item will be used to create game object, others are references + data = data[data.length - 1]; + } else if (data.$root) { + // Parsing result of YAML data might be an object, with $root key, + // data.$root will be used to create game object, others are default styles + var defaultStyles = data; + data = data.$root; + delete defaultStyles.$root; + + if (styles === undefined) { + styles = defaultStyles; + } else { + for (var key in defaultStyles) { + if (!styles[key]) { + styles[key] = defaultStyles[key]; + } + } + } + } + + styles = ParseYAML(styles); + + var gameObject = Make(scene, data, view, styles, customBuilders); + + return gameObject; +} + +export default YAMLMake; \ No newline at end of file diff --git a/ui/src/phaser3-rex-plugins/templates/ui/maker/builders/Builders.d.ts b/ui/src/phaser3-rex-plugins/templates/ui/maker/builders/Builders.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1060083702109ff19a30437476962470896dad48 --- /dev/null +++ b/ui/src/phaser3-rex-plugins/templates/ui/maker/builders/Builders.d.ts @@ -0,0 +1,82 @@ +import BBCodeText from '../../bbcodetext/BBCodeText'; +import RoundRectangle from '../../roundrectangle/RoundRectangle'; +import NinePatch from '../../ninepatch/NinePatch'; +import NinePatch2 from '../../ninepatch2/NinePatch'; +import Canvas from '../../canvas/Canvas'; +import CircleMaskImage from '../../circlemaskimage/CircleMaskImage'; +import Space from '../../space/Space'; + +import Sizer from '../../sizer/Sizer'; +import FixWidthSizer from '../../fixwidthsizer/FixWidthSizer'; +import GridSizer from '../../gridsizer/GridSizer'; +import OverlapSizer from '../../overlapsizer/OverlapSizer'; + +import Buttons from '../../buttons/Buttons'; +import FixWidthButtons from '../../fixwidthbuttons/FixWidthButtons'; +import GridButtons from '../../gridbuttons/GridButtons'; + +import Label from '../../label/Label'; +import BadgeLabel from '../../badgelabel/BadgeLabel'; +import Dialog from '../../dialog/Dialog'; +import TextBox from '../../textbox/TextBox'; +import Slider from '../../slider/Slider'; +import NumberBar from '../../numberbar/NumberBar'; +import ScrollBar from '../../scrollbar/ScrollBar'; +import TextArea from '../../textarea/TextArea'; +import Pages from '../../pages/Pages'; +import Toast from '../../toast/Toast'; +import Knob from '../../knob/Knob'; +import HolyGrail from '../../holygrail/HolyGrail'; +import Menu from '../../menu/Menu'; + +export default Builders; + +declare namespace Builders { + type BuilderTypeCommon = ( + scene: Phaser.Scene, + data: Object, + view: Object, + styles: Object, + customBuilders: { [name: string]: BuilderType } + ) => T; + + type BuilderType = BuilderTypeCommon; +} + +declare var Builders: { + Image: Builders.BuilderTypeCommon, + Sprite: Builders.BuilderTypeCommon, + Video: Builders.BuilderTypeCommon, + Text: Builders.BuilderTypeCommon, + BBCodeText: Builders.BuilderTypeCommon, + RoundRectangle: Builders.BuilderTypeCommon, + Ninepatch: Builders.BuilderTypeCommon, + Ninepatch2: Builders.BuilderTypeCommon, + Canvas: Builders.BuilderTypeCommon, + CircleMaskImage: Builders.BuilderTypeCommon, + Space: Builders.BuilderTypeCommon, + + Sizer: Builders.BuilderTypeCommon, + FixWidthSizer: Builders.BuilderTypeCommon, + GridSizer: Builders.BuilderTypeCommon, + OverlapSizer: Builders.BuilderTypeCommon, + + Buttons: Builders.BuilderTypeCommon, + FixWidthButtons: Builders.BuilderTypeCommon, + GridButtons: Builders.BuilderTypeCommon, + + Label: Builders.BuilderTypeCommon