diff --git a/.gitattributes b/.gitattributes index eb8bc97a8..2cb6164af 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,114 +1,117 @@ -# Unity -*.shader text -*.cginc text -*.cs diff=csharp text - -# Unity YAML -*.mat merge=unityyamlmerge eol=lf -*.anim merge=unityyamlmerge eol=lf -*.unity merge=unityyamlmerge eol=lf -*.prefab merge=unityyamlmerge eol=lf -*.physicMaterial2D merge=unityyamlmerge eol=lf -*.physicMaterial merge=unityyamlmerge eol=lf -*.asset merge=unityyamlmerge eol=lf -*.meta merge=unityyamlmerge eol=lf -*.controller merge=unityyamlmerge eol=lf - -# Collapse Unity-generated files on GitHub -*.asset linguist-generated -*.mat linguist-generated -*.meta linguist-generated -*.prefab linguist-generated -*.unity linguist-generated - -# LFS - -## Assets -*.cubemap filter=lfs diff=lfs merge=lfs -text -*.unitypackage filter=lfs diff=lfs merge=lfs -text -*.unity3d filter=lfs diff=lfs merge=lfs -text - -## 3D models -*.3dm filter=lfs diff=lfs merge=lfs -text -*.3ds filter=lfs diff=lfs merge=lfs -text -*.blend filter=lfs diff=lfs merge=lfs -text -*.c4d filter=lfs diff=lfs merge=lfs -text -*.collada filter=lfs diff=lfs merge=lfs -text -*.dae filter=lfs diff=lfs merge=lfs -text -*.dxf filter=lfs diff=lfs merge=lfs -text -*.fbx filter=lfs diff=lfs merge=lfs -text -*.FBX filter=lfs diff=lfs merge=lfs -text -*.jas filter=lfs diff=lfs merge=lfs -text -*.lws filter=lfs diff=lfs merge=lfs -text -*.lxo filter=lfs diff=lfs merge=lfs -text -*.ma filter=lfs diff=lfs merge=lfs -text -*.max filter=lfs diff=lfs merge=lfs -text -*.mb filter=lfs diff=lfs merge=lfs -text -*.obj filter=lfs diff=lfs merge=lfs -text -*.ply filter=lfs diff=lfs merge=lfs -text -*.skp filter=lfs diff=lfs merge=lfs -text -*.stl filter=lfs diff=lfs merge=lfs -text -*.ztl filter=lfs diff=lfs merge=lfs -text - -## Audio -*.aif filter=lfs diff=lfs merge=lfs -text -*.aiff filter=lfs diff=lfs merge=lfs -text -*.it filter=lfs diff=lfs merge=lfs -text -*.mod filter=lfs diff=lfs merge=lfs -text -*.mp3 filter=lfs diff=lfs merge=lfs -text -*.ogg filter=lfs diff=lfs merge=lfs -text -*.s3m filter=lfs diff=lfs merge=lfs -text -*.wav filter=lfs diff=lfs merge=lfs -text -*.xm filter=lfs diff=lfs merge=lfs -text - -# Video -*.asf filter=lfs diff=lfs merge=lfs -text -*.avi filter=lfs diff=lfs merge=lfs -text -*.flv filter=lfs diff=lfs merge=lfs -text -*.mov filter=lfs diff=lfs merge=lfs -text -*.mp4 filter=lfs diff=lfs merge=lfs -text -*.mpeg filter=lfs diff=lfs merge=lfs -text -*.mpg filter=lfs diff=lfs merge=lfs -text -*.ogv filter=lfs diff=lfs merge=lfs -text -*.wmv filter=lfs diff=lfs merge=lfs -text - -## Images -*.bmp filter=lfs diff=lfs merge=lfs -text -*.exr filter=lfs diff=lfs merge=lfs -text -*.gif filter=lfs diff=lfs merge=lfs -text -*.hdr filter=lfs diff=lfs merge=lfs -text -*.iff filter=lfs diff=lfs merge=lfs -text -*.jpeg filter=lfs diff=lfs merge=lfs -text -*.jpg filter=lfs diff=lfs merge=lfs -text -*.pict filter=lfs diff=lfs merge=lfs -text -*.png filter=lfs diff=lfs merge=lfs -text -*.psd filter=lfs diff=lfs merge=lfs -text -*.tga filter=lfs diff=lfs merge=lfs -text -*.tif filter=lfs diff=lfs merge=lfs -text -*.tiff filter=lfs diff=lfs merge=lfs -text - -# Compressed Archive -*.7z filter=lfs diff=lfs merge=lfs -text -*.bz2 filter=lfs diff=lfs merge=lfs -text -*.gz filter=lfs diff=lfs merge=lfs -text -*.rar filter=lfs diff=lfs merge=lfs -text -*.tar filter=lfs diff=lfs merge=lfs -text -*.zip filter=lfs diff=lfs merge=lfs -text - -# Compiled Dynamic Library -*.dll filter=lfs diff=lfs merge=lfs -text -*.pdb filter=lfs diff=lfs merge=lfs -text -*.so filter=lfs diff=lfs merge=lfs -text - -## Fonts -*.otf filter=lfs diff=lfs merge=lfs -text -*.ttf filter=lfs diff=lfs merge=lfs -text - -## Executable/Installer -*.apk filter=lfs diff=lfs merge=lfs -text -*.exe filter=lfs diff=lfs merge=lfs -text -*.x86 filter=lfs diff=lfs merge=lfs -text -*.x64 filter=lfs diff=lfs merge=lfs -text - -## Documents -*.pdf filter=lfs diff=lfs merge=lfs -text \ No newline at end of file +# Unity +*.shader text +*.cginc text +*.cs diff=csharp text + +# Unity YAML +*.mat merge=unityyamlmerge eol=lf +*.anim merge=unityyamlmerge eol=lf +*.unity merge=unityyamlmerge eol=lf +*.prefab merge=unityyamlmerge eol=lf +*.physicMaterial2D merge=unityyamlmerge eol=lf +*.physicMaterial merge=unityyamlmerge eol=lf +*.asset merge=unityyamlmerge eol=lf +*.meta merge=unityyamlmerge eol=lf +*.controller merge=unityyamlmerge eol=lf + +# Collapse Unity-generated files on GitHub +*.asset linguist-generated +*.mat linguist-generated +*.meta linguist-generated +*.prefab linguist-generated +*.unity linguist-generated + +# LFS + +## Assets +*.cubemap filter=lfs diff=lfs merge=lfs -text +*.unitypackage filter=lfs diff=lfs merge=lfs -text +*.unity3d filter=lfs diff=lfs merge=lfs -text + +## 3D models +*.3dm filter=lfs diff=lfs merge=lfs -text +*.3ds filter=lfs diff=lfs merge=lfs -text +*.blend filter=lfs diff=lfs merge=lfs -text +*.c4d filter=lfs diff=lfs merge=lfs -text +*.collada filter=lfs diff=lfs merge=lfs -text +*.dae filter=lfs diff=lfs merge=lfs -text +*.dxf filter=lfs diff=lfs merge=lfs -text +*.fbx filter=lfs diff=lfs merge=lfs -text +*.FBX filter=lfs diff=lfs merge=lfs -text +*.jas filter=lfs diff=lfs merge=lfs -text +*.lws filter=lfs diff=lfs merge=lfs -text +*.lxo filter=lfs diff=lfs merge=lfs -text +*.ma filter=lfs diff=lfs merge=lfs -text +*.max filter=lfs diff=lfs merge=lfs -text +*.mb filter=lfs diff=lfs merge=lfs -text +*.obj filter=lfs diff=lfs merge=lfs -text +*.ply filter=lfs diff=lfs merge=lfs -text +*.skp filter=lfs diff=lfs merge=lfs -text +*.stl filter=lfs diff=lfs merge=lfs -text +*.ztl filter=lfs diff=lfs merge=lfs -text + +## Audio +*.aif filter=lfs diff=lfs merge=lfs -text +*.aiff filter=lfs diff=lfs merge=lfs -text +*.it filter=lfs diff=lfs merge=lfs -text +*.mod filter=lfs diff=lfs merge=lfs -text +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text +*.s3m filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.xm filter=lfs diff=lfs merge=lfs -text + +# Video +*.asf filter=lfs diff=lfs merge=lfs -text +*.avi filter=lfs diff=lfs merge=lfs -text +*.flv filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.mpeg filter=lfs diff=lfs merge=lfs -text +*.mpg filter=lfs diff=lfs merge=lfs -text +*.ogv filter=lfs diff=lfs merge=lfs -text +*.wmv filter=lfs diff=lfs merge=lfs -text + +## Images +*.bmp filter=lfs diff=lfs merge=lfs -text +*.exr filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.hdr filter=lfs diff=lfs merge=lfs -text +*.iff filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.pict filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text +*.tga filter=lfs diff=lfs merge=lfs -text +*.tif filter=lfs diff=lfs merge=lfs -text +*.tiff filter=lfs diff=lfs merge=lfs -text + +# Compressed Archive +*.7z filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text + +# Compiled Dynamic Library +*.dll filter=lfs diff=lfs merge=lfs -text +*.pdb filter=lfs diff=lfs merge=lfs -text +*.so filter=lfs diff=lfs merge=lfs -text + +## Fonts +*.otf filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text + +## Executable/Installer +*.apk filter=lfs diff=lfs merge=lfs -text +*.exe filter=lfs diff=lfs merge=lfs -text +*.x86 filter=lfs diff=lfs merge=lfs -text +*.x64 filter=lfs diff=lfs merge=lfs -text + +## Documents +*.pdf filter=lfs diff=lfs merge=lfs -text + +# Disabled +docs/**/* -filter=lfs -diff=lfs -merge=lfs -text \ No newline at end of file diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index ce48fb19f..0e9bfb8d1 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -1,46 +1,46 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at detervistnogetmed@hotmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at detervistnogetmed@hotmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2d9643bd9..182a60171 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,19 +1,19 @@ -# Contributing To The Neodroid Platform -These guidelines are universal for the entire [Neodroid](https://github.com/sintefneodroid) Platform - -## Pull Requests -We welcome pull requests. - -1. Fork the repo and create your branch from `master`. -2. If you've added code that should be tested, add tests. -3. If you've changed APIs, update the documentation. - -## Issues -We use GitHub issues to track public bugs. Please ensure your description is -clear and has sufficient instructions to be able to reproduce the issue. - -## Coding Style -... - -## License -By contributing to the [Neodroid](https://github.com/sintefneodroid) platform, you agree that your contributions will be licensed under the LICENSE file in the root directory of this repository. +# Contributing To The Neodroid Platform +These guidelines are universal for the entire [Neodroid](https://github.com/sintefneodroid) Platform + +## Pull Requests +We welcome pull requests. + +1. Fork the repo and create your branch from `develop`, we are using the git flow branching model. +2. If you've added code that should be tested, add tests. +3. If you've changed APIs, update the documentation. + +## Issues +We use GitHub issues to track public bugs. Please ensure your description is +clear and has sufficient instructions to be able to reproduce the issue. + +## Coding Style +... + +## License +By contributing to the [Neodroid](https://github.com/sintefneodroid) platform, you agree that your contributions will be licensed under the LICENSE file in the root directory of this repository. diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..24c2a197c --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,15 @@ + +# These are supported funding model platforms + +github: [cnheider] +patreon: cnheider +open_collective: cnheider +ko_fi: cnheider +custom: # Replace with a single custom sponsorship URL + + +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..dd84ea782 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..bbcbbe7d6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9aa416747..221d15753 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ -Description of the Change - -Benefits - -Possible drawbacks - -Sample Usage +Description of the Change + +Benefits + +Possible drawbacks + +Sample Usage diff --git a/.github/images/csharp.svg b/.github/images/csharp.svg index be3ec21cf..f2ec82fa7 100644 --- a/.github/images/csharp.svg +++ b/.github/images/csharp.svg @@ -1,47 +1,49 @@ - -image/svg+xml \ No newline at end of file + +image/svg+xml + + \ No newline at end of file diff --git a/.github/images/flatbuffers.svg b/.github/images/flatbuffers.svg index 91e3fc442..97243aebd 100644 --- a/.github/images/flatbuffers.svg +++ b/.github/images/flatbuffers.svg @@ -1,476 +1,534 @@ - - - -image/svg+xml + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.github/images/header.png b/.github/images/header.png index f39bb7a9f..54a427bd9 100644 --- a/.github/images/header.png +++ b/.github/images/header.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e62cedfc2de9b7bcf61834de5d5a14499cd4c65f73d269f4c0650b95adc7234 -size 30071 +oid sha256:063dc9ff4499d872a2170e93f8f1e55198566d5d8c6f93151e8a8b12c45cf868 +size 34541 diff --git a/.github/images/neodroid.png b/.github/images/neodroid.png index 76c876f4b..a5dcdc9ea 100644 --- a/.github/images/neodroid.png +++ b/.github/images/neodroid.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b9cef2eb476302583b9e3c5d8456044dbb615f8348daad9cfbf6816029270e9 -size 68568 +oid sha256:26908b7998231cce88425dfbf4913faa501217446e5d1c4d2066c9bb440a6c49 +size 19456 diff --git a/.github/images/neodroid.svg b/.github/images/neodroid.svg new file mode 100644 index 000000000..f84c0f48b --- /dev/null +++ b/.github/images/neodroid.svg @@ -0,0 +1,103 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/.github/images/neodroid.xcf b/.github/images/neodroid.xcf new file mode 100644 index 000000000..e6b9426c8 Binary files /dev/null and b/.github/images/neodroid.xcf differ diff --git a/.github/images/netmq.svg b/.github/images/netmq.svg index dc54d450d..9fa4fa383 100644 --- a/.github/images/netmq.svg +++ b/.github/images/netmq.svg @@ -1,22 +1,25 @@ - - + + diff --git a/.github/images/unity.svg b/.github/images/unity.svg index d8512e645..10b37fd83 100644 --- a/.github/images/unity.svg +++ b/.github/images/unity.svg @@ -1,2 +1,9 @@ - - + + + diff --git a/.gitignore b/.gitignore index 841fa024c..d43d8b04b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,51 +1,62 @@ -### -# Unity folders and files -### -[Aa]ssets/AssetStoreTools* -[Bb]uild/ -[Ll]ibrary/ -[Ll]ocal[Cc]ache/ -[Oo]bj/ -[Tt]emp/ -[Uu]nityGenerated/ -[Ee]xcluded/ -JetBrains/ - -*[Ee]xcluded.* - -sysinfo.txt - -*.pidb.meta -*.stackdump - -### -# VS/MD solution and project files -### -[Ee]xportedObj/ -*.booproj -#*.csproj -*.sln -*.suo -*.svd -*.unityproj -*.user -*.userprefs -*.pidb -.DS_Store - -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -ehthumbs.db -Thumbs.db - -ShaderCache/ -Environments/Builds/ -*.lock -.vs -.vscode - -*.unitypackage -ScenePreviews/ +### +# Unity folders and files +### +[Aa]ssets/AssetStoreTools* +[Bb]uild/ +[Ll]ibrary/ +[Ll]ocal[Cc]ache/ +[Oo]bj/ +[Tt]emp/ +[Uu]nityGenerated/ +[Ee]xcluded/ +JetBrains/ + +*_REMOTE_* +*_BACKUP_* +*_LOCAL_* +*_BASE_* + +*[Ee]xcluded.* +*[Ee]xclude.* +*[Ee]xcluded* +*[Ee]xclude* +*.orig +*.meta~* + +sysinfo.txt + +*.pidb.meta +*.stackdump + +### +# VS/MD solution and project files +### +[Ee]xportedObj/ +*.booproj +#*.csproj +*.sln +*.suo +*.svd +*.unityproj +*.user +*.userprefs +*.pidb +.DS_Store + +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +ShaderCache/ +Environments/Builds/ +*.lock +.vs +.vscode + +*.unitypackage +ScenePreviews/ +*.orig.meta \ No newline at end of file diff --git a/.lfsconfig b/.lfsconfig index 5c15bdbb9..ad7af9102 100644 --- a/.lfsconfig +++ b/.lfsconfig @@ -1,3 +1,3 @@ -# * `lfs.url` / `remote..lfsurl` -# url = "http://ADMIN:PASSWORD@HOST:9999/" +# * `lfs.url` / `remote..lfsurl` +# url = "http://ADMIN:PASSWORD@HOST:9999/" # The url used to call the Git LFS remote API. Default blank (derive from clone URL). \ No newline at end of file diff --git a/.nojekyll b/.nojekyll index d3f5a12fa..8b1378917 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ - + diff --git a/.npmignore b/.npmignore index b5194f45e..6f62c9fcc 100644 --- a/.npmignore +++ b/.npmignore @@ -1,4 +1,4 @@ -.git -.gitignore -.gitattributes +.git +.gitignore +.gitattributes .gitmodules \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..a686fd4c6 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,16 @@ +dist: xenial +language: generic + +sudo: required + +script: + - cd . + +#language: csharp +#solution: {{project}}.sln +#mono: +# - latest +#install: +# - ./build.sh +#script: +# - ./build.sh --target Run-UnitTests diff --git a/Documentation.meta b/Documentation.meta deleted file mode 100644 index b61c0681a..000000000 --- a/Documentation.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 78250b5bfc87b5946b70a601e7bdf373 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Documentation/Images/track.folder b/Documentation/Images/track.folder deleted file mode 100644 index 08778d7a8..000000000 --- a/Documentation/Images/track.folder +++ /dev/null @@ -1 +0,0 @@ -{\rtf1} \ No newline at end of file diff --git a/Documentation/Images/track.folder.meta b/Documentation/Images/track.folder.meta deleted file mode 100644 index 00293c870..000000000 --- a/Documentation/Images/track.folder.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0a1ed2fced0ae404da3d35dad6abe982 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Documentation/neodroid.md b/Documentation/neodroid.md deleted file mode 100644 index b1f8246d9..000000000 --- a/Documentation/neodroid.md +++ /dev/null @@ -1 +0,0 @@ -NEODROID \ No newline at end of file diff --git a/Documentation/neodroid.md.meta b/Documentation/neodroid.md.meta deleted file mode 100644 index 6d8acf759..000000000 --- a/Documentation/neodroid.md.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e545abde88c5a914b97ddfdb7adca50b -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/GameObjects/ActuatorSpawner.cs b/Editor/GameObjects/ActuatorSpawner.cs new file mode 100644 index 000000000..c79669f68 --- /dev/null +++ b/Editor/GameObjects/ActuatorSpawner.cs @@ -0,0 +1,36 @@ +using droid.Runtime.Prototyping.Actuators; +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace droid.Editor.GameObjects { + /// + /// + /// + public class ActuatorSpawner : MonoBehaviour { + [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Actuators/TransformActuator", false, 10)] + static void CreateTransformActuatorGameObject(MenuCommand menu_command) { + var go = new GameObject("TransformActuator"); + go.AddComponent(); + GameObjectUtility.SetParentAndAlign(go, + menu_command + .context as + GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) + Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system + Selection.activeObject = go; + } + + [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Actuators/RigidbodyActuator", false, 10)] + static void CreateRigidbodyActuatorGameObject(MenuCommand menu_command) { + var go = new GameObject("RigidbodyActuator"); + go.AddComponent(); + GameObjectUtility.SetParentAndAlign(go, + menu_command + .context as + GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) + Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system + Selection.activeObject = go; + } + } +} +#endif diff --git a/Editor/GameObjects/ActuatorSpawner.cs.meta b/Editor/GameObjects/ActuatorSpawner.cs.meta new file mode 100644 index 000000000..604b0432b --- /dev/null +++ b/Editor/GameObjects/ActuatorSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9389d3b0d742b40d79bedbd67e8a9781 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/GameObjects/EditorGameObjectMenuPath.cs b/Editor/GameObjects/EditorGameObjectMenuPath.cs index 673f640d9..14f3947f2 100644 --- a/Editor/GameObjects/EditorGameObjectMenuPath.cs +++ b/Editor/GameObjects/EditorGameObjectMenuPath.cs @@ -1,11 +1,9 @@ #if UNITY_EDITOR -namespace Neodroid.Editor.GameObjects { +namespace droid.Editor.GameObjects { /// - /// /// public static class EditorGameObjectMenuPath { /// - /// /// public const string _GameObjectMenuPath = "GameObject/Neodroid/"; } diff --git a/Editor/GameObjects/GeneralSpawner.cs b/Editor/GameObjects/GeneralSpawner.cs index 630e00f7a..4a3401ff1 100644 --- a/Editor/GameObjects/GeneralSpawner.cs +++ b/Editor/GameObjects/GeneralSpawner.cs @@ -1,48 +1,48 @@ -#if UNITY_EDITOR -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Prototyping.Actors; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.Managers; +using droid.Runtime.Prototyping.Actors; +#if UNITY_EDITOR using UnityEditor; using UnityEngine; -namespace Neodroid.Editor.GameObjects { +namespace droid.Editor.GameObjects { public class GeneralSpawner : MonoBehaviour { [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "SimulationManager", false, 10)] static void CreateSimulationManagerGameObject(MenuCommand menu_command) { var go = new GameObject("SimulationManager"); - go.AddComponent(); - GameObjectUtility.SetParentAndAlign( - go, - menu_command - .context as GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) + go.AddComponent(); + GameObjectUtility.SetParentAndAlign(go, + menu_command + .context as + GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system Selection.activeObject = go; } - [MenuItem("GameObject/Neodroid/Environment", false, 10)] + [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Environment", false, 10)] static void CreateEnvironmentGameObject(MenuCommand menu_command) { var go = new GameObject("Environment"); var plane = GameObject.CreatePrimitive(PrimitiveType.Plane); plane.transform.parent = go.transform; go.AddComponent(); - GameObjectUtility.SetParentAndAlign( - go, - menu_command - .context as GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) + GameObjectUtility.SetParentAndAlign(go, + menu_command + .context as + GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system Selection.activeObject = go; } - [MenuItem("GameObject/Neodroid/Actor", false, 10)] + [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Actor", false, 10)] static void CreateActorGameObject(MenuCommand menu_command) { var go = new GameObject("Actor"); var capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule); capsule.transform.parent = go.transform; go.AddComponent(); - GameObjectUtility.SetParentAndAlign( - go, - menu_command - .context as GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) + GameObjectUtility.SetParentAndAlign(go, + menu_command + .context as + GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system Selection.activeObject = go; } diff --git a/Editor/GameObjects/GeneralSpawner.cs.meta b/Editor/GameObjects/GeneralSpawner.cs.meta index 70c2cc032..c7b07125e 100644 --- a/Editor/GameObjects/GeneralSpawner.cs.meta +++ b/Editor/GameObjects/GeneralSpawner.cs.meta @@ -1,13 +1,11 @@ fileFormatVersion: 2 guid: 353e537cd7646448c81b6b428d1a36bb -timeCreated: 1513680573 -licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Editor/GameObjects/MotorSpawner.cs b/Editor/GameObjects/MotorSpawner.cs deleted file mode 100644 index 606e5c71e..000000000 --- a/Editor/GameObjects/MotorSpawner.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if UNITY_EDITOR -using Neodroid.Runtime.Prototyping.Motors; -using UnityEditor; -using UnityEngine; - -namespace Neodroid.Editor.GameObjects { - public class MotorSpawner : MonoBehaviour { - [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Motors/TransformMotor", false, 10)] - static void CreateTransformMotorGameObject(MenuCommand menu_command) { - var go = new GameObject("TransformMotor"); - go.AddComponent(); - GameObjectUtility.SetParentAndAlign( - go, - menu_command - .context as GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) - Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system - Selection.activeObject = go; - } - - [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Motors/RigidbodyMotor", false, 10)] - static void CreateRigidbodyMotorGameObject(MenuCommand menu_command) { - var go = new GameObject("RigidbodyMotor"); - go.AddComponent(); - GameObjectUtility.SetParentAndAlign( - go, - menu_command - .context as GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) - Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system - Selection.activeObject = go; - } - } -} -#endif diff --git a/Editor/GameObjects/MotorSpawner.cs.meta b/Editor/GameObjects/MotorSpawner.cs.meta deleted file mode 100644 index c600181a8..000000000 --- a/Editor/GameObjects/MotorSpawner.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 9389d3b0d742b40d79bedbd67e8a9781 -timeCreated: 1513681529 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/GameObjects/ObserverSpawner.cs b/Editor/GameObjects/ObserverSpawner.cs deleted file mode 100644 index adf282985..000000000 --- a/Editor/GameObjects/ObserverSpawner.cs +++ /dev/null @@ -1,34 +0,0 @@ -#if UNITY_EDITOR -using Neodroid.Runtime.Prototyping.Observers; -using Neodroid.Runtime.Prototyping.Observers.Transform; -using UnityEditor; -using UnityEngine; - -namespace Neodroid.Editor.GameObjects { - public class ObserverSpawner : MonoBehaviour { - [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Observers/Base", false, 10)] - static void CreateObserverGameObject(MenuCommand menu_command) { - var go = new GameObject("Observer"); - go.AddComponent(); - GameObjectUtility.SetParentAndAlign( - go, - menu_command - .context as GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) - Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system - Selection.activeObject = go; - } - - [MenuItem("GameObject/Neodroid/Observers/EulerTransform", false, 10)] - static void CreateEulerTransformObserverGameObject(MenuCommand menu_command) { - var go = new GameObject("EulerTransformObserver"); - go.AddComponent(); - GameObjectUtility.SetParentAndAlign( - go, - menu_command - .context as GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) - Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system - Selection.activeObject = go; - } - } -} -#endif diff --git a/Editor/GameObjects/ObserverSpawner.cs.meta b/Editor/GameObjects/ObserverSpawner.cs.meta deleted file mode 100644 index 1b505ad77..000000000 --- a/Editor/GameObjects/ObserverSpawner.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: dd2bcf7a6041e48ecbce87d7f3763384 -timeCreated: 1513681571 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/GameObjects/PrebuiltSpawner.cs b/Editor/GameObjects/PrebuiltSpawner.cs index 98852a1b0..42d4e09fd 100644 --- a/Editor/GameObjects/PrebuiltSpawner.cs +++ b/Editor/GameObjects/PrebuiltSpawner.cs @@ -1,24 +1,23 @@ -#if UNITY_EDITOR -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Prototyping.Configurables; -using Neodroid.Runtime.Prototyping.Motors; -using Neodroid.Runtime.Prototyping.Observers.Transform; -using Neodroid.Runtime.Utilities.BoundingBoxes; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects.BoundingBoxes; +using droid.Runtime.Managers; +using droid.Runtime.Prototyping.Actors; +using droid.Runtime.Prototyping.Actuators; +using droid.Runtime.Prototyping.Configurables.Transforms; +using droid.Runtime.Prototyping.Sensors.Spatial.Transform; +#if UNITY_EDITOR using UnityEditor; using UnityEngine; -namespace Neodroid.Editor.GameObjects { +namespace droid.Editor.GameObjects { public class PrebuiltSpawner : MonoBehaviour { /// - /// /// /// [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Prebuilt/SimpleEnvironment", false, 10)] static void CreateSingleEnvironmentGameObject(MenuCommand menu_command) { var go = new GameObject("SimpleEnvironment"); - go.AddComponent(); + go.AddComponent(); var env = go.AddComponent(); go.AddComponent(); var bounding_box = go.AddComponent(); @@ -29,8 +28,8 @@ static void CreateSingleEnvironmentGameObject(MenuCommand menu_command) { var actor = new GameObject("Actor"); actor.AddComponent(); - actor.AddComponent(); - actor.AddComponent(); + actor.AddComponent(); + actor.AddComponent(); actor.AddComponent(); actor.transform.parent = go.transform; @@ -38,12 +37,10 @@ static void CreateSingleEnvironmentGameObject(MenuCommand menu_command) { capsule.transform.parent = actor.transform; capsule.transform.localPosition = Vector3.up; - bounding_box.Initialise(); - - GameObjectUtility.SetParentAndAlign( - go, - menu_command - .context as GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) + GameObjectUtility.SetParentAndAlign(go, + menu_command + .context as + GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system Selection.activeObject = go; } diff --git a/Editor/GameObjects/PrebuiltSpawner.cs.meta b/Editor/GameObjects/PrebuiltSpawner.cs.meta index 45b7220d6..490282139 100644 --- a/Editor/GameObjects/PrebuiltSpawner.cs.meta +++ b/Editor/GameObjects/PrebuiltSpawner.cs.meta @@ -1,13 +1,11 @@ fileFormatVersion: 2 guid: b566adaecc533437caebc4d13324c41e -timeCreated: 1513682385 -licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Editor/GameObjects/PrefabSpawnerPopup.cs b/Editor/GameObjects/PrefabSpawnerPopup.cs index e070720e7..bdc8ed589 100644 --- a/Editor/GameObjects/PrefabSpawnerPopup.cs +++ b/Editor/GameObjects/PrefabSpawnerPopup.cs @@ -2,40 +2,38 @@ using UnityEditor; using UnityEngine; -namespace Neodroid.Editor.GameObjects { +namespace droid.Editor.GameObjects { /// /// /// public class PrefabSpawnerPopup : EditorWindow { - - static Rect _rect = new Rect(0,0, 0, 0); + static Rect _rect = new Rect(0, + 0, + 0, + 0); + [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "SpawnPrefab", false, 10)] static void Init2() { - - try { PopupWindow.Show(_rect, new PrefabsPopup()); - } catch (ExitGUIException) { //Debug.Log(e); } } } - - + /// /// /// - public class PrefabsPopup: PopupWindowContent { + public class PrefabsPopup : PopupWindowContent { + Vector2 _scroll_position; bool _updated_pos; int _x_size = 300; int _y_size = 200; - Vector2 _scroll_position; public override Vector2 GetWindowSize() { return new Vector2(this._x_size, this._y_size); } public override void OnGUI(Rect rect) { - if (!this._updated_pos) { var mp = Event.current.mousePosition; rect.x = mp.x; @@ -46,7 +44,7 @@ public override void OnGUI(Rect rect) { } GUILayout.Label("Spawn Prefab", EditorStyles.boldLabel); - + // Supports the following syntax: // 't:type' syntax (e.g 't:Texture2D' will show Texture2D objects) // 'l:assetlabel' syntax (e.g 'l:architecture' will show assets with AssetLabel 'architecture') @@ -55,8 +53,8 @@ public override void OnGUI(Rect rect) { // 's:softLockState' syntax (e.g 's:inprogress' will show objects that are modified by anyone (except you)) // 'a:area' syntax (e.g 'a:all' will s search in all assets, 'a:assets' will s search in assets folder only and 'a:packages' will s search in packages folder only) - var prefabs =AssetDatabase.FindAssets("t:Prefab a:all"); - + var prefabs = AssetDatabase.FindAssets("t:Prefab a:all"); + this._scroll_position = EditorGUILayout.BeginScrollView(this._scroll_position); EditorGUILayout.BeginVertical(); foreach (var prefab in prefabs) { @@ -65,13 +63,13 @@ public override void OnGUI(Rect rect) { var go = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)); if (path.Contains("Neodroid")) { if (GUILayout.Button(go.name)) { - Object.Instantiate(go,Selection.activeTransform); + Object.Instantiate(go, Selection.activeTransform); } } } + EditorGUILayout.EndVertical(); EditorGUILayout.EndScrollView(); - } public override void OnOpen() { @@ -82,6 +80,5 @@ public override void OnClose() { //Debug.Log("Popup closed: " + this); } } - } -#endif \ No newline at end of file +#endif diff --git a/Editor/GameObjects/PrefabSpawnerPopup.cs.meta b/Editor/GameObjects/PrefabSpawnerPopup.cs.meta index 1d43f0131..988dddb57 100644 --- a/Editor/GameObjects/PrefabSpawnerPopup.cs.meta +++ b/Editor/GameObjects/PrefabSpawnerPopup.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Editor/GameObjects/SensorSpawner.cs b/Editor/GameObjects/SensorSpawner.cs new file mode 100644 index 000000000..c8671880d --- /dev/null +++ b/Editor/GameObjects/SensorSpawner.cs @@ -0,0 +1,37 @@ +using droid.Runtime.Prototyping.Sensors; +using droid.Runtime.Prototyping.Sensors.Spatial.Transform; +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace droid.Editor.GameObjects { + /// + /// + /// + public class SensorSpawner : MonoBehaviour { + [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Sensors/Base", false, 10)] + static void CreateSensorGameObject(MenuCommand menu_command) { + var go = new GameObject("Sensor"); + go.AddComponent(); + GameObjectUtility.SetParentAndAlign(go, + menu_command + .context as + GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) + Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system + Selection.activeObject = go; + } + + [MenuItem(EditorGameObjectMenuPath._GameObjectMenuPath + "Sensors/EulerTransform", false, 10)] + static void CreateEulerTransformSensorGameObject(MenuCommand menu_command) { + var go = new GameObject("EulerTransformSensor"); + go.AddComponent(); + GameObjectUtility.SetParentAndAlign(go, + menu_command + .context as + GameObject); // Ensure it gets reparented if this was a context click (otherwise does nothing) + Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); // Register the creation in the undo system + Selection.activeObject = go; + } + } +} +#endif diff --git a/Editor/GameObjects/SensorSpawner.cs.meta b/Editor/GameObjects/SensorSpawner.cs.meta new file mode 100644 index 000000000..22420bf69 --- /dev/null +++ b/Editor/GameObjects/SensorSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd2bcf7a6041e48ecbce87d7f3763384 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Neodroid.Editor.asmdef b/Editor/Neodroid.Editor.asmdef new file mode 100644 index 000000000..de1589c90 --- /dev/null +++ b/Editor/Neodroid.Editor.asmdef @@ -0,0 +1,20 @@ +{ + "name": "Neodroid.Editor", + "references": [ + "Neodroid.Runtime", + "Unity.PackageManagerUI.Editor", + "Unity.Postprocessing.Editor", + "Unity.Postprocessing.Runtime" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Editor/Neodroid.Editor.asmdef.meta b/Editor/Neodroid.Editor.asmdef.meta new file mode 100644 index 000000000..eaa3525f2 --- /dev/null +++ b/Editor/Neodroid.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d2007c2033e45bf2aaeedbdb8504ed4a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/NeodroidEditorConstants.cs b/Editor/NeodroidEditorConstants.cs new file mode 100644 index 000000000..9d9ab9d1a --- /dev/null +++ b/Editor/NeodroidEditorConstants.cs @@ -0,0 +1,90 @@ +namespace droid.Editor { + /// + /// + /// + public static class NeodroidEditorConstants { + /// + /// + /// + public const string _NeodroidSettingsPath = "Assets/droid/Editor/neodroid_settings.asset"; + + /// + /// + /// + public const string _Neodroid_Project_Settings_Menu_Path = "Project/Neodroid Settings"; + + /// + /// + /// + public const string _Default_Scene_Previews_Location = "ScenePreviews/"; + + /// + /// + /// + public const string _Default_Scene_Description_Location = "SceneDescriptions/"; + + #if NEODROID_IS_PACKAGE + /// + /// + /// + //public const string _Default_Import_Location = "Packages/com.neodroid.droid/"; + public const string _Default_Import_Location = "Assets/droid/"; + + #else + /// + /// + /// + public const string _Default_Import_Location = "Assets/droid/"; + #endif + + /// + /// + /// + public const string _Debug_Pref_Key = "NeodroidEnableDebug"; + + /// + /// + /// + public const string _Github_Extension_Pref_Key = "NeodroidGithubExtension"; + + /// + /// + /// + public const string _IsPackage_Pref_Key = "NeodroidIsPackage"; + + /// + /// + /// + public const string _Import_Location_Pref_Key = "NeodroidImportLocation"; + + /// + /// + /// + public const string _Generate_Previews_Pref_Key = "NeodroidGeneratePreviews"; + + /// + /// + /// + public const string _Generate_Previews_Loc_Pref_Key = "NeodroidPreviewsLocation"; + + /// + /// + /// + public const string _Generate_Descriptions_Pref_Key = "NeodroidGenerateDescriptions"; + + /// + /// + /// + public const string _Generate_Descriptions_Loc_Pref_Key = "NeodroidDescriptionLocation"; + + /// + /// + /// + public const float _Editor_Margin = 50; + + /// + /// + /// + public const float _Preview_Margin = 5; + } +} diff --git a/Editor/NeodroidEditorConstants.cs.meta b/Editor/NeodroidEditorConstants.cs.meta new file mode 100644 index 000000000..1c9d5114c --- /dev/null +++ b/Editor/NeodroidEditorConstants.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8d2dc8e280f4042a01f208db5fd2f67 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/NeodroidSettings.cs b/Editor/NeodroidSettings.cs new file mode 100644 index 000000000..f339be95c --- /dev/null +++ b/Editor/NeodroidSettings.cs @@ -0,0 +1,328 @@ +using System; +using System.IO; +using droid.Editor.Utilities; +using droid.Runtime; +using UnityEditor; +using UnityEngine; +using UnityEngine.UIElements; + +namespace droid.Editor { + /// + /// + /// Create a new type of Settings Asset. + /// + [Serializable] + class NeodroidSettings : ScriptableObject { + #region Fields + + [SerializeField] bool NeodroidEnableDebug = false; + + [SerializeField] bool NeodroidGithubExtension = false; + + [SerializeField] bool NeodroidIsPackage = false; + + [SerializeField] string NeodroidImportLocation = NeodroidEditorConstants._Default_Import_Location; + [SerializeField] bool NeodroidGeneratePreviews = false; + + [SerializeField] + string NeodroidPreviewsLocation = NeodroidEditorConstants._Default_Scene_Previews_Location; + + [SerializeField] bool NeodroidGenerateDescriptions = false; + + [SerializeField] + string NeodroidDescriptionLocation = NeodroidEditorConstants._Default_Scene_Description_Location; + + #endregion + + #region Properties + + public bool NeodroidEnableDebugProp { + get { return this.NeodroidEnableDebug; } + set { + if (value != this.NeodroidEnableDebug || _force) { + ApplyDebug(value); + this.NeodroidEnableDebug = value; + } + } + } + + public static void ApplyDebug(bool value) { + if (value) { + Debug.Log($"Neodroid Debugging enabled"); + DefineSymbolsFunctionality.AddDebugDefineSymbol(); + } else { + Debug.Log($"Neodroid Debugging disabled"); + DefineSymbolsFunctionality.RemoveDebugDefineSymbols(); + } + } + + public bool NeodroidGithubExtensionProp { + get { return this.NeodroidGithubExtension; } + set { + if (value != this.NeodroidGithubExtension || _force) { + ApplyGithubExt(value); + + this.NeodroidGithubExtension = value; + } + } + } + + public static void ApplyGithubExt(bool value) { + if (value) { + DefineSymbolsFunctionality.AddGithubDefineSymbols(); + Debug.Log($"Neodroid GitHub Extension enabled"); + } else { + DefineSymbolsFunctionality.RemoveGithubDefineSymbols(); + Debug.Log($"Neodroid GitHub Extension disabled"); + } + } + + public bool NeodroidIsPackageProp { + get { return this.NeodroidIsPackage; } + set { + if (value != this.NeodroidIsPackage || _force) { + ApplyIsPackage(value); + this.NeodroidIsPackage = value; + } + } + } + + public static void ApplyIsPackage(bool value) { + if (value) { + DefineSymbolsFunctionality.AddIsPackageDefineSymbols(); + Debug.Log($"Neodroid is set as an imported asset"); + } else { + DefineSymbolsFunctionality.RemoveIsPackageDefineSymbols(); + Debug.Log($"Neodroid is set as an package asset"); + } + } + + public String NeodroidImportLocationProp { + get { return this.NeodroidImportLocation; } + set { + if (value != this.NeodroidImportLocation || _force) { + var new_path = PathTrim(value); + Debug.Log($"Setting Neodroid import location to: {new_path}"); + + this.NeodroidImportLocation = new_path; + } + } + } + + public bool NeodroidGeneratePreviewsProp { + get { return this.NeodroidGeneratePreviews; } + set { this.NeodroidGeneratePreviews = value; } + } + + public String NeodroidPreviewsLocationProp { + get { return this.NeodroidPreviewsLocation; } + set { + if (value != this.NeodroidPreviewsLocation || _force) { + var new_path = PathTrim(value); + Debug.Log($"Setting Neodroid ScenePreview location to: {new_path}"); + + this.NeodroidPreviewsLocation = new_path; + } + } + } + + public bool NeodroidGenerateDescriptionsProp { + get { return this.NeodroidGenerateDescriptions; } + set { this.NeodroidGenerateDescriptions = value; } + } + + public String NeodroidDescriptionLocationProp { + get { return this.NeodroidDescriptionLocation; } + set { + if (value != this.NeodroidDescriptionLocation || _force) { + var new_path = PathTrim(value); + Debug.Log($"Setting Neodroid SceneDescription location to: {new_path}"); + + this.NeodroidDescriptionLocation = new_path; + } + } + } + + public static string PathTrim(string value) { + var new_path = value.TrimEnd('/') + "/"; + return new_path; + } + + #endregion + + internal static NeodroidSettings Defaults() { + var settings = CreateInstance(); + settings.NeodroidEnableDebugProp = false; + settings.NeodroidGithubExtensionProp = false; + settings.NeodroidIsPackageProp = false; + settings.NeodroidImportLocationProp = NeodroidEditorConstants._Default_Import_Location; + + settings.NeodroidGeneratePreviewsProp = false; + settings.NeodroidPreviewsLocationProp = NeodroidEditorConstants._Default_Scene_Previews_Location; + settings.NeodroidGenerateDescriptionsProp = false; + settings.NeodroidDescriptionLocationProp = NeodroidEditorConstants._Default_Scene_Description_Location; + + return settings; + } + + internal static NeodroidSettings Current { + get { + var settings = + AssetDatabase.LoadAssetAtPath(NeodroidEditorConstants._NeodroidSettingsPath); + if (settings == null) { + settings = Defaults(); + + var path = Path.GetDirectoryName(NeodroidEditorConstants._NeodroidSettingsPath); + Directory.CreateDirectory(path); + AssetDatabase.CreateAsset(settings, NeodroidEditorConstants._NeodroidSettingsPath); + AssetDatabase.SaveAssets(); + } + + return settings; + } + } + + static bool _force = false; + + internal static void ReapplyProperties(Boolean force = false) { + _force = force; + Current.NeodroidEnableDebugProp = Current.NeodroidEnableDebug; + Current.NeodroidGithubExtensionProp = Current.NeodroidGithubExtension; + Current.NeodroidIsPackageProp = Current.NeodroidIsPackage; + Current.NeodroidImportLocationProp = Current.NeodroidImportLocation; + Current.NeodroidGeneratePreviewsProp = Current.NeodroidGeneratePreviews; + Current.NeodroidPreviewsLocationProp = Current.NeodroidPreviewsLocation; + Current.NeodroidGenerateDescriptionsProp = Current.NeodroidGenerateDescriptions; + Current.NeodroidDescriptionLocationProp = Current.NeodroidDescriptionLocation; + _force = false; + } + + void OnValidate() { + //ReapplyProperties(); + } + + internal static SerializedObject GetSerializedSettings() { + var serialized_object = new SerializedObject(Current); + return serialized_object; + } + } + + /// + /// SettingsProvider for Neodroid + /// + class NeodroidSettingsProvider : SettingsProvider { + SerializedObject _neodroid_settings; + + /// + /// + /// + class Styles { + public static GUIContent _EnableNeodroidDebug = new GUIContent(NeodroidEditorConstants._Debug_Pref_Key); + + public static GUIContent _EnableGithubExtension = + new GUIContent(NeodroidEditorConstants._Github_Extension_Pref_Key); + + public static GUIContent _IsPackage = new GUIContent(NeodroidEditorConstants._IsPackage_Pref_Key); + + public static GUIContent _ImportLocation = + new GUIContent(NeodroidEditorConstants._Import_Location_Pref_Key); + + public static GUIContent _GenerateScenePreview = + new GUIContent(NeodroidEditorConstants._Generate_Previews_Pref_Key); + + public static GUIContent _ScenePreviewLocation = + new GUIContent(NeodroidEditorConstants._Generate_Previews_Loc_Pref_Key); + + public static GUIContent _GenerateSceneDescription = + new GUIContent(NeodroidEditorConstants._Generate_Descriptions_Pref_Key); + + public static GUIContent _SceneDescriptionLocation = + new GUIContent(NeodroidEditorConstants._Generate_Descriptions_Loc_Pref_Key); + } + + public NeodroidSettingsProvider(string path, SettingsScope scope = SettingsScope.User) : + base(path, scope) { } + + public static bool IsSettingsAvailable() { + return File.Exists(NeodroidEditorConstants._NeodroidSettingsPath); + } + + /// + /// This function is called when the user clicks on the MyCustom element in the Settings window. + /// + public override void OnActivate(string search_context, VisualElement root_element) { + this._neodroid_settings = NeodroidSettings.GetSerializedSettings(); + } + + public override void OnGUI(string search_context) { + EditorGUILayout.HelpBox($"Version {NeodroidRuntimeInfo._Version}", MessageType.Info); + + var is_package = this._neodroid_settings.FindProperty(NeodroidEditorConstants._IsPackage_Pref_Key); + EditorGUILayout.PropertyField(is_package, Styles._IsPackage); + if (!is_package.boolValue) { + EditorGUILayout.HelpBox("Enter import path of Neodroid", MessageType.Info); + EditorGUILayout.PropertyField(this._neodroid_settings.FindProperty(NeodroidEditorConstants + ._Import_Location_Pref_Key), + Styles._ImportLocation); + } + + EditorGUILayout.HelpBox("Functionality", MessageType.Info); + + EditorGUILayout.PropertyField(this._neodroid_settings.FindProperty(NeodroidEditorConstants + ._Debug_Pref_Key), + Styles._EnableNeodroidDebug); + EditorGUILayout.PropertyField(this._neodroid_settings.FindProperty(NeodroidEditorConstants + ._Github_Extension_Pref_Key), + Styles._EnableGithubExtension); + + var generate_scene_preview = + this._neodroid_settings.FindProperty(NeodroidEditorConstants._Generate_Previews_Pref_Key); + EditorGUILayout.PropertyField(generate_scene_preview, Styles._GenerateScenePreview); + if (generate_scene_preview.boolValue) { + EditorGUILayout.HelpBox("Enter path for scene preview storage", MessageType.Info); + EditorGUILayout.PropertyField(this._neodroid_settings.FindProperty(NeodroidEditorConstants + ._Generate_Previews_Loc_Pref_Key), + Styles._ScenePreviewLocation); + } + + var generate_scene_descriptions = + this._neodroid_settings.FindProperty(NeodroidEditorConstants._Generate_Descriptions_Pref_Key); + EditorGUILayout.PropertyField(generate_scene_descriptions, Styles._GenerateSceneDescription); + if (generate_scene_descriptions.boolValue) { + EditorGUILayout.HelpBox("Enter path for scene description storage", MessageType.Info); + EditorGUILayout.PropertyField(this._neodroid_settings.FindProperty(NeodroidEditorConstants + ._Generate_Descriptions_Loc_Pref_Key), + Styles._SceneDescriptionLocation); + } + + this._neodroid_settings.ApplyModifiedProperties(); + + if (EditorGUILayout.Toggle("Apply", false)) { + NeodroidSettings.ReapplyProperties(force : true); + EditorUtility.SetDirty(NeodroidSettings.Current); + } + } + + // Register the SettingsProvider + [SettingsProvider] + public static SettingsProvider CreateNeodroidSettingsProvider() { + if (IsSettingsAvailable()) { + var provider = + new NeodroidSettingsProvider(NeodroidEditorConstants._Neodroid_Project_Settings_Menu_Path, + SettingsScope.Project) { + keywords = + GetSearchKeywordsFromGUIContentProperties + () + }; + + //provider.keywords = GetSearchKeywordsFromPath(NeodroidEditorConstants._Neodroid_Project_Settings_Menu_Path); + + // Automatically extract all keywords from the Styles. + return provider; + } + + // Settings Asset doesn't exist yet; no need to display anything in the Settings window. + return null; + } + } +} diff --git a/Editor/NeodroidSettings.cs.meta b/Editor/NeodroidSettings.cs.meta new file mode 100644 index 000000000..90c4821d3 --- /dev/null +++ b/Editor/NeodroidSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a44aef6c4e27e82199c3be5129c72155 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources.meta b/Editor/Resources.meta new file mode 100644 index 000000000..f3504bda8 --- /dev/null +++ b/Editor/Resources.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ceeafd630221488aaa13b4d7cae03de0 +timeCreated: 1547270078 \ No newline at end of file diff --git a/Editor/Resources/GithubExtension.uss b/Editor/Resources/GithubExtension.uss new file mode 100644 index 000000000..3a2bf4289 --- /dev/null +++ b/Editor/Resources/GithubExtension.uss @@ -0,0 +1,27 @@ +#detailActions.display-none { + min-width: 0; + min-height: 0; +} + +#detailActions #hostingIcon { + background-image: resource("Images/GitHub-Mark-Light-32px"); + width: 16; + height: 16; + margin-left: 0; + margin-right: 0; + border-left: 0; + border-right: 0; + slice-left: 0; + slice-right: 0; + slice-top: 0; + slice-bottom: 0; + cursor: link; +} + +#detailActions #hostingIcon.github { + background-image: resource("Images/GitHub-Mark-32px"); +} + +#detailActions #hostingIcon.github.dark { + background-image: resource("Images/GitHub-Mark-Light-32px"); +} \ No newline at end of file diff --git a/Editor/Resources/GithubExtension.uss.meta b/Editor/Resources/GithubExtension.uss.meta new file mode 100644 index 000000000..4c82029aa --- /dev/null +++ b/Editor/Resources/GithubExtension.uss.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a4afe36bde3eba8fdb8318a4a884fa53 +ScriptedImporter: + fileIDToRecycleName: + 11400000: stylesheet + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Editor/Resources/GithubExtension.uxml b/Editor/Resources/GithubExtension.uxml new file mode 100644 index 000000000..d337d0348 --- /dev/null +++ b/Editor/Resources/GithubExtension.uxml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Editor/Resources/GithubExtension.uxml.meta b/Editor/Resources/GithubExtension.uxml.meta new file mode 100644 index 000000000..71854c9c7 --- /dev/null +++ b/Editor/Resources/GithubExtension.uxml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd8020479393113d6b7b61096a652bfd +ScriptedImporter: + fileIDToRecycleName: + 11400000: tree + 11400002: inlineStyle + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Documentation/Images.meta b/Editor/Resources/Images.meta similarity index 77% rename from Documentation/Images.meta rename to Editor/Resources/Images.meta index 153d5352d..de1df0c12 100644 --- a/Documentation/Images.meta +++ b/Editor/Resources/Images.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7c094ef4207122a4285a15f1720e42ed +guid: 171b5474012c71cbc83ca2f853cf25c9 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Editor/Resources/Images/GitHub-Mark-32px.png b/Editor/Resources/Images/GitHub-Mark-32px.png new file mode 100644 index 000000000..434cf090e --- /dev/null +++ b/Editor/Resources/Images/GitHub-Mark-32px.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2495121b685778bd251e2b9ceea4124cf98479ec86e7d159658e47fa790f2c0e +size 1714 diff --git a/Editor/Resources/Images/GitHub-Mark-32px.png.meta b/Editor/Resources/Images/GitHub-Mark-32px.png.meta new file mode 100644 index 000000000..869921243 --- /dev/null +++ b/Editor/Resources/Images/GitHub-Mark-32px.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 7f816f6fb7343f4fa8cc81d288e20a62 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources/Images/GitHub-Mark-Light-32px.png b/Editor/Resources/Images/GitHub-Mark-Light-32px.png new file mode 100644 index 000000000..24255aa87 --- /dev/null +++ b/Editor/Resources/Images/GitHub-Mark-Light-32px.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b4582ced3c5b039423243207f470dcba7288918131657f89e9bdcada6fa8a40 +size 1571 diff --git a/Editor/Resources/Images/GitHub-Mark-Light-32px.png.meta b/Editor/Resources/Images/GitHub-Mark-Light-32px.png.meta new file mode 100644 index 000000000..d2550940f --- /dev/null +++ b/Editor/Resources/Images/GitHub-Mark-Light-32px.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: b0bb7d061f4c15e0da320c5e3b58332c +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/ScriptableObjects/Curriculum.cs b/Editor/ScriptableObjects/Curriculum.cs index b50887f28..fd8b02b6d 100644 --- a/Editor/ScriptableObjects/Curriculum.cs +++ b/Editor/ScriptableObjects/Curriculum.cs @@ -1,11 +1,17 @@ -#if UNITY_EDITOR -using Neodroid.Editor.Windows; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEditor; +using droid.Editor.Windows; using UnityEngine; +#if UNITY_EDITOR +using droid.Runtime.ScriptableObjects.Deprecated; +using UnityEditor; -namespace Neodroid.Editor.ScriptableObjects { +namespace droid.Editor.ScriptableObjects { + /// + /// + /// public static class CreateCurriculum { + /// + /// + /// [MenuItem(EditorScriptableObjectMenuPath._ScriptableObjectMenuPath + "Curriculum")] public static void CreateCurriculumAsset() { var asset = ScriptableObject.CreateInstance(); diff --git a/Editor/ScriptableObjects/Curriculum.cs.meta b/Editor/ScriptableObjects/Curriculum.cs.meta index 254631fdd..628300674 100644 --- a/Editor/ScriptableObjects/Curriculum.cs.meta +++ b/Editor/ScriptableObjects/Curriculum.cs.meta @@ -1,13 +1,11 @@ fileFormatVersion: 2 guid: 49c9f168bf4054e75b9208402fe5fca0 -timeCreated: 1512738968 -licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 118bb18f79adc4eb89be353f47adae5c, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Editor/ScriptableObjects/EditorScriptableObjectMenuPath.cs b/Editor/ScriptableObjects/EditorScriptableObjectMenuPath.cs index b2f8c25bf..eb42a52da 100644 --- a/Editor/ScriptableObjects/EditorScriptableObjectMenuPath.cs +++ b/Editor/ScriptableObjects/EditorScriptableObjectMenuPath.cs @@ -1,5 +1,5 @@ #if UNITY_EDITOR -namespace Neodroid.Editor.ScriptableObjects { +namespace droid.Editor.ScriptableObjects { public static class EditorScriptableObjectMenuPath { public const string _ScriptableObjectMenuPath = "Tools/Neodroid/Create/ScriptableObjects/"; } diff --git a/Editor/ScriptableObjects/EditorScriptableObjectMenuPath.cs.meta b/Editor/ScriptableObjects/EditorScriptableObjectMenuPath.cs.meta index 1bfde3b6c..eb8b0c9ad 100644 --- a/Editor/ScriptableObjects/EditorScriptableObjectMenuPath.cs.meta +++ b/Editor/ScriptableObjects/EditorScriptableObjectMenuPath.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 118bb18f79adc4eb89be353f47adae5c, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Editor/ScriptableObjects/NeodroidSettings.cs b/Editor/ScriptableObjects/NeodroidSettings.cs deleted file mode 100644 index 1921c92be..000000000 --- a/Editor/ScriptableObjects/NeodroidSettings.cs +++ /dev/null @@ -1,81 +0,0 @@ -using Common.Editors; -using UnityEngine; - -namespace Neodroid.Editor.ScriptableObjects { - /// - /// - /// - [System.Serializable] - [ExecuteInEditMode] - // ReSharper disable once RequiredBaseTypesIsNotInherited - public class NeodroidSettings : ScriptableObject { - static NeodroidSettings _instance; - - /// - /// Returns the release version of the product. - /// - public static string Version - { - get { return "1.3.0"; } - } - - - /// - /// Get a singleton instance of the settings class. - /// - public static NeodroidSettings Instance - { - get - { - if (_instance == null) - { - _instance = Resources.Load("TMP Settings"); - - #if UNITY_EDITOR - // Make sure UPM(Unity Package Manager) packages resources have been added to the user project - if (_instance == null) - { - // Open Resources Importer - NeodroidPackageImporterWindow.ShowPackageImporterWindow(); - } - #endif - } - - return _instance; - } - } - - - /// - /// Static Function to load the Settings file. - /// - /// - public static NeodroidSettings LoadDefaultSettings() - { - if (_instance == null) - { - // Load settings from Settings file - var settings = Resources.Load("Neodroid Settings"); - if (settings != null) { - _instance = settings; - } - } - - return _instance; - } - - - /// - /// Returns the Sprite Asset defined in the Settings file. - /// - /// - public static NeodroidSettings GetSettings() - { - if (Instance == null) { - return null; - } - - return Instance; - } - } -} diff --git a/Editor/ScriptableObjects/NeodroidSettings.cs.meta b/Editor/ScriptableObjects/NeodroidSettings.cs.meta deleted file mode 100644 index 1060a9617..000000000 --- a/Editor/ScriptableObjects/NeodroidSettings.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 58ac2ac7773748e396e0788a82471247 -timeCreated: 1537856404 \ No newline at end of file diff --git a/Editor/ScriptableObjects/NeodroidTask.cs b/Editor/ScriptableObjects/NeodroidTask.cs index 876dd734d..54c8a9b75 100644 --- a/Editor/ScriptableObjects/NeodroidTask.cs +++ b/Editor/ScriptableObjects/NeodroidTask.cs @@ -1,11 +1,17 @@ -#if UNITY_EDITOR -using Neodroid.Editor.Windows; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEditor; +using droid.Editor.Windows; using UnityEngine; +#if UNITY_EDITOR +using droid.Runtime.ScriptableObjects.Deprecated; +using UnityEditor; -namespace Neodroid.Editor.ScriptableObjects { +namespace droid.Editor.ScriptableObjects { + /// + /// + /// public static class CreateNeodroidTask { + /// + /// + /// [MenuItem(EditorScriptableObjectMenuPath._ScriptableObjectMenuPath + "NeodroidTask")] public static void CreateNeodroidTaskAsset() { var asset = ScriptableObject.CreateInstance(); diff --git a/Editor/ScriptableObjects/NeodroidTask.cs.meta b/Editor/ScriptableObjects/NeodroidTask.cs.meta index 826c3a713..eb6e2c2ab 100644 --- a/Editor/ScriptableObjects/NeodroidTask.cs.meta +++ b/Editor/ScriptableObjects/NeodroidTask.cs.meta @@ -1,13 +1,11 @@ fileFormatVersion: 2 guid: d6514263a597a4839a9c4662b85a9573 -timeCreated: 1510569527 -licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 118bb18f79adc4eb89be353f47adae5c, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Editor/ScriptableObjects/PlayerMotions.cs b/Editor/ScriptableObjects/PlayerMotions.cs index 94f0de8c5..4926c5fff 100644 --- a/Editor/ScriptableObjects/PlayerMotions.cs +++ b/Editor/ScriptableObjects/PlayerMotions.cs @@ -1,22 +1,89 @@ -#if UNITY_EDITOR -using Neodroid.Editor.Windows; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEditor; +using droid.Editor.Windows; +using droid.Runtime.Prototyping.Actuators; +using droid.Runtime.ScriptableObjects; using UnityEngine; +#if UNITY_EDITOR +using droid.Runtime.Prototyping.Actors; +using UnityEditor; -namespace Neodroid.Editor.ScriptableObjects { +namespace droid.Editor.ScriptableObjects { + /// + /// + /// public static class CreatePlayerMotions { + /// + /// + /// [MenuItem(EditorScriptableObjectMenuPath._ScriptableObjectMenuPath + "PlayerMotions")] public static void CreatePlayerMotionsAsset() { var asset = ScriptableObject.CreateInstance(); - AssetDatabase.CreateAsset(asset, EditorWindowMenuPath._NewAssetPath + "Assets/NewPlayerMotions.asset"); + AssetDatabase.CreateAsset(asset, EditorWindowMenuPath._NewAssetPath + "NewPlayerMotions.asset"); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = asset; } + + /// + /// + /// + public class CreatePlayerMotionsWizard : ScriptableWizard { + const float WINDOW_WIDTH = 260, WINDOW_HEIGHT = 500; + + [MenuItem(EditorScriptableObjectMenuPath._ScriptableObjectMenuPath + "PlayerMotions (Wizard)")] + private static void Init() { + var window = CreateWindow("Create Player Motions..."); + window.Show(); + } + + private void Awake() { + var icon = + AssetDatabase.LoadAssetAtPath(NeodroidSettings.Current.NeodroidImportLocationProp + + "Gizmos/Icons/table.png"); + this.minSize = this.maxSize = new Vector2(WINDOW_WIDTH, WINDOW_HEIGHT); + this.titleContent = new GUIContent(this.titleContent.text, icon); + } + + /// + /// + /// + [Header("Actuators to generate motions for")] + public Actor[] actors; + + private void OnWizardCreate() { + var asset = CreateInstance(); + int motionCount = 0; + + foreach (var actor in this.actors) { + foreach (var actuator in actor.Actuators) { + motionCount += ((Actuator)actuator.Value).InnerMotionNames.Length; + } + } + + asset._Motions = new PlayerMotion[motionCount]; + int i = 0; + foreach (var actor in this.actors) { + foreach (var actuator in actor.Actuators) { + for (int j = 0; j < ((Actuator)actuator.Value).InnerMotionNames.Length; j++, i++) { + asset._Motions[i] = new PlayerMotion { + _Actor = actor.Identifier, + _Actuator = ((Actuator)actuator.Value) + .InnerMotionNames[j] + }; + } + } + } + + AssetDatabase.CreateAsset(asset, EditorWindowMenuPath._NewAssetPath + "NewPlayerMotions.asset"); + AssetDatabase.SaveAssets(); + + EditorUtility.FocusProjectWindow(); + + Selection.activeObject = asset; + } + } } } #endif diff --git a/Editor/ScriptableObjects/PlayerMotions.cs.meta b/Editor/ScriptableObjects/PlayerMotions.cs.meta index 641267cb4..691d34b27 100644 --- a/Editor/ScriptableObjects/PlayerMotions.cs.meta +++ b/Editor/ScriptableObjects/PlayerMotions.cs.meta @@ -1,13 +1,11 @@ fileFormatVersion: 2 guid: 859f1ff7a0a9a42dd8359d2f2f06e850 -timeCreated: 1512693489 -licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 118bb18f79adc4eb89be353f47adae5c, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Editor/ScriptableObjects/Segmentations.cs b/Editor/ScriptableObjects/Segmentations.cs index e1a85d90e..29697c630 100644 --- a/Editor/ScriptableObjects/Segmentations.cs +++ b/Editor/ScriptableObjects/Segmentations.cs @@ -1,10 +1,10 @@ -#if UNITY_EDITOR -using Neodroid.Editor.Windows; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEditor; +using droid.Editor.Windows; using UnityEngine; +#if UNITY_EDITOR +using droid.Runtime.ScriptableObjects; +using UnityEditor; -namespace Neodroid.Editor.ScriptableObjects { +namespace droid.Editor.ScriptableObjects { public static class CreateSegmentations { [MenuItem(EditorScriptableObjectMenuPath._ScriptableObjectMenuPath + "Segmentations")] public static void CreateSegmentationsAsset() { diff --git a/Editor/ScriptableObjects/Segmentations.cs.meta b/Editor/ScriptableObjects/Segmentations.cs.meta index d0e59f922..fa675d70d 100644 --- a/Editor/ScriptableObjects/Segmentations.cs.meta +++ b/Editor/ScriptableObjects/Segmentations.cs.meta @@ -1,13 +1,11 @@ fileFormatVersion: 2 guid: b255f207a05704f34b47e7e1ec377ed9 -timeCreated: 1515983396 -licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 118bb18f79adc4eb89be353f47adae5c, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Editor/Utilities/DefineSymbolsController.cs b/Editor/Utilities/DefineSymbolsController.cs new file mode 100644 index 000000000..d92833517 --- /dev/null +++ b/Editor/Utilities/DefineSymbolsController.cs @@ -0,0 +1,139 @@ +using System.Linq; +using UnityEditor; +using UnityEngine; + +#if UNITY_EDITOR + +namespace droid.Editor.Utilities { + /// + /// + /// Adds the given define symbols to PlayerSettings define symbols. + /// Just add your own define symbols to the Symbols property at the below. + /// + [InitializeOnLoad] + public class DefineSymbolsController : UnityEditor.Editor { + /// + /// Add define symbols as soon as Unity gets done compiling. + /// + static DefineSymbolsController() { DefineSymbolsFunctionality.AddDefineSymbols(); } + } + + /// + /// + /// + public static class DefineSymbolsFunctionality { + /// + /// Symbols that will be added to the editor + /// + public static readonly string[] _Symbols = {"NEODROID", "NEODROID_EXISTS"}; + + /// + /// Debug symbols that will be added to the editor + /// + public static readonly string[] _Debug_Symbols = {"NEODROID_DEBUG"}; + + /// + /// + /// + public static readonly string[] _Github_Symbols = {"NEODROID_USE_GITHUB_EXTENSION"}; + + /// + /// + /// + public static readonly string[] _IsPackage_Symbols = {"NEODROID_IS_PACKAGE"}; + + /// + /// + public static void AddDefineSymbols() { + var defines_string = + PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + var all_defines = defines_string.Split(';').ToList(); + all_defines.AddRange(_Symbols.Except(all_defines)); + PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, + string.Join(";", all_defines.ToArray())); + } + + /// + /// + public static void AddDebugDefineSymbol() { + AddDefineSymbols(_Debug_Symbols); + + Debug.LogWarning("Neodroid Debugging enabled"); + } + + /// + /// + /// + public static void RemoveDebugDefineSymbols() { + RemoveDefineSymbols(_Debug_Symbols); + + Debug.LogWarning("Neodroid Debugging disabled"); + } + + /// + /// + /// + public static void AddGithubDefineSymbols() { + AddDefineSymbols(_Github_Symbols); + + Debug.LogWarning("Github Extension enabled"); + } + + /// + /// + /// + public static void RemoveGithubDefineSymbols() { + RemoveDefineSymbols(_Github_Symbols); + + Debug.LogWarning("Github Extension disabled"); + } + + /// + /// + /// + public static void AddIsPackageDefineSymbols() { + AddDefineSymbols(_IsPackage_Symbols); + + Debug.LogWarning("Neodroid is assumed to be an imported asset"); + } + + /// + /// + /// + public static void RemoveIsPackageDefineSymbols() { + RemoveDefineSymbols(_IsPackage_Symbols); + Debug.LogWarning("Neodroid is assumed to be an installed package"); + } + + /// + /// + /// + /// + public static void AddDefineSymbols(string[] symbols) { + var defines_string = + PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + var all_defines = defines_string.Split(';').ToList(); + all_defines.AddRange(symbols.Except(all_defines)); + + PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, + string.Join(";", all_defines.ToArray())); + } + + /// + /// + public static void RemoveDefineSymbols(string[] symbols) { + var defines_string = + PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + var all_defines = defines_string.Split(';').ToList(); + foreach (var b in symbols) { + var res = all_defines.RemoveAll(c => c == b); + Debug.LogWarning($"Removed define symbols {symbols.Aggregate((aa, bb) => aa + "," + bb)} : number of entries removed {res}"); + } + + PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, + string.Join(";", all_defines.ToArray())); + } + } +} + +#endif diff --git a/Editor/Utilities/DefineSymbolsController.cs.meta b/Editor/Utilities/DefineSymbolsController.cs.meta new file mode 100644 index 000000000..6a560bcfa --- /dev/null +++ b/Editor/Utilities/DefineSymbolsController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 962c98c878b84923b4f7e2395384772e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Utilities/ExecutionOrderManager.cs b/Editor/Utilities/ExecutionOrderManager.cs new file mode 100644 index 000000000..f4865731a --- /dev/null +++ b/Editor/Utilities/ExecutionOrderManager.cs @@ -0,0 +1,31 @@ +#if UNITY_EDITOR +using UnityEditor; + +namespace droid.Editor.Utilities { + /// + /// + /// + [InitializeOnLoad] + public class ExecutionOrderManager : UnityEditor.Editor { + static ExecutionOrderManager() { + foreach (var mono_script in MonoImporter.GetAllRuntimeMonoScripts()) { + var type = mono_script.GetClass(); + if (type == null) { + continue; + } + + var attributes = type.GetCustomAttributes(typeof(ScriptExecutionOrderAttribute), true); + + if (attributes.Length == 0) { + continue; + } + + var attribute = (ScriptExecutionOrderAttribute)attributes[0]; + if (MonoImporter.GetExecutionOrder(mono_script) != attribute.GetOrder()) { + MonoImporter.SetExecutionOrder(mono_script, attribute.GetOrder()); + } + } + } + } +} +#endif diff --git a/Editor/Utilities/ExecutionOrderManager.cs.meta b/Editor/Utilities/ExecutionOrderManager.cs.meta new file mode 100644 index 000000000..0e5f07c4a --- /dev/null +++ b/Editor/Utilities/ExecutionOrderManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdee9db062ad5a6aea64803e8e53959f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Utilities/Git.meta b/Editor/Utilities/Git.meta new file mode 100644 index 000000000..28732b4b4 --- /dev/null +++ b/Editor/Utilities/Git.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a9efd7d0106770629156608305e8095 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Utilities/Git/GithubExtension.cs b/Editor/Utilities/Git/GithubExtension.cs new file mode 100644 index 000000000..ae7726d93 --- /dev/null +++ b/Editor/Utilities/Git/GithubExtension.cs @@ -0,0 +1,242 @@ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using UnityEditor.PackageManager; +using UnityEngine; +using UnityEngine.Networking; +#if UNITY_2019_1_OR_NEWER && UNITY_EDITOR && USE_GITHUB_EXTENSION +using System.Linq; +using UnityEngine.UIElements; + +namespace droid.Editor.Utilities.Git { + /// + /// + /// + public static class GithubExtension { + const string _k_display_none = "display-none"; + + /// + /// + /// + /// + /// + public static void SetElementDisplay(VisualElement element, bool value) { + if (element == null) { + return; + } + + SetElementClass(element, _k_display_none, !value); + element.visible = value; + } + + /// + /// + /// + /// + /// + public static bool IsElementDisplay(VisualElement element) { + return !HasElementClass(element, _k_display_none); + } + + /// + /// + /// + /// + /// + /// + public static void SetElementClass(VisualElement element, string class_name, bool value) { + if (element == null) { + return; + } + + if (value) { + element.AddToClassList(class_name); + } else { + element.RemoveFromClassList(class_name); + } + } + + /// + /// + /// + /// + /// + /// + public static bool HasElementClass(VisualElement element, string class_name) { + if (element == null) { + return false; + } + + return element.ClassListContains(class_name); + } + + /// + /// + /// + /// + /// + public static string GetRepoUrl(PackageInfo package_info) { + return GetRepoUrl(package_info != null ? package_info.packageId : ""); + } + + /// + /// + /// + /// + /// + public static string GetRepoUrl(string package_id) { + var m = Regex.Match(package_id, "^[^@]+@([^#]+)(#.+)?$"); + if (m.Success) { + var repo_url = m.Groups[1].Value; + repo_url = Regex.Replace(repo_url, "(git:)?git@([^:]+):", "https://$2/"); + //repoUrl = repoUrl.Replace ("github.com:", "https://github.com/"); + repo_url = repo_url.Replace("ssh://", "https://"); + repo_url = repo_url.Replace("git@", ""); + repo_url = Regex.Replace(repo_url, "\\.git$", ""); + + return repo_url; + } + + return ""; + } + + /// + /// + /// + /// + /// + public static string GetRepoId(PackageInfo package_info) { + return GetRepoId(package_info != null ? package_info.packageId : ""); + } + + /// + /// + /// + /// + /// + public static string GetRepoId(string package_id) { + var m = Regex.Match(GetRepoUrl(package_id), "/([^/]+/[^/]+)$"); + if (m.Success) { + return m.Groups[1].Value; + } + + return ""; + } + + /// + /// + /// + /// + /// + /// + public static string GetApiRequestUrl(string package_id, string method_path) { + var repo_id = GetRepoId(package_id); + if (package_id.Contains("github.com")) { + return "https://api.github.com/repos/" + repo_id + "/" + method_path; + } + + return ""; + } + + public static AsyncOperation RequestTags(string package_id, List result) { + return Request(GetApiRequestUrl(package_id, "tags"), x => FillRefNamesFromResponse(x, result)); + } + + public static AsyncOperation RequestBranches(string package_id, List result) { + return Request(GetApiRequestUrl(package_id, "branches"), x => FillRefNamesFromResponse(x, result)); + } + + public static void FillRefNamesFromResponse(string res, List result) { + result.Clear(); + result.AddRange(Regex.Matches(res, "\\s*\"name\": \"(.+)\",").Cast() + .Select(x => x.Groups[1].Value)); + } + + public static string GetRevisionHash(PackageInfo package_info) { + return GetRevisionHash(package_info != null ? package_info.resolvedPath : ""); + } + + public static string GetRevisionHash(string resolved_path) { + var m = Regex.Match(resolved_path, "@([^@]+)$"); + if (m.Success) { + return m.Groups[1].Value; + } + + return ""; + } + + public static string GetFileUrl(PackageInfo package_info, string file_path) { + return package_info != null + ? GetFileUrl(package_info.packageId, package_info.resolvedPath, file_path) + : ""; + } + + public static string GetFileUrl(string package_id, string resolved_path, string file_path) { + if (string.IsNullOrEmpty(package_id) + || string.IsNullOrEmpty(resolved_path) + || string.IsNullOrEmpty(file_path)) { + return ""; + } + + var repo_url = GetRepoUrl(package_id); + var hash = GetRevisionHash(resolved_path); + var blob = "blob"; + + return $"{repo_url}/{blob}/{hash}/{file_path}"; + } + + public static string GetSpecificPackageId(string package_id, string tag) { + if (string.IsNullOrEmpty(package_id)) { + return ""; + } + + var m = Regex.Match(package_id, "^([^#]+)(#.+)?$"); + if (m.Success) { + var id = m.Groups[1].Value; + return string.IsNullOrEmpty(tag) ? id : id + "#" + tag; + } + + return ""; + } + + public static string GetRequestCache(string url) { + var path = GetRequestCachePath(url); + return File.Exists(path) && (DateTime.UtcNow - File.GetLastWriteTimeUtc(path)).TotalSeconds < 300 + ? File.ReadAllText(path) + : null; + } + + public static string GetRequestCachePath(string url) { return "Temp/RequestCache_" + url.GetHashCode(); } + + public static AsyncOperation Request(string url, Action on_success) { + if (string.IsNullOrEmpty(url)) { + return null; + } + + var cache = GetRequestCache(url); + if (!string.IsNullOrEmpty(cache)) { + on_success(cache); + return null; + } + + var www = UnityWebRequest.Get(url); + var op = www.SendWebRequest(); + op.completed += _ => { + if (www.isHttpError || www.isHttpError || !string.IsNullOrEmpty(www.error)) { + Debug.LogError(www.error); + www.Dispose(); + return; + } + + var path = GetRequestCachePath(url); + File.WriteAllText(path, www.downloadHandler.text); + on_success(www.downloadHandler.text); + www.Dispose(); + }; + return op; + } + } +} +#endif diff --git a/Editor/Utilities/Git/GithubExtension.cs.meta b/Editor/Utilities/Git/GithubExtension.cs.meta new file mode 100644 index 000000000..bb1df4d15 --- /dev/null +++ b/Editor/Utilities/Git/GithubExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c059ee11956de51d2b7041090abc6f9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 501b2acbfbc394d6f84c42932b9b29e5, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Utilities/Git/GithubExtensionUserInterface.cs b/Editor/Utilities/Git/GithubExtensionUserInterface.cs new file mode 100644 index 000000000..d793894d3 --- /dev/null +++ b/Editor/Utilities/Git/GithubExtensionUserInterface.cs @@ -0,0 +1,246 @@ + +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.PackageManager; +using UnityEditor.PackageManager.UI; +using UnityEngine; +using PackageInfo = UnityEditor.PackageManager.PackageInfo; +#if UNITY_2019_1_OR_NEWER && UNITY_EDITOR && USE_GITHUB_EXTENSION +using System.Linq; +using UnityEngine.UIElements; +//using UnityEditor.PackageManager.UI; + +namespace droid.Editor.Utilities.Git { + /// + /// + /// + [InitializeOnLoad] + class GithubExtensionUserInterface : VisualElement { + //IPackageManagerExtension { + //################################ + // Constant or Static Members. + //################################ + + static readonly string _resources_path = + NeodroidSettings.Current.NeodroidImportLocationProp + "Editor/Resources/"; + + static readonly string _template_path = _resources_path + "GithubExtension.uxml"; + static readonly string _style_path = _resources_path + "GithubExtension.uss"; + + static GithubExtensionUserInterface() { + //PackageManagerExtensions.RegisterExtension(new GithubExtensionUserInterface()); + } + + //################################ + // Public Members. + //################################ + /// + /// Creates the extension UI visual element. + /// + /// A visual element that represents the UI or null if none + public VisualElement CreateExtensionUi() { + this._initialized = false; + return this; + } + + /// + /// Called by the Package Manager UI when a package is added or updated. + /// + /// The package information + public void OnPackageAddedOrUpdated(PackageInfo package_info) { this._detail_controls?.SetEnabled(true); } + + /// + /// Called by the Package Manager UI when a package is removed. + /// + /// The package information + public void OnPackageRemoved(PackageInfo package_info) { this._detail_controls?.SetEnabled(true); } + + /// + /// Called by the Package Manager UI when the package selection changed. + /// + /// The newly selected package information (can be null) + public void OnPackageSelectionChange(PackageInfo package_info) { + this.InitializeUi(); + if (!this._initialized || package_info == null || this._package_info == package_info) { + return; + } + + this._package_info = package_info; + + var is_git = package_info.source == PackageSource.Git; + + GithubExtension.SetElementDisplay(this._git_detail_actoins, is_git); + GithubExtension.SetElementDisplay(this._original_detail_actions, !is_git); + GithubExtension.SetElementDisplay(this._detail_controls.Q("", "popupField"), !is_git); + GithubExtension.SetElementDisplay(this._update_button, is_git); + GithubExtension.SetElementDisplay(this._version_popup, is_git); + + if (is_git) { + GithubExtension.RequestTags(this._package_info.packageId, this._tags); + GithubExtension.RequestBranches(this._package_info.packageId, this._branches); + + this.SetVersion(this._package_info.version); + + var combo_element = this._detail_controls.Q("updateCombo"); + var remove_element = this._detail_controls.Q("remove"); + EditorApplication.delayCall += () => { + if (combo_element != null) { + GithubExtension.SetElementDisplay(combo_element, true); + } + + if (remove_element != null) { + GithubExtension.SetElementDisplay(remove_element, true); + remove_element.SetEnabled(true); + } + }; + } + + GithubExtension.SetElementClass(this.HostingIcon, "github", true); + GithubExtension.SetElementClass(this.HostingIcon, "dark", EditorGUIUtility.isProSkin); + } + + //################################ + // Private Members. + //################################ + bool _initialized; + PackageInfo _package_info; + Button HostingIcon { get { return this._git_detail_actoins.Q - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; - 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. - , - and - with - . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", - "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, - -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a - property, null for a - of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to - . - - - - - Floating point numbers are parsed to - . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the - and - settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and - can be provided; otherwise, - false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, when - returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, when - returns false). - - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the - described by - . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the - that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the - . - - - The of the - . - - - - - The parameter list to use when constructing the - described by - . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the - that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is - false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default - . - Default settings are automatically used by serialization methods on - , - and and - on - . - To serialize without using any default settings create a - with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the - specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the - specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of - . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of - . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using - . - - The object to serialize. - - The used to serialize the object. - If this is null, default serialization settings will be used. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and - . - - The object to serialize. - - The used to serialize the object. - If this is null, default serialization settings will be used. - - - The type of the value being serialized. - This parameter is used when - is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and - . - - The object to serialize. - Indicates how the output should be formatted. - - The used to serialize the object. - If this is null, default serialization settings will be used. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and - . - - The object to serialize. - Indicates how the output should be formatted. - - The used to serialize the object. - If this is null, default serialization settings will be used. - - - The type of the value being serialized. - This parameter is used when - is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using - . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using - . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of - . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using - . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of - . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using - . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using - . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if - is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if - is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - - true if this can read JSON; otherwise, - false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, - false. - - - - - Converts an object to and from JSON. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - - The existing value of object being read. If there is no existing value then - null will be used. - - The existing value has a value. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Instructs the to use the specified - when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the - described by - . - If null, the default constructor is used. - - - - - Initializes a new instance of the - class. - - Type of the . - - - - Initializes a new instance of the - class. - - Type of the . - - Parameter list to use when constructing the - . Can be null. - - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or - null if no inner exception is specified. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - The parameter is - null. - - - The class name is - null or is zero (0). - - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is - true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is - true. - - - - - Initializes a new instance of the - class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets how the object's properties with null values are handled during serialization and deserialization. - - How the object's properties with null values are handled during serialization and deserialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the used when serializing the property's collection items. - - The collection's items . - - - - The parameter list to use when constructing the - described by - . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the - that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the - . - - - The of the - . - - - - - The parameter list to use when constructing the - described by - . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the - that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Asynchronously reads the next JSON token from the source. - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns true if the next token was read successfully; false if there are no more tokens to read. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously skips the children of the current token. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously reads the next JSON token from the source as a []. - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the []. This result will be null at the end of an array. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of - . This result will be null at the end of an array. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously reads the next JSON token from the source as a . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the . This result will be null at the end of an array. - - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is - true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a - . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to - . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of - . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - - A [] or null if the next JSON token is null. This method will return - null at the end of an array. - - - - - Reads the next JSON token from the source as a of - . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the source as a of - . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the source as a of - . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the source as a of - . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the source as a of - . - - - A of . This method will return - null at the end of an array. - - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - - true to release both managed and unmanaged resources; false - to release only unmanaged resources. - - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or - null if no inner exception is specified. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - The parameter is - null. - - - The class name is - null or is zero (0). - - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - - The exception that is the cause of the current exception, or - null if no inner exception is specified. - - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the - class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or - null if no inner exception is specified. - - - - - Initializes a new instance of the - class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - The parameter is - null. - - - The class name is - null or is zero (0). - - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - The default value is . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - - when deserializing with a value other than - . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is - . - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - The default value is . - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - The default value is . - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - The default value is . - - - - - Gets or sets how null values are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how default values are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how objects are created during deserialization. - The default value is . - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - The default value is . - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - The default value is . - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - The default value is . - - - - - Gets or sets how dates are written to JSON text. - The default value is . - - - - - Gets or sets how time zones are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and - "2012-03-21T05:40Z", are parsed when reading JSON. - The default value is . - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - The default value is . - - - - - Gets or sets how special floating point numbers, e.g. , - and - , - are written as JSON text. - The default value is . - - - - - Gets or sets how strings are escaped when writing JSON text. - The default value is . - - - - - Gets or sets how and - values are formatted when writing JSON text, - and the expected date format when reading JSON text. - The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". - - - - - Gets or sets the culture used when reading JSON. - The default value is . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a - . - A null value means there is no maximum. - The default value is null. - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - The default value is false. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, - false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified - . - The will not use default settings - from . - - - The settings to be applied to the - . - - - A new instance using the specified - . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified - . - The will use default settings - from as well as the specified - . - - - The settings to be applied to the - . - - - A new instance using the specified - . - The will use default settings - from as well as the specified - . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified - . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when - is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when - is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - The default value is . - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - The default value is . - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - The default value is . - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - The default value is . - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - The default value is . - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - The default value is . - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - The default value is . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - - when deserializing with a value other than - . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - The default value is . - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is - . - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - The default value is . - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the - used by the serializer when resolving references. - - - A function that creates the - used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the - used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and - values are formatted when writing JSON text, - and the expected date format when reading JSON text. - The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a - . - A null value means there is no maximum. - The default value is null. - - - - - Indicates how JSON text output is formatted. - The default value is . - - - - - Gets or sets how dates are written to JSON text. - The default value is . - - - - - Gets or sets how time zones are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and - "2012-03-21T05:40Z", are parsed when reading JSON. - The default value is . - - - - - Gets or sets how special floating point numbers, e.g. , - and - , - are written as JSON. - The default value is . - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - The default value is . - - - - - Gets or sets how strings are escaped when writing JSON text. - The default value is . - - - - - Gets or sets the culture used when reading JSON. - The default value is . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - The default value is false. - - - true if there will be a check for additional content after deserializing an object; otherwise, - false. - - - - - Initializes a new instance of the - class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Asynchronously reads the next JSON token from the source. - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns true if the next token was read successfully; false if there are no more tokens to read. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously reads the next JSON token from the source as a []. - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the []. This result will be null at the end of an array. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of - . This result will be null at the end of an array. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously reads the next JSON token from the source as a - of . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the of . This result will be - null at the end of an array. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously reads the next JSON token from the source as a . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous read. The - - property returns the . This result will be null at the end of an array. - - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Initializes a new instance of the class with the specified - . - - The containing the JSON data to read. - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a - of . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the underlying as a - of . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the underlying as a - . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a - []. - - - A [] or null if the next JSON token is null. This method will return - null at the end of an array. - - - - - Reads the next JSON token from the underlying as a - of . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the underlying as a - of . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the underlying as a - of . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the underlying as a - of . - - - A of . This method will return - null at the end of an array. - - - - - Changes the reader's state to . - If is set to true, the underlying - is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and - can be provided; otherwise, - false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, - returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, - returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the JSON value delimiter. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the specified end token. - - The end token to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the end of the current JSON object or array. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes indent characters. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes an indent space. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a null value. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the beginning of a JSON array. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the beginning of a JSON object. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes an undefined value. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the given white space. - - The string of white space characters. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a [] value. - - The [] value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the end of an array. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the end of a constructor. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes the end of a JSON object. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when - is set to - . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when - is set to - . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified - . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying - . - - - - - Closes this writer. - If is set to true, the underlying - is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides - validation. - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this - . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying - is also closed. - - - - - Reads the next JSON token from the underlying as a - of . - - A of . - - - - Reads the next JSON token from the underlying as a - []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a - of . - - A of . - - - - Reads the next JSON token from the underlying as a - of . - - A of . - - - - Reads the next JSON token from the underlying as a - of . - - A of . - - - - Reads the next JSON token from the underlying as a - . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a - of . - - - A of . This method will return - null at the end of an array. - - - - - Reads the next JSON token from the underlying as a - of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the specified end token. - - The end token to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes indent characters. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the JSON value delimiter. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes an indent space. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the end of the current JSON object or array. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the end of an array. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the end of a constructor. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the end of a JSON object. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a null value. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the beginning of a JSON array. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the beginning of a JSON object. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the current token. - - The to read the token from. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the token and its value. - - The to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the - property name for - . - null can be passed to the method for tokens that don't have a value, e.g. - . - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a [] value. - - The [] value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - The of value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a value. - - The value to write. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes a of - value. - - - The of - value to write. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes an undefined value. - - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously writes the given white space. - - The string of white space characters. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Asynchronously ets the state of the . - - The being written. - The value being written. - - The token to monitor for cancellation requests. The default value is - . - - A that represents the asynchronous operation. - - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is - true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is - true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and - , - are written to JSON text. - - - - - Gets or sets how and - values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to - . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the - property name for - . - null can be passed to the method for tokens that don't have a value, e.g. - . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - - The of - value to write. - - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - - true to release both managed and unmanaged resources; false - to release only unmanaged resources. - - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or - null if no inner exception is specified. - - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - The parameter is - null. - - - The class name is - null or is zero (0). - - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - - The exception that is the cause of the current exception, or - null if no inner exception is specified. - - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type - . - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - - The type of the objects in source, constrained to - . - - - An of - that contains the source collection. - - - An of - that contains the ancestors of every token in the source collection. - - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - - The type of the objects in source, constrained to - . - - - An of - that contains the source collection. - - - An of - that contains every token in the source collection, the ancestors of every token in the source collection. - - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - - The type of the objects in source, constrained to - . - - - An of - that contains the source collection. - - - An of - that contains the descendants of every token in the source collection. - - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - - The type of the objects in source, constrained to - . - - - An of - that contains the source collection. - - - An of - that contains every token in the source collection, and the descendants of every token in the source collection. - - - - - Returns a collection of child properties of every object in the source collection. - - - An of - that contains the source collection. - - - An of - that contains the properties of every object in the source collection. - - - - - Returns a collection of child values of every object in the source collection with the given key. - - - An of - that contains the source collection. - - The token key. - - An of - that contains the values of every token in the source collection with the given key. - - - - - Returns a collection of child values of every object in the source collection. - - - An of - that contains the source collection. - - - An of - that contains the values of every token in the source collection. - - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - - An of - that contains the source collection. - - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - - An of - that contains the source collection. - - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - - A cast as a - of - . - - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - - A cast as a - of - . - - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - - An of - that contains the source collection. - - - An of - that contains the values of every token in the source collection. - - - - - Returns a collection of converted child tokens of every array in the source collection. - - - An of - that contains the source collection. - - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - - An of - that contains the source collection. - - The input typed as . - - - - Returns the input typed as . - - The source collection type. - - An of - that contains the source collection. - - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of - with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a - . - - - A that will be read for the content of the - . - If this is null, default load settings will be used. - - - The token to monitor for cancellation requests. The default value is - . - - - A representing the asynchronous load. The - property contains the JSON that was read from the specified - . - - - - - Asynchronously loads a from a - . - - - A that will be read for the content of the - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - The token to monitor for cancellation requests. The default value is - . - - - A representing the asynchronous load. The - property contains the JSON that was read from the specified - . - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another - object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a - . - - - A that will be read for the content of the - . - - - A that contains the JSON that was read from the specified - . - - - - - Loads an from a - . - - - A that will be read for the content of the - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - A that contains the JSON that was read from the specified - . - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - - The used to load the JSON. - If this is null, default load settings will be used. - - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - - The object that will be used to create - . - - A with the values of the specified object. - - - - Creates a from an object. - - - The object that will be used to create - . - - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the - . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the - . - - - - - Returns an enumerator that iterates through the collection. - - - A of - that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the - ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - - true if the is read-only; otherwise, - false. - - - - - Removes the first occurrence of a specific object from the - . - - The object to remove from the . - - true if was successfully removed from the - ; otherwise, false. This method also returns - false if is not found in the original - . - - - - - Represents a JSON constructor. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a - . - - - A that will be read for the content of the - . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous load. The - - property returns a that contains the JSON that was read from the specified - . - - - - - Asynchronously loads a from a - . - - - A that will be read for the content of the - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous load. The - - property returns a that contains the JSON that was read from the specified - . - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another - object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a - . - - - A that will be read for the content of the - . - - - A that contains the JSON that was read from the specified - . - - - - - Loads a from a - . - - - A that will be read for the content of the - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - A that contains the JSON that was read from the specified - . - - - - - Represents a token that can contain other tokens. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - - The - instance containing the event data. - - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the - . - - - - - Get the last child token of this token. - - - A containing the last child token of the - . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of - containing the child tokens of this - , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this - , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - - An of - containing the descendant tokens of the - . - - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - - An of - containing this token, and all the descendant tokens of the - . - - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this - . - - The content to be added. - - - - Creates a that can be used to add tokens to the - . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using - . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of - with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, - false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, - false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a - . - - - A that will be read for the content of the - . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous load. The - - property returns a that contains the JSON that was read from the specified - . - - - - - Asynchronously loads a from a - . - - - A that will be read for the content of the - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous load. The - - property returns a that contains the JSON that was read from the specified - . - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another - object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of - of this object's properties. - - - An of - of this object's properties. - - - - - Gets a the specified name. - - The property name. - - A with the specified name or null - . - - - - - Gets a of - of this object's property values. - - - A of - of this object's property values. - - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a - . - - - A that will be read for the content of the - . - - - A that contains the JSON that was read from the specified - . - - - is not valid JSON. - - - - - Loads a from a - . - - - A that will be read for the content of the - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - A that contains the JSON that was read from the specified - . - - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - - The used to load the JSON. - If this is null, default load settings will be used. - - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - - The object that will be used to create - . - - A with the values of the specified object. - - - - Creates a from an object. - - - The object that will be used to create - . - - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Determines whether the JSON object has the specified property name. - - Name of the property. - true if the JSON object has the specified property name; otherwise, false. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a - . - - - A that will be read for the content of the - . - - - The token to monitor for cancellation requests. The default value is - . - - - A representing the asynchronous creation. The - - property returns a that contains the JSON that was read from the specified - . - - - - - Asynchronously loads a from a - . - - - A that will be read for the content of the - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - The token to monitor for cancellation requests. The default value is - . - - - A representing the asynchronous creation. The - - property returns a that contains the JSON that was read from the specified - . - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another - object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a - . - - - A that will be read for the content of the - . - - - A that contains the JSON that was read from the specified - . - - - - - Loads a from a - . - - - A that will be read for the content of the - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - A that contains the JSON that was read from the specified - . - - - - - Represents a view of a . - - - - - Initializes a new instance of the - class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. - When the or - - methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Asynchronously creates an instance of with the content of the reader's current token. - - The reader. - - The token to monitor for cancellation requests. The default value is - . - - - A representing the asynchronous creation. The - - property returns an instance of with the content of the reader's current token. - - - - - Initializes a new instance of the class from another - object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the - class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - - The JSON line info handling. - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Represents an abstract JSON token. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Writes this token to a asynchronously. - - A into which this method will write. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously creates a from a - . - - - An positioned at the token to read into this - . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous creation. The - property returns a - that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a - . - - - An positioned at the token to read into this - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous creation. The - property returns a - that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a - . - - - A positioned at the token to read into this - . - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous creation. The - - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a - . - - - A positioned at the token to read into this - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - The token to monitor for cancellation requests. The default value is - . - - - A that represents the asynchronous creation. The - - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this - . - - - The root of this - . - - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - - A containing the first child token of the - . - - - - - Get the last child token of this token. - - - A containing the last child token of the - . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of - containing the child tokens of this - , in document order. - - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - - A containing the child tokens of this - , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this - , in document order. - - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to - . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to - . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of - to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - - The object that will be used to create - . - - A with the value of the specified object. - - - - Creates a from an object using the specified - . - - - The object that will be used to create - . - - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the - . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the - . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the - using the specified - . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the - using the specified - . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a - . - - - A positioned at the token to read into this - . - - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a - . - - - An positioned at the token to read into this - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - - The used to load the JSON. - If this is null, default load settings will be used. - - A populated from the string that contains JSON. - - - - Creates a from a - . - - - A positioned at the token to read into this - . - - - The used to load the JSON. - If this is null, default load settings will be used. - - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a - . - - - A positioned at the token to read into this - . - - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - - An of - that contains the selected elements. - - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - - An of - that contains the selected elements. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this - . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this - . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this - . - - The type of the annotations to retrieve. - - An that contains the annotations for this - . - - - - - Gets a collection of annotations of the specified type for this - . - - The of the annotations to retrieve. - - An of - that contains the annotations that match the specified type for this - . - - - - - Removes the annotations of the specified type from this - . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this - . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - - The type of is a reference type and - is null. - - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given - . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying - . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying - is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Initializes a new instance of the class from another - object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, - false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current - . - - - The to compare with the current - . - - - true if the specified is equal to the current - ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the - . - - - - - All public members are serialized by default. Members can be excluded using - or - . - This is the default member serialization mode. - - - - - Only members marked with or - are serialized. - This member serialization mode can also be set by marking the class with - . - - - - - All public and private fields are serialized. Members can be excluded using - or - . - This member serialization mode can also be set by marking the class with - - and setting IgnoreSerializableAttribute on - to false. - - - - - Specifies metadata property handling options for the - . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the - . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the - . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the - . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement - . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the - . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, - false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, - false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the - minimum attribute (). - - - A flag indicating whether the value can not equal the number defined by the minimum - attribute (). - - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the - maximum attribute (). - - - A flag indicating whether the value can not equal the number defined by the maximum - attribute (). - - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the - instance at their array position from - . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified - . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified - . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified - . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified - . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current - . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the - class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or - null if no inner exception is specified. - - - - - Initializes a new instance of the - class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - The parameter is - null. - - - The class name is - null or is zero (0). - - - - - - Generates a from a specified - . - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - - The type to generate a - from. - - A generated from the specified type. - - - - Generate a from the specified type. - - - The type to generate a - from. - - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - - The type to generate a - from. - - - Specify whether the generated root - will be nullable. - - A generated from the specified type. - - - - Generate a from the specified type. - - - The type to generate a - from. - - The used to resolve schema references. - - Specify whether the generated root - will be nullable. - - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the - class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the - . - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the - . - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the - . - - - JSON Schema validation has been moved to its own package. See - http://www.newtonsoft.com/jsonschema - for more details. - - - - - - A camel case naming strategy. - - - - - Initializes a new instance of the - class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a - . - - - - - Initializes a new instance of the - class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a - . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the - class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the - class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a - for a given - . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the - interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, - false. - - - - - Gets or sets a value indicating whether to ignore the - attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, - false. - - - - - Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. - - - true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, - false. - - - - - Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. - - - true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, - false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the - class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given - . - - The matching member property. - The constructor parameter. - - A created for the given - . - - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given - . - - - The member's parent - . - - - The member to create a - for. - - - A created for the given - . - - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default - - is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the - class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's - instances. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude - messages and include - , - and - messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the - class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this - is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the - class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the - class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a - for a given - . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the - . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude - messages and include - , - and - messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the - . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override - . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - - true if the creator has a parameter with the collection values; otherwise, - false. - - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Contract details for a used by the - . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the - . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the - . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override - . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - - true if the creator has a parameter with the dictionary values; otherwise, - false. - - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Contract details for a used by the - . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Contract details for a used by the - . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Contract details for a used by the - . - - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Contract details for a used by the - . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets or sets how the object's properties with null values are handled during serialization and deserialization. - - How the object's properties with null values are handled during serialization and deserialization. - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with - . - - - - - Gets or sets the function used to create the object. When set this function will override - . - This function is called with a collection of arguments which are defined by the - - collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Contract details for a used by the - . - - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the - during serialization. - - - The that will get and set the - during serialization. - - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this - is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this - is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this - is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this - has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this - is required. - - - A value indicating whether this - is required. - - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the - class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the - . - - - - - Initializes a new instance of the - class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude - messages and include - , - and - messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the - class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a - , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , - , - or - . - - - - - Initializes a new instance of the - class. - - - The instance to get attributes for. This parameter should be a - , , - or - . - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the - class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the - class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a - . - - - - - Initializes a new instance of the - class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a - . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the - class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the - LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The - Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - - when deserializing with a value other than - . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - - or - - . - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic - . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Helper class for serializing immutable collections. - Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed - https://github.com/JamesNK/Newtonsoft.Json/issues/652 - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// - if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the - in an invalid state. - You may call the method to put the - in the Closed state. - Any other method calls result in an - being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - \ No newline at end of file diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg.meta b/Libaries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg.meta deleted file mode 100644 index 2d68596c2..000000000 --- a/Libaries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f5fe7796c746d434f88a9f3470ed7512 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib.meta b/Libaries/OptimizedPriorityQueue.4.1.1/lib.meta deleted file mode 100644 index 71cb85768..000000000 --- a/Libaries/OptimizedPriorityQueue.4.1.1/lib.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ee8b5f7f7cfb95d42b63765c2c2fe94f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45.meta b/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45.meta deleted file mode 100644 index 7702c3cc2..000000000 --- a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6e53fbf3dbf52134ba1385c20623f6a4 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb.meta b/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb.meta deleted file mode 100644 index db4ec6eb3..000000000 --- a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b962b46089235f14a9e0c372ebb36f02 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Libraries.meta b/Libraries.meta new file mode 100644 index 000000000..65079e41f --- /dev/null +++ b/Libraries.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c974f47f709ddeb10b1e4a7b25132726 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/AsyncIO.0.1.61.meta b/Libraries/AsyncIO.0.1.61.meta similarity index 77% rename from Libaries/AsyncIO.0.1.61.meta rename to Libraries/AsyncIO.0.1.61.meta index 292f25404..b143c5e4e 100644 --- a/Libaries/AsyncIO.0.1.61.meta +++ b/Libraries/AsyncIO.0.1.61.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 439c0718d9fc3a246818f24cefa41444 +guid: 729ec8fe0303cda9ab9e7ea0551bce9f folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Libaries/AsyncIO.0.1.61/.signature.p7s b/Libraries/AsyncIO.0.1.61/.signature.p7s similarity index 100% rename from Libaries/AsyncIO.0.1.61/.signature.p7s rename to Libraries/AsyncIO.0.1.61/.signature.p7s diff --git a/Libaries/AsyncIO.0.1.61/AsyncIO.0.1.61.nupkg b/Libraries/AsyncIO.0.1.61/AsyncIO.0.1.61.nupkg similarity index 100% rename from Libaries/AsyncIO.0.1.61/AsyncIO.0.1.61.nupkg rename to Libraries/AsyncIO.0.1.61/AsyncIO.0.1.61.nupkg diff --git a/Libraries/AsyncIO.0.1.61/AsyncIO.0.1.61.nupkg.meta b/Libraries/AsyncIO.0.1.61/AsyncIO.0.1.61.nupkg.meta new file mode 100644 index 000000000..d861ed4a3 --- /dev/null +++ b/Libraries/AsyncIO.0.1.61/AsyncIO.0.1.61.nupkg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e9ab1a17a29578a09b9ca1f3611b0e3a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/AsyncIO.0.1.61/lib.meta b/Libraries/AsyncIO.0.1.61/lib.meta new file mode 100644 index 000000000..22854b3eb --- /dev/null +++ b/Libraries/AsyncIO.0.1.61/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eba99efd066c79feaad892608f4e7e0a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/AsyncIO.0.1.61/lib/net40.meta b/Libraries/AsyncIO.0.1.61/lib/net40.meta new file mode 100644 index 000000000..01228ceab --- /dev/null +++ b/Libraries/AsyncIO.0.1.61/lib/net40.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 036a8433ff2cdb26f9357b82592b8e7b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll b/Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll similarity index 100% rename from Libaries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll rename to Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll diff --git a/Libaries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll.meta b/Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll.meta similarity index 93% rename from Libaries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll.meta rename to Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll.meta index 659e29845..977e1ef68 100644 --- a/Libaries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll.meta +++ b/Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5b2c6c6f2f9dfca4b9556607225c64b5 +guid: e7bf7e1c78371cd4b8cfe7fdba180fd2 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Libaries/AsyncIO.0.1.61/lib/net40/AsyncIO.pdb b/Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.pdb similarity index 100% rename from Libaries/AsyncIO.0.1.61/lib/net40/AsyncIO.pdb rename to Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.pdb diff --git a/Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.pdb.meta b/Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.pdb.meta new file mode 100644 index 000000000..d91e59e18 --- /dev/null +++ b/Libraries/AsyncIO.0.1.61/lib/net40/AsyncIO.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 063b233dacfb9259081999db1c2adc41 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/Neodroid-FlatBuffers.1.0.0.meta b/Libraries/Neodroid-FlatBuffers.1.0.0.meta similarity index 77% rename from Libaries/Neodroid-FlatBuffers.1.0.0.meta rename to Libraries/Neodroid-FlatBuffers.1.0.0.meta index cb2077c99..f5f95c632 100644 --- a/Libaries/Neodroid-FlatBuffers.1.0.0.meta +++ b/Libraries/Neodroid-FlatBuffers.1.0.0.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 48c7025dea804436c8d0cf57be1b63be +guid: b8ab2225ae88d2a8eb91d4bfc377fe28 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Libaries/Neodroid-FlatBuffers.1.0.0/Neodroid-FlatBuffers.1.0.0.nupkg b/Libraries/Neodroid-FlatBuffers.1.0.0/Neodroid-FlatBuffers.1.0.0.nupkg similarity index 100% rename from Libaries/Neodroid-FlatBuffers.1.0.0/Neodroid-FlatBuffers.1.0.0.nupkg rename to Libraries/Neodroid-FlatBuffers.1.0.0/Neodroid-FlatBuffers.1.0.0.nupkg diff --git a/Libraries/Neodroid-FlatBuffers.1.0.0/Neodroid-FlatBuffers.1.0.0.nupkg.meta b/Libraries/Neodroid-FlatBuffers.1.0.0/Neodroid-FlatBuffers.1.0.0.nupkg.meta new file mode 100644 index 000000000..ba5abfd6d --- /dev/null +++ b/Libraries/Neodroid-FlatBuffers.1.0.0/Neodroid-FlatBuffers.1.0.0.nupkg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8037e55c199d2d32cb0b5c0bf876a694 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/Neodroid-FlatBuffers.1.0.0/lib.meta b/Libraries/Neodroid-FlatBuffers.1.0.0/lib.meta new file mode 100644 index 000000000..e76452795 --- /dev/null +++ b/Libraries/Neodroid-FlatBuffers.1.0.0/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 99b9a9f7aabd13ac086d8e75de594ad4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45.meta b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45.meta new file mode 100644 index 000000000..ac196b6cb --- /dev/null +++ b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3998946eb72f1e2a1bc6ca3b41c8ecad +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.dll b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.dll new file mode 100755 index 000000000..187f87424 --- /dev/null +++ b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b19c61f01764e29e56b67012d2bf0caf0d997473130ee20d2d9e674ce1c7b11 +size 18944 diff --git a/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.dll.meta b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.dll.meta new file mode 100644 index 000000000..76dba7187 --- /dev/null +++ b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 6a2b73aa2277602db97969dbedb9d92c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.pdb b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.pdb new file mode 100755 index 000000000..266226f66 --- /dev/null +++ b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a92a9071e4a605530dd6a8d21ee8fffb017d8d94ba1a8f2c6fa21fe962d9bb4 +size 7520 diff --git a/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.pdb.meta b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.pdb.meta new file mode 100644 index 000000000..d26b2cbe0 --- /dev/null +++ b/Libraries/Neodroid-FlatBuffers.1.0.0/lib/net45/FlatBuffers.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9a3a825d94166743396015d3c892c331 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/NetMQ.4.0.0.175-pre.meta b/Libraries/NetMQ.4.0.0.175-pre.meta similarity index 77% rename from Libaries/NetMQ.4.0.0.175-pre.meta rename to Libraries/NetMQ.4.0.0.175-pre.meta index 904eded19..bc95b0431 100644 --- a/Libaries/NetMQ.4.0.0.175-pre.meta +++ b/Libraries/NetMQ.4.0.0.175-pre.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 276e53aff460de641921bc1340e88f17 +guid: c76f2afdf5abb94f99d4516f1654d2e5 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Libaries/NetMQ.4.0.0.175-pre/NetMQ.4.0.0.175-pre.nupkg b/Libraries/NetMQ.4.0.0.175-pre/NetMQ.4.0.0.175-pre.nupkg similarity index 100% rename from Libaries/NetMQ.4.0.0.175-pre/NetMQ.4.0.0.175-pre.nupkg rename to Libraries/NetMQ.4.0.0.175-pre/NetMQ.4.0.0.175-pre.nupkg diff --git a/Libraries/NetMQ.4.0.0.175-pre/NetMQ.4.0.0.175-pre.nupkg.meta b/Libraries/NetMQ.4.0.0.175-pre/NetMQ.4.0.0.175-pre.nupkg.meta new file mode 100644 index 000000000..3d11d1199 --- /dev/null +++ b/Libraries/NetMQ.4.0.0.175-pre/NetMQ.4.0.0.175-pre.nupkg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ec944f69d00549fb3afb5b3e938e787d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/NetMQ.4.0.0.175-pre/lib.meta b/Libraries/NetMQ.4.0.0.175-pre/lib.meta new file mode 100644 index 000000000..58983e3bc --- /dev/null +++ b/Libraries/NetMQ.4.0.0.175-pre/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e317903ea61400efea7b000b7774e285 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/NetMQ.4.0.0.175-pre/lib/net40.meta b/Libraries/NetMQ.4.0.0.175-pre/lib/net40.meta new file mode 100644 index 000000000..cd51d9b1a --- /dev/null +++ b/Libraries/NetMQ.4.0.0.175-pre/lib/net40.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dcd4600f6b941fc01843ff9b639c0c39 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll similarity index 100% rename from Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll rename to Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll diff --git a/Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll.meta b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll.meta similarity index 93% rename from Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll.meta rename to Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll.meta index 8fbdc2ae7..8570755f9 100644 --- a/Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll.meta +++ b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e67596a133a2de14cbeb55fa9c3b30c0 +guid: 6a69a6154c9d057d394ab47953647520 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.pdb b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.pdb similarity index 100% rename from Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.pdb rename to Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.pdb diff --git a/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.pdb.meta b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.pdb.meta new file mode 100644 index 000000000..53c8ed64f --- /dev/null +++ b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f7f3d8703b85246549107ec939a99342 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml similarity index 81% rename from Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml rename to Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml index 208d56910..9f83d5b33 100644 --- a/Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml +++ b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml @@ -1,9675 +1,11101 @@ - - - - - NetMQ - - - - - The IBufferPool interface specifies two methods: Take, and Return. - These provide for taking byte-array data from a common pool, and returning it. - - - - - Take byte-array storage from the buffer-pool. - - the number of bytes to take - a byte-array that comes from the buffer-pool - - - - Return the given byte-array buffer to the common buffer-pool. - - the byte-array to return to the buffer-pool - - - - This implementation of uses WCF's - - class to manage a pool of buffers. - - - - - Create a new BufferManagerBufferPool with the specified maximum buffer pool size - and a maximum size for each individual buffer in the pool. - - the maximum size to allow for the buffer pool - the maximum size to allow for each individual buffer in the pool - There was insufficient memory to create the requested buffer pool. - Either maxBufferPoolSize or maxBufferSize was less than zero. - - - - Return a byte-array buffer of at least the specified size from the pool. - - the size in bytes of the requested buffer - a byte-array that is the requested size - size cannot be less than zero - - - - Return the given buffer to this manager pool. - - a reference to the buffer being returned - the Length of buffer does not match the pool's buffer length property - the buffer reference cannot be null - - - - Release the buffers currently cached in this manager. - - - - - Release the buffers currently cached in this manager. - - true if managed resources are to be disposed - - - - This simple implementation of does no buffer pooling. Instead, it uses regular - .NET memory management to allocate a buffer each time - is called. Unused buffers - passed to are simply left for the .NET garbage collector to deal with. - - - - - Return a newly-allocated byte-array buffer of at least the specified size from the pool. - - the size in bytes of the requested buffer - a byte-array that is the requested size - there is not sufficient memory to allocate the requested memory - - - - The expectation of an actual buffer-manager is that this method returns the given buffer to the manager pool. - This particular implementation does nothing. - - a reference to the buffer being returned - - - - The expectation of an actual buffer-manager is that the Dispose method will release the buffers currently cached in this manager. - This particular implementation does nothing. - - - - - Release the buffers currently cached in this manager (however in this case, this does nothing). - - true if managed resources are to be disposed - - - - Contains a singleton instance of used for allocating byte arrays - for instances with type . - - - Sending and receiving message frames requires the use of buffers (byte arrays), which are expensive to create and destroy. - You can use the BufferPool class to pool buffers for reuse, reducing allocation, deallocation and garbage collection. - - The default implementation is . - - - Call - - to replace it with a . - - - Call to reinstate the default - . - - - Call to substitute a custom implementation for the allocation and - deallocation of message buffers. - - - - - - - Set BufferPool to use the (which it does by default). - - - - - Set BufferPool to use the to manage the buffer-pool. - - the maximum size to allow for the buffer pool - the maximum size to allow for each individual buffer in the pool - There was insufficient memory to create the requested buffer pool. - Either maxBufferPoolSize or maxBufferSize was less than zero. - - - - Set BufferPool to use the specified IBufferPool implementation to manage the buffer-pool. - - the implementation of to use - - - - Allocate a buffer of at least bytes from the current - . - - The minimum size required, in bytes. - A byte array having at least bytes. - - - - Returns to the . - - The byte array to be returned to the pool. - - - - Class Address contains a specification of a protocol and an MqEndPoint. - - - - - The string-literal "inproc" - - this denotes in-process, or inter-thread, communication. - - - - - The string-literal "tcp" - - this denotes TCP communication over the network. - - - - - The string-literal "ipc" - - this denotes inter-process communication, which on NetMQ is exactly the same as TCP. - - - - - The string-literal "pgm" - - this denotes the Pragmatic General Multicast (PGM) reliable multicast protocol. - - - - - The string-literal "epgm" - - this denotes the Encapsulated PGM protocol. - - - - - Interface IZAddress specifies that Resolve and property Address must be implemented. - - - - - Create a new Address instance with the given protocol and text expression of an address. - - the protocol of this Address - as in tcp, ipc, pgm - a text representation of the address - - - - Create a new Address instance based upon the given endpoint, assuming a protocol of tcp. - - the subclass of EndPoint to base this Address upon - - - - Defines a command sent between threads. - - - - - Create a new Command object for the given destination, type, and optional argument. - - a ZObject that denotes the destination for this command - the CommandType of the new command - an Object to comprise the argument for the command (optional) - - - The destination to which the command should be applied. - - - The type of this command. - - - - Get the argument to this command. - - - - - Override of ToString, which returns a string in the form [ command-type, destination ]. - - a string that denotes the command-type and destination - - - - Enumeration of possible types. - - - The value of denotes what action - the command will perform. - - - - - Sent to I/O thread to let it know that it should - terminate itself. - - - - - Sent to I/O object to make it register with its I/O thread - - - - - Sent to socket to let it know about the newly created object. - - - - - Attach the engine to the session. If engine is NULL, it informs - session that the connection has failed. - - - - - Sent from session to socket to establish pipe(s) between them. - Caller must have used inc_seqnum before sending the command. - - - - - Sent by pipe writer to inform dormant pipe reader that there - are messages in the pipe. - - - - - Sent by pipe reader to inform pipe writer how many - messages it has read so far. - - - - - Sent by pipe reader to writer after creating a new inpipe. - The parameter is actually of type pipe_t::upipe_t, however, - its definition is private so we'll have to do with void*. - - - - - Sent by pipe reader to pipe writer to ask it to terminate - its end of the pipe. - - - - - Pipe writer acknowledges pipe_term command. - - - - - Sent by I/O object to the socket to request the shutdown of - the I/O object. - - - - - Sent by socket to I/O object to start its shutdown. - - - - - Sent by I/O object to the socket to acknowledge it has - shut down. - - - - - Transfers the ownership of the closed socket - to the reaper thread. - - - - - Closed socket notifies the reaper that it's already deallocated. - - - - - Sent by reaper thread to the term thread when all the sockets - have successfully been deallocated. - - - - - Send to reaper to stop the reaper immediatly - - - - - This class exists to hold constant values that comprise the internal configuration of the messaging system. - - - - - Number of new messages in message pipe needed to trigger new memory - allocation. Setting this parameter to 256 decreases the impact of - memory allocation by approximately 99.6% - - - - - Commands in pipe per allocation event. - - - - - Determines how often does socket poll for new commands when it - still has unprocessed messages to handle. Thus, if it is set to 100, - socket will process 100 inbound messages before doing the poll. - If there are no unprocessed messages available, poll is done - immediately. Decreasing the value trades overall latency for more - real-time behaviour (less latency peaks). - - - - - Maximal batching size for engines with receiving functionality. - So, if there are 10 messages that fit into the batch size, all of - them may be read by a single 'recv' system call, thus avoiding - unnecessary network stack traversals. - - - - - Maximal batching size for engines with sending functionality. - So, if there are 10 messages that fit into the batch size, all of - them may be written by a single 'send' system call, thus avoiding - unnecessary network stack traversals. - - - - - Maximal delta between high and low watermark. - - - - - Maximum number of events the I/O thread can process in one go. - - - - - Maximal delay to process command in API thread (in CPU ticks). - 3,000,000 ticks equals to 1 - 2 milliseconds on current CPUs. - Note that delay is only applied when there is continuous stream of - messages to process. If not so, commands are processed immediately. - - - - - Low-precision clock precision in CPU ticks. 1ms. Value of 1000000 - should be OK for CPU frequencies above 1GHz. If should work - reasonably well for CPU frequencies above 500MHz. For lower CPU - frequencies you may consider lowering this value to get best - possible latencies. - - - - - Maximum transport data unit size for PGM (TPDU). - - - - - On some OSes the signaler has to be emulated using a TCP - connection. In such cases following port is used. - - - - - Objects of class Ctx are intended to encapsulate all of the global state - associated with the NetMQ library. This contains the sockets, and manages interaction - between them. - - - - - Information associated with inproc endpoint. Note that endpoint options - are registered as well so that the peer can access them without a need - for synchronisation, handshaking or similar. - - - - - Create a new Endpoint with the given socket. - - the socket for this new Endpoint - the Options to assign to this new Endpoint - - - - Get the socket associated with this Endpoint. - - - - - Get the Options of this Endpoint. - - - - - Sockets belonging to this context. We need the list so that - we can notify the sockets when zmq_term() is called. The sockets - will return ETERM then. - - - - - List of unused thread slots. - - - - - If true, zmq_init has been called but no socket has been created - yet. Launching of I/O threads is delayed. - - - - - If true, zmq_term was already called. - - - - - This object is for synchronisation of accesses to global slot-related data: - sockets, empty_slots, terminating. It also synchronises - access to zombie sockets as such (as opposed to slots) and provides - a memory barrier to ensure that all CPU cores see the same data. - - - - - The reaper thread. - - - - - List of I/O threads. - - - - - Length of the mailbox-array. - - - - - Array of pointers to mailboxes for both application and I/O threads. - - - - - Mailbox for zmq_term thread. - - - - - Dictionary containing the inproc endpoints within this context. - - - - - This object provides synchronisation of access to the list of inproc endpoints. - - - - - The highest socket-id that has been assigned thus far. - - - - - The maximum number of sockets that can be opened at the same time. - - - - - The number of I/O threads to launch. - - - - - This object is used to synchronize access to context options. - - - - - The thread-id for the termination (the equivalent of the zmq_term) thread. - - - - - This is the thread-id to assign to the Reaper (value is 1). - - - - - This function is called when user invokes zmq_term. If there are - no more sockets open it'll cause all the infrastructure to be shut - down. If there are open sockets still, the deallocation happens - after the last one is closed. - - - - - Create and return a new socket of the given type, and initialize this Ctx if this is the first one. - - the type of socket to create - the newly-created socket - Cannot create new socket while terminating. - Maximum number of sockets reached. - The context (Ctx) must not be already terminating. - - - - Destroy the given socket - which means to remove it from the list of active sockets, - and add it to the list of unused sockets to be terminated. - - the socket to destroy - - If this was the last socket, then stop the reaper. - - - - - Returns reaper thread object. - - - - - Send a command to the given destination thread. - - - - - Returns the that is the least busy at the moment. - - Which threads are eligible (0 = all). - The least busy thread, or null if none is available. - - - - Save the given address and Endpoint within our internal list. - This is used for management of inproc endpoints. - - the textual name to give this endpoint - the Endpoint to remember - true if the given address was NOT already registered - - - - Un-register the given address/socket, by removing it from the contained list of endpoints. - - the (string) address denoting the endpoint to unregister - the socket associated with that endpoint - true if the endpoint having this address and socket is found, false otherwise - - - - Remove from the list of endpoints, all endpoints that reference the given socket. - - the socket to remove all references to - - - - Return the EndPoint that has the given address, and increments the seqnum of the associated socket. - - the (string) address to match against the endpoints - the Endpoint that was found - The given address was not found in the list of endpoints. - - By calling this method, the socket associated with that returned EndPoint has it's Seqnum incremented, - in order to prevent it from being de-allocated before a command can be sent to it. - - - - - Class ErrorHelper provides one static method - ToErrorCode, for converting a SocketError to the equivalent ErrorCode. - - - - - Return the ErrorCode that is the closest equivalent to the given SocketError. - - the SocketError to convert from - an ErrorCode that corresponds to the given SocketError - - - - Interface IMsgSink mandates a PushMsg( Msg ) method. - - - - - Deliver a message. Return true if successful; false otherwise. - This function takes ownership of the passed message. - - the message (of type Msg) to deliver - - - - Classes that implement IMsgSource are able to fetch a message, with the method: PullMsg. - - - - - Fetch a message. - If successful - returns true and writes the message instance to the msg argument. - If not successful - return false and write null to the msg argument. - - the Msg to write the fetched message into - true if successful - and writes the message to the msg argument - - - - Simple base class for objects that live in I/O threads. - It makes communication with the poller object easier and - makes defining unneeded event handlers unnecessary. - - - - - Create a new IOObject object and plug it into the given IOThread. - - the IOThread to plug this new IOObject into. - - - - "Plug in" this IOObject to the given IOThread, - ie associate this with the specified IOThread. - - the IOThread for this object to live in - - When migrating an object from one I/O thread to another, first - unplug it, then migrate it, then plug it to the new thread. - - - - - "Un-Plug" this IOObject from its current IOThread, and set its handler to null. - - - When migrating an object from one I/O thread to another, first - unplug it, then migrate it, then plug it to the new thread. - - - - - Add the given socket to the Proactor. - - the AsyncSocket to add - - - - Remove the given socket from the Proactor. - - the AsyncSocket to remove - - - - This method is called when a message receive operation has been completed. This forwards it on to the handler's InCompleted method. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - - - - This method is called when a message Send operation has been completed. This forwards it on to the handler's OutCompleted method. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - - - - This is called when the timer expires. - - an integer used to identify the timer - - - - I/O thread accesses incoming commands via this mailbox. - - - - - I/O multiplexing is performed using a poller object. - - - - - Create a new IOThread object within the given context (Ctx) and thread. - - the Ctx (context) for this thread to live within - the integer thread-id for this new IOThread - - - - Classes that implement IPollEvents provide two methods (InEvent and OutEvent) that are invoked when ready for reading or writing. - - - - - Called by the I/O thread when the file descriptor is ready for reading. - - - - - Called by the I/O thread when the file descriptor is ready for writing. - - - - - This is an ITimerEvent, with InCompleted and OutCompleted callback-methods, - used for implementing a Proactor pattern. - - - - - This is the "Input-Completed" method - called by the I/O-thread when the file descriptor is ready for reading. - - this is set to any socket-error that has occurred - the number of bytes that are now ready to be read - - - - This is the "Output-Completed" method - called by the I/O thread when the file descriptor is ready for writing. - - this is set to any socket-error that has occurred - the number of bytes that are now ready to be written - - - - The ITimerEvent interface mandates a TimerEvent( int id ) method, - that is called with an id-value when the timer expires. - - - - - This is called when the timer expires. - - an integer used to identify the timer - - - - There's only one thread receiving from the mailbox, but there - is arbitrary number of threads sending. Given that ypipe requires - synchronised access on both of its endpoints, we have to synchronize - the sending side. - - - - - The pipe to store actual commands. - - - - - Signaler to pass signals from writer thread to reader thread. - - - - - There's only one thread receiving from the mailbox, but there - is an arbitrary number of threads sending. Given that - requires - synchronised access on both of its endpoints, we have to synchronize - the sending side. - - - - - True if the underlying pipe is active, ie. when we are allowed to - read commands from it. - - - - - Create a new Mailbox with the given name. - - the name to give this new Mailbox - - - - Get the socket-handle contained by the Signaler. - - - - - Send the given Command out across the command-pipe. - - the Command to send - - - - Receive and return a Command from the command-pipe. - - how long to wait for a command (in milliseconds) before returning - - - - - Close the contained Signaler. - - - - - Class Options is essentially a container for socket-related option-settings. - - - - - Create a new Options object with all default values. - - - - - Get or set the I/O-thread affinity. - The default value is 0. - - - - - Maximum backlog for pending connections. - The default value is 100. - - - - - Get or set whether connecting pipes are not attached immediately, meaning a send() - on a socket with only connecting pipes would block. - The default value is false. - - - - - If true, session reads all the pending messages from the pipe and - sends them to the network when socket is closed. - The default value is true. - - - - - If true, socket reads all the messages from the pipe and delivers - them to the user when the peer terminates. - The default value is true. - - - - - Get or set the Endian-ness, which indicates whether the most-significant bits are placed higher or lower in memory. - The default value is Endianness.Big. - - - - - If true, (X)SUB socket should filter the messages. If false (which is the default), it should not. - - - - - Get or set the byte-array that represents the Identity. - The initial value is null. - - - - - Get or set the size of the socket-identity byte-array. - The initial value is 0, until the Identity property is set. - - - - - Get or set whether this allows the use of IPv4 sockets only. - If true (the default), it will not be possible to communicate with IPv6-only hosts. - If false, the socket can connect to and accept connections from both IPv4 and IPv6 hosts. - - - - - Get or set the last socket endpoint resolved URI - The initial value is null. - - - - - Get or set the Linger time, in milliseconds. - The default value is -1; The XSub ctor sets this to 0. - - - - - Get or set the maximum size of message to handle. - The default value is -1, which indicates no limit. - - - - - Sets the time-to-live field in every multicast packet sent. - The default value is 1. - - - - - Get or set the maximum transfer rate [Kb/s]. The default is 100 Kb/s. - - - - - If true, router socket accepts non-zmq tcp connections - The default value is false, except the Stream ctor initialises this to true. - Setting this to true changes RecvIdentity to false. - - - - - If true, the identity message is forwarded to the socket. - The default value is false. - - - - - Get or set the minimum interval between attempts to reconnect, in milliseconds. - The default is 100 ms - - - - - Get or set the maximum interval between attempts to reconnect, in milliseconds. - The default is 0 (unused). - - - - - Get or set the recovery time interval [ms]. The default is 10 seconds. - - - - - SO_SNDBUF and SO_RCVBUF to be passed to underlying transport sockets. - The initial value is 0. - - - - - Get or set the size of the receive-buffer. - The initial value is 0. - - - - - Get or set the high-water marks for message pipes. - The default value is 1000. - - - - - Get or set the high-water mark for message reception. - The default value is 1000. - - - - - The low-water mark for message transmission. - - - - - The low-water mark for message reception. - - - - - Get or set the timeout for send operations for this socket. - The default value is -1, which means no timeout. - - - - - Get or set the ID of the socket. - The default value is 0. - - - - - Get or set the type of socket (ZmqSocketType). - The default value is ZmqSocketType.None. - - - - - TCP keep-alive settings. - Defaults to -1 = do not change socket options - - - - - Get or set the TCP Keep-Alive Count. - The default value is -1. - - - - - Get or set the TCP Keep-Alive interval to use when at idle. - The default value is -1. - - - - - Get or set the TCP Keep-Alive Interval - The default value is -1. - - - - - Disable TIME_WAIT tcp state when client disconnect. - The default value is false. - - - - - Controls the maximum datagram size for PGM. - - - - - Assign the given optionValue to the specified option. - - a ZmqSocketOption that specifies what to set - an Object that is the value to set that option to - The option and optionValue must be valid. - - - - Get the value of the specified option. - - a ZmqSocketOption that specifies what to get - an Object that is the value of that option - A valid option must be specified. - - - - Base class for objects forming a part of ownership hierarchy. - It handles initialisation and destruction of such objects. - - - - - The Options of this Own. - - - - - True if termination was already initiated. If so, we can destroy - the object if there are no more child objects or pending term acks. - - - - - Sequence number of the last command sent to this object. - - - - - Sequence number of the last command processed by this object. - - - - - Socket owning this object. It's responsible for shutting down - this object. - - - - - List of all objects owned by this socket. We are responsible - for deallocating them before we quit. - - - - - Number of events we have to get before we can destroy the object. - - - - - Initializes a new instance of the class that is running on a thread outside of 0MQ infrastructure. - - The parent context. - The thread id. - - Note that the owner is unspecified in the constructor. It'll be assigned later on using - - when the object is plugged in. - - - - - Initializes a new instance of the class that is running within I/O thread. - - The I/O thread. - The options. - - Note that the owner is unspecified in the constructor. It'll be assigned later on using - - when the object is plugged in. - - - - - Eliminate any contained resources that need to have this explicitly done. - - - - - A place to hook in when physical destruction of the object is to be delayed. - Unless overridden, this simply calls Destroy. - - - - - Set the owner of *this* Own object, to be the given owner. - - the Own object to be our new owner - - - - When another owned object wants to send a command to this object it calls this function - to let it know it should not shut down before the command is delivered. - - - This function may be called from a different thread! - - - - - Launch the supplied object and become its owner. - - The object to be launched. - - - - Terminate owned object. - - - - - Process a termination-request for the given Own obj, - removing it from the listed of owned things. - - the Own object to remove and terminate - - - - Add the given Own object to the list of owned things. - - the Own object to add to our list - - If *this* Own is already terminating, then send a request to the given Own obj - to terminate itself. - - - - - Ask owner object to terminate this object. It may take a while actual termination is started. - - - This function should not be called more than once. - - - - - Returns true if the object is in process of termination. - - - - - Send termination requests to all of the owned objects, and then runs the termination process. - - the linger time, in milliseconds - - Termination handler is protected rather than private so that it can be intercepted by the derived class. - This is useful to add custom steps to the beginning of the termination process. - - - - - Add the given number to the termination-acknowledgement count. - - - The methods RegisterTermAcks and are used to wait for arbitrary events before - terminating. Just add the number of events to wait for, and when the event occurs - call - . - When the number of pending termination-acknowledgements reaches zero, this object will be deallocated. - - - - - Decrement the termination-acknowledgement count, and if it reaches zero - then send a termination-ack to the owner. - - - The methods and UnregisterTermAck are used to wait for arbitrary events before - terminating. Just add the number of events to wait for, and when the event occurs - call UnregisterTermAck. - When the number of pending termination-acknowledgements reaches zero, this object will be deallocated. - - - - - Process the first termination-acknowledgement. - Unless this is overridden, it simply calls . - - - - - If terminating, and we've already worked through the Seq-nums that were sent, - then send a termination-ack to the owner (if there is one) and destroy itself. - - - - - A Dealer socket is a SocketBase that is used as the parent-class of the Req socket. - It provides for a pre-fetched Msg, and skips identity-messages. - - - - - A DealerSession is a SessionBase subclass that is contained within the Dealer class. - - - - - Create a new DealerSession (which is just a SessionBase). - - the I/O-thread to associate this with - - - - - - - - Messages are fair-queued from inbound pipes. And load-balanced to - the outbound pipes. - - - - - Have we prefetched a message. - - - - - The Msg that we have pre-fetched. - - - - - Create a new Dealer socket that holds the prefetched message. - - - - - Destroy this Dealer-socket and close out any pre-fetched Msg. - - - - - Register the pipe with this socket. - - the Pipe to attach - not used - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - - - - For a Dealer socket: If there's a pre-fetched message, snatch that. - Otherwise, dump any identity messages and get the first non-identity message, - or return false if there are no messages available. - - a Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - If there's a pre-fetched message, snatch that. - Otherwise, dump any identity messages and get the first non-identity message, - or return false if there are no messages available. - - a Msg to receive the message into - false if there were no messages to receive - - - - If there is a message available and one has not been pre-fetched yet, - preserve that message as our pre-fetched one. - - - - - - Indicate the given pipe as being ready for reading by this socket. - - the Pipe that is now becoming available for reading - - - - Indicate the given pipe as being ready for writing to by this socket. - This gets called by the WriteActivated method - and gets overridden by the different sockets - to provide their own concrete implementation. - - the Pipe that is now becoming available for writing - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Register the pipe with this socket. - - the Pipe to attach - not used - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Indicate the given pipe as being ready for reading by this socket - - however in the case of Pair, this does nothing. - - the Pipe that is now becoming available for reading - - - - Indicate the given pipe as being ready for writing to by this socket, - however in the case of this Pair socket - this does nothing. - This method gets called by the WriteActivated method. - - the Pipe that is now becoming available for writing - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - A Router is a subclass of SocketBase - - - - - An instance of class Outpipe contains a Pipe and a boolean property Active. - - - - - Fair queueing object for inbound pipes. - - - - - Holds the prefetched message. - - - - - Outbound pipes indexed by the peer IDs. - - - - - The pipe we are currently writing to. - - - - - State of the recv operation - - - - - State of the sending operation - - - - - Peer ID are generated. It's a simple increment and wrap-over - algorithm. This value is the next ID to use (if not used already). - - - - - Create a new Router instance with the given parent-Ctx, thread-id, and socket-id. - - the Ctx that will contain this Router - the integer thread-id value - the integer socket-id value - - - - Register the pipe with this socket. - - the Pipe to attach - not used - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Indicate the given pipe as being ready for reading by this socket. - - the Pipe that is now becoming available for reading - - - - Indicate the given pipe as being ready for writing to by this socket. - This gets called by the WriteActivated method. - - the Pipe that is now becoming available for writing - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - The receiving host must be identifiable. - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - This override of the abstract XRecv method, simply throws a NotSupportedException because XRecv is not supported on a Pub socket. - - the Msg to receive the message into - Messages cannot be received from PUB socket - - - - Fair queueing object for inbound pipes. - - - - - Register the pipe with this socket. - - the Pipe to attach - not used - - - - Indicate the given pipe as being ready for reading by this socket. - - the Pipe that is now becoming available for reading - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - Load balancer managing the outbound pipes. - - - - - Register the pipe with this socket. - - the Pipe to attach - not used - - - - Indicate the given pipe as being ready for writing to by this socket. - This gets called by the WriteActivated method. - - the Pipe that is now becoming available for writing - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - - - - If true, we are in process of sending the reply. If false we are - in process of receiving a request. - - - - - If true, we are starting to receive a request. The beginning - of the request is the backtrace stack. - - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - XSend must only be called on Rep when in the state of sending a reply. - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - XRecv must not be called on Rep while in the state of sending a reply. - - - - A Req is a Dealer socket that serves as the Request in a Request/Response pattern. - - - - - If true, request was already sent and reply wasn't received yet or - was received partially. - - - - - If true, we are starting to send/receive a message. The first part - of the message must be empty message part (backtrace stack bottom). - - - - - Create a new Req (Request) socket with the given parent Ctx, thread and socket id. - - the Ctx to contain this socket - an integer thread-id for this socket to execute on - the socket-id for this socket - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - Cannot XSend on a Req while awaiting reply. - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - Req.XRecv expecting send, not receive. - - - ReqSession must be in a valid state when PushMsg is called. - - - - A Router is a subclass of SocketBase - - - - - An instance of class Outpipe contains a Pipe and a boolean property Active. - - - - - Fair queueing object for inbound pipes. - - - - - True if there is a message held in the pre-fetch buffer. - - - - - If true, the receiver got the message part with - the peer's identity. - - - - - Holds the prefetched identity. - - - - - Holds the prefetched message. - - - - - If true, more incoming message parts are expected. - - - - - We keep a set of pipes that have not been identified yet. - - - - - Outbound pipes indexed by the peer IDs. - - - - - The pipe we are currently writing to. - - - - - The pipe we are currently reading from. - - - - - If true, more outgoing message parts are expected. - - - - - Peer ID are generated. It's a simple increment and wrap-over - algorithm. This value is the next ID to use (if not used already). - - - - - If true, report EHOSTUNREACH to the caller instead of silently dropping - the message targeting an unknown peer. - - - - - If true, router socket accepts non-zmq tcp connections - - - - - When enabled new router connections with same identity take over old ones - - - - - Create a new Router instance with the given parent-Ctx, thread-id, and socket-id. - - the Ctx that will contain this Router - the integer thread-id value - the integer socket-id value - - - - Register the pipe with this socket. - - the Pipe to attach - not used - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Indicate the given pipe as being ready for reading by this socket. - - the Pipe that is now becoming available for reading - - - - Indicate the given pipe as being ready for writing to by this socket. - This gets called by the WriteActivated method. - - the Pipe that is now becoming available for writing - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - The receiving host must be identifiable. - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - Fair queueing object for inbound pipes. - - - - - True if there is a message held in the pre-fetch buffer. - - - - - If true, the receiver got the message part with - the peer's identity. - - - - - Holds the prefetched identity. - - - - - Holds the prefetched message. - - - - - Outbound pipes indexed by the peer IDs. - - - - - The pipe we are currently writing to. - - - - - If true, more outgoing message parts are expected. - - - - - Peer ID are generated. It's a simple increment and wrap-over - algorithm. This value is the next ID to use (if not used already). - - - - - Register the pipe with this socket. - - the Pipe to attach - not used - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Indicate the given pipe as being ready for reading by this socket. - - the Pipe that is now becoming available for reading - - - - Indicate the given pipe as being ready for writing to by this socket. - This gets called by the WriteActivated method. - - the Pipe that is now becoming available for writing - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - In Stream.XSend - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - Set the specified option on this socket - which must be either a SubScribe or an Unsubscribe. - - which option to set - the value to set the option to - true if successful - optionValue must be a String or a byte-array. - - - - XSend transmits a given message. The Send method calls this to do the actual sending. - This override of that abstract method simply throws NotSupportedException because XSend is not supported on a Sub socket. - - the message to transmit - XSend not supported on Sub socket - - - - Return false to indicate that XHasOut is not applicable on a Sub socket. - - - - - - Make resize operation on array. - - Type of containing data. - Source array. - New size of array. - If grow/shrink operation should be applied to the end of array. - Resized array. - - - - List of outbound pipes. - - - - - Number of all the pipes to send the next message to. - - - - - Number of active pipes. All the active pipes are located at the - beginning of the pipes array. These are the pipes the messages - can be sent to at the moment. - - - - - Number of pipes eligible for sending messages to. This includes all - the active pipes plus all the pipes that we can in theory send - messages to (the HWM is not yet reached), but sending a message - to them would result in partial message being delivered, ie. message - with initial parts missing. - - - - - True if last we are in the middle of a multipart message. - - - - - Create a new, empty Distribution object. - - - - - Adds the pipe to the distributor object. - - - - - - Mark the pipe as matching. Subsequent call to send_to_matching - will send message also to this pipe. - - - - - - Mark all pipes as non-matching. - - - - - This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe from the distributor. - - the pipe that was terminated - - - - Activates pipe that have previously reached high watermark. - - - - - - Send the message to all the outbound pipes. - - - - - - Send the message to the matching outbound pipes. - - - - - - Put the message to all active pipes. - - - - - Write the message to the pipe. Make the pipe inactive if writing - fails. In such a case false is returned. - - - - - This class manages a set of inbound pipes. On receive it performs fair - queueing so that senders gone berserk won't cause denial of - service for decent senders. - - - - - Inbound pipes. - - - - - Number of active pipes. All the active pipes are located at the - beginning of the pipes array. - - - - - Index of the next bound pipe to read a message from. - - - - - If true, part of a multipart message was already received, but - there are following parts still waiting in the current pipe. - - - - - This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. - - the pipe that was terminated - - - - List of outbound pipes. - - - - - Number of active pipes. All the active pipes are located at the - beginning of the pipes array. - - - - - Points to the last pipe that the most recent message was sent to. - - - - - True if last we are in the middle of a multipart message. - - - - - True if we are dropping current message. - - - - - This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. - - the pipe that was terminated - - - - Multi-trie. Each node in the trie is a set of pointers to pipes. - - - - - Add key to the trie. Returns true if it's a new subscription - rather than a duplicate. - - - - - Remove all subscriptions for a specific peer from the trie. - If there are no subscriptions left on some topics, invoke the - supplied callback function. - - - - - - - - - Remove specific subscription from the trie. Return true is it was - actually removed rather than de-duplicated. - - - - - - - - - - Signal all the matching pipes. - - - - - Add key to the trie. Returns true if this is a new item in the trie - rather than a duplicate. - - - - - - - - - Remove key from the trie. Returns true if the item is actually - removed from the trie. - - - - - - - - - Check whether particular key is in the trie. - - - - - - - - - List of all subscriptions mapped to corresponding pipes. - - - - - Distributor of messages holding the list of outbound pipes. - - - - - If true, send all subscription messages upstream, not just - unique ones. The default is false. - - - - - - The default value is false. - - - - - True if we are in the middle of sending a multipart message. - - - - - True if we are in the middle of receiving a multipart message. - - - - - List of pending (un)subscriptions, ie. those that were already - applied to the trie, but not yet received by the user. - - - - - Register the pipe with this socket. - - the Pipe to attach - if true - subscribe to all data on the pipe - - - - Indicate the given pipe as being ready for reading by this socket. - - the Pipe that is now becoming available for reading - - - - Indicate the given pipe as being ready for writing to by this socket. - This gets called by the WriteActivated method. - - the Pipe that is now becoming available for writing - - - - Set the specified option on this socket. - - which option to set - the value to set the option to - true if successful - optionValue must be a byte-array. - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - An XSubSession is a subclass of SessionBase that provides nothing more. - - - - - Fair queueing object for inbound pipes. - - - - - Object for distributing the subscriptions upstream. - - - - - The repository of subscriptions. - - - - - If true, 'message' contains a matching message to return on the - next recv call. - - - - - If true, part of a multipart message was already received, but - there are following parts still waiting. - - - - - Register the pipe with this socket. - - the Pipe to attach - not used - - - - Indicate the given pipe as being ready for reading by this socket. - - the Pipe that is now becoming available for reading - - - - Indicate the given pipe as being ready for writing to by this socket. - This gets called by the WriteActivated method. - - the Pipe that is now becoming available for writing - - - - This is an override of the abstract method that gets called to signal that the given pipe is to be removed from this socket. - - the Pipe that is being removed - - - - Transmit the given message. The Send method calls this to do the actual sending. - - the message to transmit - true if the message was sent successfully - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - A pipe is a ZObject with .. - - - Note that pipe can be stored in three different arrays. - The array of inbound pipes (1), the array of outbound pipes (2) and - the generic array of pipes to deallocate (3). - - - - - Indicate that the given pipe is now ready for reading. - Pipe calls this on it's sink in response to ProcessActivateRead. - When called upon an instance of SocketBase, this simply calls XReadActivated. - - the pipe to indicate is ready for reading - - - - This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. - - the pipe that was terminated - - - - The underlying pipe for reading from. - - - - - The underlying pipe for writing to. - - - - - This indicates whether this pipe can be read from. - - - - - This indicates whether this pipe be written to. - - - - - High watermark for the outbound pipe. - - - - - Low watermark for the inbound pipe. - - - - - Number of messages read so far. - - - - - Number of messages written so far. - - - - - Last received peer's msgs_read. The actual number in the peer - can be higher at the moment. - - - - - The pipe object on the other side of the pipe-pair. - - - - - Sink to send events to. - - - - - Specifies the state of the pipe endpoint. - - - - Active is common state before any termination begins. - - - Delimited means that delimiter was read from pipe before term command was received. - - - Pending means that term command was already received from the peer but there are still pending messages to read. - - - Terminating means that all pending messages were already read and all we are waiting for is ack from the peer. - - - Terminated means that 'terminate' was explicitly called by the user. - - - Double_terminated means that user called 'terminate' and then we've got term command from the peer as well. - - - - If true, we receive all the pending inbound messages before terminating. - If false, we terminate immediately when the peer asks us to. - - - - - Identity of the writer. Used uniquely by the reader side. - - - - - Create a new Pipe object with the given parent, and inbound and outbound YPipes. - - - Constructor is private as pipe can only be created using - - method. - - - - - Create a pipe pair for bi-directional transfer of messages. - - The parents. - - First HWM is for messages passed from first pipe to the second pipe. - Second HWM is for messages passed from second pipe to the first pipe. - - - First LWM is for messages passed from first pipe to the second pipe. - Second LWM is for messages passed from second pipe to the first pipe. - - - Delay specifies how the pipe behaves when the peer terminates. If true - pipe receives all the pending messages before terminating, otherwise it - terminates straight away. - - A pipe pair for bi-directional transfer of messages. - - - - - uses this function to let us know about the peer pipe object. - - The peer to be assigned. - - - - Specifies the object to send events to. - - The receiver of the events. - - - - Get or set the byte-array that comprises the identity of this Pipe. - - - - - Get or set the byte-array that comprises the routing id of this Pipe. - - - - - Checks if there is at least one message to read in the pipe. - - - Returns true if there is at least one message to read in the pipe; false - otherwise. - - - - - Read a message from the underlying inbound pipe, and write it to the provided Msg argument. - - true if a message is read from the pipe, false if pipe is terminated or no messages are available - - - - Check whether messages can be written to the pipe. If writing - the message would cause high watermark the function returns false. - - true if message can be written to the pipe; false otherwise. - - - - Write a message to the underlying pipe. - - The message to write. - false if the message cannot be written because high watermark was reached. - - - - Remove unfinished parts of the outbound message from the pipe. - - - - - Flush the messages downstream. - - - - - This method is called to assign the specified pipe as a replacement for the outbound pipe that was being used. - - the pipe to use for writing - - A "Hiccup" occurs when an outbound pipe experiences something like a transient disconnect or for whatever other reason - is no longer available for writing to. - - - - - Process the pipe-termination ack. - - - - - Ask pipe to terminate. The termination will happen asynchronously - and user will be notified about actual deallocation by 'terminated' - event. - - - if set to true, the pending messages will be processed - before actual shutdown. - - - - - Compute an appropriate low watermark from the given high-watermark. - - the given high-watermark value to compute it from - predefined low watermark value coming from configuration - the computed low-watermark - - - - Handles the delimiter read from the pipe. - - - - - Temporarily disconnects the inbound message stream and drops - all the messages on the fly. Causes 'hiccuped' event to be generated in the peer. - - - - - Override the ToString method to return a string denoting the type and the parent. - - a string containing this type and also the value of the parent-property - - - - Class Reaper is a ZObject and implements IPollEvents. - The Reaper is dedicated toward handling socket shutdown asynchronously and cleanly. - By passing this task off to the Reaper, the message-queueing subsystem can terminate immediately. - - - - - Reaper thread accesses incoming commands via this mailbox. - - - - - This is a Socket, used as the handle associated with the mailbox's file descriptor. - - - - - I/O multiplexing is performed using a poller object. - - - - - Number of sockets being reaped at the moment. - These are the reason for having a reaper: to take over the task of terminating these sockets. - - - - - If true, we were already asked to terminate. - - - - - Create a new Reaper with the given thread-id. - This will have a new Poller with the name "reaper-" + thread-id, and a Mailbox of that same name. - - the Ctx for this to be in - an integer id to give to the thread this will live on - - - - Release any contained resources - by destroying the poller and closing the mailbox. - - - - - Get the Mailbox that this Reaper uses for communication with the rest of the message-queueing subsystem. - - - - - Start the contained Poller to begin polling. - - - - - Issue the Stop command to this Reaper object. - - - - - Handle input-ready events, by receiving and processing any commands - that are waiting in the mailbox. - - - - - This method normally is for handling output-ready events, which don't apply here. - - You must not call OutEvent on a Reaper. - - - - This would be called when a timer expires - however in this event NotSupportedException would be thrown. - - an integer used to identify the timer - You must not call TimerEvent on a Reaper. - - - - Respond to the Stop command by signaling the polling-loop to terminate, - and if there're no sockets left to reap - stop the poller. - - - - - Add the given socket to the list to be reaped (terminated). - - the socket to add to the list for termination - - - - Respond to having one of the sockets that are marked for reaping, - finished being reaped, - and if there are none left - send the Done command and stop the poller. - - - - - If true, this session (re)connects to the peer. Otherwise, it's - a transient session created by the listener. - - - - - Pipe connecting the session to its socket. - - - - - This set is added to with pipes we are disconnecting, but haven't yet completed - - - - - This flag is true if the remainder of the message being processed - is still in the pipe. - - - - - True if termination have been suspended to push the pending - messages to the network. - - - - - The protocol I/O engine connected to the session. - - - - - The socket the session belongs to. - - - - - I/O thread the session is living in. It will be used to plug in - the engines into the same thread. - - - - - ID of the linger timer (0x20) - - - - - True is linger timer is running. - - - - - If true, identity has been sent to the network. - - - - - If true, identity has been received from the network. - - - - - Protocol and address to use when connecting. - - - - - Create a return a new session. - The specific subclass of SessionBase that is created is dictated by the SocketType specified by the options argument. - - the IOThread for this session to run in - whether to immediately connect - the socket to connect - an Options that provides the SocketType that dictates which type of session to create - an Address object that specifies the protocol and address to connect to - the newly-created instance of whichever subclass of SessionBase is specified by the options - The socket must be of the correct type. - - - - Create a new SessionBase object from the given IOThread, socket, and Address. - - the IOThread for this session to run on - this flag dictates whether to connect - the socket to contain - Options that dictate the settings of this session - an Address that dictates the protocol and IP-address to use when connecting - - - - Terminate and release any contained resources. - This cancels the linger-timer if that exists, and terminates the protocol-engine if that exists. - - - - - Attach the given pipe to this session. - - - This is to be used once only, when creating the session. - - - - - Read a message from the pipe. - - a reference to a Msg to put the message into - true if the Msg is successfully sent - - - - Write the given Msg to the pipe. - - the Msg to push to the pipe - true if the Msg was successfully sent - - - - Set the identity-sent and identity-received flags to false. - - - - - Flush any messages that are in the pipe downstream. - - - - - Remove any half processed messages. Flush unflushed messages. - Call this function when engine disconnect to get rid of leftovers. - - - - - This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. - - the pipe that was terminated - - - - Indicate that the given pipe is now ready for reading. - Pipe calls this on it's sink in response to ProcessActivateRead. - - the pipe to indicate is ready for reading - - - - Get the contained socket. - - - - - Process the Plug-request by setting this SessionBase as the handler for the io-object - and starting connecting (without waiting). - - - - - Process the Attach-request by hooking up the pipes - and plugging in the given engine. - - the IEngine to plug in - - - - Flush out any leftover messages and call Detached. - - - - - Process a termination request. - - a time (in milliseconds) for this to linger before actually going away. -1 means infinite. - - - - Call this function to move on with the delayed process-termination request. - - - - - This is called when the timer expires. - - an integer used to identify the timer - - - - The parent SessionBase class calls this when the Detach method finishes detaching. - - - - - Begin connecting. - - Whether to wait a bit before actually attempting to connect - - - - Override the ToString method to also show the socket-id. - - the type of this object and [ socket-id ] - - - - This method would be called when a message receive operation has been completed, although here it only throws a NotSupportedException. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - This operation is not supported on the SessionBase class. - - - - This method would be called when a message Send operation has been completed, although here it only throws a NotSupportedException. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - This operation is not supported on the SessionBase class. - - - If true, associated context was already terminated. - - - - If true, object should have been already destroyed. However, - destruction is delayed while we unwind the stack to the point - where it doesn't intersect the object being destroyed. - - - - Socket's mailbox object. - - - List of attached pipes. - - - Reaper's poller. - - - The handle of this socket within the reaper's poller. - - - Timestamp of when commands were processed the last time. - - - Number of messages received since last command processing. - - - True if the last message received had MORE flag set. - - - Monitor socket. - - - Bitmask of events being monitored. - - - The tcp port that was bound to, if any. - - - - Create a new SocketBase within the given Ctx, with the specified thread-id and socket-id. - - the Ctx context that this socket will live within - the id of the thread upon which this socket will execute - the integer id for the new socket - - - - Abstract method for attaching a given pipe to this socket. - The concrete implementations are defined by the individual socket types. - - the Pipe to attach - if true - subscribe to all data on the pipe - - - - Abstract method that gets called to signal that the given pipe is to be removed from this socket. - The concrete implementations of SocketBase override this to provide their own implementation - of how to terminate the pipe. - - the Pipe that is being removed - - - Throw if this socket is already disposed. - This object is already disposed. - - - - Throw if the message-queueing system has started terminating. - - The socket has been stopped. - - - - Create a socket of a specified type. - - a ZmqSocketType specifying the type of socket to create - the parent context - the thread for this new socket to run on - an integer id for this socket - The socket type must be valid. - - - - Destroy this socket - which means to stop monitoring the queue for messages. - This simply calls StopMonitor, and then verifies that the destroyed-flag is set. - - - - - Return the Mailbox associated with this socket. - - - - - Interrupt a blocking call if the socket is stuck in one. - This function can be called from a different thread! - - - - - Check whether the transport protocol, as specified in connect or - bind, is available and compatible with the socket type. - - the specified protocol is not supported - the socket type and protocol do not match - - The supported protocols are "inproc", "ipc", "tcp", "pgm", and "epgm". - If the protocol is either "pgm" or "epgm", then this socket must be of type Pub, Sub, XPub, or XSub. - - - - - Register the given pipe with this socket. - - the Pipe to attach - if true - subscribe to all data on the pipe (optional - default is false) - - - - Set the specified socket option. - - which option to set - the value to set the option to - The socket has been stopped. - - - - Return the integer-value of the specified option. - - which option to get - the value of the specified option, or -1 if error - The socket has been stopped. - - If the ReceiveMore option is specified, then 1 is returned if it is true, 0 if it is false. - If the Events option is specified, then process any outstanding commands, and return -1 if that throws a TerminatingException. - then return an integer that is the bitwise-OR of the PollEvents.PollOut and PollEvents.PollIn flags. - Otherwise, cast the specified option value to an integer and return it. - - - - - Return the value of the specified option as an Object. - - which option to get - the value of the option - The socket has already been stopped. - - If the Handle option is specified, then return the handle of the contained mailbox. - If the Events option is specified, then process any outstanding commands, and return -1 if that throws a TerminatingException. - then return a PollEvents that is the bitwise-OR of the PollEvents.PollOut and PollEvents.PollIn flags. - - - - - Bind this socket to the given address. - - a string denoting the endpoint-address to bind to - the address specified to bind to must not be already in use - The requested protocol is not supported. - the socket bind failed - - No IO thread was found, or the protocol's listener encountered an - error during initialisation. - - the specified protocol is not supported - the socket type and protocol do not match - The socket has been stopped. - - The supported protocols are "inproc", "ipc", "tcp", "pgm", and "epgm". - If the protocol is either "pgm" or "epgm", then this socket must be of type Pub, Sub, XPub, or XSub. - If the protocol is "inproc", you cannot bind to the same address more than once. - - - - Bind the specified TCP address to an available port, assigned by the operating system. - a string denoting the endpoint to bind to - the port-number that was bound to - uses a protocol other than TCP. - The socket has been stopped. - The specified address is already in use. - - No IO thread was found, or the protocol's listener errored during - initialisation. - - the socket bind failed - - - - Connect this socket to the given address. - - a string denoting the endpoint to connect to - The specified address is already in use. - No IO thread was found. - the specified protocol is not supported - the socket type and protocol do not match - The socket has been stopped. - - The supported protocols are "inproc", "ipc", "tcp", "pgm", and "epgm". - If the protocol is either "pgm" or "epgm", then this socket must be of type Pub, Sub, XPub, or XSub. - - The given address was not found in the list of endpoints. - - - - Given a string containing an endpoint address like "tcp://127.0.0.1:5555, - break-it-down into the address part ("127.0.0.1:5555") and the protocol part ("tcp"). - - a string denoting the endpoint, to take the parts from - the IP-address portion of the end-point address - the protocol portion of the end-point address (such as "tcp") - - - - Take ownership of the given and register it against the given - . - - - - - Disconnect from the given endpoint. - - the endpoint to disconnect from - is null. - Endpoint was not found and cannot be disconnected. - The specified protocol must be valid. - The socket has been stopped. - - - - Transmit the given Msg across the message-queueing system. - - The to send. - - The timeout to wait before returning false. Pass - to disable timeout. - - Whether this message will contain another frame after this one. - The socket has been stopped. - is not initialised. - - - - Receive a frame into the given and return true if successful, - false if it timed out. - - the Msg to read the received message into - this controls whether the call blocks, and for how long. - true if successful, false if it timed out - - For , there are three categories of value: - - - return false immediately if no message is available - - (or a negative value) - wait indefinitely, always returning - true - - Any positive value - return false after the corresponding duration if no message has become available - - - the Msg must already have been uninitialised - The socket must not already be stopped. - - - - Close this socket. Mark it as disposed, and send ownership of it to the reaper thread to - attend to the rest of it's shutdown process. - - - - - These functions are used by the polling mechanism to determine - which events are to be reported from this socket. - - - - - These functions are used by the polling mechanism to determine - which events are to be reported from this socket. - - - - - Using this function reaper thread ask the socket to register with - its poller. - - - - - Processes commands sent to this socket (if any). - If is -1, the call blocks until at least one command was processed. - If is true, commands are processed at most once in a predefined time period. - - how much time to allow to wait for a command, before returning (in milliseconds) - if true - throttle the rate of command-execution by doing only one per call - The Ctx context must not already be terminating. - - - - Process a termination command on this socket, by stopping monitoring and marking this as terminated. - - - - - Process a Bind command by attaching the given Pipe. - - the Pipe to attach - - - - Process a termination request. - - a time (in milliseconds) for this to linger before actually going away. -1 means infinite. - - - - Mark this socket as having been destroyed. Delay actual destruction of the socket. - - - - - The default implementation assumes there are no specific socket - options for the particular socket type. If not so, overload this - method. - - a ZmqSocketOption specifying which option to set - an Object that is the value to set the option to - - - - This gets called when outgoing messages are ready to be sent out. - On SocketBase, this does nothing and simply returns false. - - this method on SocketBase only returns false - - - - Transmit the given message. The - - method calls this to do the actual sending. - This abstract method gets overridden by the different socket types - to provide their concrete implementation of sending messages. - - the message to transmit - true if the message was sent successfully - - - - This gets called when incoming messages are ready to be received. - On SocketBase, this does nothing and simply returns false. - - this method on SocketBase only returns false - - - - Receive a message. The Recv method calls this lower-level method to do the actual receiving. - This abstract method gets overridden by the different socket types - to provide their concrete implementation of receiving messages. - - the Msg to receive the message into - true if the message was received successfully, false if there were no messages to receive - - - - Indicate the given pipe as being ready for reading by this socket. - This abstract method gets overridden by the different sockets - to provide their own concrete implementation. - - the Pipe that is now becoming available for reading - - - - Indicate the given pipe as being ready for writing to by this socket. - This abstract method gets called by the WriteActivated method - and gets overridden by the different sockets - to provide their own concrete implementation. - - the Pipe that is now becoming available for writing - - - - Handle input-ready events by receiving and processing any incoming commands. - - - - - Handle output-ready events. - - This is not supported on instances of the parent class SocketBase. - - - - In subclasses of SocketBase this is overridden, to handle the expiration of a timer. - - an integer used to identify the timer - You must not call TimerEvent on an instance of class SocketBase. - - - - To be called after processing commands or invoking any command - handlers explicitly. If required, it will deallocate the socket. - - - - - Indicate that the given pipe is now ready for reading. - Pipe calls this on it's sink in response to ProcessActivateRead. - When called upon an instance of SocketBase, this simply calls XReadActivated. - - the pipe to indicate is ready for reading - - - - When called upon an instance of SocketBase, this simply calls XWriteActivated. - - the pipe to indicate is ready for writing - - - - This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. - - the pipe that was terminated - - - - Moves the flags from the message to local variables, - to be later retrieved by getsockopt. - - - - - Register the given events to monitor on the given endpoint. - - a string denoting the endpoint to monitor. If this is null - monitoring is stopped. - the SocketEvent to monitor for - Maximum number of sockets reached. - - The protocol of - is not supported. - - The socket has been stopped. - - - - If there is a monitor-socket, close it and set monitor-events to 0. - - - - - Override the ToString method in order to also show the socket-id. - - A string that denotes this object type followed by [ socket-id ] - - - - Get the Socket (Handle) - which is actually the Handle of the contained mailbox. - - - - - Return a short bit of text that denotes the SocketType of this socket. - - a short type-string such as PAIR, PUB, OR UNKNOWN - - - - The class ByteArraySegment provides for containing a simple byte-array, an Offset property, - and a variety of operations that may be performed upon it. - - - - - Create a new ByteArraySegment containing the given byte-array buffer. - - the byte-array for the new ByteArraySegment to contain - - - - Create a new ByteArraySegment containing the given byte-array buffer with the given offset. - - the byte-array for the new ByteArraySegment to contain - the value for the Offset property - - - - Create a new ByteArraySegment that is a shallow-copy of the given ByteArraySegment (with a reference to the same buffer). - - the source-ByteArraySegment to make a copy of - - - - Create a new ByteArraySegment that is a shallow-copy of the given ByteArraySegment (with a reference to the same buffer) - but with a different offset. - - the source-ByteArraySegment to make a copy of - a value for the Offset property that is distinct from that of the source ByteArraySegment - - - - Get the number of bytes within the buffer that is past the Offset (ie, buffer-length minus offset). - - - - - Add the given value to the offset. - - the delta value to add to the offset. - - - - Get the offset into the buffer. - - - - - Write the given 64-bit value into the buffer, at the position marked by the offset plus the given index i. - - an Endianness to specify in which order to write the bytes - the 64-bit value to write into the byte-array buffer - the index position beyond the offset to start writing the bytes - - - - Write the given 16-bit value into the buffer, at the position marked by the offset plus the given index i. - - an Endianness to specify in which order to write the bytes - the 16-bit value to write into the byte-array buffer - the index position beyond the offset to start writing the bytes - - - - Write the given 32-bit value into the buffer, at the position marked by the offset plus the given index i. - - an Endianness to specify in which order to write the bytes - the 32-bit value to write into the byte-array buffer - the index position beyond the offset to start writing the bytes - - - - Encode the given String into a byte-array using the ASCII encoding - and write that into the buffer. - - the String to write to the buffer - the number of encoded bytes to copy into the buffer - an index-offset, in addition to the Offset property, that marks where in the buffer to start writing bytes to - - - - Encode the given String into a byte-array using the ASCII encoding - and write that into the buffer. - - the String to write to the buffer - an index-offset, in addition to the Offset property, that marks where in the buffer to start writing bytes to - - - - Return a 64-bit numeric value that is read from the buffer, starting at the position marked by the offset plus the given index i, - based upon the given byte-ordering. - - an Endianness to specify which byte-ordering to use to interpret the source bytes - the index position beyond the offset to start reading the bytes - a long that is read from the bytes of the buffer - - - - Return a 64-bit unsigned numeric value (ulong) that is read from the buffer, starting at the position marked by the offset plus the given index i, - based upon the given byte-ordering. - - an Endianness to specify which byte-ordering to use to interpret the source bytes - the index position beyond the offset to start reading the bytes - an unsigned long that is read from the bytes of the buffer - - - - Return a 32-bit integer that is read from the buffer, starting at the position marked by the offset plus the given index i, - based upon the given byte-ordering. - - an Endianness to specify which byte-ordering to use to interpret the source bytes - the index position beyond the offset to start reading the bytes - an integer that is read from the bytes of the buffer - - - - Return a 16-bit unsigned integer (ushort) value that is read from the buffer, starting at the position marked by the offset plus the given index i, - based upon the given byte-ordering. - - an Endianness to specify which byte-ordering to use to interpret the source bytes - the index position beyond the offset to start reading the bytes - a ushort that is read from the bytes of the buffer - - - - Return a String that is read from the byte-array buffer, decoded using the ASCII encoding, - starting at the position marked by the offset plus the given index i. - - the length of the part of the buffer to read - the index position beyond the offset to start reading the bytes - a String decoded from the bytes of the buffer - - - - Write the bytes of this ByteArraySegment to the specified destination-ByteArraySegment. - - the destination-ByteArraySegment - the number of bytes to copy - - - - Write the bytes of this ByteArraySegment to the specified destination-ByteArraySegment. - - an offset within this source buffer to start copying from - the destination-ByteArraySegment - an offset within the destination buffer to start copying to - the number of bytes to copy - - - - Return a shallow-copy of this ByteArraySegment. - - a new ByteArraySegment that is a shallow-copy of this one - - - - Get or set the byte of the buffer at the i-th index position (zero-based). - - the index of the byte to access - - - - Set the offset to zero. - - - - - Return a new ByteArraySegment that has the data of this one, but with the given offset. - - the source-ByteArraySegment - the offset-value to give the new ByteArraySegment - - - - - Return a new ByteArraySegment that contains the given byte-array buffer. - - the source byte-array buffer - a new ByteArraySegment that contains the given buffer - - - - Return the byte-array buffer of this ByteArraySegment. - - the source-ByteArraySegment - the byte-array that is the buffer of this ByteArraySegment - - - - Return true if the given Object is a ByteArraySegment and has the same buffer and offset. - - an Object to compare for equality to this one - true only if the otherObject has the same buffer and offset - - The given Object is considered to be Equal if it also is a ByteArraySegment, - and has the same Offset property value - and it's buffer points to the SAME byte-array as the otherObject does. - - - - - Helper base class for decoders that know the amount of data to read - in advance at any moment. - This class is the state machine that parses the incoming buffer. - Derived classes should implement individual state machine actions. - - - Knowing the amount in advance is a property - of the protocol used. 0MQ framing protocol is based size-prefixed - paradigm, which qualifies it to be parsed by this class. - - On the other hand, XML-based transports (like XMPP or SOAP) don't allow - for knowing the size of data to read in advance and should use different - decoding algorithms. - - - - - Where to store the read data. - - - - - How much data to read before taking next step. - - - - - The buffer for data to decode. - - - - - Returns true if the decoder has been fed all required data - but cannot proceed with the next decoding step. - False is returned if the decoder has encountered an error. - - - - - Returns a buffer to be filled with binary data. - - - - - Processes the data in the buffer previously allocated using - get_buffer function. size argument specifies the number of bytes - actually filled into the buffer. Function returns number of - bytes actually processed. - - - - - Where to get the data to write from. - - - - - If true, first byte of the message is being written. - - - - - How much data to write before the next step should be executed. - - - - - The buffer for encoded data. - - - - - The size of the encoded-data buffer - - - - - This flag indicates whether there has been an encoder error. - - - - - Create a new EncoderBase with a buffer of the given size. - - how big of an internal buffer to allocate (in bytes) - the to set this EncoderBase to - - - - Get the Endianness (Big or Little) that this EncoderBase uses. - - - - - This returns a batch of binary data. The data - are filled to a supplied buffer. If no buffer is supplied (data_ - points to NULL) decoder object will provide buffer of its own. - - - - - Set a flag that indicates that there has been an encoding-error. - - - - - Return true if there has been an encoding error. - - the state of the error-flag - - - - Interface IEncoder mandates SetMsgSource and GetData methods. - - - - - Set message producer. - - - - - Get a ByteArraySegment of binary data. The data - are filled to a supplied buffer. If no buffer is supplied (data is null) - encoder will provide buffer of its own. - - - - - Abstract interface to be implemented by various engines. - - - - - Plug the engine to the session. - - - - - Terminate and deallocate the engine. Note that 'detached' - events are not fired on termination. - - - - - This method is called by the session to signal that more - messages can be written to the pipe. - - - - - This method is called by the session to signal that there - are messages to send available. - - - - - IpcConnecter is a subclass of TcpConnector, which provides absolutely nothing beyond what TcpConnector does. - - - - - An IpcListener is a TcpListener that also has an Address property and a SetAddress method. - - - - - Create a new IpcListener with the given IOThread, socket, and Options. - - - the SocketBase to listen to - an Options value that dictates the settings for this IpcListener - - - - Get the bound address for use with wildcards - - - - - Set address to listen on. - - a string denoting the address to listen to - - - Unable to parse the address's port number, or the IP address could not be parsed. - - - Unable to parse the address's port number, or the IP address could not be parsed. - - - Unable to parse the address's port number, or the IP address could not be parsed. - Error establishing underlying socket. - - - - Process a termination request. - - a time (in milliseconds) for this to linger before actually going away. -1 means infinite. - - - - This method is called when a message receive operation has been completed. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - - - - This method would be called when a message Send operation has been completed, although here it only throws a NotSupportedException. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - This operation is not supported on the PgmListener class. - - - - This would be called when the a expires, although here it only throws a NotSupportedException. - - an integer used to identify the timer (not used here) - This operation is not supported on the PgmListener class. - - - - ID of the timer used to delay the reconnection. Value is 1. - - - - - This would be called when a timer expires, although here it only throws a NotSupportedException. - - an integer used to identify the timer (not used here) - This method must not be called on instances of PgmSender. - - - - This method is called when a message Send operation has been completed. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - A non-recoverable socket error occurred. - - - - Internal function to return a reconnect back-off delay. - Will modify the current_reconnect_ivl used for next call - Returns the currently used interval - - - - - This method would be called when a message receive operation has been completed, although here it only throws a NotSupportedException. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - This method must not be called on instances of PgmSender. - - - - This enum-type is Idle, Receiving, Stuck, or Error. - - - - - This method is be called when a message receive operation has been completed. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - - - - This method would be called when a message Send operation has been completed, except in this case this method does nothing. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - - - - This would be called when a timer expires, although here it does nothing. - - an integer used to identify the timer (not used here) - - - - This enum-type denotes the type of Pragmatic General Multicast (PGM) socket. - Publisher, Receiver, or Listener. - - - - - A PgmSocket utilizes the Pragmatic General Multicast (PGM) multicast protocol, which is also referred to as "reliable multicast". - This is only supported on Windows when Microsoft Message Queueing (MSMQ) is installed. - See RFC 3208. - - - - - Set/Query rate (Kb/Sec) + window size (Kb and/or MSec) -- described by RM_SEND_WINDOW below - - - - - set IP multicast outgoing interface - - - - - add IP multicast incoming interface - - - - - Set the Time-To-Live (TTL) of the MCast packets -- (ULONG) - - - - - Perform initialization of this PgmSocket, including creating the socket handle. - - - - - Override the ToString method to produce a more descriptive, useful description. - - a useful description of this object's state - - - - This enum-type denotes the operational state of this StreamEngine - whether Closed, doing Handshaking, Active, or Stalled. - - - - - This method is be called when a message receive operation has been completed. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - - - - This method is called when a message Send operation has been completed. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - - - the SocketError that resulted from the write - which could be Success (no error at all) - this indicates the number of bytes that were transferred in the write - the number of bytes transferred if successful, -1 otherwise - If the socketError is not Success then it must be a valid recoverable error or the number of bytes transferred must be zero. - - If socketError is SocketError.Success and bytesTransferred is > 0, then this returns bytesTransferred. - If bytes is zero, or the socketError is one of NetworkDown, NetworkReset, HostUn, Connection Aborted, TimedOut, or ConnectionReset, - then -1 is returned. - Otherwise, a NetMQException is thrown. - - - - the SocketError that resulted from the read - which could be Success (no error at all) - this indicates the number of bytes that were transferred in the read - the number of bytes transferred if successful, -1 otherwise - If the socketError is not Success then it must be a valid recoverable error or the number of bytes transferred must be zero. - - If socketError is SocketError.Success and bytesTransferred is > 0, then this returns bytesTransferred. - If bytes is zero, or the socketError is one of NetworkDown, NetworkReset, HostUn, Connection Aborted, TimedOut, or ConnectionReset, - then -1 is returned. - Otherwise, a NetMQException is thrown. - - - - - This would be called when a timer expires, although here it only throws NotSupportedException. - - an integer used to identify the timer (not used here) - TimerEvent is not supported on StreamEngine. - - - - A TcpAddress implements IZAddress, and contains an IPEndPoint (the Address property) - and a Protocol property. - - - - - Override ToString to provide a detailed description of this object's state - in the form: Protocol://[AddressFamily]:Port - - a string in the form Protocol://[AddressFamily]:Port - - - - Given a string that should identify an endpoint-address, resolve it to an actual IP address - and set the Address property to a valid corresponding value. - - the endpoint-address to resolve - whether the address must be only-IPv4 - The name must contain the colon delimiter. - The specified port must be a valid nonzero integer. - Must be able to find the IP-address. - - - - Get the Address implementation - which here is an IPEndPoint, - which contains Address, AddressFamily, and Port properties. - - - - - Get the textual-representation of the communication protocol implied by this TcpAddress, - which here is simply "tcp". - - - - - If 'delay' is true connector first waits for a while, then starts connection process. - - - - - ID of the timer used to delay the reconnection. Value is 1. - - - - - Address to connect to. Owned by session_base_t. - - - - - The underlying AsyncSocket. - - - - - If true file descriptor is registered with the poller and 'handle' - contains valid value. - - - - - If true, connector is waiting a while before trying to connect. - - - - - True if a timer has been started. - - - - - Reference to the session we belong to. - - - - - Current reconnect-interval. This gets updated for back-off strategy. - - - - - String representation of endpoint to connect to - - - - - Socket - - - - - Create a new TcpConnector object. - - the I/O-thread for this TcpConnector to live on. - the session that will contain this - Options that define this new TcpC - the Address for this Tcp to connect to - this boolean flag dictates whether to wait before trying to connect - - - - This does nothing. - - - - - Begin connecting. If a delayed-start was specified - then the reconnect-timer is set, otherwise this starts immediately. - - - - - Process a termination request. - This cancels the reconnect-timer, closes the AsyncSocket, and marks the socket-handle as invalid. - - a time (in milliseconds) for this to linger before actually going away. -1 means infinite. - - - - This method would be called when a message receive operation has been completed, although here it only throws a NotImplementedException. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - InCompleted must not be called on a TcpConnector. - - - - Internal function to start the actual connection establishment. - - - - - This method is called when a message Send operation has been completed. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - A non-recoverable socket error occurred. - If the socketError is not Success then it must be a valid recoverable error. - - - - This is called when the timer expires - to start trying to connect. - - The timer-id. This is not used. - - - - Internal function to add a reconnect timer - - - - - Internal function to return a reconnect back-off delay. - Will modify the current_reconnect_ivl used for next call - Returns the currently used interval - - - - - Close the connecting socket. - - - - - Address to listen on. - - - - - Underlying socket. - - - - - Socket the listener belongs to. - - - - - String representation of endpoint to bind to - - - - - The port that was bound on - - - - - Create a new TcpListener on the given IOThread and socket. - - the IOThread for this to live within - a SocketBase to listen on - socket-related Options - - - - Release any contained resources (here - does nothing). - - - - - Process a termination request. - - a time (in milliseconds) for this to linger before actually going away. -1 means infinite. - - - - Set address to listen on. - - a string denoting the address to set this to - - - - This is called when socket input has been completed. - - This indicates the status of the input operation - whether Success or some error. - the number of bytes that were transferred - A non-recoverable socket-error occurred. - - - - Close the listening socket. - - - - - Get the bound address for use with wildcards - - - - - Get the port-number to listen on. - - - - - This method would be called when a message Send operation has been completed - except in this case it simply throws a NotImplementedException. - - a SocketError value that indicates whether Success or an error occurred - the number of bytes that were transferred - OutCompleted is not implemented on TcpListener. - - - - This would be called when a timer expires, although here it only throws a NotSupportedException. - - an integer used to identify the timer (not used here) - TimerEvent is not supported on TcpListener. - - - - The maximum message-size. If this is -1 then there is no maximum. - - - - - Create a new V1Decoder with the given buffer-size, maximum-message-size and Endian-ness. - - the buffer-size to give the contained buffer - the maximum message size. -1 indicates no limit. - the Endianness to specify for it - either Big or Little - - - - Set the receiver of decoded messages. - - - - - Set the receiver of decoded messages. - - - - - Encoder for 0MQ framing protocol. Converts messages into data stream. - - - - - V2Protocol is a class that contains two integer constants: MoreFlag and LargeFlag. - - - - - This is a constant-integer with the value 1. - - - - - This is a constant-integer with the value 2. - - - - - This class simply provides a counter-value, which may be set, increased, and decremented. - Increase and Decrement are both thread-safe operations. - - - - - Create a new AtomicCounter object with an initial counter-value of zero. - - - - - Assign the given amount to the counter-value. - - the integer value to set the counter to - - - - Add the given amount to the counter-value, in an atomic thread-safe manner. - - the integer amount to add to the counter-value - - - - Subtract the given amount from the counter-value, in an atomic thread-safe manner. - - the integer amount to subtract from to the counter-value (default value is 1) - the new value of the counter - - - - Class ByteArrayEqualityComparer is an IEqualityComparer for byte-arrays, - and provides an Equals methods to compare two byte-arrays for equality in value - and GetHashCode. - - - - - Return true only if the two byte-arrays are equal in length and contain the same values. - - one of the two byte-arrays to compare - the other byte-array to compare against - - - - - Return a numeric hashcode of the given byte-array. - - the given byte-array to compute the hashcode of - an integer that contains a hashcode computed over the byte-array - - - - The Clock class provides properties for getting timer-counts in either milliseconds or microseconds, - and the CPU's timestamp-counter if available. - - - - - TSC timestamp of when last time measurement was made. - - - - - Physical time corresponding to the TSC above (in milliseconds). - - - - - This flag indicates whether the rdtsc instruction is supported on this platform. - - - - - Return the High-Precision timestamp, as a 64-bit integer that denotes microseconds. - - - - - Return the Low-Precision timestamp, as a 64-bit integer denoting milliseconds. - In tight loops generating it can be 10 to 100 times faster than the High-Precision timestamp. - - - - - Return the CPU's timestamp counter, or 0 if it's not available. - - - - - A PollSet contains a single Socket and an IPollEvents Handler - that provides methods that signal when that socket is ready for reading or writing. - - - - - Get the Socket that this PollSet contains. - - - - - Get the IPollEvents object that has methods to signal when ready for reading or writing. - - - - - Get or set whether this PollSet is cancelled. - - - - - Create a new PollSet object to hold the given Socket and IPollEvents handler. - - the Socket to contain - the IPollEvents to signal when ready for reading or writing - - - - This is the list of registered descriptors (PollSets). - - - - - List of sockets to add at the start of the next loop - - - - - If true, there's at least one retired event source. - - - - - This flag is used to tell the polling-loop thread to shut down, - wherein it will stop at the end of it's current loop iteration. - - - - - This indicates whether the polling-thread is not presently running. Default is true. - - - - - This is the background-thread that performs the polling-loop. - - - - - This is the name associated with this Poller. - - - - - The set of Sockets to check for read-readiness. - - - - - The set of Sockets to check for any errors. - - - - - Create a new Poller object with the given name. - - a name to assign to this Poller - - - - Unless the polling-loop is already stopped, - tell it to stop at the end of the current polling iteration, and wait for that thread to finish. - - - - - Add a new PollSet containing the given Socket and IPollEvents at the next iteration through the loop, - and also add the Socket to the list of those to check for errors. - - the Socket to add - the IPollEvents to include in the new PollSet to add - - - - Remove the given Socket from this Poller. - - the System.Net.Sockets.Socket to remove - - - - Add the given Socket to the list to be checked for read-readiness at each poll-iteration. - - the Socket to add - - - - Begin running the polling-loop, on a background thread. - - - The name of that background-thread is the same as the name of this Poller object. - - - - - Signal that we want to stop the polling-loop. - This method returns immediately - it does not wait for the polling thread to stop. - - - - - This method is the polling-loop that is invoked on a background thread when Start is called. - As long as Stop hasn't been called: execute the timers, and invoke the handler-methods on each of the saved PollSets. - - - - - This serves as the parent-class for Poller and Proactor. - It provides for managing a list of timers (ITimerEvents) - adding, cancelling, and executing them, - and a Load property. - - - - - Load of the poller. Currently the number of file descriptors registered. - - - - - Instances of this class contain a ITimerEvent sink and an integer Id. - - - - - Create a new TimerInfo object from the given sink and id. - - an ITimerEvent that acts as a sink for when the timer expires - an integer id that identifies this timer - - - - Get the ITimerEvent that serves as the event-sink. - - - - - Get the integer Id of this TimerInfo. - - - - - This is a list of key/value pairs, with the keys being timeout numbers and the corresponding values being a list of TimerInfo objects. - It is sorted by the keys - which are timeout values. Thus, by walking down the list, you encounter the soonest timeouts first. - - - - - Create a new PollerBase object - which simply creates an empty m_timers collection. - - - - - Get the load of this poller. Note that this function can be - invoked from a different thread! - - - - - Add the given amount to the load. - This is called by individual poller implementations to manage the load. - - - This is thread-safe. - - - - - Add a to the internal list, created from the given sink and id - to expire in the given number of milliseconds. - Afterward the expiration method TimerEvent on the sink object will be called with argument set to id. - - the timeout-period in milliseconds of the new timer - the IProactorEvents to add for the sink of the new timer - the Id to assign to the new TimerInfo - - - - Cancel the timer that was created with the given sink object with the given Id. - - the ITimerEvent that the timer was created with - the Id of the timer to cancel - - The complexity of this operation is O(n). We assume it is rarely used. - - - - - Execute any timers that are due. Return the number of milliseconds - to wait to match the next timer or 0 meaning "no timers". - - the time to wait for the next timer, in milliseconds, or zero if there are no more timers - - - The completionStatuses item must have a valid OperationType. - - - - Close the read and write sockets. - - - - - This class exists only to provide a wrapper for the Socket.Select method, - such that the call may be handled slightly differently on .NET 3.5 as opposed to later versions. - - - - - Determine the status of one or more sockets. - After returning, the lists will be filled with only those sockets that satisfy the conditions. - - a list of Sockets to check for readability - a list of Sockets to check for writability - a list of Sockets to check for errors - a timeout value, in microseconds. A value of -1 indicates an infinite timeout. - - If you are in a listening state, readability means that a call to Accept will succeed without blocking. - If you have already accepted the connection, readability means that data is available for reading. In these cases, - all receive operations will succeed without blocking. Readability can also indicate whether the remote Socket - has shut down the connection - in which case a call to Receive will return immediately, with zero bytes returned. - - Select returns when at least one of the sockets of interest (ie any of the sockets in the checkRead, checkWrite, or checkError - lists) meets its specified criteria, or the microSeconds parameter is exceeded - whichever comes first. - Setting microSeconds to -1 specifies an infinite timeout. - - If you make a non-blocking call to Connect, writability means that you have connected successfully. If you already - have a connection established, writability means that all send operations will succeed without blocking. - If you have made a non-blocking call to Connect, the checkError parameter identifies sockets that have not connected successfully. - - See this reference for further details of the operation of the Socket.Select method: - https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.select(v=vs.110).aspx - - This may possibly throw an ArgumentNullException, if all three lists are null or empty, - and a SocketException if an error occurred when attempting to access a socket. - - Use the Poll method if you only want to determine the status of a single Socket. - - This method cannot detect certain kinds of connection problems, - such as a broken network cable, or that the remote host was shut down ungracefully. - You must attempt to send or receive data to detect these kinds of errors. - - none of the three lists of sockets may be null. - an error occurred when attempting to access the socket. - - - - StringLib is a static class whose purpose is to provide miscellaneous string-related utility methods - and extension properties. - - - - - Return a string that gives detailed information of the state of the given List of Sockets, - for debugging purposes. - - the List of Sockets to describe - a string detailing the list contents, including the state of each Socket - - This is intended just for debugging purposes, as when adding detailed information to the Message of an - exception when an error occurs. In DEBUG mode more detail is provided. - - - - - Return a detailed textual description of the state of this Socket (if DEBUG is defined). - - the System.Net.Sockets.Socket to describe - a string containing a detailed listing of the properties of the Socket - - This is intended just for debugging purposes, as when adding detailed information to the Message of an - exception when an error occurs. In DEBUG mode more detail is provided. - - - - A FIFO queue. - - The class supports: - - Push-front via . - Pop-back via . - Pop-front via . - - As such it is only one operation short of being a double-ended queue (dequeue or deque). - - The internal implementation consists of a doubly-linked list of fixed-size arrays. - - - - - Individual memory chunk to hold N elements. - - - Contains global index positions of elements in the chunk. - - - Optional link to the previous . - - - Optional link to the next . - - - the size to give the new YQueue - should be no less than 2 - - - Gets the index of the front element of the queue. - The index of the front element of the queue. - - If the queue is empty, it should be equal to - . - - - - Gets the front element of the queue. If the queue is empty, behaviour is undefined. - The front element of the queue. - - - Gets the index of the back element of the queue. - The index of the back element of the queue. - - If the queue is empty, it should be equal to - . - - - - Retrieves the element at the front of the queue. - The element taken from queue. - - - Adds an element to the back end of the queue. - The value to be pushed. - - - - Removes element from the back end of the queue, rolling back the last call to - . - - - The caller must guarantee that the queue isn't empty when calling this method. - It cannot be done automatically as the read side of the queue can be managed by different, - completely unsynchronized threads. - - The last item passed to . - - - - Allocation-efficient queue to store pipe items. - Front of the queue points to the first prefetched item, back of - the pipe points to last un-flushed item. Front is used only by - reader thread, while back is used only by writer thread. - - - - - Points to the first un-flushed item. This variable is used - exclusively by writer thread. - - - - - Points to the first un-prefetched item. This variable is used - exclusively by reader thread. - - - - - Points to the first item to be flushed in the future. - - - - - The single point of contention between writer and reader thread. - Points past the last flushed item. If it is NULL, - reader is asleep. This pointer should be always accessed using - atomic operations. - - - - - Write an item to the pipe. Don't flush it yet. If incomplete is - set to true the item is assumed to be continued by items - subsequently written to the pipe. Incomplete items are never - flushed down the stream. - - - - - Pop an incomplete item from the pipe. - - the element revoked if such item exists, null otherwise. - - - - Flush all the completed items into the pipe. - - - Returns false if the reader thread is sleeping. In that case, caller is obliged to - wake the reader up before using the pipe again. - - - - - Check whether item is available for reading. - - - - - Attempts to read an item from the pipe. - - true if the read succeeded, otherwise false. - - - - Applies the function fn to the first element in the pipe - and returns the value returned by the fn. - The pipe mustn't be empty or the function crashes. - - - - - This enum-type serves to identity a particular socket-option. - - - - - The I/O-thread affinity. - 0 means no affinity, meaning that work shall be distributed fairly among all I/O threads. - For non-zero values, the lowest bit corresponds to thread 1, second lowest bit to thread 2, and so on. - - - The I/O-thread Affinity is a 64-bit value used to specify which threads from the I/O thread-pool - associated with the socket's context shall handle newly-created connections. - 0 means no affinity, meaning that work shall be distributed fairly among all I/O threads. - For non-zero values, the lowest bit corresponds to thread 1, second lowest bit to thread 2, and so on. - - - - - The unique identity of the socket, from a message-queueing router's perspective. - - - This is at most 255 bytes long. - - - - - Setting this option subscribes a socket to messages that have the given topic. This is valid only for Subscriber and XSubscriber sockets. - - - You subscribe a socket to a given topic when you want that socket to receive messages of that topic. - A topic is simply a specific prefix (in the form of a byte-array or the equivalent text). - This is valid only for Subscriber and XSubscriber sockets. - - - - - Set this option to un-subscribe a socket from a given topic. Only for Subscriber and XSubscriber sockets. - - - You un-subscribe a socket from the given topic when you no longer want that socket to receive - messages of that topic. A topic is simply a specific prefix (in the form of a byte-array or the equivalent text). - This is valid only for Subscriber and XSubscriber sockets. - - - - - The maximum send or receive data rate for multicast transports on the specified socket. - - - - - The recovery-interval, in milliseconds, for multicast transports using the specified socket. - Default is 10,000 ms (10 seconds). - - - This option determines the maximum time that a receiver can be absent from a multicast group - before unrecoverable data loss will occur. Default is 10,000 ms (10 seconds). - - - - - The size of the transmit buffer for the specified socket. - - - - - The size of the receive buffer for the specified socket. - - - - - This indicates more messages are to be received. - - - - - The file descriptor associated with the specified socket. - - - - - The event state for the specified socket. - This is a combination of: - PollIn - at least one message may be received without blocking - PollOut - at least one messsage may be sent without blocking - - - - - This option specifies the linger period for the specified socket, - which determines how long pending messages which have yet to be sent to a peer - shall linger in memory after a socket is closed. - - - - - The initial reconnection interval for the specified socket. - -1 means no reconnection. - - - This is the period to wait between attempts to reconnect disconnected peers - when using connection-oriented transports. - A value of -1 means no reconnection. - - - - - This is the maximum length of the queue of outstanding peer connections - for the specified socket. This only applies to connection-oriented transports. - Default is 100. - - - - - The maximum reconnection interval for the specified socket. - The default value of zero means no exponential backoff is performed. - - - This option value denotes the maximum reconnection interval for a socket. - It is used when a connection drops and NetMQ attempts to reconnect. - On each attempt to reconnect, the previous interval is doubled - until this maximum period is reached. - The default value of zero means no exponential backoff is performed. - - - - - The upper limit to the size for inbound messages. - -1 (the default value) means no limit. - - - If a peer sends a message larger than this it is disconnected. - - - - - The high-water mark for message transmission, which is the number of messages that are allowed to queue up - before mitigative action is taken. The default value is 1000. - - - - - The high-water mark for message reception, which is the number of messages that are allowed to queue up - before mitigative action is taken. The default value is 1000. - - - - - The time-to-live (maximum number of hops) that outbound multicast packets - are allowed to propagate. - The default value of 1 means that the multicast packets don't leave the local network. - - - - - Specifies the amount of time after which a synchronous send call will time out. - A value of 0 means Send will return immediately, with a EAGAIN error if the message cannot be sent. - -1 means to block until the message is sent. - - - - - This indicates the underlying native socket type. - - - An IPv4 socket will only use IPv4, while an IPv6 socket lets applications - connect to and accept connections from both IPv4 and IPv6 hosts. - - - - - The last endpoint bound for TCP and IPC transports. - The returned value will be a string in the form of a ZMQ DSN. - - - If the TCP host is ANY, indicated by a *, then the returned address - will be 0.0.0.0 (for IPv4). - - - - - Sets the RouterSocket behavior when an unroutable message is encountered. - A value of 0 is the default and discards the message silently when it cannot be routed. - A value of 1 returns an EHOSTUNREACH error code if the message cannot be routed. - - - - - Whether to use TCP keep-alive on this socket. - 0 = no, 1 = yes, - -1 (the default value) means to skip any overrides and leave it to the OS default. - - - - - The keep-alive time - the duration between two keepalive transmissions in idle condition. - - - The TCP keepalive period is required by socket implementers to be configurable and by default is - set to no less than 2 hours. - In 0MQ, -1 (the default value) means to just leave it to the OS default. - - - - - The TCP keep-alive interval - the duration between two keepalive transmission if no response was received to a previous keepalive probe. - - - By default a keepalive packet is sent every 2 hours or 7,200,000 milliseconds - if no other data have been carried over the TCP connection. - If there is no response to a keepalive, it is repeated once every KeepAliveInterval seconds. - The default is one second. - - - - - The list of accept-filters, which denote the addresses that a socket may accept. - Setting this to null clears the filter. - - - This applies to IPv4 addresses only. - - - - - This applies only to XPub sockets. - If true, send all subscription messages upstream, not just unique ones. - The default is false. - - - - - If true, router socket accepts non-zmq tcp connections - - - - - This is an XPublisher-socket welcome-message. - - - - - This applies only to XPub sockets. - If true, enable broadcast option on XPublishers - - - - - The low-water mark for message transmission. This is the number of messages that should be processed - before transmission is unblocked (in case it was blocked by reaching high-watermark). The default value is - calculated using relevant high-watermark (HWM): HWM > 2048 ? HWM - 1024 : (HWM + 1) / 2 - - - - - The low-water mark for message reception. This is the number of messages that should be processed - before reception is unblocked (in case it was blocked by reaching high-watermark). The default value is - calculated using relevant high-watermark (HWM): HWM > 2048 ? HWM - 1024 : (HWM + 1) / 2 - - - - - When enabled new router connections with same identity take over old ones - - - - - Returns the last peer routing id connect to the PEER socket - - - - - Specifies the byte-order: big-endian, vs little-endian. - - - - - Specifies the max datagram size for PGM. - - - - - This is the base-class for all objects that participate in inter-thread communication. - - - - - This Ctx is the context that provides access to the global state. - - - - - This is the thread-ID of the thread that this object belongs to. - - - - - Create a new ZObject with the given context and thread-id. - - the context for the new ZObject to live within - the integer thread-id for the new ZObject to be associated with - - - - Create a new ZObject that has the same context and thread-id as the given parent-ZObject. - - another ZObject that provides the context and thread-id for this one - - - - Get the id of the thread that this object belongs to. - - - - - Get the context that provides access to the global state. - - - - The given address was not found in the list of endpoints. - - - - Returns the that is the least busy at the moment. - - Which threads are eligible (0 = all). - The least busy thread, or null if none is available. - - - - Send the Stop command. - - - - - Send the Plug command, incrementing the destinations sequence-number if incSeqnum is true. - - the Own to send the command to - a flag that dictates whether to increment the sequence-number on the destination (optional - defaults to false) - - - - Send the Own command, and increment the sequence-number of the destination - - the Own to send the command to - the object to Own - - - - Send the Attach command - - the Own to send the command to - - - - - - Send the Bind command - - - - - - - - For owned objects, asks the owner () to terminate - . - - - - - - - Send a Done command to the Ctx itself (null destination). - - - - - Send the given Command, on that commands Destination thread. - - the Command to send - - - Not supported on the ZObject class. - - - Not supported on the ZObject class. - - - Not supported on the ZObject class. - - - Not supported on the ZObject class. - - - Not supported on the ZObject class. - - - - Process the bind command with the given pipe. - - - Not supported on the ZObject class. - - - Not supported on the ZObject class. - - - Not supported on the ZObject class. - - - - This method would be called to assign the specified pipe as a replacement for the outbound pipe that was being used. - This, is an abstract method that is to be overridden by subclasses to provide their own concrete implementation. - - the pipe to use for writing - - A "Hiccup" occurs when an outbound pipe experiences something like a transient disconnect or for whatever other reason - is no longer available for writing to. - - No supported on the ZObject class. - - - - Process the terminate-pipe command. - - Not supported on the ZObject class. - - - - Process the terminate-pipe acknowledgement command. - - Not supported on the ZObject class. - - - - Process a termination-request command on the Own object. - - - Not supported on the ZObject class. - - - - Process a termination request. - - a time (in milliseconds) for this to linger before actually going away. -1 means infinite. - Not supported on the ZObject class. - - - - Process the termination-acknowledgement command. - - Not supported on the ZObject class. - - - Not supported on the ZObject class. - - - - Special handler called after a command that requires a seqnum - was processed. The implementation should catch up with its counter - of processed commands here. - - Not supported on the ZObject class. - - - - This enum-type specifies either big-endian (Big) or little-endian (Little), - which indicate whether the most-significant bits are placed first or last in memory. - - - - - Most-significant bits are placed first in memory. - - - - - Most-significant bits are placed last in memory. - - - - - This enum-type represents the various numeric socket-related error codes. - - - - - The provided endpoint is not connected. - - - - - The requested address is already in use. - - - - - Non-blocking mode was requested and the message cannot be sent at the moment. - - - - - Permission denied - - - - - The endpoint supplied is invalid. - - - - - The connection is still in progress. - - - - - The requested transport protocol is not supported. - - - - - The provided context is invalid. - - - - - The requested address was not available. - For Bind operations, that can mean the address was not local. - - - - - The network appears to be down. - - - - - There is not enough buffer space for the requested operation. - - - - - The socket is not connected. - - - - - The connection was refused. - - - - - The host is not reachable. - - - - - This is the value chosen for beginning the range of 0MQ error codes. - - - - - The message is too long. - - - - - The address family is not supported by this protocol. - - - - - The network is apparently not reachable. - - - - - The connection-attempt has apparently been aborted. - - - - - The connection has apparently been reset. - - - - - The operation timed-out. - - - - - The connection has apparently been reset. - - - - - The operation cannot be performed on this socket at the moment due - to the socket not being in the appropriate state. - - - - - The context associated with the specified socket has already been terminated. - - - - - No I/O thread is available to accomplish this task. - - - - - Too many sockets for this process. - - - - - Facilitates a pattern whereby an event may be decorated with logic that transforms its arguments. - - - Use of this class requires providing actions that register and unregister a handler of the source - event that calls with updated arguments in response. - - Argument type of the decorated event. - - - - Initialises a new instance. - - an Action to perform when the first handler is registered for the event - an Action to perform when the last handler is unregistered from the event - - - - Raise, or "Fire", the Event. - - the sender that the event-handler that gets notified of this event will receive - the subclass of EventArgs that the event-handler will receive - - - - class InterfaceItem provides the properties Address and BroadcastAddress (both are an IPAddress). - This serves to convey information for each of the network interfaces present on a host. - - - - - Create a new InterfaceItem from the given address and broadcast-address. - - an IPAddress that will comprise the 'Address' of the new InterfaceItem - an IPAddress that will comprise the 'BroadcastAddress' of the new InterfaceItem - - - - Get the 'address' of this network interface, as an IPAddress. - - - - - Get the 'broadcast-address' of this network interface, as an IPAddress. - - - - - This is a list of InterfaceItems, each of which has an Address and BroadcastAddress, - which is derived from all of the Network Interfaces present on this host at the time an instance of this class is created. - - - - - Create a new InterfaceCollection that contains a list of InterfaceItems derived from all of the Network Interfaces present on this host. - - - - - Return an IEnumerator over the InterfaceItems that this InterfaceCollection contains, - which are all of the network interfaces that were not running, nor loopback nor PPP interfaces. - - an IEnumerator over the InterfaceItems that this contains - - - - Interface IOutgoingSocket mandates a Send( Msg, SendReceiveOptions ) method. - - - - - Send a message if one is available within . - - An object with message's data to send. - - The maximum length of time to try and send a message. If - , no - wait occurs. - - Indicate if another frame is expected after this frame - true if a message was sent, otherwise false. - - - - Defines a socket from which message data may be read. - - - - - Receive a message if one is available within . - - An object to receive the message's data into. - - The maximum length of time to wait for a message. If , no - wait occurs. - - true if a message was received, otherwise false. - - - - Implementations provide a via the - property. - - - - - Gets a instance. - - - - - Gets whether the object has been disposed. - - - - - - - - This interface provides an abstraction over the legacy Poller and newer - classes for use in - . - - - - - Monitors a for events, raising them via events. - - - To run a monitor instance, either: - - - Call (blocking) and - , or - - - Call - and - . - - - - - - - Initialises a monitor on for a specified - . - - - This constructor matches the signature used by clrzmq. - - The socket to monitor. - a string denoting the endpoint which will be the monitoring address - - A flag indicating whether ownership of is transferred to the monitor. - If true, disposing the monitor will also dispose . - - - - - The monitoring address. - - - - - Get whether this monitor is currently running. - - - Start the monitor running via either or - . - Stop the monitor via either or - . - - - - - Gets and sets the timeout interval for poll iterations when using - and - . - - - The higher the number the longer it may take the to stop the monitor. - This value has no effect when the monitor is run via - . - - - - - Raised whenever any monitored event fires. - - - - - Occurs when a connection is made to a socket. - - - - - Occurs when a synchronous connection attempt failed, and its completion is being polled for. - - - - - Occurs when an asynchronous connect / reconnection attempt is being handled by a reconnect timer. - - - - - Occurs when a socket is bound to an address and is ready to accept connections. - - - - - Occurs when a socket could not bind to an address. - - - - - Occurs when a connection from a remote peer has been established with a socket's listen address. - - - - - Occurs when a connection attempt to a socket's bound address fails. - - - - - Occurs when a connection was closed. - - - - - Occurs when a connection couldn't be closed. - - - - - Occurs when the stream engine (TCP and IPC specific) detects a corrupted / broken session. - - - - - Start monitor the socket, the method doesn't start a new thread and will block until the monitor poll is stopped - - The Monitor must not have already started nor attached to a poller. - - - - Start a background task for the monitoring operation. - - - - - - Stop monitoring. Blocks until monitoring completed. - - If this monitor is attached to a poller you must detach it first and not use the stop method. - - - - Release and dispose of any contained resources. - - - - - Release and dispose of any contained resources. - - true if releasing managed resources - - - - Base class for all event arguments raised by . - - - - - Create a new NetMQMonitorEventArgs that contains the given monitor and address. - - The that raised this event. - The address of the event. - The type of socket event that occurred. - - - - Gets the that raised this event. - - - - - Gets the address of the event. - - - - - Gets the type of socket event that occurred. - - - - - A subclass of that also holds a socket. - - - - - Create a new NetMQMonitorSocketEventArgs that contains the given monitor, address, and socket. - - The that raised this event. - The address of the event. - The type of socket event that occurred. - The socket upon which this event occurred. - - - - Gets the socket upon which this event occurred. - - - - - A subclass of that also holds an error code. - - - - - Create a new NetMQMonitorErrorEventArgs that contains the given monitor, address, and error-code. - - The that raised this event. - The address of the event. - The type of socket event that occurred. - The error code associated with this event. - - - - Gets the error code associated with this event. - - - - - A subclass of that also holds an interval. - - - - - Create a new NetMQMonitorIntervalEventArgs containing the given NetMQMonitor, address, and interval. - - the NetMQMonitor - The a string denoting the address - The interval, in milliseconds. - The type of socket event that occurred. - - - - Gets the interval, in milliseconds. - - - - Defines a set of flags applicable to a instance: None (default), More, Identity, Shared - - - Indicates no flags are set (the default). - - - Indicates that more frames of the same message follow. - - - Indicates that this frame conveys the identity of a connected peer. - - - - Indicates that this frame's internal data is shared with other - objects. - - - - Enumeration of possible types: Uninitialised, GC, Pool, Delimiter. - - - The has not yet been initialised (default value). - - - The is empty. - - - The data will be garbage collected when no longer needed. - - - - The data was allocated by , and must be released back - to this pool when no longer needed. This happens when is called. - - - - The is a delimiter frame and doesn't contain any data. - Delimiters are commonly used to mark a boundary between groups frames. - - - - A Msg struct is the lowest-level interpretation of a ZeroMQ message, and simply contains byte-array data - and MsgType and MsgFlags properties. - It supports message buffer pooling. - - - Many users will not use this class directly. However in high-performance situations it - may be useful. When used correctly it's possible to have zero-copy and zero-allocation - behaviour. - - - - - An atomic reference count for knowing when to release a pooled data buffer back to the - . - - - Will be null unless equals - . - - - - - Get the number of bytes within the Data property. - - - - - Gets the position of the first element in the Data property delimited by the message, - relative to the start of the original array. - - - - Get the type of this message, from the MsgType enum. - - - - Get whether the Delimiter bit is set on the Flags property, - which would indicate that this message is intended for use simply to mark a boundary - between other parts of some unit of communication. - - - - Get whether this is initialised and ready for use. - - A newly constructed is uninitialised, and can be initialised via one - of , , - , - , or - . - Calling will cause the to become uninitialised again. - - true if the is initialised, otherwise false. - - - - Get the flags-enum MsgFlags value, which indicates which of the More, Identity, or Shared bits are set. - - - - - Get the "Has-More" flag, which when set on a message-queue frame indicates that there are more frames to follow. - - - - - Get whether the buffer of this is shared with another instance. - Only applies to pooled message types. - - - - - Get whether the Identity bit is set on the Flags property. - - - - - Set the indicated Flags bits. - - which Flags bits to set (More, Identity, or Shared) - - - - Clear the indicated Flags bits. - - which Flags bits to clear (More, Identity, or Shared) - - - - Get the byte-array that represents the data payload of this . - - - This value will be null if is - , - or . - - - - - Clear this Msg to empty - ie, set MsgFlags to None, MsgType to Empty, and clear the Data. - - - - - Initialise this Msg to be of MsgType.Pool, with a data-buffer of the given number of bytes. - - the number of bytes to allocate in the data-buffer - - - - Initialise this Msg to be of MsgType.GC with the given data-buffer value. - - the byte-array of data to assign to the Msg's Data property - the number of bytes that are in the data byte-array - - - - Initialise this Msg to be of MsgType.GC with the given data-buffer value. - - the byte-array of data to assign to the Msg's Data property - first byte in the data array - the number of bytes that are in the data byte-array - - - - Set this Msg to be of type MsgType.Delimiter with no bits set within MsgFlags. - - - - - Clear the and set the MsgType to Invalid. - If this is not a shared-data Msg (MsgFlags.Shared is not set), or it is shared but the reference-counter has dropped to zero, - then return the data back to the BufferPool. - - The object is not initialised. - - - - If this Msg is of MsgType.Pool, then - add the given amount number to the reference-counter - and set the shared-data Flags bit. - If this is not a Pool Msg, this does nothing. - - the number to add to the internal reference-counter - - - - If this Msg is of MsgType.Pool and is marked as Shared, then - subtract the given amount number from the reference-counter - and, if that reaches zero - return the data to the shared-data pool. - If this is not both a Pool Msg and also marked as Shared, this simply Closes this Msg. - - the number to subtract from the internal reference-counter - - - - Override the Object ToString method to show the object-type, and values of the MsgType, Size, and Flags properties. - - a string that provides some detail about this Msg's state - - - - Copy the given byte-array data to this Msg's Data buffer. - - the source byte-array to copy from - index within the internal Data array to copy that byte to - the number of bytes to copy - - - - Copy the given byte-array data to this Msg's Data buffer. - - the source byte-array to copy from - first byte in the source byte-array - index within the internal Data array to copy that byte to - the number of bytes to copy - - - - Copy the given single byte to this Msg's Data buffer. - - the source byte to copy from - - - - Copy the given single byte to this Msg's Data buffer at the given array-index. - - the source byte to copy from - index within the internal Data array to copy that byte to - - - - Get and set the byte value in the buffer at a specific index. - - The index to access - - - - - Close this Msg, and effectively make this Msg a copy of the given source Msg - by simply setting it to point to the given source Msg. - If this is a Pool Msg, then this also increases the reference-counter and sets the Shared bit. - - the source Msg to copy from - The object is not initialised. - - - - Increase Offset and decrease Size by the given count. - - Number of bytes to remove from a message - - - - Close this Msg and make it reference the given source Msg, and then clear the Msg to empty. - - the source-Msg to become - The object is not initialised. - - - - Returns a new array containing the first bytes of - . - - - - - An IShimHandler provides a Run(PairSocket) method. - - - - - Execute whatever action this IShimHandler represents against the given shim. - - - - - - This is an EventArgs that provides an Actor property. - - - - - Create a new NetMQActorEventArgs with the given NetMQActor. - - the NetMQActor for this exception to reference - - - - Get the NetMQActor that this exception references. - - - - - This delegate represents the action for this actor to execute. - - the that is the shim to execute this action - - - - This delegate represents the action for this actor to execute - along with a state-information object. - - the type to use for the state-information object - the that is the shim to execute this action - the state-information that the action will use - - - - The Actor represents one end of a two-way pipe between 2 PairSocket(s). Where - the actor may be passed messages, that are sent to the other end of the pipe - which is called the "shim" - - - - - The terminate-shim command. - This is just the literal string "endPipe". - - - - - Create a new ActionShimHandler with the given type T to serve as the state-information, - and the given action to operate upon that type. - - a ShimAction of type T that comprises the action to perform - the state-information - - - - Perform the action upon the given shim, using our state-information. - - a that is the shim to perform the action upon - - - - Create a new ActionShimHandler with a given action to operate upon that type. - - a ShimAction that comprises the action to perform - - - - Perform the action upon the given shim, using our state-information. - - a that is the shim to perform the action upon - - - - Create a new with the given shimHandler. - - an IShimHandler that provides the Run method - the newly-created NetMQActor - - - - Create a new with the action, and state-information. - - a ShimAction - delegate for the action to perform - the state-information - of the generic type T - the newly-created NetMQActor - - - - Create a new with the given - . - - a ShimAction - delegate for the action to perform - the newly-created NetMQActor - - - - Execute the shim handler's Run method, signal ok and then dispose of the shim. - - - - - Transmit the given Msg over this actor's own socket. - - the Msg to transmit - - The maximum length of time to try and send a message. If - , no - wait occurs. - - Indicate if another frame is expected after this frame - true if a message was sent, otherwise false. - The socket has been stopped. - is not initialised. - - - - Attempt to receive a message for the specified period of time, returning true if successful or false if it times-out. - - a Msg to write the received message into - a TimeSpan specifying how long to block, waiting for a message, before timing out - true only if a message was indeed received - - - - This event occurs when at least one message may be received from the socket without blocking. - - - - - This event occurs when a message is ready to be transmitted from the socket. - - - - - - - - Release any contained resources. - - true if managed resources are to be released - - - - - - - A NetMQBeaconEventArgs is an EventArgs that provides a property that holds a NetMQBeacon. - - - - - Create a new NetMQBeaconEventArgs object containing the given NetMQBeacon. - - the NetMQBeacon object to hold a reference to - - - - Get the NetMQBeacon object that this holds. - - - - - Create a new NetMQBeacon. - - - - - Get the host name this beacon is bound to. - - - This may involve a reverse DNS lookup which can take a second or two. - - An empty string is returned if: - - the beacon is not bound, - the beacon is bound to all interfaces, - an error occurred during reverse DNS lookup. - - - - - - Get the IP address this beacon is bound to. - - - - - Get the socket of the contained actor. - - - - - This event occurs when at least one message may be received from the socket without blocking. - - - - - Configure beacon for the specified port on all interfaces. - - Blocks until the bind operation completes. - The UDP port to bind to. - - - - Configure beacon for the specified port and, optionally, to a specific interface. - - Blocks until the bind operation completes. - The UDP port to bind to. - IP address of the interface to bind to. Pass empty string (the default value) to use the default interface. - - - - Publish beacon immediately and continue to publish when interval elapsed - - Beacon to transmit. - Interval to transmit beacon - - Encoding for . Defaults to - . - - - - - Publish beacon immediately and continue to publish when interval elapsed - - Beacon to transmit - Interval to transmit beacon - - - - Publish beacon immediately and continue to publish every second - - Beacon to transmit - - Encoding for . Defaults to - . - - - - - Publish beacon immediately and continue to publish every second - - Beacon to transmit - - - - Stop publishing beacons. - - - - - Subscribe to beacon messages that match the specified filter. - - - Beacons must prefix-match with . - Any previous subscription is replaced by this one. - - Beacon will be filtered by this - - - - Unsubscribe to beacon messages - - - - - Receives the next beacon message, blocking until it arrives. - - - - - Receives the next beacon message if one is available before - expires. - - The maximum amount of time to wait for the next beacon message. - The received beacon message. - true if a beacon message was received, otherwise false. - - - - - - - - - - Contents of a message received from a beacon. - - - - - THe beacon content as a byte array. - - - - - The address of the peer that sent this message. Includes host name and port number. - - - - - The beacon content as a string. - - - Decoded using . Other encodings may be used with - directly. - - - - - The host name of the peer that sent this message. - - This is simply the value of without the port number. - - - - Cleanup library resources, call this method when your process is shutting-down. - - Set to true when you want to make sure sockets send all pending messages - - - - Get or set the default linger period for the all sockets, - which determines how long pending messages which have yet to be sent to a peer - shall linger in memory after a socket is closed. - - - This also affects the termination of the socket's context. - - -1: Specifies infinite linger period. Pending messages shall not be discarded after the socket is closed; - attempting to terminate the socket's context shall block until all pending messages have been sent to a peer. - - 0: The default value of specifies no linger period. Pending messages shall be discarded immediately when the socket is closed. - Positive values specify an upper bound for the linger period. Pending messages shall not be discarded after the socket is closed; - attempting to terminate the socket's context shall block until either all pending messages have been sent to a peer, - or the linger period expires, after which any pending messages shall be discarded. - - - - - Get or set the number of IO Threads NetMQ will create, default is 1. - 1 is good for most cases. - - - - - Get or set the maximum number of sockets. - - - - - Method is obsolete, call Cleanup instead - - - - - Method is obsolete, call Cleanup instead - - - - - Method is obsolete, call Cleanup instead - - Should the context block the thread while terminating. - - - - Method is obsolete, context created automatically - - - - - Base class for custom exceptions within the NetMQ library. - - - - Constructor for serialisation. - - - - Create a new NetMQException containing the given Exception, Message and ErrorCode. - - an Exception that this exception will expose via it's InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - an ErrorCode that this exception will expose via its ErrorCode property - - - - Create and return a new NetMQException with no Message containing only the given SocketException. - - a SocketException that this exception will expose via its InnerException property - a new NetMQException - - - - Create and return a new NetMQException with no Message containing the given SocketError and Exception. - - a SocketError that this exception will carry and expose via its ErrorCode property - an Exception that this exception will expose via its InnerException property - a new NetMQException - - - - Create and return a new NetMQException with no Message containing the given ErrorCode and Exception. - - an ErrorCode for this exception to contain and expose via its ErrorCode property - an Exception for this exception to contain and expose via its InnerException property - a new NetMQException - - - - Create and return a new NetMQException with no Message containing only the given ErrorCode. - - an ErrorCode that this exception will carry and expose via its ErrorCode property - a new NetMQException - - - - Create and return a new NetMQException with the given Message and ErrorCode. - - the textual description of what gave rise to this exception, to expose via the Message property - an ErrorCode that this exception will carry and expose via its ErrorCode property - a new NetMQException - - - - Create and return a new NetMQException with the given ErrorCode, Message, and Exception. - - an ErrorCode that this exception will contain and expose via its ErrorCode property - the textual description of what gave rise to this exception, to expose via the Message property - an Exception that this exception will expose via its InnerException property - a new NetMQException, or subclass of NetMQException that corresponds to the given ErrorCode - - - - AddressAlreadyInUseException is a NetMQException that is used within SocketBase.Bind to signal an address-conflict. - - - - - Create a new AddressAlreadyInUseException with a given inner-exception and message. - - an Exception for this new exception to contain and expose via its InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new AddressAlreadyInUseException with a given message. - - the textual description of what gave rise to this exception, to expose via the Message property - - - Constructor for serialisation. - - - - EndpointNotFoundException is a NetMQException that is used within Ctx.FindEndpoint to signal a failure to find a specified address. - - - - - Create a new EndpointNotFoundException with a given inner-exception and message. - - an Exception for this new exception to contain and expose via its InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new EndpointNotFoundException with a given message. - - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new EndpointNotFoundException with no message nor inner-exception. - - - - Constructor for serialisation. - - - - TerminatingException is a NetMQException that is used within SocketBase and Ctx to signal - that you're making the mistake of trying to do further work after terminating the message-queueing system. - - - - - Create a new TerminatingException with a given inner-exception and message. - - an Exception for this new exception to contain and expose via its InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new TerminatingException with no message nor inner-exception. - - - - Constructor for serialisation. - - - - InvalidException is a NetMQException that is used within the message-queueing system to signal invalid value errors. - - - - - Create a new InvalidException with a given inner-exception and message. - - an Exception for this new exception to contain and expose via its InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new InvalidException with the given message. - - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new InvalidException with no message nor inner-exception. - - - - Constructor for serialisation. - - - - FaultException is a NetMQException that is used within the message-queueing system to signal general fault conditions. - - - - - Create a new FaultException with a given inner-exception and message. - - an Exception for this new exception to contain and expose via its InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new FaultException with the given message. - - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new FaultException with no message nor inner-exception. - - - - Constructor for serialisation. - - - - ProtocolNotSupportedException is a NetMQException that is used within the message-queueing system to signal - mistakes in properly utilizing the communications protocols. - - - - - Create a new ProtocolNotSupportedException with a given inner-exception and message. - - an Exception for this new exception to contain and expose via its InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new ProtocolNotSupportedException with the given message. - - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new ProtocolNotSupportedException with no message nor inner-exception. - - - - Constructor for serialisation. - - - - HostUnreachableException is an Exception that is used within the message-queueing system - to signal failures to communicate with a host. - - - - - Create a new HostUnreachableException with a given inner-exception and message. - - an Exception for this new exception to contain and expose via its InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new HostUnreachableException with the given message. - - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new HostUnreachableException with no message nor inner-exception. - - - - Constructor for serialisation. - - - - FiniteStateMachineException is an Exception that is used within the message-queueing system - to signal errors in the send/receive order with request/response sockets. - - - - - Create a new FiniteStateMachineException with a given inner-exception and message. - - an Exception for this new exception to contain and expose via its InnerException property - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new FiniteStateMachineException with the given message. - - the textual description of what gave rise to this exception, to expose via the Message property - - - - Create a new FiniteStateMachineException with no message nor inner-exception. - - - - Constructor for serialisation. - - - - Objects of class NetMQFrame serve to hold a Buffer (that consists of a byte-array containing a unit of a message-queue message) - and provide methods to construct it given a string and an encoding. - - - - - This is the length of the byte-array data buffer. - - - - - This holds the computed hash-code for this object. - - - - - Create a new NetMQFrame containing the given byte-array data. - - a byte-array to hold as the frame's data - - - - Instantiates a frame from the provided byte array, considering only the specified number of bytes. - - This constructor may be useful to avoid copying data into a smaller array when a buffer is oversized. - The content of the frame. - The number bytes from to consider as part of the frame. - - - - Create a new NetMQFrame containing the given string-message, - using the default ASCII encoding. - - a string containing the message-data of the frame - - - - Create a new NetMQFrame containing the given string-message, - using the given encoding to convert it into a byte-array. - - a string containing the message-data of the frame - the Encoding to use to convert the given string-message into the internal byte-array - - - - Create a new NetMQFrame with a data-buffer pre-sized to the given length. - - the number of bytes to allocate for the data-buffer - length must be non-negative (zero or positive). - - - - Get or set the size of the message data contained in the frame, which here represents the number of bytes. - - The value must be between zero and BufferSize. - - - - Get the underlying frame-data buffer, which is an array of bytes. - - - - - Get the maximum size of the frame-data buffer (ie, the number of bytes of the array). - - - - - Get a new empty that may be used as message separators. - - - - - Get whether this NetMQFrame is empty - that is, has a Buffer of zero-length. - - - - - Create and return a new NetMQFrame with a copy of the supplied byte-array buffer. - - the byte-array to copy into the new NetMQFrame - a new containing a copy of the supplied byte-array - is null. - - - - Return this frame's data-buffer converted into a string, using the default ASCII encoding. - - the data buffer converted to a string - - - - Return this frame's data-buffer converted into a string using the given encoding. - - the Encoding to use to convert the internal byte-array buffer into a string - the data buffer converted to a string - - - - Convert the buffer to integer in network byte order (big-endian) - - - - - - Convert the buffer to long in network byte order (big-endian) - - - - - - Create a deep-copy of the supplied . - - the to copy - - a containing a copy of - - is null. - - - - Create a deep-copy of this NetMQFrame and return it. - - a new NetMQFrame containing a copy of this one's buffer data - - - - Return true if the buffer of this NetMQFrame is equal to the given byte-array. - - a byte-array buffer to compare this frame against - - - - - Determine whether the specified is equal to the current - . - - - the to compare with the current - . - - true if the specified NetMQFrame is equal to this one; otherwise, false - - - - Return true if the given Object is a NetMQFrame which has a Buffer that is identical to that of this one. - - the Object to compare this to - true only if the given Object is a NetMQFrame equal to this one - - - - Return true if this one and the other NetMQFrame are equal, or both are null. - - one frame to compare against the other - the other frame to compare - true if both frames are equal - - - - Return true if this one and the other NetMQFrame NOT are equal. - - one frame to compare against the other - the other frame to compare - false if both frames are equal - - - - Override the Object.GetHashCode method to return a hash-code derived from the content of the Buffer. - That is only computed the first time this method is called. - - an integer that represents the computed hash-code - - - - Return an array of bytes that carries the content of this NetMQFrames Buffer. - - if this argument is true - a new copy is made if BufferSize is equal to MessageSize - the Buffer as a byte-array, either newly-allocated or else (if copy is false) simply a reference to the actual Buffer - - - - This namespace encompasses the NetMQ message-queueing library - and attendant utility software. - - - - - A NetMQMessage is basically a collection of NetMQFrames, and is the basic message-unit that is sent and received - across this message-queueing subsystem. - - - - - This is the frame-stack that comprises the message-content of this message. - - - - - The default-constructor for NetMQMessage: create a new instance of NetMQMessage - with an empty frame-stack. - - - - - Create a new instance of a NetMQMessage that contains the given collection of NetMQFrames as its frame-stack. - - a collection of NetMQFrames, to form the frame-stack - The value of 'frames' cannot be null. - - - - Create a new instance of a NetMQMessage that contains the given collection of byte-arrays as its frame-stack. - - a collection of byte-array buffers, to form the frame-stack - The value of 'buffers' cannot be null. - - - - Gets the first frame in the current message. - - - - - Gets the last frame in the current message. - - - - - Gets a value indicating whether the current message is empty. - - - - - Gets the number of objects contained by this message. - - - - - Gets the at the specified index. - - The zero-based index of the to get. - The at the specified index. - - is less than 0 -or- is equal to or greater than - . - - - - - Add the given NetMQFrame to this NetMQMessage, at the highest-indexed position of the frame-stack. - - a NetMQFrame object comprising the frame to be appended onto the frame-stack - - - - Add the given data (in this case a byte-array) to this NetMQMessage, at the highest-indexed position of the frame-stack. - Data is not copied. - - a byte-array containing the message to append onto the frame-stack of this NetMQMessage - - - - Add the given string - which gets converted into a NetMQFrame - onto - the highest-indexed position of the frame-stack of this NetMQMessage. - - a string containing the message to append onto the frame-stack of this NetMQMessage - - - - Add the given string - which gets converted into a NetMQFrame - onto - the highest-indexed position of the frame-stack of this NetMQMessage. - - a string containing the message to append onto the frame-stack of this NetMQMessage - an Encoding that specifies how to convert the string into bytes - - - - Convert the given integer value into an array of bytes and add it as a new frame onto this NetMQMessage. - - a 32-bit integer value that is to be converted into bytes and added to this message - - - - Convert the given long value into an array of bytes and add it as a new frame onto this NetMQMessage. - - a 64-bit number that is to be converted into bytes and added to this message - - - - Add an empty frame to this NetMQMessage. - - - - - Push the given NetMQFrame into the frame-stack of this NetMQMessage. - - the NetMQFrame to be inserted into the frame-stack - - The concept is the same as pushing an element onto a stack. - This inserts the given NetMQFrame into the lowest-indexed position of this NetMQMessage, - pushing all of the other frames upward in index-position. - - - - - Push a new frame containing the given byte-array into the frame-stack of this NetMQMessage. - - the byte-array to create a new frame from - - The concept is the same as pushing an element onto a stack. - This creates a new frame from the given data (in this case a byte-array) and inserts it into the lowest-indexed position of - the collection of frames of this NetMQMessage, - pushing all of the other frames upward in index-position. - - - - - Push a new frame containing the given string (converted into a byte-array) into the frame-stack of this NetMQMessage. - - the string to create a new frame from - - The concept is the same as pushing an element onto a stack. - This creates a new frame from the given data (in this case a string which gets converted into a byte-array using the default ASCII encoding) and inserts it into the lowest-indexed position of - the collection of frames of this NetMQMessage, - pushing all of the other frames upward in index-position. - - - - - Push a new frame containing the given string (converted into a byte-array) into the frame-stack of this NetMQMessage. - - the string to create a new frame from - the Encoding that dictates how to encode the string into bytes - - The concept is the same as pushing an element onto a stack. - This creates a new frame from the given data (in this case a string which gets converted into a byte-array using the given Encoding) and inserts it into the lowest-indexed position of - the collection of frames of this NetMQMessage, - pushing all of the other frames upward in index-position. - - - - - Push a new frame containing the given integer (converted into a byte-array) into the frame-stack of this NetMQMessage. - - the integer to create a new frame from - - The concept is the same as pushing an element onto a stack. - This creates a new frame from the given data (in this case a 32-bit integer which gets converted into a byte-array in big-endian order) and inserts it into the lowest-indexed position of - the collection of frames of this NetMQMessage, - pushing all of the other frames upward in index-position. - - - - - Push a new frame containing the given long (converted into a byte-array) into the frame-stack of this NetMQMessage. - - the 64-bit number to create a new frame from - - The concept is the same as pushing an element onto a stack. - This creates a new frame from the given data (in this case a 64-bit long which gets converted into a byte-array in big-endian order) and inserts it into the lowest-indexed position of - the collection of frames of this NetMQMessage, - pushing all of the other frames upward in index-position. - - - - - Push an empty frame (a NetMQFrame.Empty) onto the frame-stack. - - - - - Remove and return the first frame. - - the first frame, which was popped - which is the frame from the lowest-indexed position - - - - Delete the given frame from the frame-stack. - - the frame to remove - true if removed, otherwise false. - - - - Clear (empty) the frame-stack, so that it no longer contains any frames. - - - - - Return an enumerator over the frames contained within this message. - - an IEnumerator over the frames in this message - - - - Return an enumerator over the frames contained within this message. - - an IEnumerator over the frames in this message - - - - Returns a string showing the frame contents. - - - - - - Get whether the caller is running on the scheduler's thread. - If true, the caller can execute tasks directly (inline). - If false, the caller must start a on this scheduler. - - - This property enables avoiding the creation of a - object and - potential delays to its execution due to queueing. In most cases this is just - an optimisation. - - - - if (scheduler.CanExecuteTaskInline) - { - socket.Send(...); - } - else - { - var task = new Task(() => socket.Send(...)); - task.Start(scheduler); - } - - - - - - Returns 1, as runs a single thread and all tasks must execute on that thread. - - - - - Not supported. - - Always thrown. - - - - Get whether this object is currently polling its sockets and timers. - - - - - Runs the poller in a background thread, returning once the poller has started. - - - The created thread is named "NetMQPollerThread". Use - to specify the thread name. - - - - - Runs the poller in a background thread, returning once the poller has started. - - The thread name to use. - - - - Runs the poller on the caller's thread. Only returns when - or are called from another thread. - - - - - Stops the poller. - - - If called from a thread other than the poller thread, this method will block until the poller has stopped. - If called from the poller thread it is not possible to block. - - - - - Stops the poller, returning immediately and most likely before the poller has actually stopped. - - - - This class only implements in order to support collection initialiser syntax. - An empty enumerator. - - - - Stops and disposes the poller. The poller may not be used once disposed. - - - Note that you cannot dispose the poller on the poller's thread. Doing so immediately throws an exception. - - A socket in the poller has been disposed. - Dispose called from the poller thread. - - - Dispatches an asynchronous message to a synchronization context. - - - Dispatches a synchronous message to a synchronization context. - - - - Class to quickly handle incoming messages of socket. - New thread is created to handle the messages. Call dispose to stop the thread. - Provided socket will not be disposed by the class. - - - - - Create NetMQProactor and start dedicate thread to handle incoming messages. - - Socket to handle messages from - Handler to handle incoming messages - - - - Stop the proactor. Provided socket will not be disposed. - - - - - Multi producer single consumer queue which you can poll on with a Poller. - - Type of the item in queue - - - - Create new NetMQQueue. - - The capacity of the queue, use zero for unlimited - - - - Register for this event for notification when there are items in the queue. Queue must be added to a poller for this to work. - - - - - Try to dequeue an item from the queue. Dequeueing and item is not thread safe. - - Will be filled with the item upon success - Timeout to try and dequeue and item - Will return false if it didn't succeed to dequeue an item after the timeout. - - - - Dequeue an item from the queue, will block if queue is empty. Dequeueing and item is not thread safe. - - Dequeued item - - - - Enqueue an item to the queue, will block if the queue is full. - - - - - - Dispose the queue. - - - - - For selecting on and regular .NET - objects. - - - This is for advanced scenarios only. - Most use cases are better served by . - - - - - Selector Item used to hold the NetMQSocket/Socket and PollEvents - - - - - Select on NetMQSocket or Socket, similar behavior to Socket.Select. - - Items to select on (must not be null) - Number of items in the array to select on - a time-out period, in milliseconds - - The internal select operation failed. - is null. - The socket has been stopped. - - - - Abstract base class for NetMQ's different socket types. - - - Various options are available in this base class, though their affect can vary by socket type. - - - - - Create a new NetMQSocket with the given . - - Type of socket to create - - - - - - Create a new NetMQSocket with the given . - - a SocketBase object to assign to the new socket - - - - This event occurs when at least one message may be received from the socket without blocking. - - - This event is raised when a is added to a running - . - - - - - This event occurs when at least one message may be sent via the socket without blocking. - - - This event is raised when a is added to a running - . - - - - - Fires when either the or - event is set. - - - - - Raise the event. - - - - - Get or set an integer that represents the number of errors that have accumulated. - - - - - Get the of this socket. - - - - - Get the underlying . - - - - - Bind the socket to . - - a string representing the address to bind this socket to - thrown if the socket was already disposed - The socket has been stopped. - The specified address is already in use. - - No IO thread was found, or the protocol's listener encountered an - error during initialisation. - - - - Binds the specified TCP to an available port, assigned by the operating system. - the chosen port-number - thrown if the socket was already disposed - uses a protocol other than TCP. - The socket has been stopped. - The specified address is already in use. - - No IO thread was found, or the protocol's listener errored during - initialisation. - - - - - Connect the socket to . - - a string denoting the address to connect this socket to - thrown if the socket was already disposed - The socket has been stopped. - No IO thread was found. - The specified address is already in use. - - - - Disconnect this socket from . - - a string denoting the address to disconnect from - thrown if the socket was already disposed - The socket has been stopped. - Endpoint was not found and cannot be disconnected. - - - - Unbind this socket from . - - a string denoting the address to unbind from - thrown if the socket was already disposed - The socket has been stopped. - Endpoint was not found and cannot be disconnected. - - - - Closes this socket, rendering it unusable. Equivalent to calling - . - - - - - Wait until a message is ready to be received from the socket. - - - - - Wait until a message is ready to be received/sent from this socket or until timeout is reached. - If a message is available, the ReceiveReady/SendReady event is fired. - - a TimeSpan that represents the timeout-period - true if a message was available within the timeout, false otherwise - - - - Poll this socket, which means wait for an event to happen within the given timeout period. - - the poll event(s) to listen for - the timeout period - - PollEvents.None -> no message available - PollEvents.PollIn -> at least one message has arrived - PollEvents.PollOut -> at least one message is ready to send - PollEvents.Error -> an error has occurred - or any combination thereof - - The internal select operation failed. - The socket has been stopped. - - - - Return a value that indicates which bit-flags have a corresponding listener, - with PollError always set, - and PollOut set based upon m_sendReady - and PollIn set based upon m_receiveReady. - - a PollEvents value that denotes which events have a listener - - - - Unless this socket is closed, - based upon the given PollEvents - raise the m_receiveReady event if PollIn is set, - and m_sendReady if PollOut is set. - - what to use as the source of the events - the given PollEvents that dictates when of the two events to raise - - - Attempt to receive a message for the specified amount of time. - - A reference to a instance into which the received message - data should be placed. - - The maximum amount of time the call should wait for a message before returning. - - true if a message was received before elapsed, - otherwise false. - - - - - Send a message if one is available within . - - An object with message's data to send. - - The maximum length of time to try and send a message. If - , no - wait occurs. - - Indicate if another frame is expected after this frame - true if a message was sent, otherwise false. - - - - Listen to the given endpoint for SocketEvent events. - - A string denoting the endpoint to monitor - - The specific events to report on. Defaults to - if omitted. - - is null. - cannot be empty or whitespace. - This object is already disposed. - - The protocol of - is not supported. - - The socket has been stopped. - Maximum number of sockets reached. - - - - Get whether a message is waiting to be picked up (true if there is, false if there is none). - - The socket has been stopped. - - - - Get whether a message is waiting to be sent. - - - This is true if at least one message is waiting to be sent, false if there is none. - - The socket has been stopped. - - - - Get the integer-value of the specified . - - a ZmqSocketOption that specifies what to get - an integer that is the value of that option - The socket has been stopped. - This object is already disposed. - - - - Get the (generically-typed) value of the specified - . - - a ZmqSocketOption that specifies what to get - an object of the given type, that is the value of that option - The socket has been stopped. - This object is already disposed. - - - - Get the value of the specified ZmqSocketOption. - - a ZmqSocketOption that specifies what to get - a TimeSpan that is the value of that option - The socket has been stopped. - - - - Get the 64-bit integer-value of the specified . - - a ZmqSocketOption that specifies what to get - a long that is the value of that option - The socket has been stopped. - - - - Assign the given integer value to the specified . - - a ZmqSocketOption that specifies what to set - an integer that is the value to set that option to - The socket has been stopped. - This object is already disposed. - - - - Assign the given TimeSpan to the specified . - - a ZmqSocketOption that specifies what to set - a TimeSpan that is the value to set that option to - The socket has been stopped. - - - - Assign the given Object value to the specified . - - a ZmqSocketOption that specifies what to set - an object that is the value to set that option to - The socket has been stopped. - This object is already disposed. - - - - Closes this socket, rendering it unusable. Equivalent to calling - . - - - - - Closes this socket, rendering it unusable. Equivalent to calling - . - - true if releasing managed resources - - - - - - - This subclass of EventArgs contains a NetMQSocket, - and IsReadyToReceive and IsReadyToSend flags to indicate whether ready to receive or send. - - - - - Create a new NetMQSocketEventArgs referencing the given socket. - - the NetMQSocket that this is in reference to - - - - Initialise the ReceiveReady and SendReady flags from the given PollEvents value. - - a PollEvents value that indicates whether the socket is ready to send or receive without blocking - - - - Get the NetMQSocket that this references. - - - - - Get whether at least one message may be received by the socket without blocking. - - - - - Get whether at least one message may be sent by the socket without blocking. - - - - - Class NetMQTimerEventArgs is an EventArgs that contains a reference to a NetMQTimer. - - - - - Create a new NetMQTimerEventArgs that contains a reference to the given NetMQTimer. - - the NetMQTimer to hold a reference to - - - - Get the NetMQTimer that this has a reference to. - - - - - A NetMQTimer instance provides the state-information for a timer function, - which is periodically checked by a Poller or a NetMQBeacon. - - - - - A pre-constructed NetMQTimerEventArgs to use whenever raising the Elapsed event. - - - - - This is the timer-interval in milliseconds. - - - - - This flag dictates whether this timer is currently enabled. - - - - - This event is used to signal when the timer has expired. - - - - - Create a new NetMQTimer with the timer-interval specified by the given TimeSpan. - - a TimeSpan that denotes the timer-interval - - This sets the When property to an initial value of -1, to indicate it no future-time applies as yet. - - - - - Create a new NetMQTimer with the given timer-interval in milliseconds. - - an integer specifying the timer-interval in milliseconds - - This sets the When property to an initial value of -1, to indicate it no future-time applies as yet. - - - - - Get or set the timer-interval, in milliseconds. - - - When setting this, When is set to the future point in time from now at which the interval will expire (or -1 if not Enabled). - - - - - Get or set whether this NetMQTimer is on. - - - When setting this to true, When is set to the future point in time from now at which the interval will expire. - When setting this to false, When is set to -1. - - - - - Get or set the value of the low-precision timestamp (a value in milliseconds) that signals when the timer is to expire, - or -1 if not applicable at this time. - - - - - Enable the timer and reset the interval - - - - - If there are any subscribers - raise the Elapsed event. - - the sender to include within the event's event-args - - - - This static class serves to convert between byte-arrays, and various integer sizes - - all of which assume the byte-data is in Big-endian, or "Network Byte Order". - - - - - Given a byte-array assumed to be in Big-endian order, and an offset into it - - return a 16-bit integer derived from the 2 bytes starting at that offset. - - the byte-array to get the short from - - - - - Given a 16-bit integer, return it as a byte-array in Big-endian order. - - the short to convert - a 2-byte array containing that short's bits - - - - Given a 16-bit integer, and a byte-array buffer and offset, - - write the 2 bytes of that integer into the buffer starting at that offset, in Big-endian order. - - the short to convert into bytes - the byte-array to write the short's bytes into - - - - Given a byte-array assumed to be in Big-endian order, and an offset into it - - return a 32-bit integer derived from the 4 bytes starting at that offset. - - the byte-array to get the integer from - - - - - Given a 32-bit integer, return it as a byte-array in Big-endian order. - - the int to convert - a 4-byte array containing that integer's bits - - - - Given a 32-bit integer, and a byte-array buffer and offset, - - write the 4 bytes of that integer into the buffer starting at that offset, in Big-endian order. - - the integer to convert into bytes - the byte-array to write the integer's bytes into - - - - Given a byte-array assumed to be in Big-endian order, and an offset into it - - return a 64-bit integer derived from the 8 bytes starting at that offset. - - the byte-array to get the Int64 from - - - - - Given a 64-bit integer, return it as a byte-array in Big-endian order. - - The long value to convert from. - The network order presentation of as an 8-byte array. - - - - Given a 64-bit integer, and a byte-array buffer and offset, - - write the 8 bytes of that integer into the buffer starting at that offset, in Big-endian order. - - the long value to convert into bytes - the byte-array to write the long value's bytes into - - - - This static class serves to provide extension methods for IOutgoingSocket. - - - - - Block until the message can be sent. - - - The call blocks until the message can be sent and cannot be interrupted. - Whether the message can be sent depends on the socket type. - - The socket to send the message on. - An object with message's data to send. - Indicate if another frame is expected after this frame - - - - Transmit a byte-array of data over this socket, block until frame is sent. - - the IOutgoingSocket to transmit on - the byte-array of data to send - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - - - - Transmit a byte-array of data over this socket, block until frame is sent. - - the IOutgoingSocket to transmit on - the byte-array of data to send - the number of bytes to send from . - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - - - - Transmit a byte-array of data over this socket, block until frame is sent. - Send more frame, another frame must be sent after this frame. Use to chain Send methods. - - the IOutgoingSocket to transmit on - the byte-array of data to send - a reference to this IOutgoingSocket so that method-calls may be chained together - - - - Transmit a byte-array of data over this socket, block until frame is sent. - Send more frame, another frame must be sent after this frame. Use to chain Send methods. - - the IOutgoingSocket to transmit on - the byte-array of data to send - the number of bytes to send from . - a reference to this IOutgoingSocket so that method-calls may be chained together - - - - Attempt to transmit a single frame on . - If message cannot be sent within , return false. - - the IOutgoingSocket to transmit on - The maximum period of time to try to send a message. - the byte-array of data to send - the number of bytes to send from . - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - true if a message was available, otherwise false. - - - - Attempt to transmit a single frame on . - If message cannot be sent within , return false. - - the IOutgoingSocket to transmit on - The maximum period of time to try to send a message. - the byte-array of data to send - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - true if a message was available, otherwise false. - - - - Attempt to transmit a single frame on . - If message cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - the byte-array of data to send - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - true if a message was available, otherwise false. - - - - Attempt to transmit a single frame on . - If message cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - the byte-array of data to send - the number of bytes to send from . - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - true if a message was available, otherwise false. - - - - Send multiple frames on , blocking until all frames are sent. - - the IOutgoingSocket to transmit on - frames to transmit - - - - Send multiple frames on , blocking until all frames are sent. - - the IOutgoingSocket to transmit on - frames to transmit - - - - Attempt to transmit a multiple frames on . - If frames cannot be sent within , return false. - - the IOutgoingSocket to transmit on - The maximum period of time to try to send a message. - frames to transmit - - - - Attempt to transmit a multiple frames on . - If frames cannot be sent within , return false. - - the IOutgoingSocket to transmit on - The maximum period of time to try to send a message. - frames to transmit - - - - Attempt to transmit a multiple frames on . - If frames cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - frames to transmit - - - - Attempt to transmit a multiple frames on . - If frames cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - frames to transmit - - - - Transmit a string over this socket, block until frame is sent. - - the IOutgoingSocket to transmit on - the string to send - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - - - - Transmit a string over this socket, block until frame is sent. - Send more frame, another frame must be sent after this frame. Use to chain Send methods. - - the IOutgoingSocket to transmit on - the string to send - a reference to this IOutgoingSocket so that method-calls may be chained together - - - - Attempt to transmit a single string frame on . - If message cannot be sent within , return false. - - the IOutgoingSocket to transmit on - The maximum period of time to try to send a message. - the string to send - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - true if a message was available, otherwise false. - - - - Attempt to transmit a single string frame on . - If message cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - the string to send - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - true if a message was available, otherwise false. - - - - Send multiple message on , blocking until all entire message is sent. - - the IOutgoingSocket to transmit on - message to transmit - - - - Attempt to transmit a multiple message on . - If message cannot be sent within , return false. - - the IOutgoingSocket to transmit on - The maximum period of time to try to send a message. - message to transmit - - - - Attempt to transmit a multiple message on . - If frames cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - message to transmit - - - - Transmit an empty frame over this socket, block until frame is sent. - - the IOutgoingSocket to transmit on - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - - - - Transmit an empty frame over this socket, block until frame is sent. - Send more frame, another frame must be sent after this frame. Use to chain Send methods. - - the IOutgoingSocket to transmit on - a reference to this IOutgoingSocket so that method-calls may be chained together - - - - Attempt to transmit an empty frame on . - If message cannot be sent within , return false. - - the IOutgoingSocket to transmit on - The maximum period of time to try to send a message. - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - true if a message was available, otherwise false. - - - - Attempt to transmit an empty frame on . - If message cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - set this flag to true to signal that you will be immediately sending another frame (optional: default is false) - true if a message was available, otherwise false. - - - - Transmit a status-signal over this socket. - - the IOutgoingSocket to transmit on - a byte that contains the status signal to send - - - - Attempt to transmit a status-signal over this socket. - If signal cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - a byte that contains the status signal to send - - - - Transmit a specific status-signal over this socket that indicates OK. - - the IOutgoingSocket to transmit on - - - - Attempt to transmit a specific status-signal over this socket that indicates OK. - If signal cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - - - - Transmit a specific status-signal over this socket that indicates there is an error. - - the IOutgoingSocket to transmit on - - - - Attempt to transmit a specific status-signal over this socket that indicates there is an error. - If signal cannot be sent immediately, return false. - - the IOutgoingSocket to transmit on - - - - This flags enum-type is simply an indication of the direction of the poll-event, - and can be None, PollIn, PollOut, or PollError. - - - - - Extension methods for the enum. - - - - - Test whether has the - flag set. - - - - - Test whether has the - flag set. - - - - - Test whether has the - flag set. - - - - - Forwards messages bidirectionally between two sockets. You can also specify a control socket tn which proxied messages will be sent. - - - This class must be explicitly started by calling . If an external - has been specified, - then that call will block until is called. - - If using an external , ensure the front and back end sockets have been added to it. - - Users of this class must call when messages should no longer be proxied. - - - - - Create a new instance of a Proxy (NetMQ.Proxy) - with the given sockets to serve as a front-end, a back-end, and a control socket. - - the socket that messages will be forwarded from - the socket that messages will be forwarded to - this socket will have incoming messages also sent to it - you can set this to null if not needed - this socket will have outgoing messages also sent to it - you can set this to null if not needed - an optional external poller to use within this proxy - - - - Create a new instance of a Proxy (NetMQ.Proxy) - with the given sockets to serve as a front-end, a back-end, and a control socket. - - the socket that messages will be forwarded from - the socket that messages will be forwarded to - this socket will have messages also sent to it - you can set this to null if not needed - an optional external poller to use within this proxy - - is not - null and either or are not contained within it. - - - - - Start proxying messages between the front and back ends. Blocks, unless using an external - . - - The proxy has already been started. - - - - Stops the proxy, blocking until the underlying has completed. - - The proxy has not been started. - - - - Provides extension methods for the interface, - via which messages may be received in several ways. - - - - - Block until the next message arrives, then make the message's data available via - . - - - The call blocks until the next message arrives, and cannot be interrupted. This a convenient and safe when - you know a message is available, such as for code within a - callback. - - The socket to receive from. - An object to receive the message's data into. - - - - Receive a single frame from , blocking until one arrives. - - The socket to receive from. - The content of the received message frame. - - - - Receive a single frame from , blocking until one arrives. - Indicate whether further frames exist via . - - The socket to receive from. - - true if another frame of the same message follows, otherwise - false. - - The content of the received message frame. - - - - Attempt to receive a single frame from . - If no message is immediately available, return false. - - The socket to receive from. - The content of the received message frame, or null if no message was available. - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from . - If no message is immediately available, return false. - Indicate whether further frames exist via . - - The socket to receive from. - - true if another frame of the same message follows, otherwise - false. - - The content of the received message frame, or null if no message was available. - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - The content of the received message frame, or null if no message was available. - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from . - If no message is available within , return false. - Indicate whether further frames exist via . - - The socket to receive from. - - true if another frame of the same message follows, otherwise - false. - - The maximum period of time to wait for a message to become available. - The content of the received message frame, or null if no message was available. - true if a message was available, otherwise false. - - - - Receive all frames of the next message from , blocking until a message arrives. - - The socket to receive from. - - Optional initial - for the returned - . - - All frames of a multipart message as a list having one or more items. - - - - Receive all frames of the next message from , blocking until a message arrives. - - The socket to receive from. - Reference to a list for return values. If null a new instance will be assigned, otherwise the provided list will be cleared and populated. - - Optional initial - for the returned - . - - - - - Attempt to receive all frames of the next message from . - If no message is immediately available, return false. - - The socket to receive from. - Reference to a list for return values. If null a new instance will be assigned, otherwise the provided list will be cleared and populated. - - Optional initial - for the returned - . - - - - - Attempt to receive all frames of the next message from . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - Reference to a list for return values. If null a new instance will be assigned, otherwise the provided list will be cleared and populated. - - Optional initial - for the returned - . - - - - - Receive a single frame from , blocking until one arrives, and decode as a string using - . - - The socket to receive from. - The content of the received message frame as a string. - - - - Receive a single frame from , blocking until one arrives, and decode as a string using - . - Indicate whether further frames exist via . - - The socket to receive from. - - true if another frame of the same message follows, otherwise - false. - - The content of the received message frame. - - - - Receive a single frame from , blocking until one arrives, and decode as a string using - . - - The socket to receive from. - The encoding used to convert the frame's data to a string. - The content of the received message frame as a string. - - - - Receive a single frame from , blocking until one arrives, and decode as a string using - . - Indicate whether further frames exist via . - - The socket to receive from. - The encoding used to convert the frame's data to a string. - - true if another frame of the same message follows, otherwise - false. - - The content of the received message frame as a string. - - - - Attempt to receive a single frame from , and decode as a string using - . - If no message is immediately available, return false. - - The socket to receive from. - - The content of the received message frame as a string, or null - if no message was available. - - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from , and decode as a string using - . - If no message is immediately available, return false. - - The socket to receive from. - - The content of the received message frame as a string, or null - if no message was available. - - - true if another frame of the same message follows, otherwise - false. - - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from , and decode as a string using - . - If no message is immediately available, return false. - - The socket to receive from. - The encoding used to convert the frame's data to a string. - - The content of the received message frame as a string, or null - if no message was available. - - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from , and decode as a string using - . - If no message is immediately available, return false. - - The socket to receive from. - The encoding used to convert the frame's data to a string. - - The content of the received message frame as a string, or null - if no message was available. - - - true if another frame of the same message follows, otherwise - false. - - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from , and decode as a string using - . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - - The content of the received message frame as a string, or null - if no message was available. - - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from , and decode as a string using - . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - - The content of the received message frame as a string, or null - if no message was available. - - - true if another frame of the same message follows, otherwise - false. - - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from , and decode as a string using - . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - The encoding used to convert the frame's data to a string. - - The content of the received message frame as a string, or null - if no message was available. - - true if a message was available, otherwise false. - - - - Attempt to receive a single frame from , and decode as a string using - . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - The encoding used to convert the frame's data to a string. - - The content of the received message frame as a string, or null - if no message was available. - - - true if another frame of the same message follows, otherwise - false. - - true if a message was available, otherwise false. - - - - Receive all frames of the next message from , blocking until they arrive, and decode as strings using - . - - The socket to receive from. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - The content of the received message frame as a string. - - - - Receive all frames of the next message from , blocking until they arrive, and decode as strings using - . - - The socket to receive from. - The encoding used to convert the frame's data to a string. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - - - - Attempt to receive all frames of the next message from , and decode them as strings using - . - If no message is immediately available, return false. - - The socket to receive from. - The frames of the received message as strings. Untouched if no message was available. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - true if a message was available, otherwise false. - - - - Attempt to receive all frames of the next message from , and decode them as strings using - . - If no message is immediately available, return false. - - The socket to receive from. - The encoding used to convert the frame's data to a string. - The frames of the received message as strings. Untouched if no message was available. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - true if a message was available, otherwise false. - - - - Attempt to receive all frames of the next message from , and decode them as strings using - . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - The frames of the received message as strings. Untouched if no message was available. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - true if a message was available, otherwise false. - - - - Attempt to receive all frames of the next message from , and decode them as strings using - . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - The encoding used to convert the frame's data to a string. - The frames of the received message as strings. Untouched if no message was available. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - true if a message was available, otherwise false. - - - - Receive all frames of the next message from , blocking until they arrive. - - The socket to receive from. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - The content of the received message frame as a string. - - - - Attempt to receive all frames of the next message from . - If no message is immediately available, return false. - - The socket to receive from. - The received message. Untouched if no message was available. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - true if a message was available, otherwise false. - - - - Attempt to receive all frames of the next message from . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - The received message. Untouched if no message was available. - - Specifies the initial capacity of the used - to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, - an extra allocation will occur, but the result will still be correct. - - true if a message was available, otherwise false. - - - - Receive frames from , blocking until a valid signal arrives. - - The socket to receive from. - true if the received signal was zero, otherwise false. - - - - Attempt to receive a valid signal from . - If no message is immediately available, return false. - - The socket to receive from. - - true if the received signal was zero, otherwise false. If no signal received, - false. - - true if a valid signal was observed, otherwise false. - - - - Attempt to receive a valid signal from . - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - - true if the received signal was zero, otherwise false. If no signal received, - false. - - true if a valid signal was observed, otherwise false. - - - - Receive a single frame from , blocking until one arrives, then ignore its content. - - The socket to receive from. - - - - Receive a single frame from , blocking until one arrives, then ignore its content. - Indicate whether further frames exist via . - - The socket to receive from. - - true if another frame of the same message follows, otherwise - false. - - - - - Attempt to receive a single frame from , then ignore its content. - If no message is immediately available, return false. - - The socket to receive from. - true if a frame was received and ignored, otherwise false. - - - - Attempt to receive a single frame from , then ignore its content. - If no message is immediately available, return false. - Indicate whether further frames exist via . - - The socket to receive from. - - true if another frame of the same message follows, otherwise - false. - - true if a frame was received and ignored, otherwise false. - - - - Attempt to receive a single frame from , then ignore its content. - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - true if a frame was received and ignored, otherwise false. - - - - Attempt to receive a single frame from , then ignore its content. - If no message is available within , return false. - Indicate whether further frames exist via . - - The socket to receive from. - The maximum period of time to wait for a message to become available. - - true if another frame of the same message follows, otherwise - false. - - true if a frame was received and ignored, otherwise false. - - - - Receive all frames of the next message from , blocking until a message arrives, then ignore their contents. - - The socket to receive from. - - - - Attempt to receive all frames of the next message from , then ignore their contents. - If no message is immediately available, return false. - - The socket to receive from. - true if a frame was received and ignored, otherwise false. - - - - Attempt to receive all frames of the next message from , then ignore their contents. - If no message is available within , return false. - - The socket to receive from. - The maximum period of time to wait for a message to become available. - true if a frame was received and ignored, otherwise false. - - - - The used in string related methods that do - not explicitly provide an encoding parameter. - - - - Indicates an infinite timeout for send and receive operations. - - - - This enum-type specifies socket transport events (TCP and IPC only). - - - - - A SocketOptions is simply a convenient way to access the options of a particular socket. - This class holds a reference to the socket, and it's properties provide a concise way - to access that socket's option values -- instead of calling GetSocketOption/SetSocketOption. - - - - - The NetMQSocket that this SocketOptions is referencing. - - - - - Create a new SocketOptions that references the given NetMQSocket. - - the NetMQSocket for this SocketOptions to hold a reference to - - - - Get or set the I/O-thread affinity. This is a 64-bit value used to specify which threads from the I/O thread-pool - associated with the socket's context shall handle newly-created connections. - 0 means no affinity, meaning that work shall be distributed fairly among all I/O threads. - For non-zero values, the lowest bit corresponds to thread 1, second lowest bit to thread 2, and so on. - - - - - Get or set unique identity of the socket, from a message-queueing router's perspective. - This is a byte-array of at most 255 bytes. - - - - - Get or set the maximum send or receive data rate for multicast transports on the specified socket. - - - - - Get or set the recovery-interval for multicast transports using the specified socket. - This option determines the maximum time that a receiver can be absent from a multicast group - before unrecoverable data loss will occur. Default is 10,000 ms (10 seconds). - - - - - Get or set the size of the transmit buffer for the specified socket. - - - - - Get or set the size of the receive buffer for the specified socket. - A value of zero means that the OS default is in effect. - - - - - Gets whether the last frame received on the socket had the more flag set or not. - - true if receive more; otherwise, false. - - - - Get or set the linger period for the specified socket, - which determines how long pending messages which have yet to be sent to a peer - shall linger in memory after a socket is closed. - - - If socket created with Context default is -1 if socket created without socket (using new keyword) default is zero. - If context is used this also affects the termination of context, otherwise this affects the exit of the process. - -1: Specifies an infinite linger period. Pending messages shall not be discarded after the socket is closed; - attempting to terminate the socket's context shall block until all pending messages have been sent to a peer. - 0: Specifies no linger period. Pending messages shall be discarded immediately when the socket is closed. - Positive values specify an upper bound for the linger period. Pending messages shall not be discarded after the socket is closed; - attempting to terminate the socket's context shall block until either all pending messages have been sent to a peer, - or the linger period expires, after which any pending messages shall be discarded. - - - - - Get or set the initial reconnection interval for the specified socket. - This is the period to wait between attempts to reconnect disconnected peers - when using connection-oriented transports. The default is 100 ms. - -1 means no reconnection. - - - With ZeroMQ, the reconnection interval may be randomized to prevent reconnection storms - in topologies with a large number of peers per socket. - - - - - Get or set the maximum reconnection interval for the specified socket. - This is the maximum period to shall wait between attempts - to reconnect. On each reconnect attempt, the previous interval shall be doubled - until this maximum period is reached. - The default value of zero means no exponential backoff is performed. - - - This is the maximum period NetMQ shall wait between attempts - to reconnect. On each reconnect attempt, the previous interval shall be doubled - until this maximum period is reached. - This allows for an exponential backoff strategy. - The default value of zero means no exponential backoff is performed - and reconnect interval calculations are only based on ReconnectIvl. - - - - - Get or set the maximum length of the queue of outstanding peer connections - for the specified socket. This only applies to connection-oriented transports. - Default is 100. - - - - - Get or set the upper limit to the size for inbound messages. - If a peer sends a message larger than this it is disconnected. - The default value is -1, which means no limit. - - - - - Get or set the high-water-mark for transmission. - This is a hard limit on the number of messages that are allowed to queue up - before mitigative action is taken. - The default is 1000. - - - - - Get or set the high-water-mark for reception. - This is a hard limit on the number of messages that are allowed to queue up - before mitigative action is taken. - The default is 1000. - - - - - The low-water mark for message transmission. - This is the number of messages that should be processed before transmission is - unblocked (in case it was blocked by reaching high-watermark). The default value is - calculated using relevant high-watermark (HWM): HWM > 2048 ? HWM - 1024 : (HWM + 1) / 2 - - - - - The low-water mark for message reception. - This is the number of messages that should be processed before reception is - unblocked (in case it was blocked by reaching high-watermark). The default value is - calculated using relevant high-watermark (HWM): HWM > 2048 ? HWM - 1024 : (HWM + 1) / 2 - - - - - Get or set the time-to-live (maximum number of hops) that outbound multicast packets - are allowed to propagate. - The default value of 1 means that the multicast packets don't leave the local network. - - - - - Get or set whether the underlying socket is for IPv4 only (not IPv6), - as opposed to one that allows connections with either IPv4 or IPv6. - - - - - Get the last endpoint bound for TCP and IPC transports. - The returned value will be a string in the form of a ZMQ DSN. - - - If the TCP host is ANY, indicated by a *, then the returned address - will be 0.0.0.0 (for IPv4). - - - - - Set the RouterSocket behavior when an unroutable message is encountered. - A value of false is the default and discards the message silently when it cannot be routed. - A value of true causes throw of HostUnreachableException if the message cannot be routed. - - - - - Get or set whether to use TCP keepalive. - - - When Keepalive is enabled, then your socket will periodically send an empty keepalive probe packet - with the ACK flag on. The remote endpoint does not need to support keepalive at all, just TCP/IP. - If you receive a reply to your keepalive probe, you can assume that the connection is still up and running. - This procedure is useful because if the other peers lose their connection (for example, by rebooting) - you will notice that the connection is broken, even if you don't have traffic on it. - If the keepalive probes are not replied to by your peer, you can assert that the connection - cannot be considered valid and then take the corrective action. - - - - - Get or set the keep-alive time - the duration between two keepalive transmissions in idle condition. - The TCP keepalive period is required by socket implementers to be configurable and by default is - set to no less than 2 hours. - - - - - Get or set the TCP keep-alive interval - the duration between two keepalive transmission if no response was received to a previous keepalive probe. - - - By default a keepalive packet is sent every 2 hours or 7,200,000 milliseconds - (TODO: Check these comments concerning default values! jh) - if no other data have been carried over the TCP connection. - If there is no response to a keepalive, it is repeated once every KeepAliveInterval seconds. - The default is one second. - - - - - Get or set the attach-on-connect value. - If set to true, this will delay the attachment of a pipe on connect until - the underlying connection has completed. This will cause the socket - to block if there are no other connections, but will prevent queues - from filling on pipes awaiting connection. - Default is false. - - - - - This applies only to publisher sockets. - Set whether to send all subscription messages upstream, not just unique ones. - The default is false. - - - - - This applies only to publisher sockets. - Set whether to support broadcast functionality - - - - - This applies only to router sockets. - Set whether RouterSocket allows non-zmq tcp connects. - If true, router socket accepts non-zmq tcp connections - - - - - When enabled new router connections with same identity take over old ones - - - - - Get or set the byte-order: big-endian, vs little-endian. - - - - - Get the last PEER allocated routing id - - - - - Controls the maximum datagram size for PGM. - - - - - A DealerSocket is a NetMQSocket, whereby the dealer sends messages in a way intended to achieve load-balancing - - which are received in a fair queueing manner. - - - - - Create a new DealerSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is connect (if endpoint doesn't start with '@' or '>') - - - var socket = new DealerSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); - - - - - Create a new DealerSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - A PairSocket is a NetMQSocket, usually used to synchronize two threads - using only one socket on each side. - - - - - Create a new PairSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is connect (if endpoint doesn't start with '@' or '>') - - - var socket = new PairSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); - - - - - Create a new PairSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - Create and return an inproc pipe where socket1 is bound and socket2 is connected. - - the Bind socket - the Connect socket - - - - Peer socket, the first message is always the identity of the sender - - - - - Create a new PeerSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is connect (if endpoint doesn't start with '@' or '>') - - - var socket = new PeerSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); - - - - - Create a new PeerSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - Connect the peer socket to . - - a string denoting the address to connect this socket to - The peer allocated routing id - thrown if the socket was already disposed - The socket has been stopped. - No IO thread was found. - The specified address is already in use. - - - - A PublisherSocket is a NetMQSocket intended to be used as the Pub in the PubSub pattern. - The intended usage is for publishing messages to all subscribers which are subscribed to a given topic. - - - - - Create a new PublisherSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is bind (if endpoint doesn't start with '@' or '>') - - - var socket = new PublisherSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); - - - - - Create a new PublisherSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - doesn't support sending, so this override throws - . - - Receive is not supported. - - - - A PullSocket is a NetMQSocket intended to be used as the "Pull" part of the Push-Pull pattern. - This will "pull" messages that have been pushed from the "push" socket. - - - - - Create a new PullSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is bind (if endpoint doesn't start with '@' or '>') - - - var socket = new PullSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); - - - - - Create a new PullSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - A PushSocket is a NetMQSocket intended to be used as the "Push" part of the Push-Pull pattern. - This will "push" messages to be pulled by the "pull" socket. - - - - - Create a new PushSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is connect (if endpoint doesn't start with '@' or '>') - - - var socket = new PushSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); - - - - - Create a new PushSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - doesn't support sending, so this override throws - . - - Receive is not supported. - - - - A RequestSocket is a NetMQSocket intended to be used as the Request part of the Request-Response pattern. - This is generally paired with a ResponseSocket. - - - - - Create a new RequestSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is connect (if endpoint doesn't start with '@' or '>') - - - var socket = new RequestSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); - - - - - Create a new RequestSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - Try to send request message and return the response as a message, or return null if not successful - - a string denoting the address to connect to - The request message - The number of times to try - The timeout for each request - Report topics: Failure, Retry, Send, Success - the response message, or null if not successful - - - - Try to send request string and return the response string, or return null if not successful - - a string denoting the address to connect to - The request string - The number of times to try - The timeout for each request - Report topics: Failure, Retry, Send, Success - the response message, or null if not successful - - - - A ResponseSocket is a NetMQSocket intended to be used as the Response part of the Request-Response pattern. - This is generally paired with a RequestSocket. - - - - - Create a new ResponseSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is bind (if endpoint doesn't start with '@' or '>') - - - var socket = new ResponseSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); - - - - - Create a new ResponseSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - Router socket, the first message is always the identity of the sender - - - - - Create a new RouterSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is bind (if endpoint doesn't start with '@' or '>') - - - var socket = new RouterSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); - - - - - Create a new RouterSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - This is a NetMQSocket but provides no additional functionality. - You can use it when you need an instance that is a NetMQSocket - but with none of the distinguishing behavior of any of the other socket types. - - - This is provided because NetMQSocket is an abstract class, so you cannot instantiate it directly. - - - - - Create a new StreamSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is connect (if endpoint doesn't start with '@' or '>') - - - var socket = new StreamSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); - - - - - Create a new StreamSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - A SubscriberSocket is a NetMQSocket intended to be used as the "Sub" in the PubSub pattern. - The intended usage is to receive messages from the publisher socket. - - - - - Create a new SubscriberSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is connect (if endpoint doesn't start with '@' or '>') - - - var socket = new SubscriberSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); - - - - - Create a new SubscriberSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - Subscribe this socket to the given 'topic' - which means enable this socket to receive - messages that begin with this string prefix. - You can set topic to an empty string to subscribe to everything. - - this specifies what text-prefix to subscribe to, or may be an empty-string to specify ALL - - - - Subscribe this socket to the given 'topic' - which means enable this socket to receive - messages that begin with this string prefix, using the given Encoding. - You can set topic to an empty string to subscribe to everything. - - this specifies what text-prefix to subscribe to, or may be an empty-string to specify ALL - the character-Encoding to use when converting the topic string internally into a byte-array - - - - Subscribe this socket to the given 'topic' - which means enable this socket to receive - messages that begin with this array of bytes. - - this specifies what byte-array prefix to subscribe to - - - - Subscribe this socket to all topics - which means enable this socket to receive - all messages regardless of what the string prefix is. - This is the same as calling Subscribe with an empty-string for the topic. - - - - - Remove this socket's subscription to the given topic. - - a string denoting which the topic to stop receiving - - - - Remove this socket's subscription to the given topic. - - a string denoting which the topic to stop receiving - the Encoding to use when converting the topic string internally into a byte-array - - - - Remove this socket's subscription to the given topic. - - a byte-array denoting which the topic to stop receiving - - - - An XPublisherSocket is a NetMQSocket intended to be used as the XPub in the XPub/XSub pattern. - The intended usage is for serving, together with a matching XSubscriberSocket, - as a stable intermediary between a PublisherSocket and it's SubscriberSockets. - - - - - Create a new XPublisherSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is bind (if endpoint doesn't start with '@' or '>') - - - var socket = new XPublisherSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); - - - - - Create a new XPublisherSocket based upon the given . - - the SocketBase to create the new socket from - - - - In case of socket set to manual mode will subscribe the last subscriber to the topic - - a string specifying the Topic to subscribe to - - - - In case of socket set to manual mode will subscribe the last subscriber to the topic - - a string specifying the Topic to subscribe to - the character-Encoding to use when converting the topic string internally into a byte-array - - - - In case of socket set to manual mode will subscribe the last subscriber to the topic - - a byte-array specifying the Topic to subscribe to - - - - In case of socket set to manual mode will unsubscribe the last subscriber from a topic - - a string specifying the Topic to unsubscribe from - - - - In case of socket set to manual mode will unsubscribe the last subscriber from a topic - - a string specifying the Topic to unsubscribe from - the character-Encoding to use when converting the topic string internally into a byte-array - - - - In case of socket set to manual mode will unsubscribe the last subscriber from a topic - - a byte-array specifying the Topic to unsubscribe from - - - - Publisher sockets generally send a welcome-message to subscribers to give an indication that they have successful subscribed. - This method clears that message, such that none is sent. - - - - - Publisher sockets send a welcome-message to subscribers to give an indication that they have successful subscribed. - This method is how you set the text of that welcome-message. - - a string denoting the new value for the welcome-message - the character-Encoding to use when converting the topic string internally into a byte-array - - - - Publisher sockets send a welcome-message to subscribers to give an indication that they have successful subscribed. - This method is how you set the text of that welcome-message. The Encoding is assumed to be ASCII. - - a string denoting the new value for the welcome-message - - - - Publisher sockets send a welcome-message to subscribers to give an indication that they have successful subscribed. - This method is how you set the text of that welcome-message. The Encoding is assumed to be ASCII. - - a byte-array denoting the new value for the welcome-message - - - - An XSubscriberSocket is a NetMQSocket intended to be used as the XSub in the XPub/XSub pattern. - The intended usage is for serving, together with a matching XPublisherSocket, - as a stable intermediary between a PublisherSocket and it's SubscriberSockets. - - - - - Create a new XSubscriberSocket and attach socket to zero or more endpoints. - - - List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to connect the socket). - Default action is connect (if endpoint doesn't start with '@' or '>') - - - var socket = new XSubscriberSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); - - - - - Create a new XSubscriberSocket based upon the given SocketBase. - - the SocketBase to create the new socket from - - - - Subscribe this socket to the given 'topic' - which means enable this socket to receive - messages that begin with this string prefix. - You can set topic to an empty string to subscribe to everything. - - this specifies what text-prefix to subscribe to, or may be an empty-string to specify ALL - - - - Subscribe this socket to the given 'topic' - which means enable this socket to receive - messages that begin with this string prefix, using the given Encoding. - You can set topic to an empty string to subscribe to everything. - - this specifies what text-prefix to subscribe to, or may be an empty-string to specify ALL - the Encoding to use when converting the topic string internally into a byte-array - - - - Subscribe this socket to the given 'topic' - which means enable this socket to receive - messages that begin with this array of bytes. - - this specifies what byte-array prefix to subscribe to - - - - Subscribe this socket to all topics - which means enable this socket to receive - all messages regardless of what the string prefix is. - This is the same as calling Subscribe with an empty-string for the topic. - - - - - Remove this socket's subscription to the given topic. - - a string denoting which the topic to stop receiving - - - - Remove this socket's subscription to the given topic. - - a string denoting which the topic to stop receiving - the Encoding to use when converting the topic string internally into a byte-array - - - - Remove this socket's subscription to the given topic. - - a byte-array denoting which the topic to stop receiving - - - - This enum-type is used to specify the basic type of message-queue socket - based upon the intended pattern, such as Pub,Sub, Req,Rep, Dealer,Router, Pull,Push, Xpub,Xsub. - - - - - No socket-type is specified - - - - - This denotes a Pair socket (usually paired with another Pair socket). - - - - - This denotes a Publisher socket (usually paired with a Subscriber socket). - - - - - This denotes a Subscriber socket (usually paired with a Publisher socket). - - - - - This denotes a Request socket (usually paired with a Response socket). - - - - - This denotes a Response socket (usually paired with a Request socket). - - - - - This denotes an Dealer socket. - - - - - This denotes an Router socket. - - - - - This denotes a Pull socket (usually paired with a PUsh socket). - - - - - This denotes a Push socket (usually paired with a Pull socket). - - - - - This denotes an XPublisher socket. - - - - - This denotes an XSubscriber socket. - - - - - This denotes a Stream socket - which is a parent-class to the other socket types. - - - - \ No newline at end of file + + + + + NetMQ + + + + + The IBufferPool interface specifies two methods: Take, and Return. + These provide for taking byte-array data from a common pool, and returning it. + + + + + Take byte-array storage from the buffer-pool. + + the number of bytes to take + a byte-array that comes from the buffer-pool + + + + Return the given byte-array buffer to the common buffer-pool. + + the byte-array to return to the buffer-pool + + + + This implementation of + + uses WCF's + + class to manage a pool of buffers. + + + + + Create a new BufferManagerBufferPool with the specified maximum buffer pool size + and a maximum size for each individual buffer in the pool. + + the maximum size to allow for the buffer pool + the maximum size to allow for each individual buffer in the pool + + There was insufficient memory to create the + requested buffer pool. + + + Either maxBufferPoolSize or maxBufferSize was + less than zero. + + + + + Return a byte-array buffer of at least the specified size from the pool. + + the size in bytes of the requested buffer + a byte-array that is the requested size + size cannot be less than zero + + + + Return the given buffer to this manager pool. + + a reference to the buffer being returned + + the Length of buffer does not match the pool's buffer + length property + + the buffer reference cannot be null + + + + Release the buffers currently cached in this manager. + + + + + Release the buffers currently cached in this manager. + + true if managed resources are to be disposed + + + + This simple implementation of + + does no buffer pooling. Instead, it uses regular + .NET memory management to allocate a buffer each time + + is called. Unused buffers + passed to + + are simply left for the .NET garbage collector to deal with. + + + + + Return a newly-allocated byte-array buffer of at least the specified size from the pool. + + the size in bytes of the requested buffer + a byte-array that is the requested size + + there is not sufficient memory to allocate the requested + memory + + + + + The expectation of an actual buffer-manager is that this method returns the given buffer to the + manager pool. + This particular implementation does nothing. + + a reference to the buffer being returned + + + + The expectation of an actual buffer-manager is that the Dispose method will release the buffers + currently cached in this manager. + This particular implementation does nothing. + + + + + Release the buffers currently cached in this manager (however in this case, this does nothing). + + true if managed resources are to be disposed + + + + Contains a singleton instance of + + used for allocating byte arrays + for + + instances with type. + + + Sending and receiving message frames requires the use of buffers (byte arrays), which are expensive to + create and destroy. + You can use the BufferPool class to pool buffers for reuse, reducing allocation, deallocation and + garbage collection. + + The default implementation is. + + + Call + + to replace it with a. + + + Call + + to reinstate the default + . + + + Call + + to substitute a custom implementation for the allocation and + deallocation of message buffers. + + + + + + + Set BufferPool to use the + + (which it does by default). + + + + + Set BufferPool to use the + + to manage the buffer-pool. + + the maximum size to allow for the buffer pool + the maximum size to allow for each individual buffer in the pool + + There was insufficient memory to create the + requested buffer pool. + + + Either maxBufferPoolSize or maxBufferSize was + less than zero. + + + + + Set BufferPool to use the specified IBufferPool implementation to manage the buffer-pool. + + + the implementation of + + to use + + + + + Allocate a buffer of at least + + bytes from the current + . + + The minimum size required, in bytes. + + A byte array having at least + + bytes. + + + + + Returns + + to the. + + The byte array to be returned to the pool. + + + + Class Address contains a specification of a protocol and an MqEndPoint. + + + + + The string-literal "inproc" + - this denotes in-process, or inter-thread, communication. + + + + + The string-literal "tcp" + - this denotes TCP communication over the network. + + + + + The string-literal "ipc" + - this denotes inter-process communication, which on NetMQ is exactly the same as TCP. + + + + + The string-literal "pgm" + - this denotes the Pragmatic General Multicast (PGM) reliable multicast protocol. + + + + + The string-literal "epgm" + - this denotes the Encapsulated PGM protocol. + + + + + Interface IZAddress specifies that Resolve and property Address must be implemented. + + + + + Create a new Address instance with the given protocol and text expression of an address. + + the protocol of this Address - as in tcp, ipc, pgm + a text representation of the address + + + + Create a new Address instance based upon the given endpoint, assuming a protocol of tcp. + + the subclass of EndPoint to base this Address upon + + + + Defines a command sent between threads. + + + + + Create a new Command object for the given destination, type, and optional argument. + + a ZObject that denotes the destination for this command + the CommandType of the new command + an Object to comprise the argument for the command (optional) + + + The destination to which the command should be applied. + + + The type of this command. + + + + Get the argument to this command. + + + + + Override of ToString, which returns a string in the form [ command-type, destination ]. + + a string that denotes the command-type and destination + + + + Enumeration of possible + + types. + + + The value of + + denotes what action + the command will perform. + + + + + Sent to I/O thread to let it know that it should + terminate itself. + + + + + Sent to I/O object to make it register with its I/O thread + + + + + Sent to socket to let it know about the newly created object. + + + + + Attach the engine to the session. If engine is NULL, it informs + session that the connection has failed. + + + + + Sent from session to socket to establish pipe(s) between them. + Caller must have used inc_seqnum before sending the command. + + + + + Sent by pipe writer to inform dormant pipe reader that there + are messages in the pipe. + + + + + Sent by pipe reader to inform pipe writer how many + messages it has read so far. + + + + + Sent by pipe reader to writer after creating a new inpipe. + The parameter is actually of type pipe_t::upipe_t, however, + its definition is private so we'll have to do with void*. + + + + + Sent by pipe reader to pipe writer to ask it to terminate + its end of the pipe. + + + + + Pipe writer acknowledges pipe_term command. + + + + + Sent by I/O object to the socket to request the shutdown of + the I/O object. + + + + + Sent by socket to I/O object to start its shutdown. + + + + + Sent by I/O object to the socket to acknowledge it has + shut down. + + + + + Transfers the ownership of the closed socket + to the reaper thread. + + + + + Closed socket notifies the reaper that it's already deallocated. + + + + + Sent by reaper thread to the term thread when all the sockets + have successfully been deallocated. + + + + + Send to reaper to stop the reaper immediatly + + + + + This class exists to hold constant values that comprise the internal configuration of the messaging + system. + + + + + Number of new messages in message pipe needed to trigger new memory + allocation. Setting this parameter to 256 decreases the impact of + memory allocation by approximately 99.6% + + + + + Commands in pipe per allocation event. + + + + + Determines how often does socket poll for new commands when it + still has unprocessed messages to handle. Thus, if it is set to 100, + socket will process 100 inbound messages before doing the poll. + If there are no unprocessed messages available, poll is done + immediately. Decreasing the value trades overall latency for more + real-time behaviour (less latency peaks). + + + + + Maximal batching size for engines with receiving functionality. + So, if there are 10 messages that fit into the batch size, all of + them may be read by a single 'recv' system call, thus avoiding + unnecessary network stack traversals. + + + + + Maximal batching size for engines with sending functionality. + So, if there are 10 messages that fit into the batch size, all of + them may be written by a single 'send' system call, thus avoiding + unnecessary network stack traversals. + + + + + Maximal delta between high and low watermark. + + + + + Maximum number of events the I/O thread can process in one go. + + + + + Maximal delay to process command in API thread (in CPU ticks). + 3,000,000 ticks equals to 1 - 2 milliseconds on current CPUs. + Note that delay is only applied when there is continuous stream of + messages to process. If not so, commands are processed immediately. + + + + + Low-precision clock precision in CPU ticks. 1ms. Value of 1000000 + should be OK for CPU frequencies above 1GHz. If should work + reasonably well for CPU frequencies above 500MHz. For lower CPU + frequencies you may consider lowering this value to get best + possible latencies. + + + + + Maximum transport data unit size for PGM (TPDU). + + + + + On some OSes the signaler has to be emulated using a TCP + connection. In such cases following port is used. + + + + + Objects of class Ctx are intended to encapsulate all of the global state + associated with the NetMQ library. This contains the sockets, and manages interaction + between them. + + + + + Information associated with inproc endpoint. Note that endpoint options + are registered as well so that the peer can access them without a need + for synchronisation, handshaking or similar. + + + + + Create a new Endpoint with the given socket. + + the socket for this new Endpoint + the Options to assign to this new Endpoint + + + + Get the socket associated with this Endpoint. + + + + + Get the Options of this Endpoint. + + + + + Sockets belonging to this context. We need the list so that + we can notify the sockets when zmq_term() is called. The sockets + will return ETERM then. + + + + + List of unused thread slots. + + + + + If true, zmq_init has been called but no socket has been created + yet. Launching of I/O threads is delayed. + + + + + If true, zmq_term was already called. + + + + + This object is for synchronisation of accesses to global slot-related data: + sockets, empty_slots, terminating. It also synchronises + access to zombie sockets as such (as opposed to slots) and provides + a memory barrier to ensure that all CPU cores see the same data. + + + + + The reaper thread. + + + + + List of I/O threads. + + + + + Length of the mailbox-array. + + + + + Array of pointers to mailboxes for both application and I/O threads. + + + + + Mailbox for zmq_term thread. + + + + + Dictionary containing the inproc endpoints within this context. + + + + + This object provides synchronisation of access to the list of inproc endpoints. + + + + + The highest socket-id that has been assigned thus far. + + + + + The maximum number of sockets that can be opened at the same time. + + + + + The number of I/O threads to launch. + + + + + This object is used to synchronize access to context options. + + + + + The thread-id for the termination (the equivalent of the zmq_term) thread. + + + + + This is the thread-id to assign to the Reaper (value is 1). + + + + + This function is called when user invokes zmq_term. If there are + no more sockets open it'll cause all the infrastructure to be shut + down. If there are open sockets still, the deallocation happens + after the last one is closed. + + + + + Create and return a new socket of the given type, and initialize this Ctx if this is the first one. + + the type of socket to create + the newly-created socket + Cannot create new socket while terminating. + Maximum number of sockets reached. + + The context (Ctx) must not be already terminating. + + + + + Destroy the given socket - which means to remove it from the list of active sockets, + and add it to the list of unused sockets to be terminated. + + the socket to destroy + + If this was the last socket, then stop the reaper. + + + + + Returns reaper thread object. + + + + + Send a command to the given destination thread. + + + + + Returns the + + that is the least busy at the moment. + + Which threads are eligible (0 = all). + + The least busy thread, or null if none is available. + + + + + Save the given address and Endpoint within our internal list. + This is used for management of inproc endpoints. + + the textual name to give this endpoint + the Endpoint to remember + true if the given address was NOT already registered + + + + Un-register the given address/socket, by removing it from the contained list of endpoints. + + the (string) address denoting the endpoint to unregister + the socket associated with that endpoint + true if the endpoint having this address and socket is found, false otherwise + + + + Remove from the list of endpoints, all endpoints that reference the given socket. + + the socket to remove all references to + + + + Return the EndPoint that has the given address, and increments the seqnum of the associated socket. + + the (string) address to match against the endpoints + the Endpoint that was found + + The given address was not found in the list of + endpoints. + + + By calling this method, the socket associated with that returned EndPoint has it's Seqnum incremented, + in order to prevent it from being de-allocated before a command can be sent to it. + + + + + Class ErrorHelper provides one static method - ToErrorCode, for converting a SocketError to the + equivalent ErrorCode. + + + + + Return the ErrorCode that is the closest equivalent to the given SocketError. + + the SocketError to convert from + an ErrorCode that corresponds to the given SocketError + + + + Interface IMsgSink mandates a PushMsg( Msg ) method. + + + + + Deliver a message. Return true if successful; false otherwise. + This function takes ownership of the passed message. + + the message (of type Msg) to deliver + + + + Classes that implement IMsgSource are able to fetch a message, with the method: PullMsg. + + + + + Fetch a message. + If successful - returns true and writes the message instance to the msg argument. + If not successful - return false and write null to the msg argument. + + the Msg to write the fetched message into + true if successful - and writes the message to the msg argument + + + + Simple base class for objects that live in I/O threads. + It makes communication with the poller object easier and + makes defining unneeded event handlers unnecessary. + + + + + Create a new IOObject object and plug it into the given IOThread. + + the IOThread to plug this new IOObject into. + + + + "Plug in" this IOObject to the given IOThread, - ie associate this with the specified IOThread. + + the IOThread for this object to live in + + When migrating an object from one I/O thread to another, first + unplug it, then migrate it, then plug it to the new thread. + + + + + "Un-Plug" this IOObject from its current IOThread, and set its handler to null. + + + When migrating an object from one I/O thread to another, first + unplug it, then migrate it, then plug it to the new thread. + + + + + Add the given socket to the Proactor. + + the AsyncSocket to add + + + + Remove the given socket from the Proactor. + + the AsyncSocket to remove + + + + This method is called when a message receive operation has been completed. This forwards it on to the + handler's InCompleted method. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + + + This method is called when a message Send operation has been completed. This forwards it on to the + handler's OutCompleted method. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + + + This is called when the timer expires. + + an integer used to identify the timer + + + + I/O thread accesses incoming commands via this mailbox. + + + + + I/O multiplexing is performed using a poller object. + + + + + Create a new IOThread object within the given context (Ctx) and thread. + + the Ctx (context) for this thread to live within + the integer thread-id for this new IOThread + + + + Classes that implement IPollEvents provide two methods (InEvent and OutEvent) that are invoked when + ready for reading or writing. + + + + + Called by the I/O thread when the file descriptor is ready for reading. + + + + + Called by the I/O thread when the file descriptor is ready for writing. + + + + + This is an ITimerEvent, with InCompleted and OutCompleted callback-methods, + used for implementing a Proactor pattern. + + + + + This is the "Input-Completed" method - called by the I/O-thread when the file descriptor is ready for + reading. + + this is set to any socket-error that has occurred + the number of bytes that are now ready to be read + + + + This is the "Output-Completed" method - called by the I/O thread when the file descriptor is ready for + writing. + + this is set to any socket-error that has occurred + the number of bytes that are now ready to be written + + + + The ITimerEvent interface mandates a TimerEvent( int id ) method, + that is called with an id-value when the timer expires. + + + + + This is called when the timer expires. + + an integer used to identify the timer + + + + There's only one thread receiving from the mailbox, but there + is arbitrary number of threads sending. Given that ypipe requires + synchronised access on both of its endpoints, we have to synchronize + the sending side. + + + + + The pipe to store actual commands. + + + + + Signaler to pass signals from writer thread to reader thread. + + + + + There's only one thread receiving from the mailbox, but there + is an arbitrary number of threads sending. Given that + + requires + synchronised access on both of its endpoints, we have to synchronize + the sending side. + + + + + True if the underlying pipe is active, ie. when we are allowed to + read commands from it. + + + + + Create a new Mailbox with the given name. + + the name to give this new Mailbox + + + + Get the socket-handle contained by the Signaler. + + + + + Send the given Command out across the command-pipe. + + the Command to send + + + + Receive and return a Command from the command-pipe. + + how long to wait for a command (in milliseconds) before returning + + + + + Close the contained Signaler. + + + + + Class Options is essentially a container for socket-related option-settings. + + + + + Create a new Options object with all default values. + + + + + Get or set the I/O-thread affinity. + The default value is 0. + + + + + Maximum backlog for pending connections. + The default value is 100. + + + + + Get or set whether connecting pipes are not attached immediately, meaning a send() + on a socket with only connecting pipes would block. + The default value is false. + + + + + If true, session reads all the pending messages from the pipe and + sends them to the network when socket is closed. + The default value is true. + + + + + If true, socket reads all the messages from the pipe and delivers + them to the user when the peer terminates. + The default value is true. + + + + + Get or set the Endian-ness, which indicates whether the most-significant bits are placed higher or + lower in memory. + The default value is Endianness.Big. + + + + + If true, (X)SUB socket should filter the messages. If false (which is the default), it should not. + + + + + Get or set the byte-array that represents the Identity. + The initial value is null. + + + + + Get or set the size of the socket-identity byte-array. + The initial value is 0, until the Identity property is set. + + + + + Get or set whether this allows the use of IPv4 sockets only. + If true (the default), it will not be possible to communicate with IPv6-only hosts. + If false, the socket can connect to and accept connections from both IPv4 and IPv6 hosts. + + + + + Get or set the last socket endpoint resolved URI + The initial value is null. + + + + + Get or set the Linger time, in milliseconds. + The default value is -1; The XSub ctor sets this to 0. + + + + + Get or set the maximum size of message to handle. + The default value is -1, which indicates no limit. + + + + + Sets the time-to-live field in every multicast packet sent. + The default value is 1. + + + + + Get or set the maximum transfer rate [Kb/s]. The default is 100 Kb/s. + + + + + If true, router socket accepts non-zmq tcp connections + The default value is false, except the Stream ctor initialises this to true. + Setting this to true changes RecvIdentity to false. + + + + + If true, the identity message is forwarded to the socket. + The default value is false. + + + + + Get or set the minimum interval between attempts to reconnect, in milliseconds. + The default is 100 ms + + + + + Get or set the maximum interval between attempts to reconnect, in milliseconds. + The default is 0 (unused). + + + + + Get or set the recovery time interval [ms]. The default is 10 seconds. + + + + + SO_SNDBUF and SO_RCVBUF to be passed to underlying transport sockets. + The initial value is 0. + + + + + Get or set the size of the receive-buffer. + The initial value is 0. + + + + + Get or set the high-water marks for message pipes. + The default value is 1000. + + + + + Get or set the high-water mark for message reception. + The default value is 1000. + + + + + The low-water mark for message transmission. + + + + + The low-water mark for message reception. + + + + + Get or set the timeout for send operations for this socket. + The default value is -1, which means no timeout. + + + + + Get or set the ID of the socket. + The default value is 0. + + + + + Get or set the type of socket (ZmqSocketType). + The default value is ZmqSocketType.None. + + + + + TCP keep-alive settings. + Defaults to -1 = do not change socket options + + + + + Get or set the TCP Keep-Alive Count. + The default value is -1. + + + + + Get or set the TCP Keep-Alive interval to use when at idle. + The default value is -1. + + + + + Get or set the TCP Keep-Alive Interval + The default value is -1. + + + + + Disable TIME_WAIT tcp state when client disconnect. + The default value is false. + + + + + Controls the maximum datagram size for PGM. + + + + + Assign the given optionValue to the specified option. + + a ZmqSocketOption that specifies what to set + an Object that is the value to set that option to + The option and optionValue must be valid. + + + + Get the value of the specified option. + + a ZmqSocketOption that specifies what to get + an Object that is the value of that option + A valid option must be specified. + + + + Base class for objects forming a part of ownership hierarchy. + It handles initialisation and destruction of such objects. + + + + + The Options of this Own. + + + + + True if termination was already initiated. If so, we can destroy + the object if there are no more child objects or pending term acks. + + + + + Sequence number of the last command sent to this object. + + + + + Sequence number of the last command processed by this object. + + + + + Socket owning this object. It's responsible for shutting down + this object. + + + + + List of all objects owned by this socket. We are responsible + for deallocating them before we quit. + + + + + Number of events we have to get before we can destroy the object. + + + + + Initializes a new instance of the + + class that is running on a thread outside of 0MQ infrastructure. + + The parent context. + The thread id. + + Note that the owner is unspecified in the constructor. It'll be assigned later on using + + when the object is plugged in. + + + + + Initializes a new instance of the + + class that is running within I/O thread. + + The I/O thread. + The options. + + Note that the owner is unspecified in the constructor. It'll be assigned later on using + + when the object is plugged in. + + + + + Eliminate any contained resources that need to have this explicitly done. + + + + + A place to hook in when physical destruction of the object is to be delayed. + Unless overridden, this simply calls Destroy. + + + + + Set the owner of *this* Own object, to be the given owner. + + the Own object to be our new owner + + + + When another owned object wants to send a command to this object it calls this function + to let it know it should not shut down before the command is delivered. + + + This function may be called from a different thread! + + + + + Launch the supplied object and become its owner. + + The object to be launched. + + + + Terminate owned object. + + + + + Process a termination-request for the given Own obj, + removing it from the listed of owned things. + + the Own object to remove and terminate + + + + Add the given Own object to the list of owned things. + + the Own object to add to our list + + If *this* Own is already terminating, then send a request to the given Own obj + to terminate itself. + + + + + Ask owner object to terminate this object. It may take a while actual termination is started. + + + This function should not be called more than once. + + + + + Returns true if the object is in process of termination. + + + + + Send termination requests to all of the owned objects, and then runs the termination process. + + the linger time, in milliseconds + + Termination handler is protected rather than private so that it can be intercepted by the derived + class. + This is useful to add custom steps to the beginning of the termination process. + + + + + Add the given number to the termination-acknowledgement count. + + + The methods RegisterTermAcks and + + are used to wait for arbitrary events before + terminating. Just add the number of events to wait for, and when the event occurs - call + . + When the number of pending termination-acknowledgements reaches zero, this object will be deallocated. + + + + + Decrement the termination-acknowledgement count, and if it reaches zero + then send a termination-ack to the owner. + + + The methods + + and UnregisterTermAck are used to wait for arbitrary events before + terminating. Just add the number of events to wait for, and when the event occurs - call + UnregisterTermAck. + When the number of pending termination-acknowledgements reaches zero, this object will be deallocated. + + + + + Process the first termination-acknowledgement. + Unless this is overridden, it simply calls. + + + + + If terminating, and we've already worked through the Seq-nums that were sent, + then send a termination-ack to the owner (if there is one) and destroy itself. + + + + + A Dealer socket is a SocketBase that is used as the parent-class of the Req socket. + It provides for a pre-fetched Msg, and skips identity-messages. + + + + + A DealerSession is a SessionBase subclass that is contained within the Dealer class. + + + + + Create a new DealerSession (which is just a SessionBase). + + the I/O-thread to associate this with + + + + + + + + Messages are fair-queued from inbound pipes. And load-balanced to + the outbound pipes. + + + + + Have we prefetched a message. + + + + + The Msg that we have pre-fetched. + + + + + Create a new Dealer socket that holds the prefetched message. + + + + + Destroy this Dealer-socket and close out any pre-fetched Msg. + + + + + Register the pipe with this socket. + + the Pipe to attach + not used + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + + + + For a Dealer socket: If there's a pre-fetched message, snatch that. + Otherwise, dump any identity messages and get the first non-identity message, + or return false if there are no messages available. + + a Msg to receive the message into + + true + if the message was received successfully, false if there were no messages to receive + + + + + If there's a pre-fetched message, snatch that. + Otherwise, dump any identity messages and get the first non-identity message, + or return false if there are no messages available. + + a Msg to receive the message into + false if there were no messages to receive + + + + If there is a message available and one has not been pre-fetched yet, + preserve that message as our pre-fetched one. + + + + + + Indicate the given pipe as being ready for reading by this socket. + + + the Pipe that is now becoming available for reading + + + + + Indicate the given pipe as being ready for writing to by this socket. + This gets called by the WriteActivated method + and gets overridden by the different sockets + to provide their own concrete implementation. + + + the Pipe that is now becoming available for writing + + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Register the pipe with this socket. + + the Pipe to attach + not used + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Indicate the given pipe as being ready for reading by this socket + - however in the case of Pair, this does nothing. + + + the Pipe that is now becoming available for reading + + + + + Indicate the given pipe as being ready for writing to by this socket, + however in the case of this Pair socket - this does nothing. + This method gets called by the WriteActivated method. + + + the Pipe that is now becoming available for writing + + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + + + A Router is a subclass of SocketBase + + + + + An instance of class Outpipe contains a Pipe and a boolean property Active. + + + + + Fair queueing object for inbound pipes. + + + + + Holds the prefetched message. + + + + + Outbound pipes indexed by the peer IDs. + + + + + The pipe we are currently writing to. + + + + + State of the recv operation + + + + + State of the sending operation + + + + + Peer ID are generated. It's a simple increment and wrap-over + algorithm. This value is the next ID to use (if not used already). + + + + + Create a new Router instance with the given parent-Ctx, thread-id, and socket-id. + + the Ctx that will contain this Router + the integer thread-id value + the integer socket-id value + + + + Register the pipe with this socket. + + the Pipe to attach + not used + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Indicate the given pipe as being ready for reading by this socket. + + + the Pipe that is now becoming available for reading + + + + + Indicate the given pipe as being ready for writing to by this socket. + This gets called by the WriteActivated method. + + + the Pipe that is now becoming available for writing + + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + The receiving host must be identifiable. + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + + + This override of the abstract XRecv method, simply throws a NotSupportedException because XRecv is not + supported on a Pub socket. + + + the Msg to receive the message into + + Messages cannot be received from PUB socket + + + + Fair queueing object for inbound pipes. + + + + + Register the pipe with this socket. + + the Pipe to attach + not used + + + + Indicate the given pipe as being ready for reading by this socket. + + + the Pipe that is now becoming available for reading + + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + + + Load balancer managing the outbound pipes. + + + + + Register the pipe with this socket. + + the Pipe to attach + not used + + + + Indicate the given pipe as being ready for writing to by this socket. + This gets called by the WriteActivated method. + + + the Pipe that is now becoming available for writing + + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + + + + If true, we are in process of sending the reply. If false we are + in process of receiving a request. + + + + + If true, we are starting to receive a request. The beginning + of the request is the backtrace stack. + + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + + XSend must only be called on Rep when in the state + of sending a reply. + + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + XRecv must not be called on Rep while in the state + of sending a reply. + + + + + A Req is a Dealer socket that serves as the Request in a Request/Response pattern. + + + + + If true, request was already sent and reply wasn't received yet or + was received partially. + + + + + If true, we are starting to send/receive a message. The first part + of the message must be empty message part (backtrace stack bottom). + + + + + Create a new Req (Request) socket with the given parent Ctx, thread and socket id. + + the Ctx to contain this socket + an integer thread-id for this socket to execute on + the socket-id for this socket + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + + Cannot XSend on a Req while awaiting reply. + + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + Req.XRecv expecting send, not receive. + + + + ReqSession must be in a valid state when PushMsg is called. + + + + + A Router is a subclass of SocketBase + + + + + An instance of class Outpipe contains a Pipe and a boolean property Active. + + + + + Fair queueing object for inbound pipes. + + + + + True if there is a message held in the pre-fetch buffer. + + + + + If true, the receiver got the message part with + the peer's identity. + + + + + Holds the prefetched identity. + + + + + Holds the prefetched message. + + + + + If true, more incoming message parts are expected. + + + + + We keep a set of pipes that have not been identified yet. + + + + + Outbound pipes indexed by the peer IDs. + + + + + The pipe we are currently writing to. + + + + + The pipe we are currently reading from. + + + + + If true, more outgoing message parts are expected. + + + + + Peer ID are generated. It's a simple increment and wrap-over + algorithm. This value is the next ID to use (if not used already). + + + + + If true, report EHOSTUNREACH to the caller instead of silently dropping + the message targeting an unknown peer. + + + + + If true, router socket accepts non-zmq tcp connections + + + + + When enabled new router connections with same identity take over old ones + + + + + Create a new Router instance with the given parent-Ctx, thread-id, and socket-id. + + the Ctx that will contain this Router + the integer thread-id value + the integer socket-id value + + + + Register the pipe with this socket. + + the Pipe to attach + not used + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Indicate the given pipe as being ready for reading by this socket. + + + the Pipe that is now becoming available for reading + + + + + Indicate the given pipe as being ready for writing to by this socket. + This gets called by the WriteActivated method. + + + the Pipe that is now becoming available for writing + + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + The receiving host must be identifiable. + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + + + Fair queueing object for inbound pipes. + + + + + True if there is a message held in the pre-fetch buffer. + + + + + If true, the receiver got the message part with + the peer's identity. + + + + + Holds the prefetched identity. + + + + + Holds the prefetched message. + + + + + Outbound pipes indexed by the peer IDs. + + + + + The pipe we are currently writing to. + + + + + If true, more outgoing message parts are expected. + + + + + Peer ID are generated. It's a simple increment and wrap-over + algorithm. This value is the next ID to use (if not used already). + + + + + Register the pipe with this socket. + + the Pipe to attach + not used + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Indicate the given pipe as being ready for reading by this socket. + + + the Pipe that is now becoming available for reading + + + + + Indicate the given pipe as being ready for writing to by this socket. + This gets called by the WriteActivated method. + + + the Pipe that is now becoming available for writing + + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + In Stream.XSend + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + + + Set the specified option on this socket - which must be either a SubScribe or an Unsubscribe. + + which option to set + the value to set the option to + + true + if successful + + optionValue must be a String or a byte-array. + + + + XSend transmits a given message. The Send method calls this to do the actual sending. + This override of that abstract method simply throws NotSupportedException because XSend is not + supported on a Sub socket. + + the message to transmit + XSend not supported on Sub socket + + + + Return false to indicate that XHasOut is not applicable on a Sub socket. + + + + + + Make resize operation on array. + + Type of containing data. + Source array. + New size of array. + If grow/shrink operation should be applied to the end of array. + Resized array. + + + + List of outbound pipes. + + + + + Number of all the pipes to send the next message to. + + + + + Number of active pipes. All the active pipes are located at the + beginning of the pipes array. These are the pipes the messages + can be sent to at the moment. + + + + + Number of pipes eligible for sending messages to. This includes all + the active pipes plus all the pipes that we can in theory send + messages to (the HWM is not yet reached), but sending a message + to them would result in partial message being delivered, ie. message + with initial parts missing. + + + + + True if last we are in the middle of a multipart message. + + + + + Create a new, empty Distribution object. + + + + + Adds the pipe to the distributor object. + + + + + + Mark the pipe as matching. Subsequent call to send_to_matching + will send message also to this pipe. + + + + + + Mark all pipes as non-matching. + + + + + This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe + from the distributor. + + the pipe that was terminated + + + + Activates pipe that have previously reached high watermark. + + + + + + Send the message to all the outbound pipes. + + + + + + Send the message to the matching outbound pipes. + + + + + + Put the message to all active pipes. + + + + + Write the message to the pipe. Make the pipe inactive if writing + fails. In such a case false is returned. + + + + + This class manages a set of inbound pipes. On receive it performs fair + queueing so that senders gone berserk won't cause denial of + service for decent senders. + + + + + Inbound pipes. + + + + + Number of active pipes. All the active pipes are located at the + beginning of the pipes array. + + + + + Index of the next bound pipe to read a message from. + + + + + If true, part of a multipart message was already received, but + there are following parts still waiting in the current pipe. + + + + + This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. + + the pipe that was terminated + + + + List of outbound pipes. + + + + + Number of active pipes. All the active pipes are located at the + beginning of the pipes array. + + + + + Points to the last pipe that the most recent message was sent to. + + + + + True if last we are in the middle of a multipart message. + + + + + True if we are dropping current message. + + + + + This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. + + the pipe that was terminated + + + + Multi-trie. Each node in the trie is a set of pointers to pipes. + + + + + Add key to the trie. Returns true if it's a new subscription + rather than a duplicate. + + + + + Remove all subscriptions for a specific peer from the trie. + If there are no subscriptions left on some topics, invoke the + supplied callback function. + + + + + + + + + Remove specific subscription from the trie. Return true is it was + actually removed rather than de-duplicated. + + + + + + + + + + Signal all the matching pipes. + + + + + Add key to the trie. Returns true if this is a new item in the trie + rather than a duplicate. + + + + + + + + + Remove key from the trie. Returns true if the item is actually + removed from the trie. + + + + + + + + + Check whether particular key is in the trie. + + + + + + + + + List of all subscriptions mapped to corresponding pipes. + + + + + Distributor of messages holding the list of outbound pipes. + + + + + If true, send all subscription messages upstream, not just + unique ones. The default is false. + + + + + + The default value is false. + + + + + True if we are in the middle of sending a multipart message. + + + + + True if we are in the middle of receiving a multipart message. + + + + + List of pending (un)subscriptions, ie. those that were already + applied to the trie, but not yet received by the user. + + + + + Register the pipe with this socket. + + the Pipe to attach + if true - subscribe to all data on the pipe + + + + Indicate the given pipe as being ready for reading by this socket. + + + the Pipe that is now becoming available for reading + + + + + Indicate the given pipe as being ready for writing to by this socket. + This gets called by the WriteActivated method. + + + the Pipe that is now becoming available for writing + + + + + Set the specified option on this socket. + + which option to set + the value to set the option to + + true + if successful + + optionValue must be a byte-array. + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + + + An XSubSession is a subclass of SessionBase that provides nothing more. + + + + + Fair queueing object for inbound pipes. + + + + + Object for distributing the subscriptions upstream. + + + + + The repository of subscriptions. + + + + + If true, 'message' contains a matching message to return on the + next recv call. + + + + + If true, part of a multipart message was already received, but + there are following parts still waiting. + + + + + Register the pipe with this socket. + + the Pipe to attach + not used + + + + Indicate the given pipe as being ready for reading by this socket. + + + the Pipe that is now becoming available for reading + + + + + Indicate the given pipe as being ready for writing to by this socket. + This gets called by the WriteActivated method. + + + the Pipe that is now becoming available for writing + + + + + This is an override of the abstract method that gets called to signal that the given pipe is to be + removed from this socket. + + the Pipe that is being removed + + + + Transmit the given message. The Send method calls this to do the actual sending. + + the message to transmit + + true + if the message was sent successfully + + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + + + A pipe is a ZObject with .. + + + Note that pipe can be stored in three different arrays. + The array of inbound pipes (1), the array of outbound pipes (2) and + the generic array of pipes to deallocate (3). + + + + + Indicate that the given pipe is now ready for reading. + Pipe calls this on it's sink in response to ProcessActivateRead. + When called upon an instance of SocketBase, this simply calls XReadActivated. + + the pipe to indicate is ready for reading + + + + This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. + + the pipe that was terminated + + + + The underlying pipe for reading from. + + + + + The underlying pipe for writing to. + + + + + This indicates whether this pipe can be read from. + + + + + This indicates whether this pipe be written to. + + + + + High watermark for the outbound pipe. + + + + + Low watermark for the inbound pipe. + + + + + Number of messages read so far. + + + + + Number of messages written so far. + + + + + Last received peer's msgs_read. The actual number in the peer + can be higher at the moment. + + + + + The pipe object on the other side of the pipe-pair. + + + + + Sink to send events to. + + + + + Specifies the state of the pipe endpoint. + + + + Active is common state before any termination begins. + + + Delimited means that delimiter was read from pipe before term command was received. + + + + Pending means that term command was already received from the peer but there are still pending + messages to read. + + + + + Terminating means that all pending messages were already read and all we are waiting for is ack + from the peer. + + + + Terminated means that 'terminate' was explicitly called by the user. + + + + Double_terminated means that user called 'terminate' and then we've got term command from the + peer as well. + + + + + If true, we receive all the pending inbound messages before terminating. + If false, we terminate immediately when the peer asks us to. + + + + + Identity of the writer. Used uniquely by the reader side. + + + + + Create a new Pipe object with the given parent, and inbound and outbound YPipes. + + + Constructor is private as pipe can only be created using + + method. + + + + + Create a pipe pair for bi-directional transfer of messages. + + The parents. + + First HWM is for messages passed from first pipe to the second pipe. + Second HWM is for messages passed from second pipe to the first pipe. + + + First LWM is for messages passed from first pipe to the second pipe. + Second LWM is for messages passed from second pipe to the first pipe. + + + Delay specifies how the pipe behaves when the peer terminates. If true + pipe receives all the pending messages before terminating, otherwise it + terminates straight away. + + A pipe pair for bi-directional transfer of messages. + + + + + uses this function to let us know about the peer pipe object. + + The peer to be assigned. + + + + Specifies the object to send events to. + + The receiver of the events. + + + + Get or set the byte-array that comprises the identity of this Pipe. + + + + + Get or set the byte-array that comprises the routing id of this Pipe. + + + + + Checks if there is at least one message to read in the pipe. + + + Returns true if there is at least one message to read in the pipe; + false + otherwise. + + + + + Read a message from the underlying inbound pipe, and write it to the provided Msg argument. + + + true if a message is read from the pipe, false if pipe is terminated or no messages are + available + + + + + Check whether messages can be written to the pipe. If writing + the message would cause high watermark the function returns false. + + + true + if message can be written to the pipe; false otherwise. + + + + + Write a message to the underlying pipe. + + The message to write. + false if the message cannot be written because high watermark was reached. + + + + Remove unfinished parts of the outbound message from the pipe. + + + + + Flush the messages downstream. + + + + + This method is called to assign the specified pipe as a replacement for the outbound pipe that was + being used. + + the pipe to use for writing + + A "Hiccup" occurs when an outbound pipe experiences something like a transient disconnect or for + whatever other reason + is no longer available for writing to. + + + + + Process the pipe-termination ack. + + + + + Ask pipe to terminate. The termination will happen asynchronously + and user will be notified about actual deallocation by 'terminated' + event. + + + if set to true, the pending messages will be processed + before actual shutdown. + + + + + Compute an appropriate low watermark from the given high-watermark. + + the given high-watermark value to compute it from + predefined low watermark value coming from configuration + the computed low-watermark + + + + Handles the delimiter read from the pipe. + + + + + Temporarily disconnects the inbound message stream and drops + all the messages on the fly. Causes 'hiccuped' event to be generated in the peer. + + + + + Override the ToString method to return a string denoting the type and the parent. + + a string containing this type and also the value of the parent-property + + + + Class Reaper is a ZObject and implements IPollEvents. + The Reaper is dedicated toward handling socket shutdown asynchronously and cleanly. + By passing this task off to the Reaper, the message-queueing subsystem can terminate immediately. + + + + + Reaper thread accesses incoming commands via this mailbox. + + + + + This is a Socket, used as the handle associated with the mailbox's file descriptor. + + + + + I/O multiplexing is performed using a poller object. + + + + + Number of sockets being reaped at the moment. + These are the reason for having a reaper: to take over the task of terminating these sockets. + + + + + If true, we were already asked to terminate. + + + + + Create a new Reaper with the given thread-id. + This will have a new Poller with the name "reaper-" + thread-id, and a Mailbox of that same name. + + the Ctx for this to be in + an integer id to give to the thread this will live on + + + + Release any contained resources - by destroying the poller and closing the mailbox. + + + + + Get the Mailbox that this Reaper uses for communication with the rest of the message-queueing + subsystem. + + + + + Start the contained Poller to begin polling. + + + + + Issue the Stop command to this Reaper object. + + + + + Handle input-ready events, by receiving and processing any commands + that are waiting in the mailbox. + + + + + This method normally is for handling output-ready events, which don't apply here. + + You must not call OutEvent on a Reaper. + + + + This would be called when a timer expires - however in this event NotSupportedException would be + thrown. + + an integer used to identify the timer + You must not call TimerEvent on a Reaper. + + + + Respond to the Stop command by signaling the polling-loop to terminate, + and if there're no sockets left to reap - stop the poller. + + + + + Add the given socket to the list to be reaped (terminated). + + the socket to add to the list for termination + + + + Respond to having one of the sockets that are marked for reaping, - finished being reaped, + and if there are none left - send the Done command and stop the poller. + + + + + If true, this session (re)connects to the peer. Otherwise, it's + a transient session created by the listener. + + + + + Pipe connecting the session to its socket. + + + + + This set is added to with pipes we are disconnecting, but haven't yet completed + + + + + This flag is true if the remainder of the message being processed + is still in the pipe. + + + + + True if termination have been suspended to push the pending + messages to the network. + + + + + The protocol I/O engine connected to the session. + + + + + The socket the session belongs to. + + + + + I/O thread the session is living in. It will be used to plug in + the engines into the same thread. + + + + + ID of the linger timer (0x20) + + + + + True is linger timer is running. + + + + + If true, identity has been sent to the network. + + + + + If true, identity has been received from the network. + + + + + Protocol and address to use when connecting. + + + + + Create a return a new session. + The specific subclass of SessionBase that is created is dictated by the SocketType specified by the + options argument. + + + the IOThread for this session to run in + + whether to immediately connect + the socket to connect + + an Options that provides the SocketType that dictates which type of session + to create + + + an Address object that specifies the protocol and address to connect to + + + the newly-created instance of whichever subclass of SessionBase is specified by the options + + The socket must be of the correct type. + + + + Create a new SessionBase object from the given IOThread, socket, and Address. + + the IOThread for this session to run on + this flag dictates whether to connect + the socket to contain + Options that dictate the settings of this session + an Address that dictates the protocol and IP-address to use when connecting + + + + Terminate and release any contained resources. + This cancels the linger-timer if that exists, and terminates the protocol-engine if that exists. + + + + + Attach the given pipe to this session. + + + This is to be used once only, when creating the session. + + + + + Read a message from the pipe. + + a reference to a Msg to put the message into + true if the Msg is successfully sent + + + + Write the given Msg to the pipe. + + the Msg to push to the pipe + true if the Msg was successfully sent + + + + Set the identity-sent and identity-received flags to false. + + + + + Flush any messages that are in the pipe downstream. + + + + + Remove any half processed messages. Flush unflushed messages. + Call this function when engine disconnect to get rid of leftovers. + + + + + This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. + + the pipe that was terminated + + + + Indicate that the given pipe is now ready for reading. + Pipe calls this on it's sink in response to ProcessActivateRead. + + the pipe to indicate is ready for reading + + + + Get the contained socket. + + + + + Process the Plug-request by setting this SessionBase as the handler for the io-object + and starting connecting (without waiting). + + + + + Process the Attach-request by hooking up the pipes + and plugging in the given engine. + + the IEngine to plug in + + + + Flush out any leftover messages and call Detached. + + + + + Process a termination request. + + + a time (in milliseconds) for this to linger before actually going away. -1 means + infinite. + + + + + Call this function to move on with the delayed process-termination request. + + + + + This is called when the timer expires. + + an integer used to identify the timer + + + + The parent SessionBase class calls this when the Detach method finishes detaching. + + + + + Begin connecting. + + Whether to wait a bit before actually attempting to connect + + + + Override the ToString method to also show the socket-id. + + the type of this object and [ socket-id ] + + + + This method would be called when a message receive operation has been completed, although here it only + throws a NotSupportedException. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + This operation is not supported on the SessionBase + class. + + + + + This method would be called when a message Send operation has been completed, although here it only + throws a NotSupportedException. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + This operation is not supported on the SessionBase + class. + + + + If true, associated context was already terminated. + + + + If true, object should have been already destroyed. However, + destruction is delayed while we unwind the stack to the point + where it doesn't intersect the object being destroyed. + + + + Socket's mailbox object. + + + List of attached pipes. + + + Reaper's poller. + + + The handle of this socket within the reaper's poller. + + + Timestamp of when commands were processed the last time. + + + Number of messages received since last command processing. + + + True if the last message received had MORE flag set. + + + Monitor socket. + + + Bitmask of events being monitored. + + + The tcp port that was bound to, if any. + + + + Create a new SocketBase within the given Ctx, with the specified thread-id and socket-id. + + the Ctx context that this socket will live within + the id of the thread upon which this socket will execute + the integer id for the new socket + + + + Abstract method for attaching a given pipe to this socket. + The concrete implementations are defined by the individual socket types. + + the Pipe to attach + if true - subscribe to all data on the pipe + + + + Abstract method that gets called to signal that the given pipe is to be removed from this socket. + The concrete implementations of SocketBase override this to provide their own implementation + of how to terminate the pipe. + + the Pipe that is being removed + + + + Throw + + if this socket is already disposed. + + This object is already disposed. + + + + Throw + + if the message-queueing system has started terminating. + + The socket has been stopped. + + + + Create a socket of a specified type. + + a ZmqSocketType specifying the type of socket to create + the parent context + the thread for this new socket to run on + an integer id for this socket + The socket type must be valid. + + + + Destroy this socket - which means to stop monitoring the queue for messages. + This simply calls StopMonitor, and then verifies that the destroyed-flag is set. + + + + + Return the Mailbox associated with this socket. + + + + + Interrupt a blocking call if the socket is stuck in one. + This function can be called from a different thread! + + + + + Check whether the transport protocol, as specified in connect or + bind, is available and compatible with the socket type. + + + the specified protocol is not supported + + + the socket type and protocol do not match + + + The supported protocols are "inproc", "ipc", "tcp", "pgm", and "epgm". + If the protocol is either "pgm" or "epgm", then this socket must be of type Pub, Sub, XPub, or XSub. + + + + + Register the given pipe with this socket. + + the Pipe to attach + + if true - subscribe to all data on the pipe (optional - default is false) + + + + + Set the specified socket option. + + which option to set + the value to set the option to + The socket has been stopped. + + + + Return the integer-value of the specified option. + + which option to get + the value of the specified option, or -1 if error + The socket has been stopped. + + If the ReceiveMore option is specified, then 1 is returned if it is true, 0 if it is false. + If the Events option is specified, then process any outstanding commands, and return -1 if that throws + a TerminatingException. + then return an integer that is the bitwise-OR of the PollEvents.PollOut and PollEvents.PollIn flags. + Otherwise, cast the specified option value to an integer and return it. + + + + + Return the value of the specified option as an Object. + + which option to get + the value of the option + The socket has already been stopped. + + If the Handle option is specified, then return the handle of the contained mailbox. + If the Events option is specified, then process any outstanding commands, and return -1 if that throws + a TerminatingException. + then return a PollEvents that is the bitwise-OR of the PollEvents.PollOut and PollEvents.PollIn flags. + + + + + Bind this socket to the given address. + + a string denoting the endpoint-address to bind to + + the address specified to bind to must not be + already in use + + The requested protocol is not supported. + the socket bind failed + + No IO thread was found, or the protocol's listener encountered an + error during initialisation. + + + the specified protocol is not supported + + + the socket type and protocol do not match + + The socket has been stopped. + + The supported protocols are "inproc", "ipc", "tcp", "pgm", and "epgm". + If the protocol is either "pgm" or "epgm", then this socket must be of type Pub, Sub, XPub, or XSub. + If the protocol is "inproc", you cannot bind to the same address more than once. + + + + + Bind the specified TCP address to an available port, assigned by the operating system. + + a string denoting the endpoint to bind to + the port-number that was bound to + + + uses a protocol other than TCP. + + The socket has been stopped. + + The specified address is already in use. + + + No IO thread was found, or the protocol's listener errored during + initialisation. + + the socket bind failed + + + + Connect this socket to the given address. + + a string denoting the endpoint to connect to + + The specified address is already in use. + + No IO thread was found. + + the specified protocol is not supported + + + the socket type and protocol do not match + + The socket has been stopped. + + The supported protocols are "inproc", "ipc", "tcp", "pgm", and "epgm". + If the protocol is either "pgm" or "epgm", then this socket must be of type Pub, Sub, XPub, or XSub. + + + The given address was not found in the list of + endpoints. + + + + + Given a string containing an endpoint address like "tcp://127.0.0.1:5555, + break-it-down into the address part ("127.0.0.1:5555") and the protocol part ("tcp"). + + a string denoting the endpoint, to take the parts from + the IP-address portion of the end-point address + the protocol portion of the end-point address (such as "tcp") + + + + Take ownership of the given + + and register it against the given + . + + + + + Disconnect from the given endpoint. + + the endpoint to disconnect from + + + is null. + + + Endpoint was not found and cannot be disconnected. + + + The specified protocol must be valid. + + The socket has been stopped. + + + + Transmit the given Msg across the message-queueing system. + + + The + + to send. + + + The timeout to wait before returning false. Pass + + to disable timeout. + + Whether this message will contain another frame after this one. + The socket has been stopped. + + + is not initialised. + + + + + Receive a frame into the given + + and return true if successful, + false + if it timed out. + + + the Msg to read the received message into + + this controls whether the call blocks, and for how long. + + true + if successful, false if it timed out + + + For, there are three categories of value: + + + + - return false immediately if no message is available + + + + (or a negative value) - wait indefinitely, always returning + true + + + Any positive value - return false after the corresponding duration if no message has + become available + + + + the Msg must already have been uninitialised + The socket must not already be stopped. + + + + Close this socket. Mark it as disposed, and send ownership of it to the reaper thread to + attend to the rest of it's shutdown process. + + + + + These functions are used by the polling mechanism to determine + which events are to be reported from this socket. + + + + + These functions are used by the polling mechanism to determine + which events are to be reported from this socket. + + + + + Using this function reaper thread ask the socket to register with + its poller. + + + + + Processes commands sent to this socket (if any). + If + + is -1, the call blocks until at least one command was processed. + If + + is true, commands are processed at most once in a predefined time period. + + + how much time to allow to wait for a command, before returning (in milliseconds) + + + if true - throttle the rate of command-execution by doing only one per call + + + The Ctx context must not already be terminating. + + + + + Process a termination command on this socket, by stopping monitoring and marking this as terminated. + + + + + Process a Bind command by attaching the given Pipe. + + the Pipe to attach + + + + Process a termination request. + + + a time (in milliseconds) for this to linger before actually going away. -1 means + infinite. + + + + + Mark this socket as having been destroyed. Delay actual destruction of the socket. + + + + + The default implementation assumes there are no specific socket + options for the particular socket type. If not so, overload this + method. + + a ZmqSocketOption specifying which option to set + an Object that is the value to set the option to + + + + This gets called when outgoing messages are ready to be sent out. + On SocketBase, this does nothing and simply returns false. + + this method on SocketBase only returns false + + + + Transmit the given message. The + + method calls this to do the actual sending. + This abstract method gets overridden by the different socket types + to provide their concrete implementation of sending messages. + + the message to transmit + + true + if the message was sent successfully + + + + + This gets called when incoming messages are ready to be received. + On SocketBase, this does nothing and simply returns false. + + this method on SocketBase only returns false + + + + Receive a message. The Recv method calls this lower-level method to do the actual receiving. + This abstract method gets overridden by the different socket types + to provide their concrete implementation of receiving messages. + + + the Msg to receive the message into + + + true + if the message was received successfully, false if there were no messages to receive + + + + + Indicate the given pipe as being ready for reading by this socket. + This abstract method gets overridden by the different sockets + to provide their own concrete implementation. + + + the Pipe that is now becoming available for reading + + + + + Indicate the given pipe as being ready for writing to by this socket. + This abstract method gets called by the WriteActivated method + and gets overridden by the different sockets + to provide their own concrete implementation. + + + the Pipe that is now becoming available for writing + + + + + Handle input-ready events by receiving and processing any incoming commands. + + + + + Handle output-ready events. + + + This is not supported on instances of the parent class + SocketBase. + + + + + In subclasses of SocketBase this is overridden, to handle the expiration of a timer. + + an integer used to identify the timer + + You must not call TimerEvent on an instance of class + SocketBase. + + + + + To be called after processing commands or invoking any command + handlers explicitly. If required, it will deallocate the socket. + + + + + Indicate that the given pipe is now ready for reading. + Pipe calls this on it's sink in response to ProcessActivateRead. + When called upon an instance of SocketBase, this simply calls XReadActivated. + + the pipe to indicate is ready for reading + + + + When called upon an instance of SocketBase, this simply calls XWriteActivated. + + the pipe to indicate is ready for writing + + + + This gets called by ProcessPipeTermAck or XTerminated to respond to the termination of the given pipe. + + the pipe that was terminated + + + + Moves the flags from the message to local variables, + to be later retrieved by getsockopt. + + + + + Register the given events to monitor on the given endpoint. + + + a string denoting the endpoint to monitor. If this is null - monitoring is stopped. + + the SocketEvent to monitor for + Maximum number of sockets reached. + + The protocol of + + is not supported. + + The socket has been stopped. + + + + If there is a monitor-socket, close it and set monitor-events to 0. + + + + + Override the ToString method in order to also show the socket-id. + + A string that denotes this object type followed by [ socket-id ] + + + + Get the Socket (Handle) - which is actually the Handle of the contained mailbox. + + + + + Return a short bit of text that denotes the SocketType of this socket. + + a short type-string such as PAIR, PUB, OR UNKNOWN + + + + The class ByteArraySegment provides for containing a simple byte-array, an Offset property, + and a variety of operations that may be performed upon it. + + + + + Create a new ByteArraySegment containing the given byte-array buffer. + + the byte-array for the new ByteArraySegment to contain + + + + Create a new ByteArraySegment containing the given byte-array buffer with the given offset. + + the byte-array for the new ByteArraySegment to contain + the value for the Offset property + + + + Create a new ByteArraySegment that is a shallow-copy of the given ByteArraySegment (with a reference + to the same buffer). + + the source-ByteArraySegment to make a copy of + + + + Create a new ByteArraySegment that is a shallow-copy of the given ByteArraySegment (with a reference + to the same buffer) + but with a different offset. + + the source-ByteArraySegment to make a copy of + + a value for the Offset property that is distinct from that of the source + ByteArraySegment + + + + + Get the number of bytes within the buffer that is past the Offset (ie, buffer-length minus offset). + + + + + Add the given value to the offset. + + the delta value to add to the offset. + + + + Get the offset into the buffer. + + + + + Write the given 64-bit value into the buffer, at the position marked by the offset plus the given + index i. + + an Endianness to specify in which order to write the bytes + the 64-bit value to write into the byte-array buffer + the index position beyond the offset to start writing the bytes + + + + Write the given 16-bit value into the buffer, at the position marked by the offset plus the given + index i. + + an Endianness to specify in which order to write the bytes + the 16-bit value to write into the byte-array buffer + the index position beyond the offset to start writing the bytes + + + + Write the given 32-bit value into the buffer, at the position marked by the offset plus the given + index i. + + an Endianness to specify in which order to write the bytes + the 32-bit value to write into the byte-array buffer + the index position beyond the offset to start writing the bytes + + + + Encode the given String into a byte-array using the ASCII encoding + and write that into the buffer. + + the String to write to the buffer + the number of encoded bytes to copy into the buffer + + an index-offset, in addition to the Offset property, that marks where in the buffer to + start writing bytes to + + + + + Encode the given String into a byte-array using the ASCII encoding + and write that into the buffer. + + the String to write to the buffer + + an index-offset, in addition to the Offset property, that marks where in the buffer to + start writing bytes to + + + + + Return a 64-bit numeric value that is read from the buffer, starting at the position marked by the + offset plus the given index i, + based upon the given byte-ordering. + + + an Endianness to specify which byte-ordering to use to interpret the source bytes + + the index position beyond the offset to start reading the bytes + a long that is read from the bytes of the buffer + + + + Return a 64-bit unsigned numeric value (ulong) that is read from the buffer, starting at the position + marked by the offset plus the given index i, + based upon the given byte-ordering. + + + an Endianness to specify which byte-ordering to use to interpret the source bytes + + the index position beyond the offset to start reading the bytes + an unsigned long that is read from the bytes of the buffer + + + + Return a 32-bit integer that is read from the buffer, starting at the position marked by the offset + plus the given index i, + based upon the given byte-ordering. + + + an Endianness to specify which byte-ordering to use to interpret the source bytes + + the index position beyond the offset to start reading the bytes + an integer that is read from the bytes of the buffer + + + + Return a 16-bit unsigned integer (ushort) value that is read from the buffer, starting at the position + marked by the offset plus the given index i, + based upon the given byte-ordering. + + + an Endianness to specify which byte-ordering to use to interpret the source bytes + + the index position beyond the offset to start reading the bytes + a ushort that is read from the bytes of the buffer + + + + Return a String that is read from the byte-array buffer, decoded using the ASCII encoding, + starting at the position marked by the offset plus the given index i. + + the length of the part of the buffer to read + the index position beyond the offset to start reading the bytes + a String decoded from the bytes of the buffer + + + + Write the bytes of this ByteArraySegment to the specified destination-ByteArraySegment. + + the destination-ByteArraySegment + the number of bytes to copy + + + + Write the bytes of this ByteArraySegment to the specified destination-ByteArraySegment. + + an offset within this source buffer to start copying from + the destination-ByteArraySegment + an offset within the destination buffer to start copying to + the number of bytes to copy + + + + Return a shallow-copy of this ByteArraySegment. + + a new ByteArraySegment that is a shallow-copy of this one + + + + Get or set the byte of the buffer at the i-th index position (zero-based). + + the index of the byte to access + + + + Set the offset to zero. + + + + + Return a new ByteArraySegment that has the data of this one, but with the given offset. + + the source-ByteArraySegment + the offset-value to give the new ByteArraySegment + + + + + Return a new ByteArraySegment that contains the given byte-array buffer. + + the source byte-array buffer + a new ByteArraySegment that contains the given buffer + + + + Return the byte-array buffer of this ByteArraySegment. + + the source-ByteArraySegment + the byte-array that is the buffer of this ByteArraySegment + + + + Return true if the given Object is a ByteArraySegment and has the same buffer and offset. + + an Object to compare for equality to this one + true only if the otherObject has the same buffer and offset + + The given Object is considered to be Equal if it also is a ByteArraySegment, + and has the same Offset property value + and it's buffer points to the SAME byte-array as the otherObject does. + + + + + Helper base class for decoders that know the amount of data to read + in advance at any moment. + This class is the state machine that parses the incoming buffer. + Derived classes should implement individual state machine actions. + + + Knowing the amount in advance is a property + of the protocol used. 0MQ framing protocol is based size-prefixed + paradigm, which qualifies it to be parsed by this class. + + On the other hand, XML-based transports (like XMPP or SOAP) don't allow + for knowing the size of data to read in advance and should use different + decoding algorithms. + + + + + Where to store the read data. + + + + + How much data to read before taking next step. + + + + + The buffer for data to decode. + + + + + Returns true if the decoder has been fed all required data + but cannot proceed with the next decoding step. + False is returned if the decoder has encountered an error. + + + + + Returns a buffer to be filled with binary data. + + + + + Processes the data in the buffer previously allocated using + get_buffer function. size argument specifies the number of bytes + actually filled into the buffer. Function returns number of + bytes actually processed. + + + + + Where to get the data to write from. + + + + + If true, first byte of the message is being written. + + + + + How much data to write before the next step should be executed. + + + + + The buffer for encoded data. + + + + + The size of the encoded-data buffer + + + + + This flag indicates whether there has been an encoder error. + + + + + Create a new EncoderBase with a buffer of the given size. + + how big of an internal buffer to allocate (in bytes) + + the + + to set this EncoderBase to + + + + + Get the Endianness (Big or Little) that this EncoderBase uses. + + + + + This returns a batch of binary data. The data + are filled to a supplied buffer. If no buffer is supplied (data_ + points to NULL) decoder object will provide buffer of its own. + + + + + Set a flag that indicates that there has been an encoding-error. + + + + + Return true if there has been an encoding error. + + the state of the error-flag + + + + Interface IEncoder mandates SetMsgSource and GetData methods. + + + + + Set message producer. + + + + + Get a ByteArraySegment of binary data. The data + are filled to a supplied buffer. If no buffer is supplied (data is null) + encoder will provide buffer of its own. + + + + + Abstract interface to be implemented by various engines. + + + + + Plug the engine to the session. + + + + + Terminate and deallocate the engine. Note that 'detached' + events are not fired on termination. + + + + + This method is called by the session to signal that more + messages can be written to the pipe. + + + + + This method is called by the session to signal that there + are messages to send available. + + + + + IpcConnecter is a subclass of TcpConnector, which provides absolutely nothing beyond what TcpConnector + does. + + + + + An IpcListener is a TcpListener that also has an Address property and a SetAddress method. + + + + + Create a new IpcListener with the given IOThread, socket, and Options. + + + the SocketBase to listen to + an Options value that dictates the settings for this IpcListener + + + + Get the bound address for use with wildcards + + + + + Set address to listen on. + + a string denoting the address to listen to + + + + Unable to parse the address's port number, or the IP address + could not be parsed. + + + + + Unable to parse the address's port number, or the IP address + could not be parsed. + + + + + Unable to parse the address's port number, or the IP address + could not be parsed. + + Error establishing underlying socket. + + + + Process a termination request. + + + a time (in milliseconds) for this to linger before actually going away. -1 means + infinite. + + + + + This method is called when a message receive operation has been completed. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + + + This method would be called when a message Send operation has been completed, although here it only + throws a NotSupportedException. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + This operation is not supported on the PgmListener + class. + + + + + This would be called when the a expires, although here it only throws a NotSupportedException. + + an integer used to identify the timer (not used here) + + This operation is not supported on the PgmListener + class. + + + + + ID of the timer used to delay the reconnection. Value is 1. + + + + + This would be called when a timer expires, although here it only throws a NotSupportedException. + + an integer used to identify the timer (not used here) + + This method must not be called on instances of + PgmSender. + + + + + This method is called when a message Send operation has been completed. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + A non-recoverable socket error occurred. + + + + Internal function to return a reconnect back-off delay. + Will modify the current_reconnect_ivl used for next call + Returns the currently used interval + + + + + This method would be called when a message receive operation has been completed, although here it only + throws a NotSupportedException. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + This method must not be called on instances of + PgmSender. + + + + + This enum-type is Idle, Receiving, Stuck, or Error. + + + + + This method is be called when a message receive operation has been completed. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + + + This method would be called when a message Send operation has been completed, except in this case this + method does nothing. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + + + This would be called when a timer expires, although here it does nothing. + + an integer used to identify the timer (not used here) + + + + This enum-type denotes the type of Pragmatic General Multicast (PGM) socket. + Publisher, Receiver, or Listener. + + + + + A PgmSocket utilizes the Pragmatic General Multicast (PGM) multicast protocol, which is also referred + to as "reliable multicast". + This is only supported on Windows when Microsoft Message Queueing (MSMQ) is installed. + See RFC 3208. + + + + + Set/Query rate (Kb/Sec) + window size (Kb and/or MSec) -- described by RM_SEND_WINDOW below + + + + + set IP multicast outgoing interface + + + + + add IP multicast incoming interface + + + + + Set the Time-To-Live (TTL) of the MCast packets -- (ULONG) + + + + + Perform initialization of this PgmSocket, including creating the socket handle. + + + + + Override the ToString method to produce a more descriptive, useful description. + + a useful description of this object's state + + + + This enum-type denotes the operational state of this StreamEngine - whether Closed, doing Handshaking, + Active, or Stalled. + + + + + This method is be called when a message receive operation has been completed. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + + + This method is called when a message Send operation has been completed. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + + + the SocketError that resulted from the write - which could be Success (no + error at all) + + + this indicates the number of bytes that were transferred in the write + + the number of bytes transferred if successful, -1 otherwise + + If the socketError is not Success then it must be a valid + recoverable error or the number of bytes transferred must be zero. + + + If socketError is SocketError.Success and bytesTransferred is > 0, then this returns bytesTransferred. + If bytes is zero, or the socketError is one of NetworkDown, NetworkReset, HostUn, Connection Aborted, + TimedOut, or ConnectionReset, - then -1 is returned. + Otherwise, a NetMQException is thrown. + + + + + the SocketError that resulted from the read - which could be Success (no error + at all) + + + this indicates the number of bytes that were transferred in the read + + the number of bytes transferred if successful, -1 otherwise + + If the socketError is not Success then it must be a valid + recoverable error or the number of bytes transferred must be zero. + + + If socketError is SocketError.Success and bytesTransferred is > 0, then this returns bytesTransferred. + If bytes is zero, or the socketError is one of NetworkDown, NetworkReset, HostUn, Connection Aborted, + TimedOut, or ConnectionReset, - then -1 is returned. + Otherwise, a NetMQException is thrown. + + + + + This would be called when a timer expires, although here it only throws NotSupportedException. + + an integer used to identify the timer (not used here) + + TimerEvent is not supported on StreamEngine. + + + + + A TcpAddress implements IZAddress, and contains an IPEndPoint (the Address property) + and a Protocol property. + + + + + Override ToString to provide a detailed description of this object's state + in the form: Protocol://[AddressFamily]:Port + + a string in the form Protocol://[AddressFamily]:Port + + + + Given a string that should identify an endpoint-address, resolve it to an actual IP address + and set the Address property to a valid corresponding value. + + the endpoint-address to resolve + whether the address must be only-IPv4 + The name must contain the colon delimiter. + + The specified port must be a valid nonzero integer. + + Must be able to find the IP-address. + + + + Get the Address implementation - which here is an IPEndPoint, + which contains Address, AddressFamily, and Port properties. + + + + + Get the textual-representation of the communication protocol implied by this TcpAddress, + which here is simply "tcp". + + + + + If 'delay' is true connector first waits for a while, then starts connection process. + + + + + ID of the timer used to delay the reconnection. Value is 1. + + + + + Address to connect to. Owned by session_base_t. + + + + + The underlying AsyncSocket. + + + + + If true file descriptor is registered with the poller and 'handle' + contains valid value. + + + + + If true, connector is waiting a while before trying to connect. + + + + + True if a timer has been started. + + + + + Reference to the session we belong to. + + + + + Current reconnect-interval. This gets updated for back-off strategy. + + + + + String representation of endpoint to connect to + + + + + Socket + + + + + Create a new TcpConnector object. + + the I/O-thread for this TcpConnector to live on. + the session that will contain this + Options that define this new TcpC + the Address for this Tcp to connect to + this boolean flag dictates whether to wait before trying to connect + + + + This does nothing. + + + + + Begin connecting. If a delayed-start was specified - then the reconnect-timer is set, otherwise this + starts immediately. + + + + + Process a termination request. + This cancels the reconnect-timer, closes the AsyncSocket, and marks the socket-handle as invalid. + + + a time (in milliseconds) for this to linger before actually going away. -1 means + infinite. + + + + + This method would be called when a message receive operation has been completed, although here it only + throws a NotImplementedException. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + InCompleted must not be called on a TcpConnector. + + + + + Internal function to start the actual connection establishment. + + + + + This method is called when a message Send operation has been completed. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + A non-recoverable socket error occurred. + + If the socketError is not Success then it must be a valid + recoverable error. + + + + + This is called when the timer expires - to start trying to connect. + + The timer-id. This is not used. + + + + Internal function to add a reconnect timer + + + + + Internal function to return a reconnect back-off delay. + Will modify the current_reconnect_ivl used for next call + Returns the currently used interval + + + + + Close the connecting socket. + + + + + Address to listen on. + + + + + Underlying socket. + + + + + Socket the listener belongs to. + + + + + String representation of endpoint to bind to + + + + + The port that was bound on + + + + + Create a new TcpListener on the given IOThread and socket. + + the IOThread for this to live within + a SocketBase to listen on + socket-related Options + + + + Release any contained resources (here - does nothing). + + + + + Process a termination request. + + + a time (in milliseconds) for this to linger before actually going away. -1 means + infinite. + + + + + Set address to listen on. + + a string denoting the address to set this to + + + + This is called when socket input has been completed. + + + This indicates the status of the input operation - whether Success or some + error. + + the number of bytes that were transferred + A non-recoverable socket-error occurred. + + + + Close the listening socket. + + + + + Get the bound address for use with wildcards + + + + + Get the port-number to listen on. + + + + + This method would be called when a message Send operation has been completed - except in this case it + simply throws a NotImplementedException. + + + a SocketError value that indicates whether Success or an error occurred + + the number of bytes that were transferred + + OutCompleted is not implemented on TcpListener. + + + + + This would be called when a timer expires, although here it only throws a NotSupportedException. + + an integer used to identify the timer (not used here) + TimerEvent is not supported on TcpListener. + + + + The maximum message-size. If this is -1 then there is no maximum. + + + + + Create a new V1Decoder with the given buffer-size, maximum-message-size and Endian-ness. + + the buffer-size to give the contained buffer + the maximum message size. -1 indicates no limit. + the Endianness to specify for it - either Big or Little + + + + Set the receiver of decoded messages. + + + + + Set the receiver of decoded messages. + + + + + Encoder for 0MQ framing protocol. Converts messages into data stream. + + + + + V2Protocol is a class that contains two integer constants: MoreFlag and LargeFlag. + + + + + This is a constant-integer with the value 1. + + + + + This is a constant-integer with the value 2. + + + + + This class simply provides a counter-value, which may be set, increased, and decremented. + Increase and Decrement are both thread-safe operations. + + + + + Create a new AtomicCounter object with an initial counter-value of zero. + + + + + Assign the given amount to the counter-value. + + the integer value to set the counter to + + + + Add the given amount to the counter-value, in an atomic thread-safe manner. + + the integer amount to add to the counter-value + + + + Subtract the given amount from the counter-value, in an atomic thread-safe manner. + + + the integer amount to subtract from to the counter-value (default value is 1) + + the new value of the counter + + + + Class ByteArrayEqualityComparer is an IEqualityComparer for byte-arrays, + and provides an Equals methods to compare two byte-arrays for equality in value + and GetHashCode. + + + + + Return true only if the two byte-arrays are equal in length and contain the same values. + + one of the two byte-arrays to compare + the other byte-array to compare against + + + + + Return a numeric hashcode of the given byte-array. + + the given byte-array to compute the hashcode of + an integer that contains a hashcode computed over the byte-array + + + + The Clock class provides properties for getting timer-counts in either milliseconds or microseconds, + and the CPU's timestamp-counter if available. + + + + + TSC timestamp of when last time measurement was made. + + + + + Physical time corresponding to the TSC above (in milliseconds). + + + + + This flag indicates whether the rdtsc instruction is supported on this platform. + + + + + Return the High-Precision timestamp, as a 64-bit integer that denotes microseconds. + + + + + Return the Low-Precision timestamp, as a 64-bit integer denoting milliseconds. + In tight loops generating it can be 10 to 100 times faster than the High-Precision timestamp. + + + + + Return the CPU's timestamp counter, or 0 if it's not available. + + + + + A PollSet contains a single Socket and an IPollEvents Handler + that provides methods that signal when that socket is ready for reading or writing. + + + + + Get the Socket that this PollSet contains. + + + + + Get the IPollEvents object that has methods to signal when ready for reading or writing. + + + + + Get or set whether this PollSet is cancelled. + + + + + Create a new PollSet object to hold the given Socket and IPollEvents handler. + + the Socket to contain + the IPollEvents to signal when ready for reading or writing + + + + This is the list of registered descriptors (PollSets). + + + + + List of sockets to add at the start of the next loop + + + + + If true, there's at least one retired event source. + + + + + This flag is used to tell the polling-loop thread to shut down, + wherein it will stop at the end of it's current loop iteration. + + + + + This indicates whether the polling-thread is not presently running. Default is true. + + + + + This is the background-thread that performs the polling-loop. + + + + + This is the name associated with this Poller. + + + + + The set of Sockets to check for read-readiness. + + + + + The set of Sockets to check for any errors. + + + + + Create a new Poller object with the given name. + + a name to assign to this Poller + + + + Unless the polling-loop is already stopped, + tell it to stop at the end of the current polling iteration, and wait for that thread to finish. + + + + + Add a new PollSet containing the given Socket and IPollEvents at the next iteration through the loop, + and also add the Socket to the list of those to check for errors. + + the Socket to add + the IPollEvents to include in the new PollSet to add + + + + Remove the given Socket from this Poller. + + the System.Net.Sockets.Socket to remove + + + + Add the given Socket to the list to be checked for read-readiness at each poll-iteration. + + the Socket to add + + + + Begin running the polling-loop, on a background thread. + + + The name of that background-thread is the same as the name of this Poller object. + + + + + Signal that we want to stop the polling-loop. + This method returns immediately - it does not wait for the polling thread to stop. + + + + + This method is the polling-loop that is invoked on a background thread when Start is called. + As long as Stop hasn't been called: execute the timers, and invoke the handler-methods on each of the + saved PollSets. + + + + + This serves as the parent-class for Poller and Proactor. + It provides for managing a list of timers (ITimerEvents) - adding, cancelling, and executing them, + and a Load property. + + + + + Load of the poller. Currently the number of file descriptors registered. + + + + + Instances of this class contain a ITimerEvent sink and an integer Id. + + + + + Create a new TimerInfo object from the given sink and id. + + an ITimerEvent that acts as a sink for when the timer expires + an integer id that identifies this timer + + + + Get the ITimerEvent that serves as the event-sink. + + + + + Get the integer Id of this TimerInfo. + + + + + This is a list of key/value pairs, with the keys being timeout numbers and the corresponding values + being a list of TimerInfo objects. + It is sorted by the keys - which are timeout values. Thus, by walking down the list, you encounter the + soonest timeouts first. + + + + + Create a new PollerBase object - which simply creates an empty m_timers collection. + + + + + Get the load of this poller. Note that this function can be + invoked from a different thread! + + + + + Add the given amount to the load. + This is called by individual poller implementations to manage the load. + + + This is thread-safe. + + + + + Add a + + to the internal list, created from the given sink and id - to expire in the given number of + milliseconds. + Afterward the expiration method TimerEvent on the sink object will be called with argument set to id. + + the timeout-period in milliseconds of the new timer + the IProactorEvents to add for the sink of the new timer + the Id to assign to the new TimerInfo + + + + Cancel the timer that was created with the given sink object with the given Id. + + the ITimerEvent that the timer was created with + the Id of the timer to cancel + + The complexity of this operation is O(n). We assume it is rarely used. + + + + + Execute any timers that are due. Return the number of milliseconds + to wait to match the next timer or 0 meaning "no timers". + + + the time to wait for the next timer, in milliseconds, or zero if there are no more timers + + + + + The completionStatuses item must have a valid + OperationType. + + + + + Close the read and write sockets. + + + + + This class exists only to provide a wrapper for the Socket.Select method, + such that the call may be handled slightly differently on .NET 3.5 as opposed to later versions. + + + + + Determine the status of one or more sockets. + After returning, the lists will be filled with only those sockets that satisfy the conditions. + + a list of Sockets to check for readability + a list of Sockets to check for writability + a list of Sockets to check for errors + + a timeout value, in microseconds. A value of -1 indicates an infinite + timeout. + + + If you are in a listening state, readability means that a call to Accept will succeed without + blocking. + If you have already accepted the connection, readability means that data is available for reading. In + these cases, + all receive operations will succeed without blocking. Readability can also indicate whether the remote + Socket + has shut down the connection - in which case a call to Receive will return immediately, with zero + bytes returned. + + Select returns when at least one of the sockets of interest (ie any of the sockets in the checkRead, + checkWrite, or checkError + lists) meets its specified criteria, or the microSeconds parameter is exceeded - whichever comes + first. + Setting microSeconds to -1 specifies an infinite timeout. + + If you make a non-blocking call to Connect, writability means that you have connected successfully. If + you already + have a connection established, writability means that all send operations will succeed without + blocking. + If you have made a non-blocking call to Connect, the checkError parameter identifies sockets that have + not connected successfully. + + See this reference for further details of the operation of the Socket.Select method: + https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.select(v=vs.110).aspx + + This may possibly throw an ArgumentNullException, if all three lists are null or empty, + and a SocketException if an error occurred when attempting to access a socket. + + Use the Poll method if you only want to determine the status of a single Socket. + + This method cannot detect certain kinds of connection problems, + such as a broken network cable, or that the remote host was shut down ungracefully. + You must attempt to send or receive data to detect these kinds of errors. + + + none of the three lists of sockets may be null. + + + an error occurred when attempting to access the + socket. + + + + + StringLib is a static class whose purpose is to provide miscellaneous string-related utility methods + and extension properties. + + + + + Return a string that gives detailed information of the state of the given List of Sockets, + for debugging purposes. + + the List of Sockets to describe + a string detailing the list contents, including the state of each Socket + + This is intended just for debugging purposes, as when adding detailed information to the Message of an + exception when an error occurs. In DEBUG mode more detail is provided. + + + + + Return a detailed textual description of the state of this Socket (if DEBUG is defined). + + the System.Net.Sockets.Socket to describe + a string containing a detailed listing of the properties of the Socket + + This is intended just for debugging purposes, as when adding detailed information to the Message of an + exception when an error occurs. In DEBUG mode more detail is provided. + + + + A FIFO queue. + + The class supports: + + + Push-front via. + + + Pop-back via. + + + Pop-front via. + + + As such it is only one operation short of being a double-ended queue (dequeue or deque). + + The internal implementation consists of a doubly-linked list of fixed-size arrays. + + + + + Individual memory chunk to hold N elements. + + + Contains global index positions of elements in the chunk. + + + + Optional link to the previous. + + + + + Optional link to the next. + + + + the size to give the new YQueue + + + should be no less than 2 + + + + Gets the index of the front element of the queue. + The index of the front element of the queue. + + If the queue is empty, it should be equal to + . + + + + Gets the front element of the queue. If the queue is empty, behaviour is undefined. + The front element of the queue. + + + Gets the index of the back element of the queue. + The index of the back element of the queue. + + If the queue is empty, it should be equal to + . + + + + Retrieves the element at the front of the queue. + The element taken from queue. + + + Adds an element to the back end of the queue. + The value to be pushed. + + + + Removes element from the back end of the queue, rolling back the last call to + . + + + The caller must guarantee that the queue isn't empty when calling this method. + It cannot be done automatically as the read side of the queue can be managed by different, + completely unsynchronized threads. + + + The last item passed to. + + + + + Allocation-efficient queue to store pipe items. + Front of the queue points to the first prefetched item, back of + the pipe points to last un-flushed item. Front is used only by + reader thread, while back is used only by writer thread. + + + + + Points to the first un-flushed item. This variable is used + exclusively by writer thread. + + + + + Points to the first un-prefetched item. This variable is used + exclusively by reader thread. + + + + + Points to the first item to be flushed in the future. + + + + + The single point of contention between writer and reader thread. + Points past the last flushed item. If it is NULL, + reader is asleep. This pointer should be always accessed using + atomic operations. + + + + + Write an item to the pipe. Don't flush it yet. If incomplete is + set to true the item is assumed to be continued by items + subsequently written to the pipe. Incomplete items are never + flushed down the stream. + + + + + Pop an incomplete item from the pipe. + + + the element revoked if such item exists, null otherwise. + + + + + Flush all the completed items into the pipe. + + + Returns false if the reader thread is sleeping. In that case, caller is obliged to + wake the reader up before using the pipe again. + + + + + Check whether item is available for reading. + + + + + Attempts to read an item from the pipe. + + + true + if the read succeeded, otherwise false. + + + + + Applies the function fn to the first element in the pipe + and returns the value returned by the fn. + The pipe mustn't be empty or the function crashes. + + + + + This enum-type serves to identity a particular socket-option. + + + + + The I/O-thread affinity. + 0 means no affinity, meaning that work shall be distributed fairly among all I/O threads. + For non-zero values, the lowest bit corresponds to thread 1, second lowest bit to thread 2, and so on. + + + The I/O-thread Affinity is a 64-bit value used to specify which threads from the I/O + thread-pool + associated with the socket's context shall handle newly-created connections. + 0 means no affinity, meaning that work shall be distributed fairly among all I/O threads. + For non-zero values, the lowest bit corresponds to thread 1, second lowest bit to thread 2, and so on. + + + + + The unique identity of the socket, from a message-queueing router's perspective. + + + This is at most 255 bytes long. + + + + + Setting this option subscribes a socket to messages that have the given topic. This is valid only for + Subscriber and XSubscriber sockets. + + + You subscribe a socket to a given topic when you want that socket to receive messages of that topic. + A topic is simply a specific prefix (in the form of a byte-array or the equivalent text). + This is valid only for Subscriber and XSubscriber sockets. + + + + + Set this option to un-subscribe a socket from a given topic. Only for Subscriber and XSubscriber + sockets. + + + You un-subscribe a socket from the given topic when you no longer want that socket to receive + messages of that topic. A topic is simply a specific prefix (in the form of a byte-array or the + equivalent text). + This is valid only for Subscriber and XSubscriber sockets. + + + + + The maximum send or receive data rate for multicast transports on the specified socket. + + + + + The recovery-interval, in milliseconds, for multicast transports using the specified socket. + Default is 10,000 ms (10 seconds). + + + This option determines the maximum time that a receiver can be absent from a multicast group + before unrecoverable data loss will occur. Default is 10,000 ms (10 seconds). + + + + + The size of the transmit buffer for the specified socket. + + + + + The size of the receive buffer for the specified socket. + + + + + This indicates more messages are to be received. + + + + + The file descriptor associated with the specified socket. + + + + + The event state for the specified socket. + This is a combination of: + PollIn - at least one message may be received without blocking + PollOut - at least one messsage may be sent without blocking + + + + + This option specifies the linger period for the specified socket, + which determines how long pending messages which have yet to be sent to a peer + shall linger in memory after a socket is closed. + + + + + The initial reconnection interval for the specified socket. + -1 means no reconnection. + + + This is the period to wait between attempts to reconnect disconnected peers + when using connection-oriented transports. + A value of -1 means no reconnection. + + + + + This is the maximum length of the queue of outstanding peer connections + for the specified socket. This only applies to connection-oriented transports. + Default is 100. + + + + + The maximum reconnection interval for the specified socket. + The default value of zero means no exponential backoff is performed. + + + This option value denotes the maximum reconnection interval for a socket. + It is used when a connection drops and NetMQ attempts to reconnect. + On each attempt to reconnect, the previous interval is doubled + until this maximum period is reached. + The default value of zero means no exponential backoff is performed. + + + + + The upper limit to the size for inbound messages. + -1 (the default value) means no limit. + + + If a peer sends a message larger than this it is disconnected. + + + + + The high-water mark for message transmission, which is the number of messages that are allowed to + queue up + before mitigative action is taken. The default value is 1000. + + + + + The high-water mark for message reception, which is the number of messages that are allowed to queue + up + before mitigative action is taken. The default value is 1000. + + + + + The time-to-live (maximum number of hops) that outbound multicast packets + are allowed to propagate. + The default value of 1 means that the multicast packets don't leave the local network. + + + + + Specifies the amount of time after which a synchronous send call will time out. + A value of 0 means Send will return immediately, with a EAGAIN error if the message cannot be sent. + -1 means to block until the message is sent. + + + + + This indicates the underlying native socket type. + + + An IPv4 socket will only use IPv4, while an IPv6 socket lets applications + connect to and accept connections from both IPv4 and IPv6 hosts. + + + + + The last endpoint bound for TCP and IPC transports. + The returned value will be a string in the form of a ZMQ DSN. + + + If the TCP host is ANY, indicated by a *, then the returned address + will be 0.0.0.0 (for IPv4). + + + + + Sets the RouterSocket behavior when an unroutable message is encountered. + A value of 0 is the default and discards the message silently when it cannot be routed. + A value of 1 returns an EHOSTUNREACH error code if the message cannot be routed. + + + + + Whether to use TCP keep-alive on this socket. + 0 = no, 1 = yes, + -1 (the default value) means to skip any overrides and leave it to the OS default. + + + + + The keep-alive time - the duration between two keepalive transmissions in idle condition. + + + The TCP keepalive period is required by socket implementers to be configurable and by default is + set to no less than 2 hours. + In 0MQ, -1 (the default value) means to just leave it to the OS default. + + + + + The TCP keep-alive interval - the duration between two keepalive transmission if no response was + received to a previous keepalive probe. + + + By default a keepalive packet is sent every 2 hours or 7,200,000 milliseconds + if no other data have been carried over the TCP connection. + If there is no response to a keepalive, it is repeated once every KeepAliveInterval seconds. + The default is one second. + + + + + The list of accept-filters, which denote the addresses that a socket may accept. + Setting this to null clears the filter. + + + This applies to IPv4 addresses only. + + + + + This applies only to XPub sockets. + If true, send all subscription messages upstream, not just unique ones. + The default is false. + + + + + If true, router socket accepts non-zmq tcp connections + + + + + This is an XPublisher-socket welcome-message. + + + + + This applies only to XPub sockets. + If true, enable broadcast option on XPublishers + + + + + The low-water mark for message transmission. This is the number of messages that should be processed + before transmission is unblocked (in case it was blocked by reaching high-watermark). The default + value is + calculated using relevant high-watermark (HWM): HWM > 2048 ? HWM - 1024 : (HWM + 1) / 2 + + + + + The low-water mark for message reception. This is the number of messages that should be processed + before reception is unblocked (in case it was blocked by reaching high-watermark). The default value + is + calculated using relevant high-watermark (HWM): HWM > 2048 ? HWM - 1024 : (HWM + 1) / 2 + + + + + When enabled new router connections with same identity take over old ones + + + + + Returns the last peer routing id connect to the PEER socket + + + + + Specifies the byte-order: big-endian, vs little-endian. + + + + + Specifies the max datagram size for PGM. + + + + + This is the base-class for all objects that participate in inter-thread communication. + + + + + This Ctx is the context that provides access to the global state. + + + + + This is the thread-ID of the thread that this object belongs to. + + + + + Create a new ZObject with the given context and thread-id. + + the context for the new ZObject to live within + the integer thread-id for the new ZObject to be associated with + + + + Create a new ZObject that has the same context and thread-id as the given parent-ZObject. + + another ZObject that provides the context and thread-id for this one + + + + Get the id of the thread that this object belongs to. + + + + + Get the context that provides access to the global state. + + + + + The given address was not found in the list of + endpoints. + + + + + Returns the + + that is the least busy at the moment. + + Which threads are eligible (0 = all). + + The least busy thread, or null if none is available. + + + + + Send the Stop command. + + + + + Send the Plug command, incrementing the destinations sequence-number if incSeqnum is true. + + the Own to send the command to + + a flag that dictates whether to increment the sequence-number on the destination + (optional - defaults to false) + + + + + Send the Own command, and increment the sequence-number of the destination + + the Own to send the command to + the object to Own + + + + Send the Attach command + + the Own to send the command to + + + + + + Send the Bind command + + + + + + + + For owned objects, asks the owner () to terminate + . + + + + + + + Send a Done command to the Ctx itself (null destination). + + + + + Send the given Command, on that commands Destination thread. + + the Command to send + + + Not supported on the ZObject class. + + + Not supported on the ZObject class. + + + Not supported on the ZObject class. + + + Not supported on the ZObject class. + + + Not supported on the ZObject class. + + + + Process the bind command with the given pipe. + + + Not supported on the ZObject class. + + + Not supported on the ZObject class. + + + Not supported on the ZObject class. + + + + This method would be called to assign the specified pipe as a replacement for the outbound pipe that + was being used. + This, is an abstract method that is to be overridden by subclasses to provide their own concrete + implementation. + + the pipe to use for writing + + A "Hiccup" occurs when an outbound pipe experiences something like a transient disconnect or for + whatever other reason + is no longer available for writing to. + + No supported on the ZObject class. + + + + Process the terminate-pipe command. + + Not supported on the ZObject class. + + + + Process the terminate-pipe acknowledgement command. + + Not supported on the ZObject class. + + + + Process a termination-request command on the Own object. + + + Not supported on the ZObject class. + + + + Process a termination request. + + + a time (in milliseconds) for this to linger before actually going away. -1 means + infinite. + + Not supported on the ZObject class. + + + + Process the termination-acknowledgement command. + + Not supported on the ZObject class. + + + Not supported on the ZObject class. + + + + Special handler called after a command that requires a seqnum + was processed. The implementation should catch up with its counter + of processed commands here. + + Not supported on the ZObject class. + + + + This enum-type specifies either big-endian (Big) or little-endian (Little), + which indicate whether the most-significant bits are placed first or last in memory. + + + + + Most-significant bits are placed first in memory. + + + + + Most-significant bits are placed last in memory. + + + + + This enum-type represents the various numeric socket-related error codes. + + + + + The provided endpoint is not connected. + + + + + The requested address is already in use. + + + + + Non-blocking mode was requested and the message cannot be sent at the moment. + + + + + Permission denied + + + + + The endpoint supplied is invalid. + + + + + The connection is still in progress. + + + + + The requested transport protocol is not supported. + + + + + The provided context is invalid. + + + + + The requested address was not available. + For Bind operations, that can mean the address was not local. + + + + + The network appears to be down. + + + + + There is not enough buffer space for the requested operation. + + + + + The socket is not connected. + + + + + The connection was refused. + + + + + The host is not reachable. + + + + + This is the value chosen for beginning the range of 0MQ error codes. + + + + + The message is too long. + + + + + The address family is not supported by this protocol. + + + + + The network is apparently not reachable. + + + + + The connection-attempt has apparently been aborted. + + + + + The connection has apparently been reset. + + + + + The operation timed-out. + + + + + The connection has apparently been reset. + + + + + The operation cannot be performed on this socket at the moment due + to the socket not being in the appropriate state. + + + + + The context associated with the specified socket has already been terminated. + + + + + No I/O thread is available to accomplish this task. + + + + + Too many sockets for this process. + + + + + Facilitates a pattern whereby an event may be decorated with logic that transforms its arguments. + + + Use of this class requires providing actions that register and unregister a handler of the source + event that calls + + with updated arguments in response. + + Argument type of the decorated event. + + + + Initialises a new instance. + + + an Action to perform when the first handler is registered for the event + + + an Action to perform when the last handler is unregistered from the + event + + + + + Raise, or "Fire", the Event. + + + the sender that the event-handler that gets notified of this event will receive + + the subclass of EventArgs that the event-handler will receive + + + + class InterfaceItem provides the properties Address and BroadcastAddress (both are an IPAddress). + This serves to convey information for each of the network interfaces present on a host. + + + + + Create a new InterfaceItem from the given address and broadcast-address. + + an IPAddress that will comprise the 'Address' of the new InterfaceItem + + an IPAddress that will comprise the 'BroadcastAddress' of the new + InterfaceItem + + + + + Get the 'address' of this network interface, as an IPAddress. + + + + + Get the 'broadcast-address' of this network interface, as an IPAddress. + + + + + This is a list of InterfaceItems, each of which has an Address and BroadcastAddress, + which is derived from all of the Network Interfaces present on this host at the time an instance of + this class is created. + + + + + Create a new InterfaceCollection that contains a list of InterfaceItems derived from all of the + Network Interfaces present on this host. + + + + + Return an IEnumerator over the InterfaceItems that this InterfaceCollection contains, + which are all of the network interfaces that were not running, nor loopback nor PPP interfaces. + + an IEnumerator over the InterfaceItems that this contains + + + + Interface IOutgoingSocket mandates a Send( Msg, SendReceiveOptions ) method. + + + + + Send a message if one is available within. + + An object with message's data to send. + + The maximum length of time to try and send a message. If + , no + wait occurs. + + Indicate if another frame is expected after this frame + + true + if a message was sent, otherwise false. + + + + + Defines a socket from which message data may be read. + + + + + Receive a message if one is available within. + + An object to receive the message's data into. + + The maximum length of time to wait for a message. If, no + wait occurs. + + + true + if a message was received, otherwise false. + + + + + Implementations provide a + + via the + + property. + + + + + Gets a + + instance. + + + + + Gets whether the object has been disposed. + + + + + + + + This interface provides an abstraction over the legacy Poller and newer + + classes for use in + . + + + + + Monitors a + + for events, raising them via events. + + + To run a monitor instance, either: + + + Call + + (blocking) and + , or + + + Call + + and + . + + + + + + + Initialises a monitor on + + for a specified + . + + + This constructor matches the signature used by clrzmq. + + The socket to monitor. + a string denoting the endpoint which will be the monitoring address + + A flag indicating whether ownership of + + is transferred to the monitor. + If true, disposing the monitor will also dispose. + + + + + The monitoring address. + + + + + Get whether this monitor is currently running. + + + Start the monitor running via either + + or + . + Stop the monitor via either + + or + . + + + + + Gets and sets the timeout interval for poll iterations when using + + and + . + + + The higher the number the longer it may take the to stop the monitor. + This value has no effect when the monitor is run via + . + + + + + Raised whenever any monitored event fires. + + + + + Occurs when a connection is made to a socket. + + + + + Occurs when a synchronous connection attempt failed, and its completion is being polled for. + + + + + Occurs when an asynchronous connect / reconnection attempt is being handled by a reconnect timer. + + + + + Occurs when a socket is bound to an address and is ready to accept connections. + + + + + Occurs when a socket could not bind to an address. + + + + + Occurs when a connection from a remote peer has been established with a socket's listen address. + + + + + Occurs when a connection attempt to a socket's bound address fails. + + + + + Occurs when a connection was closed. + + + + + Occurs when a connection couldn't be closed. + + + + + Occurs when the stream engine (TCP and IPC specific) detects a corrupted / broken session. + + + + + Start monitor the socket, the method doesn't start a new thread and will block until the monitor poll + is stopped + + + The Monitor must not have already started nor + attached to a poller. + + + + + Start a background task for the monitoring operation. + + + + + + Stop monitoring. Blocks until monitoring completed. + + + If this monitor is attached to a poller you must + detach it first and not use the stop method. + + + + + Release and dispose of any contained resources. + + + + + Release and dispose of any contained resources. + + true if releasing managed resources + + + + Base class for all event arguments raised by. + + + + + Create a new NetMQMonitorEventArgs that contains the given monitor and address. + + + The + + that raised this event. + + The address of the event. + The type of socket event that occurred. + + + + Gets the + + that raised this event. + + + + + Gets the address of the event. + + + + + Gets the type of socket event that occurred. + + + + + A subclass of + + that also holds a socket. + + + + + Create a new NetMQMonitorSocketEventArgs that contains the given monitor, address, and socket. + + + The + + that raised this event. + + The address of the event. + The type of socket event that occurred. + The socket upon which this event occurred. + + + + Gets the socket upon which this event occurred. + + + + + A subclass of + + that also holds an error code. + + + + + Create a new NetMQMonitorErrorEventArgs that contains the given monitor, address, and error-code. + + + The + + that raised this event. + + The address of the event. + The type of socket event that occurred. + The error code associated with this event. + + + + Gets the error code associated with this event. + + + + + A subclass of + + that also holds an interval. + + + + + Create a new NetMQMonitorIntervalEventArgs containing the given NetMQMonitor, address, and interval. + + the NetMQMonitor + The a string denoting the address + The interval, in milliseconds. + The type of socket event that occurred. + + + + Gets the interval, in milliseconds. + + + + + Defines a set of flags applicable to a + + instance: None (default), More, Identity, Shared + + + + Indicates no flags are set (the default). + + + Indicates that more frames of the same message follow. + + + Indicates that this frame conveys the identity of a connected peer. + + + + Indicates that this frame's internal data is shared with other + + objects. + + + + + Enumeration of possible + + types: Uninitialised, GC, Pool, Delimiter. + + + + + The + + has not yet been initialised (default value). + + + + + The + + is empty. + + + + + The + + data will be garbage collected when no longer needed. + + + + + The + + data was allocated by, and must be released back + to this pool when no longer needed. This happens when + + is called. + + + + + The + + is a delimiter frame and doesn't contain any data. + + Delimiters are commonly used to mark a boundary between groups frames. + + + + A Msg struct is the lowest-level interpretation of a ZeroMQ message, and simply contains byte-array + data + and MsgType and MsgFlags properties. + It supports message buffer pooling. + + + Many users will not use this class directly. However in high-performance situations it + may be useful. When used correctly it's possible to have zero-copy and zero-allocation + behaviour. + + + + + An atomic reference count for knowing when to release a pooled data buffer back to the + . + + + Will be null unless + + equals + . + + + + + Get the number of bytes within the Data property. + + + + + Gets the position of the first element in the Data property delimited by the message, + relative to the start of the original array. + + + + Get the type of this message, from the MsgType enum. + + + + Get whether the Delimiter bit is set on the Flags property, + which would indicate that this message is intended for use simply to mark a boundary + between other parts of some unit of communication. + + + + + Get whether this + + is initialised and ready for use. + + + A newly constructed + + is uninitialised, and can be initialised via one + of,, + , + , or + . + Calling + + will cause the + + to become uninitialised again. + + + true + if the + + is initialised, otherwise false. + + + + + Get the flags-enum MsgFlags value, which indicates which of the More, Identity, or Shared bits are + set. + + + + + Get the "Has-More" flag, which when set on a message-queue frame indicates that there are more frames + to follow. + + + + + Get whether the + + buffer of this + + is shared with another instance. + Only applies to pooled message types. + + + + + Get whether the Identity bit is set on the Flags property. + + + + + Set the indicated Flags bits. + + which Flags bits to set (More, Identity, or Shared) + + + + Clear the indicated Flags bits. + + which Flags bits to clear (More, Identity, or Shared) + + + + Get the byte-array that represents the data payload of this. + + + This value will be null if + + is + , + + or. + + + + + Clear this Msg to empty - ie, set MsgFlags to None, MsgType to Empty, and clear the Data. + + + + + Initialise this Msg to be of MsgType.Pool, with a data-buffer of the given number of bytes. + + the number of bytes to allocate in the data-buffer + + + + Initialise this Msg to be of MsgType.GC with the given data-buffer value. + + the byte-array of data to assign to the Msg's Data property + the number of bytes that are in the data byte-array + + + + Initialise this Msg to be of MsgType.GC with the given data-buffer value. + + the byte-array of data to assign to the Msg's Data property + first byte in the data array + the number of bytes that are in the data byte-array + + + + Set this Msg to be of type MsgType.Delimiter with no bits set within MsgFlags. + + + + + Clear the + + and set the MsgType to Invalid. + If this is not a shared-data Msg (MsgFlags.Shared is not set), or it is shared but the + reference-counter has dropped to zero, + then return the data back to the BufferPool. + + The object is not initialised. + + + + If this Msg is of MsgType.Pool, then - add the given amount number to the reference-counter + and set the shared-data Flags bit. + If this is not a Pool Msg, this does nothing. + + the number to add to the internal reference-counter + + + + If this Msg is of MsgType.Pool and is marked as Shared, then - subtract the given amount number from + the reference-counter + and, if that reaches zero - return the data to the shared-data pool. + If this is not both a Pool Msg and also marked as Shared, this simply Closes this Msg. + + the number to subtract from the internal reference-counter + + + + Override the Object ToString method to show the object-type, and values of the MsgType, Size, and + Flags properties. + + a string that provides some detail about this Msg's state + + + + Copy the given byte-array data to this Msg's Data buffer. + + the source byte-array to copy from + index within the internal Data array to copy that byte to + the number of bytes to copy + + + + Copy the given byte-array data to this Msg's Data buffer. + + the source byte-array to copy from + first byte in the source byte-array + index within the internal Data array to copy that byte to + the number of bytes to copy + + + + Copy the given single byte to this Msg's Data buffer. + + the source byte to copy from + + + + Copy the given single byte to this Msg's Data buffer at the given array-index. + + the source byte to copy from + index within the internal Data array to copy that byte to + + + + Get and set the byte value in the + + buffer at a specific index. + + The index to access + + + + + Close this Msg, and effectively make this Msg a copy of the given source Msg + by simply setting it to point to the given source Msg. + If this is a Pool Msg, then this also increases the reference-counter and sets the Shared bit. + + the source Msg to copy from + The object is not initialised. + + + + Increase Offset and decrease Size by the given count. + + Number of bytes to remove from a message + + + + Close this Msg and make it reference the given source Msg, and then clear the Msg to empty. + + the source-Msg to become + The object is not initialised. + + + + Returns a new array containing the first + + bytes of + . + + + + + An IShimHandler provides a Run(PairSocket) method. + + + + + Execute whatever action this IShimHandler represents against the given shim. + + + + + + This is an EventArgs that provides an Actor property. + + + + + Create a new NetMQActorEventArgs with the given NetMQActor. + + the NetMQActor for this exception to reference + + + + Get the NetMQActor that this exception references. + + + + + This delegate represents the action for this actor to execute. + + + the + + that is the shim to execute this action + + + + + This delegate represents the action for this actor to execute - along with a state-information object. + + the type to use for the state-information object + + the + + that is the shim to execute this action + + the state-information that the action will use + + + + The Actor represents one end of a two-way pipe between 2 PairSocket(s). Where + the actor may be passed messages, that are sent to the other end of the pipe + which is called the "shim" + + + + + The terminate-shim command. + This is just the literal string "endPipe". + + + + + Create a new ActionShimHandler with the given type T to serve as the state-information, + and the given action to operate upon that type. + + a ShimAction of type T that comprises the action to perform + the state-information + + + + Perform the action upon the given shim, using our state-information. + + + a + + that is the shim to perform the action upon + + + + + Create a new ActionShimHandler with a given action to operate upon that type. + + a ShimAction that comprises the action to perform + + + + Perform the action upon the given shim, using our state-information. + + + a + + that is the shim to perform the action upon + + + + + Create a new + + with the given shimHandler. + + + an IShimHandler that provides the Run method + + + the newly-created + NetMQActor + + + + + Create a new + + with the action, and state-information. + + + a ShimAction - delegate for the action to perform + + the state-information - of the generic type T + + the newly-created + NetMQActor + + + + + Create a new + + with the given + . + + + a ShimAction - delegate for the action to perform + + + the newly-created + NetMQActor + + + + + Execute the shim handler's Run method, signal ok and then dispose of the shim. + + + + + Transmit the given Msg over this actor's own socket. + + + the Msg to transmit + + + The maximum length of time to try and send a message. If + , no + wait occurs. + + Indicate if another frame is expected after this frame + + true + if a message was sent, otherwise false. + + The socket has been stopped. + + + is not initialised. + + + + + Attempt to receive a message for the specified period of time, returning true if successful or false + if it times-out. + + + a Msg to write the received message into + + + a TimeSpan specifying how long to block, waiting for a message, before + timing out + + true only if a message was indeed received + + + + This event occurs when at least one message may be received from the socket without blocking. + + + + + This event occurs when a message is ready to be transmitted from the socket. + + + + + + + + Release any contained resources. + + true if managed resources are to be released + + + + + + + A NetMQBeaconEventArgs is an EventArgs that provides a property that holds a NetMQBeacon. + + + + + Create a new NetMQBeaconEventArgs object containing the given NetMQBeacon. + + the NetMQBeacon object to hold a reference to + + + + Get the NetMQBeacon object that this holds. + + + + + Create a new NetMQBeacon. + + + + + Get the host name this beacon is bound to. + + + This may involve a reverse DNS lookup which can take a second or two. + + An empty string is returned if: + + the beacon is not bound, + the beacon is bound to all interfaces, + an error occurred during reverse DNS lookup. + + + + + + Get the IP address this beacon is bound to. + + + + + Get the socket of the contained actor. + + + + + This event occurs when at least one message may be received from the socket without blocking. + + + + + Configure beacon for the specified port on all interfaces. + + Blocks until the bind operation completes. + The UDP port to bind to. + + + + Configure beacon for the specified port and, optionally, to a specific interface. + + Blocks until the bind operation completes. + The UDP port to bind to. + + IP address of the interface to bind to. Pass empty string (the default + value) to use the default interface. + + + + + Publish beacon immediately and continue to publish when interval elapsed + + Beacon to transmit. + Interval to transmit beacon + + Encoding for. Defaults to + . + + + + + Publish beacon immediately and continue to publish when interval elapsed + + Beacon to transmit + Interval to transmit beacon + + + + Publish beacon immediately and continue to publish every second + + Beacon to transmit + + Encoding for. Defaults to + . + + + + + Publish beacon immediately and continue to publish every second + + Beacon to transmit + + + + Stop publishing beacons. + + + + + Subscribe to beacon messages that match the specified filter. + + + Beacons must prefix-match with. + Any previous subscription is replaced by this one. + + Beacon will be filtered by this + + + + Unsubscribe to beacon messages + + + + + Receives the next beacon message, blocking until it arrives. + + + + + Receives the next beacon message if one is available before + + expires. + + The maximum amount of time to wait for the next beacon message. + The received beacon message. + + true + if a beacon message was received, otherwise false. + + + + + + + + + + + Contents of a message received from a beacon. + + + + + THe beacon content as a byte array. + + + + + The address of the peer that sent this message. Includes host name and port number. + + + + + The beacon content as a string. + + + Decoded using. Other encodings may be used with + + directly. + + + + + The host name of the peer that sent this message. + + + This is simply the value of + + without the port number. + + + + + Cleanup library resources, call this method when your process is shutting-down. + + Set to true when you want to make sure sockets send all pending messages + + + + Get or set the default linger period for the all sockets, + which determines how long pending messages which have yet to be sent to a peer + shall linger in memory after a socket is closed. + + + This also affects the termination of the socket's context. + + -1: Specifies infinite linger period. Pending messages shall not be discarded after the socket is + closed; + attempting to terminate the socket's context shall block until all pending messages have been sent to + a peer. + + 0: The default value of + + specifies no linger period. Pending messages shall be discarded immediately when the socket is closed. + Positive values specify an upper bound for the linger period. Pending messages shall not be discarded + after the socket is closed; + attempting to terminate the socket's context shall block until either all pending messages have been + sent to a peer, + or the linger period expires, after which any pending messages shall be discarded. + + + + + Get or set the number of IO Threads NetMQ will create, default is 1. + 1 is good for most cases. + + + + + Get or set the maximum number of sockets. + + + + + Method is obsolete, call Cleanup instead + + + + + Method is obsolete, call Cleanup instead + + + + + Method is obsolete, call Cleanup instead + + Should the context block the thread while terminating. + + + + Method is obsolete, context created automatically + + + + + Base class for custom exceptions within the NetMQ library. + + + + Constructor for serialisation. + + + + Create a new NetMQException containing the given Exception, Message and ErrorCode. + + + an Exception that this exception will expose via it's InnerException + property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + an ErrorCode that this exception will expose via its ErrorCode property + + + + Create and return a new NetMQException with no Message containing only the given SocketException. + + + a SocketException that this exception will expose via its InnerException + property + + a new NetMQException + + + + Create and return a new NetMQException with no Message containing the given SocketError and Exception. + + + a SocketError that this exception will carry and expose via its ErrorCode property + + + an Exception that this exception will expose via its InnerException + property + + a new NetMQException + + + + Create and return a new NetMQException with no Message containing the given ErrorCode and Exception. + + + an ErrorCode for this exception to contain and expose via its ErrorCode + property + + + an Exception for this exception to contain and expose via its + InnerException property + + a new NetMQException + + + + Create and return a new NetMQException with no Message containing only the given ErrorCode. + + + an ErrorCode that this exception will carry and expose via its ErrorCode + property + + a new NetMQException + + + + Create and return a new NetMQException with the given Message and ErrorCode. + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + an ErrorCode that this exception will carry and expose via its ErrorCode + property + + a new NetMQException + + + + Create and return a new NetMQException with the given ErrorCode, Message, and Exception. + + + an ErrorCode that this exception will contain and expose via its ErrorCode + property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + an Exception that this exception will expose via its InnerException + property + + + a new NetMQException, or subclass of NetMQException that corresponds to the given ErrorCode + + + + + AddressAlreadyInUseException is a NetMQException that is used within SocketBase.Bind to signal an + address-conflict. + + + + + Create a new AddressAlreadyInUseException with a given inner-exception and message. + + + an Exception for this new exception to contain and expose via its + InnerException property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new AddressAlreadyInUseException with a given message. + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + Constructor for serialisation. + + + + EndpointNotFoundException is a NetMQException that is used within Ctx.FindEndpoint to signal a failure + to find a specified address. + + + + + Create a new EndpointNotFoundException with a given inner-exception and message. + + + an Exception for this new exception to contain and expose via its + InnerException property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new EndpointNotFoundException with a given message. + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new EndpointNotFoundException with no message nor inner-exception. + + + + Constructor for serialisation. + + + + TerminatingException is a NetMQException that is used within SocketBase and Ctx to signal + that you're making the mistake of trying to do further work after terminating the message-queueing + system. + + + + + Create a new TerminatingException with a given inner-exception and message. + + + an Exception for this new exception to contain and expose via its + InnerException property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new TerminatingException with no message nor inner-exception. + + + + Constructor for serialisation. + + + + InvalidException is a NetMQException that is used within the message-queueing system to signal invalid + value errors. + + + + + Create a new InvalidException with a given inner-exception and message. + + + an Exception for this new exception to contain and expose via its + InnerException property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new InvalidException with the given message. + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new InvalidException with no message nor inner-exception. + + + + Constructor for serialisation. + + + + FaultException is a NetMQException that is used within the message-queueing system to signal general + fault conditions. + + + + + Create a new FaultException with a given inner-exception and message. + + + an Exception for this new exception to contain and expose via its + InnerException property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new FaultException with the given message. + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new FaultException with no message nor inner-exception. + + + + Constructor for serialisation. + + + + ProtocolNotSupportedException is a NetMQException that is used within the message-queueing system to + signal + mistakes in properly utilizing the communications protocols. + + + + + Create a new ProtocolNotSupportedException with a given inner-exception and message. + + + an Exception for this new exception to contain and expose via its + InnerException property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new ProtocolNotSupportedException with the given message. + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new ProtocolNotSupportedException with no message nor inner-exception. + + + + Constructor for serialisation. + + + + HostUnreachableException is an Exception that is used within the message-queueing system + to signal failures to communicate with a host. + + + + + Create a new HostUnreachableException with a given inner-exception and message. + + + an Exception for this new exception to contain and expose via its + InnerException property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new HostUnreachableException with the given message. + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new HostUnreachableException with no message nor inner-exception. + + + + Constructor for serialisation. + + + + FiniteStateMachineException is an Exception that is used within the message-queueing system + to signal errors in the send/receive order with request/response sockets. + + + + + Create a new FiniteStateMachineException with a given inner-exception and message. + + + an Exception for this new exception to contain and expose via its + InnerException property + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new FiniteStateMachineException with the given message. + + + the textual description of what gave rise to this exception, to expose via the + Message property + + + + + Create a new FiniteStateMachineException with no message nor inner-exception. + + + + Constructor for serialisation. + + + + Objects of class NetMQFrame serve to hold a Buffer (that consists of a byte-array containing a unit of + a message-queue message) + and provide methods to construct it given a string and an encoding. + + + + + This is the length of the byte-array data buffer. + + + + + This holds the computed hash-code for this object. + + + + + Create a new NetMQFrame containing the given byte-array data. + + a byte-array to hold as the frame's data + + + + Instantiates a frame from the provided byte array, considering only the specified number of bytes. + + + This constructor may be useful to avoid copying data into a smaller array when a buffer is + oversized. + + The content of the frame. + + The number bytes from + + to consider as part of the frame. + + + + + Create a new NetMQFrame containing the given string-message, + using the default ASCII encoding. + + a string containing the message-data of the frame + + + + Create a new NetMQFrame containing the given string-message, + using the given encoding to convert it into a byte-array. + + a string containing the message-data of the frame + + the Encoding to use to convert the given string-message into the internal + byte-array + + + + + Create a new NetMQFrame with a data-buffer pre-sized to the given length. + + the number of bytes to allocate for the data-buffer + + length must be non-negative (zero or positive). + + + + + Get or set the size of the message data contained in the frame, which here represents the number of + bytes. + + + The value must be between zero and BufferSize. + + + + + Get the underlying frame-data buffer, which is an array of bytes. + + + + + Get the maximum size of the frame-data buffer (ie, the number of bytes of the array). + + + + + Get a new empty + + that may be used as message separators. + + + + + Get whether this NetMQFrame is empty - that is, has a Buffer of zero-length. + + + + + Create and return a new NetMQFrame with a copy of the supplied byte-array buffer. + + the byte-array to copy into the new NetMQFrame + + a new + + containing a copy of the supplied byte-array + + + + is null. + + + + + Return this frame's data-buffer converted into a string, using the default ASCII encoding. + + the data buffer converted to a string + + + + Return this frame's data-buffer converted into a string using the given encoding. + + + the Encoding to use to convert the internal byte-array buffer into a string + + the data buffer converted to a string + + + + Convert the buffer to integer in network byte order (big-endian) + + + + + + Convert the buffer to long in network byte order (big-endian) + + + + + + Create a deep-copy of the supplied. + + + the + + to copy + + + a + + containing a copy of + + + + + is null. + + + + + Create a deep-copy of this NetMQFrame and return it. + + a new NetMQFrame containing a copy of this one's buffer data + + + + Return true if the buffer of this NetMQFrame is equal to the given byte-array. + + a byte-array buffer to compare this frame against + + + + + Determine whether the specified + + is equal to the current + . + + + the + + to compare with the current + . + + true if the specified NetMQFrame is equal to this one; otherwise, false + + + + Return true if the given Object is a NetMQFrame which has a Buffer that is identical to that of this + one. + + the Object to compare this to + true only if the given Object is a NetMQFrame equal to this one + + + + Return true if this one and the other NetMQFrame are equal, or both are null. + + one frame to compare against the other + the other frame to compare + true if both frames are equal + + + + Return true if this one and the other NetMQFrame NOT are equal. + + one frame to compare against the other + the other frame to compare + false if both frames are equal + + + + Override the Object.GetHashCode method to return a hash-code derived from the content of the Buffer. + That is only computed the first time this method is called. + + an integer that represents the computed hash-code + + + + Return an array of bytes that carries the content of this NetMQFrames Buffer. + + + if this argument is true - a new copy is made if BufferSize is equal to MessageSize + + + the Buffer as a byte-array, either newly-allocated or else (if copy is false) simply a + reference to the actual Buffer + + + + + This namespace encompasses the NetMQ message-queueing library + and attendant utility software. + + + + + A NetMQMessage is basically a collection of NetMQFrames, and is the basic message-unit that is sent + and received + across this message-queueing subsystem. + + + + + This is the frame-stack that comprises the message-content of this message. + + + + + The default-constructor for NetMQMessage: create a new instance of NetMQMessage + with an empty frame-stack. + + + + + Create a new instance of a NetMQMessage that contains the given collection of NetMQFrames as its + frame-stack. + + a collection of NetMQFrames, to form the frame-stack + The value of 'frames' cannot be null. + + + + Create a new instance of a NetMQMessage that contains the given collection of byte-arrays as its + frame-stack. + + a collection of byte-array buffers, to form the frame-stack + The value of 'buffers' cannot be null. + + + + Gets the first frame in the current message. + + + + + Gets the last frame in the current message. + + + + + Gets a value indicating whether the current message is empty. + + + + + Gets the number of + + objects contained by this message. + + + + + Gets the + + at the specified index. + + + The zero-based index of the + + to get. + + + The + + at the specified index. + + + is less than 0 -or- + + is equal to or greater than + . + + + + + Add the given NetMQFrame to this NetMQMessage, at the highest-indexed position of the frame-stack. + + a NetMQFrame object comprising the frame to be appended onto the frame-stack + + + + Add the given data (in this case a byte-array) to this NetMQMessage, at the highest-indexed position + of the frame-stack. + Data is not copied. + + + a byte-array containing the message to append onto the frame-stack of this + NetMQMessage + + + + + Add the given string - which gets converted into a NetMQFrame - onto + the highest-indexed position of the frame-stack of this NetMQMessage. + + + a string containing the message to append onto the frame-stack of this + NetMQMessage + + + + + Add the given string - which gets converted into a NetMQFrame - onto + the highest-indexed position of the frame-stack of this NetMQMessage. + + + a string containing the message to append onto the frame-stack of this + NetMQMessage + + an Encoding that specifies how to convert the string into bytes + + + + Convert the given integer value into an array of bytes and add it as a new frame onto this + NetMQMessage. + + + a 32-bit integer value that is to be converted into bytes and added to this + message + + + + + Convert the given long value into an array of bytes and add it as a new frame onto this NetMQMessage. + + a 64-bit number that is to be converted into bytes and added to this message + + + + Add an empty frame to this NetMQMessage. + + + + + Push the given NetMQFrame into the frame-stack of this NetMQMessage. + + the NetMQFrame to be inserted into the frame-stack + + The concept is the same as pushing an element onto a stack. + This inserts the given NetMQFrame into the lowest-indexed position of this NetMQMessage, + pushing all of the other frames upward in index-position. + + + + + Push a new frame containing the given byte-array into the frame-stack of this NetMQMessage. + + the byte-array to create a new frame from + + The concept is the same as pushing an element onto a stack. + This creates a new frame from the given data (in this case a byte-array) and inserts it into the + lowest-indexed position of + the collection of frames of this NetMQMessage, + pushing all of the other frames upward in index-position. + + + + + Push a new frame containing the given string (converted into a byte-array) into the frame-stack of + this NetMQMessage. + + the string to create a new frame from + + The concept is the same as pushing an element onto a stack. + This creates a new frame from the given data (in this case a string which gets converted into a + byte-array using the default ASCII encoding) and inserts it into the lowest-indexed position of + the collection of frames of this NetMQMessage, + pushing all of the other frames upward in index-position. + + + + + Push a new frame containing the given string (converted into a byte-array) into the frame-stack of + this NetMQMessage. + + the string to create a new frame from + the Encoding that dictates how to encode the string into bytes + + The concept is the same as pushing an element onto a stack. + This creates a new frame from the given data (in this case a string which gets converted into a + byte-array using the given Encoding) and inserts it into the lowest-indexed position of + the collection of frames of this NetMQMessage, + pushing all of the other frames upward in index-position. + + + + + Push a new frame containing the given integer (converted into a byte-array) into the frame-stack of + this NetMQMessage. + + the integer to create a new frame from + + The concept is the same as pushing an element onto a stack. + This creates a new frame from the given data (in this case a 32-bit integer which gets converted into + a byte-array in big-endian order) and inserts it into the lowest-indexed position of + the collection of frames of this NetMQMessage, + pushing all of the other frames upward in index-position. + + + + + Push a new frame containing the given long (converted into a byte-array) into the frame-stack of this + NetMQMessage. + + the 64-bit number to create a new frame from + + The concept is the same as pushing an element onto a stack. + This creates a new frame from the given data (in this case a 64-bit long which gets converted into a + byte-array in big-endian order) and inserts it into the lowest-indexed position of + the collection of frames of this NetMQMessage, + pushing all of the other frames upward in index-position. + + + + + Push an empty frame (a NetMQFrame.Empty) onto the frame-stack. + + + + + Remove and return the first frame. + + + the first frame, which was popped - which is the frame from the lowest-indexed position + + + + + Delete the given frame from the frame-stack. + + the frame to remove + + true + if removed, otherwise false. + + + + + Clear (empty) the frame-stack, so that it no longer contains any frames. + + + + + Return an enumerator over the frames contained within this message. + + an IEnumerator over the frames in this message + + + + Return an enumerator over the frames contained within this message. + + an IEnumerator over the frames in this message + + + + Returns a string showing the frame contents. + + + + + + Get whether the caller is running on the scheduler's thread. + If true, the caller can execute tasks directly (inline). + If false, the caller must start a + + on this scheduler. + + + This property enables avoiding the creation of a + + object and + potential delays to its execution due to queueing. In most cases this is just + an optimisation. + + + + if (scheduler.CanExecuteTaskInline) + { + socket.Send(...); + } + else + { + var task = new Task(() => socket.Send(...)); + task.Start(scheduler); + } + + + + + + Returns 1, as + + runs a single thread and all tasks must execute on that thread. + + + + + Not supported. + + Always thrown. + + + + Get whether this object is currently polling its sockets and timers. + + + + + Runs the poller in a background thread, returning once the poller has started. + + + The created thread is named "NetMQPollerThread". Use + + to specify the thread name. + + + + + Runs the poller in a background thread, returning once the poller has started. + + The thread name to use. + + + + Runs the poller on the caller's thread. Only returns when + + or + + are called from another thread. + + + + + Stops the poller. + + + If called from a thread other than the poller thread, this method will block until the poller has + stopped. + If called from the poller thread it is not possible to block. + + + + + Stops the poller, returning immediately and most likely before the poller has actually stopped. + + + + + This class only implements + + in order to support collection initialiser syntax. + + An empty enumerator. + + + + Stops and disposes the poller. The poller may not be used once disposed. + + + Note that you cannot dispose the poller on the poller's thread. Doing so immediately throws an + exception. + + A socket in the poller has been disposed. + Dispose called from the poller thread. + + + Dispatches an asynchronous message to a synchronization context. + + + Dispatches a synchronous message to a synchronization context. + + + + Class to quickly handle incoming messages of socket. + New thread is created to handle the messages. Call dispose to stop the thread. + Provided socket will not be disposed by the class. + + + + + Create NetMQProactor and start dedicate thread to handle incoming messages. + + Socket to handle messages from + Handler to handle incoming messages + + + + Stop the proactor. Provided socket will not be disposed. + + + + + Multi producer single consumer queue which you can poll on with a Poller. + + Type of the item in queue + + + + Create new NetMQQueue. + + The capacity of the queue, use zero for unlimited + + + + Register for this event for notification when there are items in the queue. Queue must be added to a + poller for this to work. + + + + + Try to dequeue an item from the queue. Dequeueing and item is not thread safe. + + Will be filled with the item upon success + Timeout to try and dequeue and item + Will return false if it didn't succeed to dequeue an item after the timeout. + + + + Dequeue an item from the queue, will block if queue is empty. Dequeueing and item is not thread safe. + + Dequeued item + + + + Enqueue an item to the queue, will block if the queue is full. + + + + + + Dispose the queue. + + + + + For selecting on + + and regular .NET + + objects. + + + This is for advanced scenarios only. + Most use cases are better served by. + + + + + Selector Item used to hold the NetMQSocket/Socket and PollEvents + + + + + Select on NetMQSocket or Socket, similar behavior to Socket.Select. + + Items to select on (must not be null) + Number of items in the array to select on + a time-out period, in milliseconds + + The internal select operation failed. + + + is null. + + The socket has been stopped. + + + + Abstract base class for NetMQ's different socket types. + + + Various options are available in this base class, though their affect can vary by socket type. + + + + + Create a new NetMQSocket with the given. + + Type of socket to create + + + + + + Create a new NetMQSocket with the given. + + a SocketBase object to assign to the new socket + + + + This event occurs when at least one message may be received from the socket without blocking. + + + This event is raised when a + + is added to a running + . + + + + + This event occurs when at least one message may be sent via the socket without blocking. + + + This event is raised when a + + is added to a running + . + + + + + Fires when either the + + or + + event is set. + + + + + Raise the + + event. + + + + + Get or set an integer that represents the number of errors that have accumulated. + + + + + Get the + + of this socket. + + + + + Get the underlying. + + + + + Bind the socket to. + + a string representing the address to bind this socket to + thrown if the socket was already disposed + The socket has been stopped. + + The specified address is already in use. + + + No IO thread was found, or the protocol's listener encountered an + error during initialisation. + + + + + Binds the specified TCP + + to an available port, assigned by the operating system. + + the chosen port-number + thrown if the socket was already disposed + + + uses a protocol other than TCP. + + The socket has been stopped. + + The specified address is already in use. + + + No IO thread was found, or the protocol's listener errored during + initialisation. + + + + + Connect the socket to. + + a string denoting the address to connect this socket to + thrown if the socket was already disposed + The socket has been stopped. + No IO thread was found. + + The specified address is already in use. + + + + + Disconnect this socket from. + + a string denoting the address to disconnect from + thrown if the socket was already disposed + The socket has been stopped. + + Endpoint was not found and cannot be disconnected. + + + + + Unbind this socket from. + + a string denoting the address to unbind from + thrown if the socket was already disposed + The socket has been stopped. + + Endpoint was not found and cannot be disconnected. + + + + + Closes this socket, rendering it unusable. Equivalent to calling + . + + + + + Wait until a message is ready to be received from the socket. + + + + + Wait until a message is ready to be received/sent from this socket or until timeout is reached. + If a message is available, the ReceiveReady/SendReady event is fired. + + a TimeSpan that represents the timeout-period + true if a message was available within the timeout, false otherwise + + + + Poll this socket, which means wait for an event to happen within the given timeout period. + + the poll event(s) to listen for + the timeout period + + PollEvents.None -> no message available + PollEvents.PollIn -> at least one message has arrived + PollEvents.PollOut -> at least one message is ready to send + PollEvents.Error -> an error has occurred + or any combination thereof + + The internal select operation failed. + The socket has been stopped. + + + + Return a + + value that indicates which bit-flags have a corresponding listener, + with PollError always set, + and PollOut set based upon m_sendReady + and PollIn set based upon m_receiveReady. + + a PollEvents value that denotes which events have a listener + + + + Unless this socket is closed, + based upon the given PollEvents - raise the m_receiveReady event if PollIn is set, + and m_sendReady if PollOut is set. + + what to use as the source of the events + the given PollEvents that dictates when of the two events to raise + + + Attempt to receive a message for the specified amount of time. + + A reference to a + + instance into which the received message + data should be placed. + + + The maximum amount of time the call should wait for a message before returning. + + + true + if a message was received before + + elapsed, + otherwise false. + + + + + Send a message if one is available within. + + An object with message's data to send. + + The maximum length of time to try and send a message. If + , no + wait occurs. + + Indicate if another frame is expected after this frame + + true + if a message was sent, otherwise false. + + + + + Listen to the given endpoint for SocketEvent events. + + A string denoting the endpoint to monitor + + The specific + + events to report on. Defaults to + + if omitted. + + + + is null. + + + + cannot be empty or whitespace. + + This object is already disposed. + + The protocol of + + is not supported. + + The socket has been stopped. + Maximum number of sockets reached. + + + + Get whether a message is waiting to be picked up (true if there is, false if there is + none). + + The socket has been stopped. + + + + Get whether a message is waiting to be sent. + + + This is true if at least one message is waiting to be sent, false if there is none. + + The socket has been stopped. + + + + Get the integer-value of the specified. + + a ZmqSocketOption that specifies what to get + an integer that is the value of that option + The socket has been stopped. + This object is already disposed. + + + + Get the (generically-typed) value of the specified + . + + a ZmqSocketOption that specifies what to get + an object of the given type, that is the value of that option + The socket has been stopped. + This object is already disposed. + + + + Get the + + value of the specified ZmqSocketOption. + + a ZmqSocketOption that specifies what to get + a TimeSpan that is the value of that option + The socket has been stopped. + + + + Get the 64-bit integer-value of the specified. + + a ZmqSocketOption that specifies what to get + a long that is the value of that option + The socket has been stopped. + + + + Assign the given integer value to the specified. + + a ZmqSocketOption that specifies what to set + an integer that is the value to set that option to + The socket has been stopped. + This object is already disposed. + + + + Assign the given TimeSpan to the specified. + + a ZmqSocketOption that specifies what to set + a TimeSpan that is the value to set that option to + The socket has been stopped. + + + + Assign the given Object value to the specified. + + a ZmqSocketOption that specifies what to set + an object that is the value to set that option to + The socket has been stopped. + This object is already disposed. + + + + Closes this socket, rendering it unusable. Equivalent to calling + . + + + + + Closes this socket, rendering it unusable. Equivalent to calling + . + + true if releasing managed resources + + + + + + + This subclass of EventArgs contains a NetMQSocket, + and IsReadyToReceive and IsReadyToSend flags to indicate whether ready to receive or send. + + + + + Create a new NetMQSocketEventArgs referencing the given socket. + + the NetMQSocket that this is in reference to + + + + Initialise the ReceiveReady and SendReady flags from the given PollEvents value. + + + a PollEvents value that indicates whether the socket is ready to send or receive + without blocking + + + + + Get the NetMQSocket that this references. + + + + + Get whether at least one message may be received by the socket without blocking. + + + + + Get whether at least one message may be sent by the socket without blocking. + + + + + Class NetMQTimerEventArgs is an EventArgs that contains a reference to a NetMQTimer. + + + + + Create a new NetMQTimerEventArgs that contains a reference to the given NetMQTimer. + + the NetMQTimer to hold a reference to + + + + Get the NetMQTimer that this has a reference to. + + + + + A NetMQTimer instance provides the state-information for a timer function, + which is periodically checked by a Poller or a NetMQBeacon. + + + + + A pre-constructed NetMQTimerEventArgs to use whenever raising the Elapsed event. + + + + + This is the timer-interval in milliseconds. + + + + + This flag dictates whether this timer is currently enabled. + + + + + This event is used to signal when the timer has expired. + + + + + Create a new NetMQTimer with the timer-interval specified by the given TimeSpan. + + a TimeSpan that denotes the timer-interval + + This sets the When property to an initial value of -1, to indicate it no future-time applies as yet. + + + + + Create a new NetMQTimer with the given timer-interval in milliseconds. + + an integer specifying the timer-interval in milliseconds + + This sets the When property to an initial value of -1, to indicate it no future-time applies as yet. + + + + + Get or set the timer-interval, in milliseconds. + + + When setting this, When is set to the future point in time from now at which the interval will expire + (or -1 if not Enabled). + + + + + Get or set whether this NetMQTimer is on. + + + When setting this to true, When is set to the future point in time from now at which the interval will + expire. + When setting this to false, When is set to -1. + + + + + Get or set the value of the low-precision timestamp (a value in milliseconds) that signals when the + timer is to expire, + or -1 if not applicable at this time. + + + + + Enable the timer and reset the interval + + + + + If there are any subscribers - raise the Elapsed event. + + the sender to include within the event's event-args + + + + This static class serves to convert between byte-arrays, and various integer sizes + - all of which assume the byte-data is in Big-endian, or "Network Byte Order". + + + + + Given a byte-array assumed to be in Big-endian order, and an offset into it + - return a 16-bit integer derived from the 2 bytes starting at that offset. + + the byte-array to get the short from + + + + + Given a 16-bit integer, return it as a byte-array in Big-endian order. + + the short to convert + a 2-byte array containing that short's bits + + + + Given a 16-bit integer, and a byte-array buffer and offset, + - write the 2 bytes of that integer into the buffer starting at that offset, in Big-endian order. + + the short to convert into bytes + the byte-array to write the short's bytes into + + + + Given a byte-array assumed to be in Big-endian order, and an offset into it + - return a 32-bit integer derived from the 4 bytes starting at that offset. + + the byte-array to get the integer from + + + + + Given a 32-bit integer, return it as a byte-array in Big-endian order. + + the int to convert + a 4-byte array containing that integer's bits + + + + Given a 32-bit integer, and a byte-array buffer and offset, + - write the 4 bytes of that integer into the buffer starting at that offset, in Big-endian order. + + the integer to convert into bytes + the byte-array to write the integer's bytes into + + + + Given a byte-array assumed to be in Big-endian order, and an offset into it + - return a 64-bit integer derived from the 8 bytes starting at that offset. + + the byte-array to get the Int64 from + + + + + Given a 64-bit integer, return it as a byte-array in Big-endian order. + + + The long value to convert from. + + + The network order presentation of + + as an 8-byte array. + + + + + Given a 64-bit integer, and a byte-array buffer and offset, + - write the 8 bytes of that integer into the buffer starting at that offset, in Big-endian order. + + the long value to convert into bytes + the byte-array to write the long value's bytes into + + + + This static class serves to provide extension methods for IOutgoingSocket. + + + + + Block until the message can be sent. + + + The call blocks until the message can be sent and cannot be interrupted. + Whether the message can be sent depends on the socket type. + + The socket to send the message on. + An object with message's data to send. + Indicate if another frame is expected after this frame + + + + Transmit a byte-array of data over this socket, block until frame is sent. + + the IOutgoingSocket to transmit on + the byte-array of data to send + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + + + Transmit a byte-array of data over this socket, block until frame is sent. + + the IOutgoingSocket to transmit on + the byte-array of data to send + + the number of bytes to send from. + + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + + + Transmit a byte-array of data over this socket, block until frame is sent. + Send more frame, another frame must be sent after this frame. Use to chain Send methods. + + the IOutgoingSocket to transmit on + the byte-array of data to send + a reference to this IOutgoingSocket so that method-calls may be chained together + + + + Transmit a byte-array of data over this socket, block until frame is sent. + Send more frame, another frame must be sent after this frame. Use to chain Send methods. + + the IOutgoingSocket to transmit on + the byte-array of data to send + + the number of bytes to send from. + + a reference to this IOutgoingSocket so that method-calls may be chained together + + + + Attempt to transmit a single frame on. + If message cannot be sent within, return false. + + the IOutgoingSocket to transmit on + The maximum period of time to try to send a message. + the byte-array of data to send + + the number of bytes to send from. + + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + true + if a message was available, otherwise false. + + + + + Attempt to transmit a single frame on. + If message cannot be sent within, return false. + + the IOutgoingSocket to transmit on + The maximum period of time to try to send a message. + the byte-array of data to send + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + true + if a message was available, otherwise false. + + + + + Attempt to transmit a single frame on. + If message cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + the byte-array of data to send + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + true + if a message was available, otherwise false. + + + + + Attempt to transmit a single frame on. + If message cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + the byte-array of data to send + + the number of bytes to send from. + + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + true + if a message was available, otherwise false. + + + + + Send multiple frames on, blocking until all frames are sent. + + the IOutgoingSocket to transmit on + frames to transmit + + + + Send multiple frames on, blocking until all frames are sent. + + the IOutgoingSocket to transmit on + frames to transmit + + + + Attempt to transmit a multiple frames on. + If frames cannot be sent within, return false. + + the IOutgoingSocket to transmit on + The maximum period of time to try to send a message. + frames to transmit + + + + Attempt to transmit a multiple frames on. + If frames cannot be sent within, return false. + + the IOutgoingSocket to transmit on + The maximum period of time to try to send a message. + frames to transmit + + + + Attempt to transmit a multiple frames on. + If frames cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + frames to transmit + + + + Attempt to transmit a multiple frames on. + If frames cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + frames to transmit + + + + Transmit a string over this socket, block until frame is sent. + + the IOutgoingSocket to transmit on + the string to send + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + + + Transmit a string over this socket, block until frame is sent. + Send more frame, another frame must be sent after this frame. Use to chain Send methods. + + the IOutgoingSocket to transmit on + the string to send + a reference to this IOutgoingSocket so that method-calls may be chained together + + + + Attempt to transmit a single string frame on. + If message cannot be sent within, return false. + + the IOutgoingSocket to transmit on + The maximum period of time to try to send a message. + the string to send + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + true + if a message was available, otherwise false. + + + + + Attempt to transmit a single string frame on. + If message cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + the string to send + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + true + if a message was available, otherwise false. + + + + + Send multiple message on, blocking until all entire message is sent. + + the IOutgoingSocket to transmit on + message to transmit + + + + Attempt to transmit a multiple message on. + If message cannot be sent within, return false. + + the IOutgoingSocket to transmit on + The maximum period of time to try to send a message. + message to transmit + + + + Attempt to transmit a multiple message on. + If frames cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + message to transmit + + + + Transmit an empty frame over this socket, block until frame is sent. + + the IOutgoingSocket to transmit on + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + + + Transmit an empty frame over this socket, block until frame is sent. + Send more frame, another frame must be sent after this frame. Use to chain Send methods. + + the IOutgoingSocket to transmit on + a reference to this IOutgoingSocket so that method-calls may be chained together + + + + Attempt to transmit an empty frame on. + If message cannot be sent within, return false. + + the IOutgoingSocket to transmit on + The maximum period of time to try to send a message. + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + true + if a message was available, otherwise false. + + + + + Attempt to transmit an empty frame on. + If message cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + + set this flag to true to signal that you will be immediately sending another frame + (optional: default is false) + + + true + if a message was available, otherwise false. + + + + + Transmit a status-signal over this socket. + + the IOutgoingSocket to transmit on + a byte that contains the status signal to send + + + + Attempt to transmit a status-signal over this socket. + If signal cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + a byte that contains the status signal to send + + + + Transmit a specific status-signal over this socket that indicates OK. + + the IOutgoingSocket to transmit on + + + + Attempt to transmit a specific status-signal over this socket that indicates OK. + If signal cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + + + + Transmit a specific status-signal over this socket that indicates there is an error. + + the IOutgoingSocket to transmit on + + + + Attempt to transmit a specific status-signal over this socket that indicates there is an error. + If signal cannot be sent immediately, return false. + + the IOutgoingSocket to transmit on + + + + This flags enum-type is simply an indication of the direction of the poll-event, + and can be None, PollIn, PollOut, or PollError. + + + + + Extension methods for the + + enum. + + + + + Test whether + + has the + + flag set. + + + + + Test whether + + has the + + flag set. + + + + + Test whether + + has the + + flag set. + + + + + Forwards messages bidirectionally between two sockets. You can also specify a control socket tn which + proxied messages will be sent. + + + This class must be explicitly started by calling. If an external + + has been specified, + then that call will block until + + is called. + + If using an external, ensure the front and back end sockets have been + added to it. + + Users of this class must call + + when messages should no longer be proxied. + + + + + Create a new instance of a Proxy (NetMQ.Proxy) + with the given sockets to serve as a front-end, a back-end, and a control socket. + + the socket that messages will be forwarded from + the socket that messages will be forwarded to + + this socket will have incoming messages also sent to it - you can set this to + null if not needed + + + this socket will have outgoing messages also sent to it - you can set this to + null if not needed + + an optional external poller to use within this proxy + + + + Create a new instance of a Proxy (NetMQ.Proxy) + with the given sockets to serve as a front-end, a back-end, and a control socket. + + the socket that messages will be forwarded from + the socket that messages will be forwarded to + + this socket will have messages also sent to it - you can set this to null if not + needed + + an optional external poller to use within this proxy + + + is not + null + and either + + or + + are not contained within it. + + + + + Start proxying messages between the front and back ends. Blocks, unless using an external + . + + The proxy has already been started. + + + + Stops the proxy, blocking until the underlying + + has completed. + + The proxy has not been started. + + + + Provides extension methods for the + + interface, + via which messages may be received in several ways. + + + + + Block until the next message arrives, then make the message's data available via + . + + + The call blocks until the next message arrives, and cannot be interrupted. This a convenient and safe + when + you know a message is available, such as for code within a + + callback. + + The socket to receive from. + An object to receive the message's data into. + + + + Receive a single frame from, blocking until one arrives. + + The socket to receive from. + The content of the received message frame. + + + + Receive a single frame from, blocking until one arrives. + Indicate whether further frames exist via. + + The socket to receive from. + + true + if another frame of the same message follows, otherwise + false. + + The content of the received message frame. + + + + Attempt to receive a single frame from. + If no message is immediately available, return false. + + The socket to receive from. + + The content of the received message frame, or null if no message was + available. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from. + If no message is immediately available, return false. + Indicate whether further frames exist via. + + The socket to receive from. + + true + if another frame of the same message follows, otherwise + false. + + + The content of the received message frame, or null if no message was + available. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from. + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + The content of the received message frame, or null if no message was + available. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from. + If no message is available within, return false. + Indicate whether further frames exist via. + + The socket to receive from. + + true + if another frame of the same message follows, otherwise + false. + + The maximum period of time to wait for a message to become available. + + The content of the received message frame, or null if no message was + available. + + + true + if a message was available, otherwise false. + + + + + Receive all frames of the next message from, blocking until a message + arrives. + + The socket to receive from. + + Optional initial + + for the returned + . + + All frames of a multipart message as a list having one or more items. + + + + Receive all frames of the next message from, blocking until a message + arrives. + + The socket to receive from. + + Reference to a list for return values. If null a new instance will be + assigned, otherwise the provided list will be cleared and populated. + + + Optional initial + + for the returned + . + + + + + Attempt to receive all frames of the next message from. + If no message is immediately available, return false. + + The socket to receive from. + + Reference to a list for return values. If null a new instance will be + assigned, otherwise the provided list will be cleared and populated. + + + Optional initial + + for the returned + . + + + + + Attempt to receive all frames of the next message from. + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + Reference to a list for return values. If null a new instance will be + assigned, otherwise the provided list will be cleared and populated. + + + Optional initial + + for the returned + . + + + + + Receive a single frame from, blocking until one arrives, and decode as a + string using + . + + The socket to receive from. + The content of the received message frame as a string. + + + + Receive a single frame from, blocking until one arrives, and decode as a + string using + . + Indicate whether further frames exist via. + + The socket to receive from. + + true + if another frame of the same message follows, otherwise + false. + + The content of the received message frame. + + + + Receive a single frame from, blocking until one arrives, and decode as a + string using + . + + The socket to receive from. + The encoding used to convert the frame's data to a string. + The content of the received message frame as a string. + + + + Receive a single frame from, blocking until one arrives, and decode as a + string using + . + Indicate whether further frames exist via. + + The socket to receive from. + The encoding used to convert the frame's data to a string. + + true + if another frame of the same message follows, otherwise + false. + + The content of the received message frame as a string. + + + + Attempt to receive a single frame from, and decode as a string using + . + If no message is immediately available, return false. + + The socket to receive from. + + The content of the received message frame as a string, or + null + if no message was available. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from, and decode as a string using + . + If no message is immediately available, return false. + + The socket to receive from. + + The content of the received message frame as a string, or + null + if no message was available. + + + true + if another frame of the same message follows, otherwise + false. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from, and decode as a string using + . + If no message is immediately available, return false. + + The socket to receive from. + The encoding used to convert the frame's data to a string. + + The content of the received message frame as a string, or + null + if no message was available. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from, and decode as a string using + . + If no message is immediately available, return false. + + The socket to receive from. + The encoding used to convert the frame's data to a string. + + The content of the received message frame as a string, or + null + if no message was available. + + + true + if another frame of the same message follows, otherwise + false. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from, and decode as a string using + . + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + The content of the received message frame as a string, or + null + if no message was available. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from, and decode as a string using + . + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + The content of the received message frame as a string, or + null + if no message was available. + + + true + if another frame of the same message follows, otherwise + false. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from, and decode as a string using + . + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + The encoding used to convert the frame's data to a string. + + The content of the received message frame as a string, or + null + if no message was available. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive a single frame from, and decode as a string using + . + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + The encoding used to convert the frame's data to a string. + + The content of the received message frame as a string, or + null + if no message was available. + + + true + if another frame of the same message follows, otherwise + false. + + + true + if a message was available, otherwise false. + + + + + Receive all frames of the next message from, blocking until they arrive, and + decode as strings using + . + + The socket to receive from. + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + The content of the received message frame as a string. + + + + Receive all frames of the next message from, blocking until they arrive, and + decode as strings using + . + + The socket to receive from. + The encoding used to convert the frame's data to a string. + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + + + + Attempt to receive all frames of the next message from, and decode them as + strings using + . + If no message is immediately available, return false. + + The socket to receive from. + + The frames of the received message as strings. Untouched if no message was + available. + + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive all frames of the next message from, and decode them as + strings using + . + If no message is immediately available, return false. + + The socket to receive from. + The encoding used to convert the frame's data to a string. + + The frames of the received message as strings. Untouched if no message was + available. + + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive all frames of the next message from, and decode them as + strings using + . + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + The frames of the received message as strings. Untouched if no message was + available. + + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive all frames of the next message from, and decode them as + strings using + . + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + The encoding used to convert the frame's data to a string. + + The frames of the received message as strings. Untouched if no message was + available. + + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + + true + if a message was available, otherwise false. + + + + + Receive all frames of the next message from, blocking until they arrive. + + The socket to receive from. + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + The content of the received message frame as a string. + + + + Attempt to receive all frames of the next message from. + If no message is immediately available, return false. + + The socket to receive from. + The received message. Untouched if no message was available. + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + + true + if a message was available, otherwise false. + + + + + Attempt to receive all frames of the next message from. + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + The received message. Untouched if no message was available. + + Specifies the initial capacity of the + + used + to buffer results. If the number of frames is known, set it here. If more frames arrive than expected, + an extra allocation will occur, but the result will still be correct. + + + true + if a message was available, otherwise false. + + + + + Receive frames from, blocking until a valid signal arrives. + + The socket to receive from. + + true + if the received signal was zero, otherwise false. + + + + + Attempt to receive a valid signal from. + If no message is immediately available, return false. + + The socket to receive from. + + true + if the received signal was zero, otherwise false. If no signal received, + false. + + + true + if a valid signal was observed, otherwise false. + + + + + Attempt to receive a valid signal from. + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + true + if the received signal was zero, otherwise false. If no signal received, + false. + + + true + if a valid signal was observed, otherwise false. + + + + + Receive a single frame from, blocking until one arrives, then ignore its + content. + + The socket to receive from. + + + + Receive a single frame from, blocking until one arrives, then ignore its + content. + Indicate whether further frames exist via. + + The socket to receive from. + + true + if another frame of the same message follows, otherwise + false. + + + + + Attempt to receive a single frame from, then ignore its content. + If no message is immediately available, return false. + + The socket to receive from. + + true + if a frame was received and ignored, otherwise false. + + + + + Attempt to receive a single frame from, then ignore its content. + If no message is immediately available, return false. + Indicate whether further frames exist via. + + The socket to receive from. + + true + if another frame of the same message follows, otherwise + false. + + + true + if a frame was received and ignored, otherwise false. + + + + + Attempt to receive a single frame from, then ignore its content. + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + true + if a frame was received and ignored, otherwise false. + + + + + Attempt to receive a single frame from, then ignore its content. + If no message is available within, return false. + Indicate whether further frames exist via. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + true + if another frame of the same message follows, otherwise + false. + + + true + if a frame was received and ignored, otherwise false. + + + + + Receive all frames of the next message from, blocking until a message + arrives, then ignore their contents. + + The socket to receive from. + + + + Attempt to receive all frames of the next message from, then ignore their + contents. + If no message is immediately available, return false. + + The socket to receive from. + + true + if a frame was received and ignored, otherwise false. + + + + + Attempt to receive all frames of the next message from, then ignore their + contents. + If no message is available within, return false. + + The socket to receive from. + The maximum period of time to wait for a message to become available. + + true + if a frame was received and ignored, otherwise false. + + + + + The + + used in string related methods that do + not explicitly provide an encoding parameter. + + + + Indicates an infinite timeout for send and receive operations. + + + + This enum-type specifies socket transport events (TCP and IPC only). + + + + + A SocketOptions is simply a convenient way to access the options of a particular socket. + This class holds a reference to the socket, and it's properties provide a concise way + to access that socket's option values -- instead of calling GetSocketOption/SetSocketOption. + + + + + The NetMQSocket that this SocketOptions is referencing. + + + + + Create a new SocketOptions that references the given NetMQSocket. + + the NetMQSocket for this SocketOptions to hold a reference to + + + + Get or set the I/O-thread affinity. This is a 64-bit value used to specify which threads from the I/O + thread-pool + associated with the socket's context shall handle newly-created connections. + 0 means no affinity, meaning that work shall be distributed fairly among all I/O threads. + For non-zero values, the lowest bit corresponds to thread 1, second lowest bit to thread 2, and so on. + + + + + Get or set unique identity of the socket, from a message-queueing router's perspective. + This is a byte-array of at most 255 bytes. + + + + + Get or set the maximum send or receive data rate for multicast transports on the specified socket. + + + + + Get or set the recovery-interval for multicast transports using the specified socket. + This option determines the maximum time that a receiver can be absent from a multicast group + before unrecoverable data loss will occur. Default is 10,000 ms (10 seconds). + + + + + Get or set the size of the transmit buffer for the specified socket. + + + + + Get or set the size of the receive buffer for the specified socket. + A value of zero means that the OS default is in effect. + + + + + Gets whether the last frame received on the socket had the more flag set or not. + + + true + if receive more; otherwise, false. + + + + + Get or set the linger period for the specified socket, + which determines how long pending messages which have yet to be sent to a peer + shall linger in memory after a socket is closed. + + + If socket created with Context default is -1 if socket created without socket (using new keyword) + default is zero. + If context is used this also affects the termination of context, otherwise this affects the exit of + the process. + -1: Specifies an infinite linger period. Pending messages shall not be discarded after the socket is + closed; + attempting to terminate the socket's context shall block until all pending messages have been sent to + a peer. + 0: Specifies no linger period. Pending messages shall be discarded immediately when the socket is + closed. + Positive values specify an upper bound for the linger period. Pending messages shall not be discarded + after the socket is closed; + attempting to terminate the socket's context shall block until either all pending messages have been + sent to a peer, + or the linger period expires, after which any pending messages shall be discarded. + + + + + Get or set the initial reconnection interval for the specified socket. + This is the period to wait between attempts to reconnect disconnected peers + when using connection-oriented transports. The default is 100 ms. + -1 means no reconnection. + + + With ZeroMQ, the reconnection interval may be randomized to prevent reconnection storms + in topologies with a large number of peers per socket. + + + + + Get or set the maximum reconnection interval for the specified socket. + This is the maximum period to shall wait between attempts + to reconnect. On each reconnect attempt, the previous interval shall be doubled + until this maximum period is reached. + The default value of zero means no exponential backoff is performed. + + + This is the maximum period NetMQ shall wait between attempts + to reconnect. On each reconnect attempt, the previous interval shall be doubled + until this maximum period is reached. + This allows for an exponential backoff strategy. + The default value of zero means no exponential backoff is performed + and reconnect interval calculations are only based on ReconnectIvl. + + + + + Get or set the maximum length of the queue of outstanding peer connections + for the specified socket. This only applies to connection-oriented transports. + Default is 100. + + + + + Get or set the upper limit to the size for inbound messages. + If a peer sends a message larger than this it is disconnected. + The default value is -1, which means no limit. + + + + + Get or set the high-water-mark for transmission. + This is a hard limit on the number of messages that are allowed to queue up + before mitigative action is taken. + The default is 1000. + + + + + Get or set the high-water-mark for reception. + This is a hard limit on the number of messages that are allowed to queue up + before mitigative action is taken. + The default is 1000. + + + + + The low-water mark for message transmission. + This is the number of messages that should be processed before transmission is + unblocked (in case it was blocked by reaching high-watermark). The default value is + calculated using relevant high-watermark (HWM): HWM > 2048 ? HWM - 1024 : (HWM + 1) / 2 + + + + + The low-water mark for message reception. + This is the number of messages that should be processed before reception is + unblocked (in case it was blocked by reaching high-watermark). The default value is + calculated using relevant high-watermark (HWM): HWM > 2048 ? HWM - 1024 : (HWM + 1) / 2 + + + + + Get or set the time-to-live (maximum number of hops) that outbound multicast packets + are allowed to propagate. + The default value of 1 means that the multicast packets don't leave the local network. + + + + + Get or set whether the underlying socket is for IPv4 only (not IPv6), + as opposed to one that allows connections with either IPv4 or IPv6. + + + + + Get the last endpoint bound for TCP and IPC transports. + The returned value will be a string in the form of a ZMQ DSN. + + + If the TCP host is ANY, indicated by a *, then the returned address + will be 0.0.0.0 (for IPv4). + + + + + Set the RouterSocket behavior when an unroutable message is encountered. + A value of false is the default and discards the message silently when it cannot be routed. + A value of true causes throw of HostUnreachableException if the message cannot be routed. + + + + + Get or set whether to use TCP keepalive. + + + When Keepalive is enabled, then your socket will periodically send an empty keepalive probe packet + with the ACK flag on. The remote endpoint does not need to support keepalive at all, just TCP/IP. + If you receive a reply to your keepalive probe, you can assume that the connection is still up and + running. + This procedure is useful because if the other peers lose their connection (for example, by rebooting) + you will notice that the connection is broken, even if you don't have traffic on it. + If the keepalive probes are not replied to by your peer, you can assert that the connection + cannot be considered valid and then take the corrective action. + + + + + Get or set the keep-alive time - the duration between two keepalive transmissions in idle condition. + The TCP keepalive period is required by socket implementers to be configurable and by default is + set to no less than 2 hours. + + + + + Get or set the TCP keep-alive interval - the duration between two keepalive transmission if no + response was received to a previous keepalive probe. + + + By default a keepalive packet is sent every 2 hours or 7,200,000 milliseconds + (TODO: Check these comments concerning default values! jh) + if no other data have been carried over the TCP connection. + If there is no response to a keepalive, it is repeated once every KeepAliveInterval seconds. + The default is one second. + + + + + Get or set the attach-on-connect value. + If set to true, this will delay the attachment of a pipe on connect until + the underlying connection has completed. This will cause the socket + to block if there are no other connections, but will prevent queues + from filling on pipes awaiting connection. + Default is false. + + + + + This applies only to publisher sockets. + Set whether to send all subscription messages upstream, not just unique ones. + The default is false. + + + + + This applies only to publisher sockets. + Set whether to support broadcast functionality + + + + + This applies only to router sockets. + Set whether RouterSocket allows non-zmq tcp connects. + If true, router socket accepts non-zmq tcp connections + + + + + When enabled new router connections with same identity take over old ones + + + + + Get or set the byte-order: big-endian, vs little-endian. + + + + + Get the last PEER allocated routing id + + + + + Controls the maximum datagram size for PGM. + + + + + A DealerSocket is a NetMQSocket, whereby the dealer sends messages in a way intended to achieve + load-balancing + - which are received in a fair queueing manner. + + + + + Create a new DealerSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is connect (if endpoint doesn't start with '@' or '>') + + + var socket = new DealerSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); + + + + + Create a new DealerSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + A PairSocket is a NetMQSocket, usually used to synchronize two threads - using only one socket on each + side. + + + + + Create a new PairSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is connect (if endpoint doesn't start with '@' or '>') + + + var socket = new PairSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); + + + + + Create a new PairSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + Create and return an inproc pipe where socket1 is bound and socket2 is connected. + + the Bind socket + the Connect socket + + + + Peer socket, the first message is always the identity of the sender + + + + + Create a new PeerSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is connect (if endpoint doesn't start with '@' or '>') + + + var socket = new PeerSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); + + + + + Create a new PeerSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + Connect the peer socket to. + + a string denoting the address to connect this socket to + The peer allocated routing id + thrown if the socket was already disposed + The socket has been stopped. + No IO thread was found. + + The specified address is already in use. + + + + + A PublisherSocket is a NetMQSocket intended to be used as the Pub in the PubSub pattern. + The intended usage is for publishing messages to all subscribers which are subscribed to a given + topic. + + + + + Create a new PublisherSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is bind (if endpoint doesn't start with '@' or '>') + + + var socket = new PublisherSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); + + + + + Create a new PublisherSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + + doesn't support sending, so this override throws + . + + Receive is not supported. + + + + A PullSocket is a NetMQSocket intended to be used as the "Pull" part of the Push-Pull pattern. + This will "pull" messages that have been pushed from the "push" socket. + + + + + Create a new PullSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is bind (if endpoint doesn't start with '@' or '>') + + + var socket = new PullSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); + + + + + Create a new PullSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + A PushSocket is a NetMQSocket intended to be used as the "Push" part of the Push-Pull pattern. + This will "push" messages to be pulled by the "pull" socket. + + + + + Create a new PushSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is connect (if endpoint doesn't start with '@' or '>') + + + var socket = new PushSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); + + + + + Create a new PushSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + + doesn't support sending, so this override throws + . + + Receive is not supported. + + + + A RequestSocket is a NetMQSocket intended to be used as the Request part of the Request-Response + pattern. + This is generally paired with a ResponseSocket. + + + + + Create a new RequestSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is connect (if endpoint doesn't start with '@' or '>') + + + var socket = new RequestSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); + + + + + Create a new RequestSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + Try to send request message and return the response as a message, or return null if not successful + + a string denoting the address to connect to + The request message + The number of times to try + The timeout for each request + Report topics: Failure, Retry, Send, Success + the response message, or null if not successful + + + + Try to send request string and return the response string, or return null if not successful + + a string denoting the address to connect to + The request string + The number of times to try + The timeout for each request + Report topics: Failure, Retry, Send, Success + the response message, or null if not successful + + + + A ResponseSocket is a NetMQSocket intended to be used as the Response part of the Request-Response + pattern. + This is generally paired with a RequestSocket. + + + + + Create a new ResponseSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is bind (if endpoint doesn't start with '@' or '>') + + + var socket = new ResponseSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); + + + + + Create a new ResponseSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + Router socket, the first message is always the identity of the sender + + + + + Create a new RouterSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is bind (if endpoint doesn't start with '@' or '>') + + + var socket = new RouterSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); + + + + + Create a new RouterSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + This is a NetMQSocket but provides no additional functionality. + You can use it when you need an instance that is a NetMQSocket + but with none of the distinguishing behavior of any of the other socket types. + + + This is provided because NetMQSocket is an abstract class, so you cannot instantiate it directly. + + + + + Create a new StreamSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is connect (if endpoint doesn't start with '@' or '>') + + + var socket = new StreamSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); + + + + + Create a new StreamSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + A SubscriberSocket is a NetMQSocket intended to be used as the "Sub" in the PubSub pattern. + The intended usage is to receive messages from the publisher socket. + + + + + Create a new SubscriberSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is connect (if endpoint doesn't start with '@' or '>') + + + var socket = new SubscriberSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); + + + + + Create a new SubscriberSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + Subscribe this socket to the given 'topic' - which means enable this socket to receive + messages that begin with this string prefix. + You can set topic to an empty string to subscribe to everything. + + + this specifies what text-prefix to subscribe to, or may be an empty-string to + specify ALL + + + + + Subscribe this socket to the given 'topic' - which means enable this socket to receive + messages that begin with this string prefix, using the given Encoding. + You can set topic to an empty string to subscribe to everything. + + + this specifies what text-prefix to subscribe to, or may be an empty-string to + specify ALL + + + the character-Encoding to use when converting the topic string internally into a + byte-array + + + + + Subscribe this socket to the given 'topic' - which means enable this socket to receive + messages that begin with this array of bytes. + + this specifies what byte-array prefix to subscribe to + + + + Subscribe this socket to all topics - which means enable this socket to receive + all messages regardless of what the string prefix is. + This is the same as calling Subscribe with an empty-string for the topic. + + + + + Remove this socket's subscription to the given topic. + + a string denoting which the topic to stop receiving + + + + Remove this socket's subscription to the given topic. + + a string denoting which the topic to stop receiving + + the Encoding to use when converting the topic string internally into a + byte-array + + + + + Remove this socket's subscription to the given topic. + + a byte-array denoting which the topic to stop receiving + + + + An XPublisherSocket is a NetMQSocket intended to be used as the XPub in the XPub/XSub pattern. + The intended usage is for serving, together with a matching XSubscriberSocket, + as a stable intermediary between a PublisherSocket and it's SubscriberSockets. + + + + + Create a new XPublisherSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is bind (if endpoint doesn't start with '@' or '>') + + + var socket = new XPublisherSocket(">tcp://127.0.0.1:5555,>127.0.0.1:55556"); + + + + + Create a new XPublisherSocket based upon the given. + + the SocketBase to create the new socket from + + + + In case of socket set to manual mode will subscribe the last subscriber to the topic + + a string specifying the Topic to subscribe to + + + + In case of socket set to manual mode will subscribe the last subscriber to the topic + + a string specifying the Topic to subscribe to + + the character-Encoding to use when converting the topic string internally into a + byte-array + + + + + In case of socket set to manual mode will subscribe the last subscriber to the topic + + a byte-array specifying the Topic to subscribe to + + + + In case of socket set to manual mode will unsubscribe the last subscriber from a topic + + a string specifying the Topic to unsubscribe from + + + + In case of socket set to manual mode will unsubscribe the last subscriber from a topic + + a string specifying the Topic to unsubscribe from + + the character-Encoding to use when converting the topic string internally into a + byte-array + + + + + In case of socket set to manual mode will unsubscribe the last subscriber from a topic + + a byte-array specifying the Topic to unsubscribe from + + + + Publisher sockets generally send a welcome-message to subscribers to give an indication that they have + successful subscribed. + This method clears that message, such that none is sent. + + + + + Publisher sockets send a welcome-message to subscribers to give an indication that they have + successful subscribed. + This method is how you set the text of that welcome-message. + + a string denoting the new value for the welcome-message + + the character-Encoding to use when converting the topic string internally into a + byte-array + + + + + Publisher sockets send a welcome-message to subscribers to give an indication that they have + successful subscribed. + This method is how you set the text of that welcome-message. The Encoding is assumed to be ASCII. + + a string denoting the new value for the welcome-message + + + + Publisher sockets send a welcome-message to subscribers to give an indication that they have + successful subscribed. + This method is how you set the text of that welcome-message. The Encoding is assumed to be ASCII. + + a byte-array denoting the new value for the welcome-message + + + + An XSubscriberSocket is a NetMQSocket intended to be used as the XSub in the XPub/XSub pattern. + The intended usage is for serving, together with a matching XPublisherSocket, + as a stable intermediary between a PublisherSocket and it's SubscriberSockets. + + + + + Create a new XSubscriberSocket and attach socket to zero or more endpoints. + + + List of NetMQ endpoints, separated by commas and prefixed by '@' (to bind the socket) or '>' (to + connect the socket). + Default action is connect (if endpoint doesn't start with '@' or '>') + + + var socket = new XSubscriberSocket(">tcp://127.0.0.1:5555,@127.0.0.1:55556"); + + + + + Create a new XSubscriberSocket based upon the given SocketBase. + + the SocketBase to create the new socket from + + + + Subscribe this socket to the given 'topic' - which means enable this socket to receive + messages that begin with this string prefix. + You can set topic to an empty string to subscribe to everything. + + + this specifies what text-prefix to subscribe to, or may be an empty-string to + specify ALL + + + + + Subscribe this socket to the given 'topic' - which means enable this socket to receive + messages that begin with this string prefix, using the given Encoding. + You can set topic to an empty string to subscribe to everything. + + + this specifies what text-prefix to subscribe to, or may be an empty-string to + specify ALL + + + the Encoding to use when converting the topic string internally into a + byte-array + + + + + Subscribe this socket to the given 'topic' - which means enable this socket to receive + messages that begin with this array of bytes. + + this specifies what byte-array prefix to subscribe to + + + + Subscribe this socket to all topics - which means enable this socket to receive + all messages regardless of what the string prefix is. + This is the same as calling Subscribe with an empty-string for the topic. + + + + + Remove this socket's subscription to the given topic. + + a string denoting which the topic to stop receiving + + + + Remove this socket's subscription to the given topic. + + a string denoting which the topic to stop receiving + + the Encoding to use when converting the topic string internally into a + byte-array + + + + + Remove this socket's subscription to the given topic. + + a byte-array denoting which the topic to stop receiving + + + + This enum-type is used to specify the basic type of message-queue socket + based upon the intended pattern, such as Pub,Sub, Req,Rep, Dealer,Router, Pull,Push, Xpub,Xsub. + + + + + No socket-type is specified + + + + + This denotes a Pair socket (usually paired with another Pair socket). + + + + + This denotes a Publisher socket (usually paired with a Subscriber socket). + + + + + This denotes a Subscriber socket (usually paired with a Publisher socket). + + + + + This denotes a Request socket (usually paired with a Response socket). + + + + + This denotes a Response socket (usually paired with a Request socket). + + + + + This denotes an Dealer socket. + + + + + This denotes an Router socket. + + + + + This denotes a Pull socket (usually paired with a PUsh socket). + + + + + This denotes a Push socket (usually paired with a Pull socket). + + + + + This denotes an XPublisher socket. + + + + + This denotes an XSubscriber socket. + + + + + This denotes a Stream socket - which is a parent-class to the other socket types. + + + + diff --git a/Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml.meta b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml.meta similarity index 75% rename from Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml.meta rename to Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml.meta index 2fc13dada..40a8c5366 100644 --- a/Libaries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml.meta +++ b/Libraries/NetMQ.4.0.0.175-pre/lib/net40/NetMQ.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8084802c45f29af419dc07cdfb7fa7f4 +guid: caf212a4b9162ee02b82faaa6f2daa24 TextScriptImporter: externalObjects: {} userData: diff --git a/Libaries/Newtonsoft.Json.11.0.2.meta b/Libraries/Newtonsoft.Json.11.0.2.meta similarity index 77% rename from Libaries/Newtonsoft.Json.11.0.2.meta rename to Libraries/Newtonsoft.Json.11.0.2.meta index ffd2ced13..489a259bd 100644 --- a/Libaries/Newtonsoft.Json.11.0.2.meta +++ b/Libraries/Newtonsoft.Json.11.0.2.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c672f7bcab05947f6a3a84fc03146ad2 +guid: 049c5b1045e964c169bcb7fcd2d825bd folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Libaries/Newtonsoft.Json.11.0.2/LICENSE.md b/Libraries/Newtonsoft.Json.11.0.2/LICENSE.md similarity index 98% rename from Libaries/Newtonsoft.Json.11.0.2/LICENSE.md rename to Libraries/Newtonsoft.Json.11.0.2/LICENSE.md index 6cc88f29b..dfaadbe49 100644 --- a/Libaries/Newtonsoft.Json.11.0.2/LICENSE.md +++ b/Libraries/Newtonsoft.Json.11.0.2/LICENSE.md @@ -1,20 +1,20 @@ -The MIT License (MIT) - -Copyright (c) 2007 James Newton-King - -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. +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +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/Libaries/Newtonsoft.Json.11.0.2/LICENSE.md.meta b/Libraries/Newtonsoft.Json.11.0.2/LICENSE.md.meta similarity index 75% rename from Libaries/Newtonsoft.Json.11.0.2/LICENSE.md.meta rename to Libraries/Newtonsoft.Json.11.0.2/LICENSE.md.meta index ace90b94f..1e22a9ec7 100644 --- a/Libaries/Newtonsoft.Json.11.0.2/LICENSE.md.meta +++ b/Libraries/Newtonsoft.Json.11.0.2/LICENSE.md.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fe949066e52d046059800c7d5be28102 +guid: ec0a20474242e9c5a957ead47e2aad20 TextScriptImporter: externalObjects: {} userData: diff --git a/Libaries/Newtonsoft.Json.11.0.2/Newtonsoft.Json.11.0.2.nupkg b/Libraries/Newtonsoft.Json.11.0.2/Newtonsoft.Json.11.0.2.nupkg similarity index 100% rename from Libaries/Newtonsoft.Json.11.0.2/Newtonsoft.Json.11.0.2.nupkg rename to Libraries/Newtonsoft.Json.11.0.2/Newtonsoft.Json.11.0.2.nupkg diff --git a/Libraries/Newtonsoft.Json.11.0.2/Newtonsoft.Json.11.0.2.nupkg.meta b/Libraries/Newtonsoft.Json.11.0.2/Newtonsoft.Json.11.0.2.nupkg.meta new file mode 100644 index 000000000..30e044d8f --- /dev/null +++ b/Libraries/Newtonsoft.Json.11.0.2/Newtonsoft.Json.11.0.2.nupkg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2a67fb365f1cdaecf9f7190f0763b872 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/Newtonsoft.Json.11.0.2/lib.meta b/Libraries/Newtonsoft.Json.11.0.2/lib.meta new file mode 100644 index 000000000..27158ebca --- /dev/null +++ b/Libraries/Newtonsoft.Json.11.0.2/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54e591fba328b1f118f6904660def4a1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/Newtonsoft.Json.11.0.2/lib/net45.meta b/Libraries/Newtonsoft.Json.11.0.2/lib/net45.meta new file mode 100644 index 000000000..989fd1221 --- /dev/null +++ b/Libraries/Newtonsoft.Json.11.0.2/lib/net45.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c7371df6ee6281cab87244388fdc606e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll b/Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll similarity index 100% rename from Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll rename to Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll diff --git a/Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll.meta b/Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll.meta similarity index 93% rename from Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll.meta rename to Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll.meta index f1b101010..e27a90942 100644 --- a/Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll.meta +++ b/Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b0fefeab916fc406eb3577b75def1920 +guid: 7d808a20a317aef63bd763dc0a00f8d1 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml b/Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml new file mode 100644 index 000000000..2ea4f66f5 --- /dev/null +++ b/Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml @@ -0,0 +1,18363 @@ + + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the + + class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect + Json.NET 3.5 written binary. + + + true + if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, + false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true + if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the + + used when reading + + values from BSON. + + + The + + used when reading + + values from BSON. + + + + + Initializes a new instance of the + + class. + + + The + + containing the BSON data to read. + + + + + Initializes a new instance of the + + class. + + + The + + containing the BSON data to read. + + + + + Initializes a new instance of the + + class. + + + The + + containing the BSON data to read. + + + if set to true the root object will be read as a JSON array. + + + The + + used when reading + + values from BSON. + + + + + Initializes a new instance of the + + class. + + + The + + containing the BSON data to read. + + + if set to true the root object will be read as a JSON array. + + + The + + used when reading + + values from BSON. + + + + + Reads the next JSON token from the underlying. + + + true + if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to. + If + + is set to true, the underlying + + is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the + + used when writing + + values to BSON. + When set to + + no conversion will occur. + + + The + + used when writing + + values to BSON. + + + + + Initializes a new instance of the + + class. + + + The + + to write to. + + + + + Initializes a new instance of the + + class. + + + The + + to write to. + + + + + Flushes whatever is in the buffer to the underlying + + and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If + + is set to true, the underlying + + is also closed. + If + + is set to true, the JSON is auto-completed. + + + + + Writes a + + value. + An error will raised if the value cannot be written as a single JSON token. + + + The + + value to write. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a[] value. + + + The[] value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a[] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the + . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized + constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Converts a + + to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this + + can write JSON. + + + true + if this + + can write JSON; otherwise, + false. + + + + + Converts a + + to and from JSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true + if this instance can convert the specified value type; otherwise, false. + + + + + Converts a + + to and from JSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true + if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a + + to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework + + to and from JSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Converts an + + to and from JSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this + + can write JSON. + + + true + if this + + can write JSON; otherwise, + false. + + + + + Converts a + + to and from the ISO 8601 date format (e.g. + "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a + + to and from a JavaScript Date constructor (e.g. + new Date(52231943)). + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a + + to and from JSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Converts a + + to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Converts an + + to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + + true + if the written enum text will be camel case; otherwise, false. + + + + + Gets or sets a value indicating whether integer values are allowed when deserializing. + The default value is true. + + + true + if integers are allowed when deserializing; otherwise, false. + + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class. + + + true + if the written enum text will be camel case; otherwise, + false. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Converts a + + to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a + + to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure + has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + true + if the array attribute is written to the XML; otherwise, false. + + + + + Gets or sets a value indicating whether to write the root JSON object. + + + true + if the JSON root object is omitted; otherwise, false. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the + + is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + + true + if attribute name is for a namespace attribute, otherwise false. + + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true + if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and + "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are + parsed to + . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are + parsed to + . + + + + + Specifies how to treat the time value when converting between string and + . + + + + + Treat as local time. If the + + object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the + + object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a + + is being converted to a string. + If a string is being converted to, convert to a local time if a time + zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + Specifies default value handling options for the + . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing + objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing + objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; + 0 + for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be + changed by + placing the + + on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing + objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. + , + + and + + with + . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", + "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, + -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a + + property, null for a + + of + + property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to + . + + + + + Floating point numbers are parsed to + . + + + + + Specifies formatting options for the. + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the + + and + + settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + + The minimum required length of the array. The returned array may be + longer. + + + The rented array from the pool. This array must be returned when it is no longer needed. + + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true + if + + and + + can be provided; otherwise, + false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, when + + returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, when + + returns false). + + + + + Instructs the + + how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + + true + if null items are allowed in the collection; otherwise, false. + + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the + + class with the specified container Id. + + The container Id. + + + + Instructs the + + to use the specified constructor when deserializing that object. + + + + + Instructs the + + how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the + + described by + . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the + + that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new + object[] { 123, "Four" })] + + + + + + Gets or sets the + + of the + . + + + The + + of the + . + + + + + The parameter list to use when constructing the + + described by + . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the + + that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new + object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true + to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true + to keep collection's items object references; otherwise, false. The default is + false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default + . + Default settings are automatically used by serialization methods on + , + and + + and + + on + . + To serialize without using any default settings create a + + with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation using the + + specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation using the + + specified. + + The value to convert. + The format the date will be converted to. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + The string delimiter character. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + + A JSON string representation of the. + + + + + Converts the + + to its JSON string representation. + + The value to convert. + + A JSON string representation of the. + + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of + . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of + . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using + . + + The object to serialize. + + The + + used to serialize the object. + If this is null, default serialization settings will be used. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and + . + + The object to serialize. + + The + + used to serialize the object. + If this is null, default serialization settings will be used. + + + The type of the value being serialized. + This parameter is used when + + is + + to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and + . + + The object to serialize. + Indicates how the output should be formatted. + + The + + used to serialize the object. + If this is null, default serialization settings will be used. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and + . + + The object to serialize. + Indicates how the output should be formatted. + + The + + used to serialize the object. + If this is null, default serialization settings will be used. + + + The type of the value being serialized. + This parameter is used when + + is + + to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using + . + + The JSON to deserialize. + + The + + used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + + The + + of object being deserialized. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using + . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The + + used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of + . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using + . + + The type of the object to deserialize to. + The object to deserialize. + + The + + used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of + . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using + . + + The JSON to deserialize. + The type of the object to deserialize to. + + The + + used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using + . + + The JSON to populate values from. + The target object to populate values onto. + + The + + used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the + + to a JSON string. + + The node to serialize. + + A JSON string of the. + + + + + Serializes the + + to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + + A JSON string of the. + + + + + Serializes the + + to a JSON string using formatting and omits the root object if + + is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + + A JSON string of the. + + + + + Deserializes the + + from a JSON string. + + The JSON string. + + The deserialized. + + + + + Deserializes the + + from a JSON string nested in a root element specified by + . + + The JSON string. + + The name of the root element to append when deserializing. + + + The deserialized. + + + + + Deserializes the + + from a JSON string nested in a root element specified by + + and writes a Json.NET array attribute for collections. + + The JSON string. + + The name of the root element to append when deserializing. + + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + The deserialized. + + + + + Serializes the + + to a JSON string. + + The node to convert to JSON. + + A JSON string of the. + + + + + Serializes the + + to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + + A JSON string of the. + + + + + Serializes the + + to a JSON string using formatting and omits the root object if + + is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + + A JSON string of the. + + + + + Deserializes the + + from a JSON string. + + The JSON string. + + The deserialized. + + + + + Deserializes the + + from a JSON string nested in a root element specified by + . + + The JSON string. + + The name of the root element to append when deserializing. + + + The deserialized. + + + + + Deserializes the + + from a JSON string nested in a root element specified by + + and writes a Json.NET array attribute for collections. + + The JSON string. + + The name of the root element to append when deserializing. + + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + The deserialized. + + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this + + can read JSON. + + + true + if this + + can read JSON; otherwise, + false. + + + + + Gets a value indicating whether this + + can write JSON. + + + true + if this + + can write JSON; otherwise, + false. + + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + + The + + to write to. + + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + + The + + to read from. + + Type of the object. + + The existing value of object being read. If there is no existing value then + null + will be used. + + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true + if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the + + to use the specified + + when serializing the member or class. + + + + + Gets the + + of the. + + + The + + of the. + + + + + The parameter list to use when constructing the + + described by + . + If null, the default constructor is used. + + + + + Initializes a new instance of the + + class. + + + Type of the. + + + + + Initializes a new instance of the + + class. + + + Type of the. + + + Parameter list to use when constructing the + . Can be null. + + + + + Represents a collection of. + + + + + Instructs the + + how to serialize the collection. + + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + + class + with a specified error message and a reference to the inner exception that is the cause of this + exception. + + The error message that explains the reason for the exception. + + The exception that is the cause of the current exception, or + null + if no inner exception is specified. + + + + + Initializes a new instance of the + + class. + + + The + + that holds the serialized object data about the exception being thrown. + + + The + + that contains contextual information about the source or destination. + + + The + + parameter is + null. + + + The class name is + null + or + + is zero (0). + + + + + Instructs the + + to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true + to write extension data when serializing the object; otherwise, false. The default is + true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true + to read extension data when deserializing the object; otherwise, false. The default is + true. + + + + + Initializes a new instance of the + + class. + + + + + Instructs the + + not to serialize the public field or public read/write property value. + + + + + Instructs the + + how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets how the object's properties with null values are handled during serialization and + deserialization. + + + How the object's properties with null values are handled during serialization and + deserialization. + + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the + + class with the specified container Id. + + The container Id. + + + + Instructs the + + to always serialize the member with the specified name. + + + + + Gets or sets the + + used when serializing the property's collection items. + + + The collection's items. + + + + + The parameter list to use when constructing the + + described by + . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the + + that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new + object[] { 123, "Four" })] + + + + + + Gets or sets the + + of the + . + + + The + + of the + . + + + + + The parameter list to use when constructing the + + described by + . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the + + that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] + { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns true if the next token was read successfully; false if there are no + more tokens to read. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously skips the children of the current token. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously reads the next JSON token from the source as a[]. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the[]. This result will be null at the end of an + array. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of + . This result will be null at the end of an array. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously reads the next JSON token from the source as a. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the. This result will be null at the end of an + array. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Specifies the state of the reader. + + + + + A + + read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The + + method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true + to close the source when this reader is closed; otherwise false. The default is + true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true + to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how + + time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are + parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a + . + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to + . + + + + + Initializes a new instance of the + + class. + + + + + Reads the next JSON token from the source. + + + true + if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the source as a + + of + . + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the source as a. + + + A. This method will return null at the end of an array. + + + + + Reads the next JSON token from the source as a[]. + + + A[] or null if the next JSON token is null. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the source as a + + of + . + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the source as a + + of + . + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the source as a + + of + . + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the source as a + + of + . + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the source as a + + of + . + + + A + + of. This method will return + null + at the end of an array. + + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + + A flag indicating whether the position index inside an array should be + updated. + + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + + true + to release both managed and unmanaged resources; + false + to release only unmanaged resources. + + + + + Changes the reader's state to. + If + + is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + + class + with a specified error message and a reference to the inner exception that is the cause of this + exception. + + The error message that explains the reason for the exception. + + The exception that is the cause of the current exception, or + null + if no inner exception is specified. + + + + + Initializes a new instance of the + + class. + + + The + + that holds the serialized object data about the exception being thrown. + + + The + + that contains contextual information about the source or destination. + + + The + + parameter is + null. + + + The class name is + null + or + + is zero (0). + + + + + Initializes a new instance of the + + class + with a specified error message, JSON path, line number, line position, and a reference to the inner + exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + + The exception that is the cause of the current exception, or + null + if no inner exception is specified. + + + + + Instructs the + + to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + + class + with a specified error message and a reference to the inner exception that is the cause of this + exception. + + The error message that explains the reason for the exception. + + The exception that is the cause of the current exception, or + null + if no inner exception is specified. + + + + + Initializes a new instance of the + + class. + + + The + + that holds the serialized object data about the exception being thrown. + + + The + + that contains contextual information about the source or destination. + + + The + + parameter is + null. + + + The class name is + null + or + + is zero (0). + + + + + Serializes and deserializes objects into and from the JSON format. + The + + enables you to control how objects are encoded into JSON. + + + + + Occurs when the + + errors during serialization and deserialization. + + + + + Gets or sets the + + used by the serializer when resolving references. + + + + + Gets or sets the + + used by the serializer when resolving type names. + + + + + Gets or sets the + + used by the serializer when resolving type names. + + + + + Gets or sets the + + used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is. + + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + + when deserializing with a value other than + . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is + . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is. + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is. + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are + handled during deserialization. + The default value is. + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is. + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is. + + + + + Gets or sets how objects are created during deserialization. + The default value is. + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is. + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is. + + The metadata properties handling. + + + + Gets a collection + + that will be used during serialization. + + + Collection + + that will be used during serialization. + + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the + + used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is. + + + + + Gets or sets how dates are written to JSON text. + The default value is. + + + + + Gets or sets how + + time zones are handled during serialization and deserialization. + The default value is. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and + "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is. + + + + + Gets or sets how special floating point numbers, e.g., + + and + , + are written as JSON text. + The default value is. + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is. + + + + + Gets or sets how + + and + + values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a + . + A null value means there is no maximum. + The default value is null. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing + an object. + The default value is false. + + + true + if there will be a check for additional JSON content after deserializing an object; otherwise, + false. + + + + + Initializes a new instance of the + + class. + + + + + Creates a new + + instance. + The + + will not use default settings + from. + + + A new + + instance. + The + + will not use default settings + from. + + + + + Creates a new + + instance using the specified + . + The + + will not use default settings + from. + + + The settings to be applied to the + . + + + A new + + instance using the specified + . + The + + will not use default settings + from. + + + + + Creates a new + + instance. + The + + will use default settings + from. + + + A new + + instance. + The + + will use default settings + from. + + + + + Creates a new + + instance using the specified + . + The + + will use default settings + from + + as well as the specified + . + + + The settings to be applied to the + . + + + A new + + instance using the specified + . + The + + will use default settings + from + + as well as the specified + . + + + + + Populates the JSON values onto the target object. + + + The + + that contains the JSON structure to reader values from. + + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + + The + + that contains the JSON structure to reader values from. + + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified + . + + + The + + that contains the JSON structure to deserialize. + + + The + + being deserialized. + + + + + Deserializes the JSON structure contained by the specified + + into an instance of the specified type. + + + The + + containing the object. + + + The + + of object being deserialized. + + + The instance of + + being deserialized. + + + + + Deserializes the JSON structure contained by the specified + + into an instance of the specified type. + + + The + + containing the object. + + The type of the object to deserialize. + + The instance of + + being deserialized. + + + + + Deserializes the JSON structure contained by the specified + + into an instance of the specified type. + + + The + + containing the object. + + + The + + of object being deserialized. + + + The instance of + + being deserialized. + + + + + Serializes the specified + + and writes the JSON structure + using the specified. + + + The + + used to write the JSON structure. + + + The + + to serialize. + + + + + Serializes the specified + + and writes the JSON structure + using the specified. + + + The + + used to write the JSON structure. + + + The + + to serialize. + + + The type of the value being serialized. + This parameter is used when + + is + + to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified + + and writes the JSON structure + using the specified. + + + The + + used to write the JSON structure. + + + The + + to serialize. + + + The type of the value being serialized. + This parameter is used when + + is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified + + and writes the JSON structure + using the specified. + + + The + + used to write the JSON structure. + + + The + + to serialize. + + + + + Specifies the settings on a + + object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is. + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are + handled during deserialization. + The default value is. + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is. + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is. + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is. + + The default value handling. + + + + Gets or sets a + + collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is. + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is. + + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + + when deserializing with a value other than + . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is. + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is + . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is. + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is. + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the + + used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the + + used by the serializer when resolving references. + + + A function that creates the + + used by the serializer when resolving references. + + + + + Gets or sets the + + used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the + + used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the + + used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the + + used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how + + and + + values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a + . + A null value means there is no maximum. + The default value is null. + + + + + Indicates how JSON text output is formatted. + The default value is. + + + + + Gets or sets how dates are written to JSON text. + The default value is. + + + + + Gets or sets how + + time zones are handled during serialization and deserialization. + The default value is. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and + "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is. + + + + + Gets or sets how special floating point numbers, e.g., + + and + , + are written as JSON. + The default value is. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is. + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is. + + + + + Gets or sets the culture used when reading JSON. + The default value is. + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an + object. + The default value is false. + + + true + if there will be a check for additional content after deserializing an object; otherwise, + false. + + + + + Initializes a new instance of the + + class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns true if the next token was read successfully; false if there are no + more tokens to read. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously reads the next JSON token from the source as a[]. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the[]. This result will be null at the end of an + array. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of + . This result will be null at the end of an array. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously reads the next JSON token from the source as a + + of. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the + + of. This result will be + null + at the end of an array. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously reads the next JSON token from the source as a. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous read. The + + property returns the. This result will be null at the end of an + array. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Initializes a new instance of the + + class with the specified + . + + + The + + containing the JSON data to read. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying. + + + true + if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + . + + + A. This method will return null at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + []. + + + A[] or null if the next JSON token is null. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. This method will return + null + at the end of an array. + + + + + Changes the reader's state to. + If + + is set to true, the underlying + + is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true + if + + and + + can be provided; otherwise, + false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, + + returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, + + returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the JSON value delimiter. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the specified end token. + + The end token to write. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously closes this writer. + If + + is set to true, the destination is also closed. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the end of the current JSON object or array. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes indent characters. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes an indent space. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a null value. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + + A flag to indicate whether the text should be escaped when it is written as a JSON + property name. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the beginning of a JSON array. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the beginning of a JSON object. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes an undefined value. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the given white space. + + The string of white space characters. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a[] value. + + + The[] value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the end of an array. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the end of a constructor. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes the end of a JSON object. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how manys to write for each + level in the hierarchy when + + is set to + . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when + + is set to + . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the + + class using the specified + . + + + The + + to write to. + + + + + Flushes whatever is in the buffer to the underlying + + and also flushes the underlying + . + + + + + Closes this writer. + If + + is set to true, the underlying + + is also closed. + If + + is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + A flag to indicate whether the text should be escaped when it is written as a JSON + property name. + + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a + + value. + An error will raised if the value cannot be written as a single JSON token. + + + The + + value to write. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a[] value. + + + The[] value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the + + if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides + + validation. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the + + class that + validates the content returned from the given. + + + The + + to read from while validating. + + + + + Gets or sets the schema. + + The schema. + + + + Gets the + + used to construct this + . + + + The + + specified in the constructor. + + + + + Changes the reader's state to. + If + + is set to true, the underlying + + is also closed. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. + + + + + Reads the next JSON token from the underlying + + as a + []. + + + A[] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. + + + + + Reads the next JSON token from the underlying + + as a + . + + + A. This method will return null at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. This method will return + null + at the end of an array. + + + + + Reads the next JSON token from the underlying + + as a + + of. + + + A + + of. + + + + + Reads the next JSON token from the underlying. + + + true + if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If + + is set to true, the destination is also closed. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the specified end token. + + The end token to write. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes indent characters. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the JSON value delimiter. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes an indent space. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the end of the current JSON object or array. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the end of an array. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the end of a constructor. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the end of a JSON object. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a null value. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + + A flag to indicate whether the text should be escaped when it is written as a JSON + property name. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the beginning of a JSON array. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the beginning of a JSON object. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the current + + token. + + + The + + to read the token from. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the current + + token. + + + The + + to read the token from. + + + A flag indicating whether the current token's children should be written. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the + + token and its value. + + + The + + to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the + + token and its value. + + + The + + to write. + + + The value to write. + A value is only required for tokens that have an associated value, e.g. the + + property name for + . + null + can be passed to the method for tokens that don't have a value, e.g. + . + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a[] value. + + + The[] value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + value. + + + The + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes a + + of + + value. + + + The + + of + + value to write. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes an undefined value. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously writes the given white space. + + The string of white space characters. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Asynchronously ets the state of the. + + + The + + being written. + + The value being written. + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous operation. + + + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true + to close the destination when this writer is closed; otherwise false. The default is + true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true + to auto-complete the JSON when this writer is closed; otherwise false. The default is + true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how + + time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g., + + and + , + are written to JSON text. + + + + + Gets or sets how + + and + + values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to + . + + + + + Initializes a new instance of the + + class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If + + is set to true, the destination is also closed. + If + + is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + A flag to indicate whether the text should be escaped when it is written as a JSON + property name. + + + + + Writes the end of the current JSON object or array. + + + + + Writes the current + + token and its children. + + + The + + to read the token from. + + + + + Writes the current + + token. + + + The + + to read the token from. + + + A flag indicating whether the current token's children should be written. + + + + + Writes the + + token and its value. + + + The + + to write. + + + The value to write. + A value is only required for tokens that have an associated value, e.g. the + + property name for + . + null + can be passed to the method for tokens that don't have a value, e.g. + . + + + + + Writes the + + token. + + + The + + to write. + + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a + + of + + value. + + + The + + of + + value to write. + + + + + Writes a[] value. + + + The[] value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + An error will raised if the value cannot be written as a single JSON token. + + + The + + value to write. + + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + + true + to release both managed and unmanaged resources; + false + to release only unmanaged resources. + + + + + Sets the state of the. + + + The + + being written. + + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + + class + with a specified error message and a reference to the inner exception that is the cause of this + exception. + + The error message that explains the reason for the exception. + + The exception that is the cause of the current exception, or + null + if no inner exception is specified. + + + + + Initializes a new instance of the + + class. + + + The + + that holds the serialized object data about the exception being thrown. + + + The + + that contains contextual information about the source or destination. + + + The + + parameter is + null. + + + The class name is + null + or + + is zero (0). + + + + + Initializes a new instance of the + + class + with a specified error message, JSON path and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + + The exception that is the cause of the current exception, or + null + if no inner exception is specified. + + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a + + with type + . + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + + The type of the objects in source, constrained to + . + + + An + + of + + that contains the source collection. + + + An + + of + + that contains the ancestors of every token in the source collection. + + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors + of every token in the source collection. + + + The type of the objects in source, constrained to + . + + + An + + of + + that contains the source collection. + + + An + + of + + that contains every token in the source collection, the ancestors of every token in the source + collection. + + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + + The type of the objects in source, constrained to + . + + + An + + of + + that contains the source collection. + + + An + + of + + that contains the descendants of every token in the source collection. + + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants + of every token in the source collection. + + + The type of the objects in source, constrained to + . + + + An + + of + + that contains the source collection. + + + An + + of + + that contains every token in the source collection, and the descendants of every token in the source + collection. + + + + + Returns a collection of child properties of every object in the source collection. + + + An + + of + + that contains the source collection. + + + An + + of + + that contains the properties of every object in the source collection. + + + + + Returns a collection of child values of every object in the source collection with the given key. + + + An + + of + + that contains the source collection. + + The token key. + + An + + of + + that contains the values of every token in the source collection with the given key. + + + + + Returns a collection of child values of every object in the source collection. + + + An + + of + + that contains the source collection. + + + An + + of + + that contains the values of every token in the source collection. + + + + + Returns a collection of converted child values of every object in the source collection with the given + key. + + The type to convert the values to. + + An + + of + + that contains the source collection. + + The token key. + + An + + that contains the converted values of every token in the source collection with the given key. + + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + + An + + of + + that contains the source collection. + + + An + + that contains the converted values of every token in the source collection. + + + + + Converts the value. + + The type to convert the value to. + + A + + cast as a + + of + . + + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + + A + + cast as a + + of + . + + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + + An + + of + + that contains the source collection. + + + An + + of + + that contains the values of every token in the source collection. + + + + + Returns a collection of converted child tokens of every array in the source collection. + + + An + + of + + that contains the source collection. + + The type to convert the values to. + The source collection type. + + An + + that contains the converted values of every token in the source collection. + + + + + Returns the input typed as. + + + An + + of + + that contains the source collection. + + + The input typed as. + + + + + Returns the input typed as. + + The source collection type. + + An + + of + + that contains the source collection. + + + The input typed as. + + + + + Represents a collection of + + objects. + + The type of token. + + + + Gets the + + of + + with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a + + asynchronously. + + + A + + into which this method will write. + + The token to monitor for cancellation requests. + + A collection of + + which will be used when writing the token. + + + A + + that represents the asynchronous write operation. + + + + + Asynchronously loads a + + from a + . + + + A + + that will be read for the content of the + . + If this is null, default load settings will be used. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + representing the asynchronous load. The + + property contains the JSON that was read from the specified + . + + + + + Asynchronously loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + representing the asynchronous load. The + + property contains the JSON that was read from the specified + . + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this. + + The type. + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class from another + + object. + + + A + + object to copy from. + + + + + Initializes a new instance of the + + class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the + + class with the specified content. + + The contents of the array. + + + + Loads an + + from a + . + + + A + + that will be read for the content of the + . + + + A + + that contains the JSON that was read from the specified + . + + + + + Loads an + + from a + . + + + A + + that will be read for the content of the + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + that contains the JSON that was read from the specified + . + + + + + Load a + + from a string that contains JSON. + + + A + + that contains JSON. + + + A + + populated from the string that contains JSON. + + + + + + + + Load a + + from a string that contains JSON. + + + A + + that contains JSON. + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + populated from the string that contains JSON. + + + + + + + + Creates a + + from an object. + + + The object that will be used to create + . + + + A + + with the values of the specified object. + + + + + Creates a + + from an object. + + + The object that will be used to create + . + + + The + + that will be used to read the object. + + + A + + with the values of the specified object. + + + + + Writes this token to a. + + + A + + into which this method will write. + + + A collection of + + which will be used when writing the token. + + + + + Gets the + + with the specified key. + + + The + + with the specified key. + + + + + Gets or sets the + + at the specified index. + + + + + + Determines the index of a specific item in the. + + + The object to locate in the. + + + The index of + + if found in the list; otherwise, -1. + + + + + Inserts an item to the + + at the specified index. + + + The zero-based index at which + + should be inserted. + + + The object to insert into the. + + + + is not a valid index in the + . + + + + + Removes the + + item at the specified index. + + The zero-based index of the item to remove. + + + is not a valid index in the + . + + + + + Returns an enumerator that iterates through the collection. + + + A + + of + + that can be used to iterate through the collection. + + + + + Adds an item to the. + + + The object to add to the. + + + + + Removes all items from the. + + + + + Determines whether the + + contains a specific value. + + + The object to locate in the. + + + true + if + + is found in the + ; otherwise, false. + + + + + Copies the elements of the + + to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the + + is read-only. + + + true + if the + + is read-only; otherwise, + false. + + + + + Removes the first occurrence of a specific object from the + . + + + The object to remove from the. + + + true + if + + was successfully removed from the + ; otherwise, false. This method also returns + false + if + + is not found in the original + . + + + + + Represents a JSON constructor. + + + + + Writes this token to a + + asynchronously. + + + A + + into which this method will write. + + The token to monitor for cancellation requests. + + A collection of + + which will be used when writing the token. + + + A + + that represents the asynchronous write operation. + + + + + Asynchronously loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous load. The + + property returns a + + that contains the JSON that was read from the specified + . + + + + + Asynchronously loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous load. The + + property returns a + + that contains the JSON that was read from the specified + . + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this. + + The type. + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class from another + + object. + + + A + + object to copy from. + + + + + Initializes a new instance of the + + class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the + + class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the + + class with the specified name. + + The constructor name. + + + + Writes this token to a. + + + A + + into which this method will write. + + + A collection of + + which will be used when writing the token. + + + + + Gets the + + with the specified key. + + + The + + with the specified key. + + + + + Loads a + + from a + . + + + A + + that will be read for the content of the + . + + + A + + that contains the JSON that was read from the specified + . + + + + + Loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + that contains the JSON that was read from the specified + . + + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the + + event. + + + The + + instance containing the event data. + + + + + Raises the + + event. + + + The + + instance containing the event data. + + + + + Raises the + + event. + + + The + + instance containing the event data. + + + + + Gets a value indicating whether this token has child tokens. + + + true + if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A + + containing the first child token of the + . + + + + + Get the last child token of this token. + + + A + + containing the last child token of the + . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An + + of + + containing the child tokens of this + , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A + + containing the child values of this + , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + + An + + of + + containing the descendant tokens of the + . + + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, + in document order. + + + An + + of + + containing this token, and all the descendant tokens of the + . + + + + + Adds the specified content as children of this. + + The content to be added. + + + + Adds the specified content as the first children of this + . + + The content to be added. + + + + Creates a + + that can be used to add tokens to the + . + + + A + + that is ready to have content written to it. + + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this. + + The content to be merged. + + + + Merge the specified content into this + + using + . + + The content to be merged. + + The + + used to merge the content. + + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of + + objects. + + The type of token. + + + + An empty collection of + + objects. + + + + + Initializes a new instance of the + + struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A + + that can be used to iterate through the collection. + + + + + Gets the + + of + + with the specified key. + + + + + + Determines whether the specified + + is equal to this instance. + + + The + + to compare with this instance. + + + true + if the specified + + is equal to this instance; otherwise, + false. + + + + + Determines whether the specified + + is equal to this instance. + + + The + + to compare with this instance. + + + true + if the specified + + is equal to this instance; otherwise, + false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash + table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a + + asynchronously. + + + A + + into which this method will write. + + The token to monitor for cancellation requests. + + A collection of + + which will be used when writing the token. + + + A + + that represents the asynchronous write operation. + + + + + Asynchronously loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous load. The + + property returns a + + that contains the JSON that was read from the specified + . + + + + + Asynchronously loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous load. The + + property returns a + + that contains the JSON that was read from the specified + . + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class from another + + object. + + + A + + object to copy from. + + + + + Initializes a new instance of the + + class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the + + class with the specified content. + + The contents of the object. + + + + Gets the node type for this. + + The type. + + + + Gets an + + of + + of this object's properties. + + + An + + of + + of this object's properties. + + + + + Gets a + + the specified name. + + The property name. + + A + + with the specified name or + null + . + + + + + Gets a + + of + + of this object's property values. + + + A + + of + + of this object's property values. + + + + + Gets the + + with the specified key. + + + The + + with the specified key. + + + + + Gets or sets the + + with the specified property name. + + + + + + Loads a + + from a + . + + + A + + that will be read for the content of the + . + + + A + + that contains the JSON that was read from the specified + . + + + + is not valid JSON. + + + + + Loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + that contains the JSON that was read from the specified + . + + + + is not valid JSON. + + + + + Load a + + from a string that contains JSON. + + + A + + that contains JSON. + + + A + + populated from the string that contains JSON. + + + + is not valid JSON. + + + + + + + + Load a + + from a string that contains JSON. + + + A + + that contains JSON. + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + populated from the string that contains JSON. + + + + is not valid JSON. + + + + + + + + Creates a + + from an object. + + + The object that will be used to create + . + + + A + + with the values of the specified object. + + + + + Creates a + + from an object. + + + The object that will be used to create + . + + + The + + that will be used to read the object. + + + A + + with the values of the specified object. + + + + + Writes this token to a. + + + A + + into which this method will write. + + + A collection of + + which will be used when writing the token. + + + + + Gets the + + with the specified property name. + + Name of the property. + + The + + with the specified property name. + + + + + Gets the + + with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the + + will be used to match a property. + + Name of the property. + + One of the enumeration values that specifies how the strings will be + compared. + + + The + + with the specified property name. + + + + + Tries to get the + + with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the + + will be used to match a property. + + Name of the property. + The value. + + One of the enumeration values that specifies how the strings will be + compared. + + + true + if a value was successfully retrieved; otherwise, false. + + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + + true + if the JSON object has the specified property name; otherwise, false. + + + + + Removes the property with the specified name. + + Name of the property. + + true + if item was successfully removed; otherwise, false. + + + + + Tries to get the + + with the specified property name. + + Name of the property. + The value. + + true + if a value was successfully retrieved; otherwise, false. + + + + + Returns an enumerator that can be used to iterate through the collection. + + + A + + that can be used to iterate through the collection. + + + + + Raises the + + event with the provided arguments. + + Name of the property. + + + + Raises the + + event with the provided arguments. + + Name of the property. + + + + Returns the + + responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The + + to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a + + asynchronously. + + + A + + into which this method will write. + + The token to monitor for cancellation requests. + + A collection of + + which will be used when writing the token. + + + A + + that represents the asynchronous write operation. + + + + + Asynchronously loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The token to monitor for cancellation requests. The default value is + . + + + A + + representing the asynchronous creation. The + + property returns a + + that contains the JSON that was read from the specified + . + + + + + Asynchronously loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + representing the asynchronous creation. The + + property returns a + + that contains the JSON that was read from the specified + . + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the + + class from another + + object. + + + A + + object to copy from. + + + + + Gets the node type for this. + + The type. + + + + Initializes a new instance of the + + class. + + The property name. + The property content. + + + + Initializes a new instance of the + + class. + + The property name. + The property content. + + + + Writes this token to a. + + + A + + into which this method will write. + + + A collection of + + which will be used when writing the token. + + + + + Loads a + + from a + . + + + A + + that will be read for the content of the + . + + + A + + that contains the JSON that was read from the specified + . + + + + + Loads a + + from a + . + + + A + + that will be read for the content of the + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + that contains the JSON that was read from the specified + . + + + + + Represents a view of a. + + + + + Initializes a new instance of the + + class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true + if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default + value. + + + The component with the property value that is to be reset to the default + value. + + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property + needs to be persisted. + + + true + if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A + + that represents the type of component this property is bound to. + When the + + or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true + if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A + + that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of + + with the content of the reader's current token. + + The reader. + + The token to monitor for cancellation requests. The default value is + . + + + A + + representing the asynchronous creation. The + + property returns an instance of + + with the content of the reader's current token. + + + + + Initializes a new instance of the + + class from another + + object. + + + A + + object to copy from. + + + + + Initializes a new instance of the + + class. + + The raw json. + + + + Creates an instance of + + with the content of the reader's current token. + + The reader. + + An instance of + + with the content of the reader's current token. + + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the + + class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + + The JSON line info handling. + + + + Specifies the settings used when merging JSON. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Represents an abstract JSON token. + + + + + Writes this token to a + + asynchronously. + + + A + + into which this method will write. + + The token to monitor for cancellation requests. + + A collection of + + which will be used when writing the token. + + + A + + that represents the asynchronous write operation. + + + + + Writes this token to a + + asynchronously. + + + A + + into which this method will write. + + + A collection of + + which will be used when writing the token. + + + A + + that represents the asynchronous write operation. + + + + + Asynchronously creates a + + from a + . + + + An + + positioned at the token to read into this + . + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous creation. The + + property returns a + + that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a + + from a + . + + + An + + positioned at the token to read into this + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous creation. The + + property returns a + + that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a + + from a + . + + + A + + positioned at the token to read into this + . + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous creation. The + + property returns a + + that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a + + from a + . + + + A + + positioned at the token to read into this + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + The token to monitor for cancellation requests. The default value is + . + + + A + + that represents the asynchronous creation. The + + property returns a + + that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + + A + + that can compare two nodes for value equality. + + + + + Gets or sets the parent. + + The parent. + + + + Gets the root + + of this + . + + + The root + + of this + . + + + + + Gets the node type for this. + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true + if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + + The first + + to compare. + + + The second + + to compare. + + + true + if the tokens are equal; otherwise false. + + + + + Gets the next sibling token of this node. + + + The + + that contains the next sibling token. + + + + + Gets the previous sibling token of this node. + + + The + + that contains the previous sibling token. + + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + + A content object that contains simple content or a collection of content objects + to be added after this token. + + + + + Adds the specified content immediately before this token. + + + A content object that contains simple content or a collection of content objects + to be added before this token. + + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the + + with the specified key. + + + The + + with the specified key. + + + + + Gets the + + with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + + A + + containing the first child token of the + . + + + + + Get the last child token of this token. + + + A + + containing the last child token of the + . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An + + of + + containing the child tokens of this + , in document order. + + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified + type. + + The type to filter the child tokens on. + + A + + containing the child tokens of this + , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A + + containing the child values of this + , in document order. + + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a. + + + A + + into which this method will write. + + + A collection of + + which will be used when writing the token. + + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + + A collection ofs which will be + used when writing the token. + + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of + + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of + + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + + of. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from + + to + . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from[] to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + to + . + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Performs an implicit conversion from + + of + + to. + + + The value to create a + + from. + + + The + + initialized with the specified value. + + + + + Creates a + + for this token. + + + A + + that can be used to read this token and its descendants. + + + + + Creates a + + from an object. + + + The object that will be used to create + . + + + A + + with the value of the specified object. + + + + + Creates a + + from an object using the specified + . + + + The object that will be used to create + . + + + The + + that will be used when reading the object. + + + A + + with the value of the specified object. + + + + + Creates an instance of the specified .NET type from the + . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the + . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the + + using the specified + . + + The object type that the token will be deserialized to. + + The + + that will be used when creating the object. + + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the + + using the specified + . + + The object type that the token will be deserialized to. + + The + + that will be used when creating the object. + + The new object created from the JSON value. + + + + Creates a + + from a + . + + + A + + positioned at the token to read into this + . + + + A + + that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a + + from a + . + + + An + + positioned at the token to read into this + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a + + from a string that contains JSON. + + + A + + that contains JSON. + + + A + + populated from the string that contains JSON. + + + + + Load a + + from a string that contains JSON. + + + A + + that contains JSON. + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + populated from the string that contains JSON. + + + + + Creates a + + from a + . + + + A + + positioned at the token to read into this + . + + + The + + used to load the JSON. + If this is null, default load settings will be used. + + + A + + that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a + + from a + . + + + A + + positioned at the token to read into this + . + + + A + + that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a + + using a JPath expression. Selects the token that matches the object path. + + + A + + that contains a JPath expression. + + + A, or null. + + + + + Selects a + + using a JPath expression. Selects the token that matches the object path. + + + A + + that contains a JPath expression. + + + A flag to indicate whether an error should be thrown if no tokens are + found when evaluating part of the expression. + + + A. + + + + + Selects a collection of elements using a JPath expression. + + + A + + that contains a JPath expression. + + + An + + of + + that contains the selected elements. + + + + + Selects a collection of elements using a JPath expression. + + + A + + that contains a JPath expression. + + + A flag to indicate whether an error should be thrown if no tokens are + found when evaluating part of the expression. + + + An + + of + + that contains the selected elements. + + + + + Returns the + + responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The + + to bind this object. + + + + + Returns the + + responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The + + to bind this object. + + + + + Creates a new instance of the. All child tokens are + recursively cloned. + + + A new instance of the. + + + + + Adds an object to the annotation list of this. + + The annotation to add. + + + + Get the first annotation object of the specified type from this + . + + The type of the annotation to retrieve. + + The first annotation object that matches the specified type, or null if no annotation is + of the specified type. + + + + + Gets the first annotation object of the specified type from this + . + + + The + + of the annotation to retrieve. + + + The first annotation object that matches the specified type, or null if no annotation is + of the specified type. + + + + + Gets a collection of annotations of the specified type for this + . + + The type of the annotations to retrieve. + + An + + that contains the annotations for this + . + + + + + Gets a collection of annotations of the specified type for this + . + + + The + + of the annotations to retrieve. + + + An + + of + + that contains the annotations that match the specified type for this + . + + + + + Removes the annotations of the specified type from this + . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this + . + + + The + + of annotations to remove. + + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + + The first object of type + + to compare. + + + The second object of type + + to compare. + + + true + if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + + The + + for which a hash code is to be returned. + + A hash code for the specified object. + + The type of + + is a reference type and + + is null. + + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the + + at the reader's current position. + + + + + Initializes a new instance of the + + class. + + The token to read from. + + + + Reads the next JSON token from the underlying. + + + true + if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the + + at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the + + class writing to the given + . + + The container being written to. + + + + Initializes a new instance of the + + class. + + + + + Flushes whatever is in the buffer to the underlying + . + + + + + Closes this writer. + If + + is set to true, the JSON is auto-completed. + + + Setting + + to true has no additional effect, since the underlying + + is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a + + value. + An error will be raised if the value cannot be written as a single JSON token. + + + The + + value to write. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a[] value. + + + The[] value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Writes a + + value. + + + The + + value to write. + + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a + + asynchronously. + + + A + + into which this method will write. + + The token to monitor for cancellation requests. + + A collection of + + which will be used when writing the token. + + + A + + that represents the asynchronous write operation. + + + + + Initializes a new instance of the + + class from another + + object. + + + A + + object to copy from. + + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Initializes a new instance of the + + class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true + if this token has child values; otherwise, false. + + + + + Creates a + + comment with the given value. + + The value. + + A + + comment with the given value. + + + + + Creates a + + string with the given value. + + The value. + + A + + string with the given value. + + + + + Creates a + + null value. + + + A + + null value. + + + + + Creates a + + undefined value. + + + A + + undefined value. + + + + + Gets the node type for this. + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a. + + + A + + into which this method will write. + + + A collection ofs which will be + used when writing the token. + + + + + Indicates whether the current object is equal to another object of the same type. + + + true + if the current object is equal to the + + parameter; otherwise, + false. + + An object to compare with this object. + + + + Determines whether the specified + + is equal to the current + . + + + The + + to compare with the current + . + + + true + if the specified + + is equal to the current + ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current. + + + + + Returns a + + that represents this instance. + + + A + + that represents this instance. + + + + + Returns a + + that represents this instance. + + The format. + + A + + that represents this instance. + + + + + Returns a + + that represents this instance. + + The format provider. + + A + + that represents this instance. + + + + + Returns a + + that represents this instance. + + The format. + The format provider. + + A + + that represents this instance. + + + + + Returns the + + responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The + + to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that + indicates whether the current instance precedes, follows, or occurs in the same position in the sort + order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return + value has these meanings: + Value + Meaning + Less than zero + This instance is less than. + Zero + This instance is equal to. + Greater than zero + This instance is greater than. + + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the + . + + + + + All public members are serialized by default. Members can be excluded using + + or + . + This is the default member serialization mode. + + + + + Only members marked with + + or + + are serialized. + This member serialization mode can also be set by marking the class with + . + + + + + All public and private fields are serialized. Members can be excluded using + + or + . + This member serialization mode can also be set by marking the class with + + and setting IgnoreSerializableAttribute on + + to false. + + + + + Specifies metadata property handling options for the + . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact + performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the + . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a + + when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the + + . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the + . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the. + Note that references cannot be preserved when a value is set via a non-default constructor such as + types that implement + . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the + . + + + + + Throw a + + when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + + Determines whether the + + is valid. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + The source + + to test. + + The schema to test with. + + true + if the specified + + is valid; otherwise, + false. + + + + + + Determines whether the + + is valid. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + The source + + to test. + + The schema to test with. + + When this method returns, contains any error messages generated while + validating. + + + true + if the specified + + is valid; otherwise, + false. + + + + + + Validates the specified. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + The source + + to test. + + The schema to test with. + + + + + Validates the specified. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + The source + + to test. + + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the + minimum + attribute (). + + + A flag indicating whether the value can not equal the number defined by the + minimum + attribute (). + + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the + maximum + attribute (). + + + A flag indicating whether the value can not equal the number defined by the + maximum + attribute (). + + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the + + of items. + + + The + + of items. + + + + + Gets or sets a value indicating whether items in an array are validated using the + + instance at their array position from + . + + + true + if items are validated using their array position; otherwise, false. + + + + + Gets or sets the + + of additional items. + + + The + + of additional items. + + + + + Gets or sets a value indicating whether additional items are allowed. + + + true + if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the + + of properties. + + + The + + of properties. + + + + + Gets or sets the + + of additional properties. + + + The + + of additional properties. + + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true + if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of + + that this schema extends. + + + The collection of + + that this schema extends. + + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the + + class. + + + + + Reads a + + from the specified + . + + + The + + containing the JSON Schema to read. + + + The + + object representing the JSON Schema. + + + + + Reads a + + from the specified + . + + + The + + containing the JSON Schema to read. + + + The + + to use when resolving schema references. + + + The + + object representing the JSON Schema. + + + + + Load a + + from a string that contains JSON Schema. + + + A + + that contains JSON Schema. + + + A + + populated from the string that contains JSON Schema. + + + + + Load a + + from a string that contains JSON Schema using the specified + . + + + A + + that contains JSON Schema. + + The resolver. + + A + + populated from the string that contains JSON Schema. + + + + + Writes this schema to a. + + + A + + into which this method will write. + + + + + Writes this schema to a + + using the specified + . + + + A + + into which this method will write. + + The resolver used. + + + + Returns a + + that represents the current + . + + + A + + that represents the current. + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + + class + with a specified error message and a reference to the inner exception that is the cause of this + exception. + + The error message that explains the reason for the exception. + + The exception that is the cause of the current exception, or + null + if no inner exception is specified. + + + + + Initializes a new instance of the + + class. + + + The + + that holds the serialized object data about the exception being thrown. + + + The + + that contains contextual information about the source or destination. + + + The + + parameter is + null. + + + The class name is + null + or + + is zero (0). + + + + + + Generates a + + from a specified + . + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a + + from the specified type. + + + The type to generate a + + from. + + + A + + generated from the specified type. + + + + + Generate a + + from the specified type. + + + The type to generate a + + from. + + + The + + used to resolve schema references. + + + A + + generated from the specified type. + + + + + Generate a + + from the specified type. + + + The type to generate a + + from. + + + Specify whether the generated root + + will be nullable. + + + A + + generated from the specified type. + + + + + Generate a + + from the specified type. + + + The type to generate a + + from. + + + The + + used to resolve schema references. + + + Specify whether the generated root + + will be nullable. + + + A + + generated from the specified type. + + + + + + Resolves + + from an id. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the + + class. + + + + + Gets a + + for the specified reference. + + The id. + + A + + for the specified reference. + + + + + + The value types allowed by the. + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the + . + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the + . + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + Gets the + + associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the + . + + + JSON Schema validation has been moved to its own package. See + http://www.newtonsoft.com/jsonschema + for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the + + class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a + + . + + + + + Initializes a new instance of the + + class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a + + . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the + + class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the + + class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by + + to resolve a + + for a given + . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true + if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true + if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the + + interface when serializing and deserializing types. + + + true + if the + + interface will be ignored when serializing and deserializing types; otherwise, + false. + + + + + Gets or sets a value indicating whether to ignore the + + attribute when serializing and deserializing types. + + + true + if the + + attribute will be ignored when serializing and deserializing types; otherwise, + false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and + deserializing types. + + + true + if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, + false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and + deserializing types. + + + true + if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, + false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are + serialized. + + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + + Initializes a new instance of the + + class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a + + for the given type. + + Type of the object. + + A + + for the given type. + + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + + Properties for the given. + + + + + Creates a + + for the given + . + + The matching member property. + The constructor parameter. + + A created + + for the given + . + + + + + Resolves the default + + for the contract. + + Type of the object. + + The contract's default. + + + + + Creates a + + for the given type. + + Type of the object. + + A + + for the given type. + + + + + Creates a + + for the given type. + + Type of the object. + + A + + for the given type. + + + + + Creates a + + for the given type. + + Type of the object. + + A + + for the given type. + + + + + Creates a + + for the given type. + + Type of the object. + + A + + for the given type. + + + + + Creates a + + for the given type. + + Type of the object. + + A + + for the given type. + + + + + Creates a + + for the given type. + + Type of the object. + + A + + for the given type. + + + + + Creates a + + for the given type. + + Type of the object. + + A + + for the given type. + + + + + Determines which contract type is created for the given type. + + Type of the object. + + A + + for the given type. + + + + + Creates properties for the given. + + The type to create properties for. + /// + The member serialization mode for the type. + + Properties for the given. + + + + + Creates the + + used by the serializer to get and set values from a member. + + The member. + + The + + used by the serializer to get and set values from a member. + + + + + Creates a + + for the given + . + + + The member's parent + . + + + The member to create a + + for. + + + A created + + for the given + . + + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default + + is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the + + class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + + Specifies the + + name of the serialized object. + + + Specifies the + + name of the serialized object. + + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + + Specifies the + + name of the serialized object. + + + Specifies the + + name of the serialized object. + + + + + Represents a trace writer that writes to the application's + + instances. + + + + + Gets the + + that will be used to filter the trace messages passed to the writer. + For example a filter level of + + will exclude + + messages and include + , + + and + + messages. + + + The + + that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + + The + + at which to write this trace. + + The trace message. + The trace exception. This parameter is optional. + + + + Get and set values for a + + using dynamic methods. + + + + + Initializes a new instance of the + + class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this + + is handled. + + + true + if handled; otherwise, false. + + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the + + class. + + The current object. + The error context. + + + + Get and set values for a + + using dynamic methods. + + + + + Initializes a new instance of the + + class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + + When true, look up the hierarchy chain for the inherited custom attribute. + + + A collection ofs, or an empty collection. + + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no + attributes. + + The type of the attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + + + A collection ofs, or an empty collection. + + + + + Used by + + to resolve a + + for a given + . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the + . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true + if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + + Specifies the + + name of the serialized object. + + + Specifies the + + name of the serialized object + + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + + Specifies the + + name of the serialized object. + + + Specifies the + + name of the serialized object. + + + + + Represents a trace writer. + + + + + Gets the + + that will be used to filter the trace messages passed to the writer. + For example a filter level of + + will exclude + + messages and include + , + + and + + messages. + + + The + + that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + + The + + at which to write this trace. + + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a + + used by the + . + + + + + Gets the + + of the collection items. + + + The + + of the collection items. + + + + + Gets a value indicating whether the collection type is a multidimensional array. + + + true + if the collection type is a multidimensional array; otherwise, false. + + + + + Gets or sets the function used to create the object. When set this function will override + . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + + true + if the creator has a parameter with the collection values; otherwise, + false. + + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Contract details for a + + used by the + . + + + + + Gets or sets the default collection items. + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + + true + if collection items preserve object references; otherwise, false. + + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Handles + + serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles + + serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a + + used by the + . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default + + for this contract. + + The converter. + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + + true + if the default object creator is non-public; otherwise, false. + + + + + Contract details for a + + used by the + . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the + + of the dictionary keys. + + + The + + of the dictionary keys. + + + + + Gets the + + of the dictionary values. + + + The + + of the dictionary values. + + + + + Gets or sets the function used to create the object. When set this function will override + . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + + true + if the creator has a parameter with the dictionary values; otherwise, + false. + + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Contract details for a + + used by the + . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Contract details for a + + used by the + . + + + + + Gets or sets the + + object constructor. + + + The + + object constructor. + + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Contract details for a + + used by the + . + + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Contract details for a + + used by the + . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and + deserialization. + + + How the object's properties with null values are handled during serialization and + deserialization. + + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of + + instances that define the parameters used with + . + + + + + Gets or sets the function used to create the object. When set this function will override + . + This function is called with a collection of arguments which are defined by the + + collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Contract details for a + + used by the + . + + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the + + that will get and set the + + during serialization. + + + The + + that will get and set the + + during serialization. + + + + + Gets or sets the + + for this property. + + + The + + for this property. + + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the + + for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this + + is ignored. + + + true + if ignored; otherwise, false. + + + + + Gets or sets a value indicating whether this + + is readable. + + + true + if readable; otherwise, false. + + + + + Gets or sets a value indicating whether this + + is writable. + + + true + if writable; otherwise, false. + + + + + Gets or sets a value indicating whether this + + has a member attribute. + + + true + if has a member attribute; otherwise, false. + + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this + + is required. + + + A value indicating whether this + + is required. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true + if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a + + that represents this instance. + + + A + + that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of + + objects. + + + + + Initializes a new instance of the + + class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a + + object. + + The property to add to the collection. + + + + Gets the closest matching + + object. + First attempts to get an exact case match of + + and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a + + used by the + . + + + + + Initializes a new instance of the + + class. + + The underlying type for the contract. + + + + Lookup and create an instance of the + + type described by the argument. + + + The + + type to create. + + + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the + + that will be used to filter the trace messages passed to the writer. + For example a filter level of + + will exclude + + messages and include + , + + and + + messages. + + + The + + that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the + + class. + + + + + Writes the specified trace level, message and optional exception. + + + The + + at which to write this trace. + + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a + + of the most recent trace messages. + + + A + + of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a + + , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + + A flag indicating whether the property has had a name explicitly + specified. + + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an + object. + + + + + Provides methods to get attributes from a, + , + + or + . + + + + + Initializes a new instance of the + + class. + + + The instance to get attributes for. This parameter should be a + ,, + + or + . + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + + When true, look up the hierarchy chain for the inherited custom attribute. + + + A collection ofs, or an empty collection. + + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no + attributes. + + The type of the attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + + + A collection ofs, or an empty collection. + + + + + Get and set values for a + + using reflection. + + + + + Initializes a new instance of the + + class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the + + class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a + + . + + + + + Initializes a new instance of the + + class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a + + . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the + + class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used + during serialization. Specifically, the version numbers need not match as the + LoadWithPartialName + method of the + + class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during + serialization. The + Load + method of the + + class is used to load the assembly. + + + + + Specifies type name handling options for the. + + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + + when deserializing with a value other than + . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its + declared type. + Note that this doesn't include the root serialized object by default. To include the root object's + type name in JSON + you must specify a root type object with + + or + + . + + + + + Determines whether the collection is null or empty. + + The collection. + + true + if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic + . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the + DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the member is an indexed property. + + The member. + + true + if the member is an indexed property; otherwise, false. + + + + + Determines whether the property is an indexed property. + + The property. + + true + if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// + + if set to true then allow the member to be gotten non-publicly. + + + true + if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + + if set to true then allow the member to be set non-publicly. + + + if set to true then allow the member to be set if read-only. + + + true + if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike + + this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true + if the string is all white space; otherwise, false. + + + + + Specifies the state of the. + + + + + An exception has been thrown, which has left the + + in an invalid state. + You may call the + + method to put the + + in the Closed state. + Any other + + method calls result in an + + being thrown. + + + + + The + + method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A + + write method has not been called. + + + + diff --git a/Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml.meta b/Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml.meta similarity index 75% rename from Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml.meta rename to Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml.meta index 8d29f8c1f..85879fd5e 100644 --- a/Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml.meta +++ b/Libraries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3173e01e9b77742ffae17ad0e407f773 +guid: 67d532f59049c7360b4abdd1b6d24387 TextScriptImporter: externalObjects: {} userData: diff --git a/Libaries/OptimizedPriorityQueue.4.1.1.meta b/Libraries/OptimizedPriorityQueue.4.1.1.meta similarity index 77% rename from Libaries/OptimizedPriorityQueue.4.1.1.meta rename to Libraries/OptimizedPriorityQueue.4.1.1.meta index 0aea3ff6e..6a2f1c9a2 100644 --- a/Libaries/OptimizedPriorityQueue.4.1.1.meta +++ b/Libraries/OptimizedPriorityQueue.4.1.1.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5ecffab88ff04485dad3d01db8658157 +guid: 6f709bd349002eabc9bcada79deec53a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg b/Libraries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg similarity index 100% rename from Libaries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg rename to Libraries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg diff --git a/Libraries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg.meta b/Libraries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg.meta new file mode 100644 index 000000000..6446644f1 --- /dev/null +++ b/Libraries/OptimizedPriorityQueue.4.1.1/OptimizedPriorityQueue.4.1.1.nupkg.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3fbcf265207836cf9b539405fc337241 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/OptimizedPriorityQueue.4.1.1/lib.meta b/Libraries/OptimizedPriorityQueue.4.1.1/lib.meta new file mode 100644 index 000000000..0bd9fdc20 --- /dev/null +++ b/Libraries/OptimizedPriorityQueue.4.1.1/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be21f7c31f9d4ccddafdd35ce8539a8e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45.meta b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45.meta new file mode 100644 index 000000000..2be507e06 --- /dev/null +++ b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3a858c2a05d476de98bf9df6a7eb3c5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll similarity index 100% rename from Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll rename to Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb similarity index 84% rename from Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb rename to Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb index 9bf6b731e..8b788aea8 100644 Binary files a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb and b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb differ diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb.meta b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb.meta similarity index 100% rename from Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb.meta rename to Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.mdb.meta diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.meta b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.meta similarity index 93% rename from Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.meta rename to Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.meta index 570610efe..5db63b297 100644 --- a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.meta +++ b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 976088f6e8f2e7245a138253e5215069 +guid: 1426fec5350334c2d842a1c2fb0ff9fa PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb similarity index 100% rename from Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb rename to Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb diff --git a/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb.meta b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb.meta new file mode 100644 index 000000000..79b16abfb --- /dev/null +++ b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7627548849a01bdb3a964704a937e301 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml similarity index 77% rename from Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml rename to Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml index f76e5c7bb..3e5f9a961 100644 --- a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml +++ b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml @@ -1,597 +1,656 @@ - - - - - Priority Queue - - - - - A copy of StablePriorityQueue which also has generic priority-type - - The values in the queue. Must extend the GenericPriorityQueue class - The priority-type. Must extend IComparable<TPriority> - - - - Instantiate a new Priority Queue - - The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) - - - - Instantiate a new Priority Queue - - The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) - The comparer used to compare TPriority values. - - - - Instantiate a new Priority Queue - - The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) - The comparison function to use to compare TPriority values - - - - Returns the number of nodes in the queue. - O(1) - - - - - Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), - attempting to enqueue another item will cause undefined behavior. O(1) - - - - - Removes every node from the queue. - O(n) (So, don't do this often!) - - - - - Returns (in O(1)!) whether the given node is in the queue. O(1) - - - - - Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. - If the queue is full, the result is undefined. - If the node is already enqueued, the result is undefined. - O(log n) - - - - - Returns true if 'higher' has higher priority than 'lower', false otherwise. - Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false - - - - - Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. - If queue is empty, result is undefined - O(log n) - - - - - Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. - Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior - O(n) - - - - - Returns the head of the queue, without removing it (use Dequeue() for that). - If the queue is empty, behavior is undefined. - O(1) - - - - - This method must be called on a node every time its priority changes while it is in the queue. - Forgetting to call this method will result in a corrupted queue! - Calling this method on a node not in the queue results in undefined behavior - O(log n) - - - - - Removes a node from the queue. The node does not need to be the head of the queue. - If the node is not in the queue, the result is undefined. If unsure, check Contains() first - O(log n) - - - - - Should not be called in production code. - Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. - - - - - The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, in the node's constructor). - Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead - - - - - Represents the current position in the queue - - - - - Represents the order the node was inserted in - - - - - A helper-interface only needed to make writing unit tests a bit easier (hence the 'internal' access modifier) - - - - - Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. - Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior - - - - - Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), - attempting to enqueue another item will cause undefined behavior. - - - - - A copy of FastPriorityQueue which is also stable - that is, when two nodes are enqueued with the same priority, they - are always dequeued in the same order. - See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information - - The values in the queue. Must extend the StablePriorityQueueNode class - - - - Instantiate a new Priority Queue - - The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) - - - - Returns the number of nodes in the queue. - O(1) - - - - - Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), - attempting to enqueue another item will cause undefined behavior. O(1) - - - - - Removes every node from the queue. - O(n) (So, don't do this often!) - - - - - Returns (in O(1)!) whether the given node is in the queue. O(1) - - - - - Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. - If the queue is full, the result is undefined. - If the node is already enqueued, the result is undefined. - O(log n) - - - - - Returns true if 'higher' has higher priority than 'lower', false otherwise. - Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false - - - - - Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. - If queue is empty, result is undefined - O(log n) - - - - - Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. - Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior - O(n) - - - - - Returns the head of the queue, without removing it (use Dequeue() for that). - If the queue is empty, behavior is undefined. - O(1) - - - - - This method must be called on a node every time its priority changes while it is in the queue. - Forgetting to call this method will result in a corrupted queue! - Calling this method on a node not in the queue results in undefined behavior - O(log n) - - - - - Removes a node from the queue. The node does not need to be the head of the queue. - If the node is not in the queue, the result is undefined. If unsure, check Contains() first - O(log n) - - - - - Should not be called in production code. - Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. - - - - - An implementation of a min-Priority Queue using a heap. Has O(1) .Contains()! - See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information - - The values in the queue. Must extend the FastPriorityQueueNode class - - - - Instantiate a new Priority Queue - - The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) - - - - Returns the number of nodes in the queue. - O(1) - - - - - Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), - attempting to enqueue another item will cause undefined behavior. O(1) - - - - - Removes every node from the queue. - O(n) (So, don't do this often!) - - - - - Returns (in O(1)!) whether the given node is in the queue. O(1) - - - - - Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. - If the queue is full, the result is undefined. - If the node is already enqueued, the result is undefined. - O(log n) - - - - - Returns true if 'higher' has higher priority than 'lower', false otherwise. - Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false - - - - - Removes the head of the queue and returns it. - If queue is empty, result is undefined - O(log n) - - - - - Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. - Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior - O(n) - - - - - Returns the head of the queue, without removing it (use Dequeue() for that). - If the queue is empty, behavior is undefined. - O(1) - - - - - This method must be called on a node every time its priority changes while it is in the queue. - Forgetting to call this method will result in a corrupted queue! - Calling this method on a node not in the queue results in undefined behavior - O(log n) - - - - - Removes a node from the queue. The node does not need to be the head of the queue. - If the node is not in the queue, the result is undefined. If unsure, check Contains() first - O(log n) - - - - - Should not be called in production code. - Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. - - - - - Represents the order the node was inserted in - - - - - The IPriorityQueue interface. This is mainly here for purists, and in case I decide to add more implementations later. - For speed purposes, it is actually recommended that you *don't* access the priority queue through this interface, since the JIT can - (theoretically?) optimize method calls from concrete-types slightly better. - - - - - Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. - See implementation for how duplicates are handled. - - - - - Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. - - - - - Removes every node from the queue. - - - - - Returns whether the given node is in the queue. - - - - - Removes a node from the queue. The node does not need to be the head of the queue. - - - - - Call this method to change the priority of a node. - - - - - Returns the head of the queue, without removing it (use Dequeue() for that). - - - - - Returns the number of nodes in the queue. - - - - - The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, in the node's constructor). - Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead - - - - - Represents the current position in the queue - - - - - A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of being slightly slower than - FastPriorityQueue - Methods tagged as O(1) or O(log n) are assuming there are no duplicates. Duplicates may increase the algorithmic complexity. - - The type to enqueue - The priority-type to use for nodes. Must extend IComparable<TPriority> - - - - Instantiate a new Priority Queue - - - - - Instantiate a new Priority Queue - - The comparer used to compare TPriority values. Defaults to Comparer<TPriority>.default - - - - Instantiate a new Priority Queue - - The comparison function to use to compare TPriority values - - - - Given an item of type T, returns the exist SimpleNode in the queue - - - - - Adds an item to the Node-cache to allow for many methods to be O(1) or O(log n) - - - - - Removes an item to the Node-cache to allow for many methods to be O(1) or O(log n) (assuming no duplicates) - - - - - Returns the number of nodes in the queue. - O(1) - - - - - Returns the head of the queue, without removing it (use Dequeue() for that). - Throws an exception when the queue is empty. - O(1) - - - - - Removes every node from the queue. - O(n) - - - - - Returns whether the given item is in the queue. - O(1) - - - - - Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. - If queue is empty, throws an exception - O(log n) - - - - - Enqueue the item with the given priority, without calling lock(_queue) - - - - - Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. - This queue automatically resizes itself, so there's no concern of the queue becoming 'full'. - Duplicates and null-values are allowed. - O(log n) - - - - - Enqueue a node to the priority queue if it doesn't already exist. Lower values are placed in front. Ties are broken by first-in-first-out. - This queue automatically resizes itself, so there's no concern of the queue becoming 'full'. Null values are allowed. - Returns true if the node was successfully enqueued; false if it already exists. - O(log n) - - - - - Removes an item from the queue. The item does not need to be the head of the queue. - If the item is not in the queue, an exception is thrown. If unsure, check Contains() first. - If multiple copies of the item are enqueued, only the first one is removed. - O(log n) - - - - - Call this method to change the priority of an item. - Calling this method on a item not in the queue will throw an exception. - If the item is enqueued multiple times, only the first one will be updated. - (If your requirements are complex enough that you need to enqueue the same item multiple times - and be able - to update all of them, please wrap your items in a wrapper class so they can be distinguished). - O(log n) - - - - - Returns the priority of the given item. - Calling this method on a item not in the queue will throw an exception. - If the item is enqueued multiple times, only the priority of the first will be returned. - (If your requirements are complex enough that you need to enqueue the same item multiple times - and be able - to query all their priorities, please wrap your items in a wrapper class so they can be distinguished). - O(1) - - - - Get the head of the queue, without removing it (use TryDequeue() for that). - Useful for multi-threading, where the queue may become empty between calls to Contains() and First - Returns true if successful, false otherwise - O(1) - - - - Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and sets it to first. - Useful for multi-threading, where the queue may become empty between calls to Contains() and Dequeue() - Returns true if successful; false if queue was empty - O(log n) - - - - - Attempts to remove an item from the queue. The item does not need to be the head of the queue. - Useful for multi-threading, where the queue may become empty between calls to Contains() and Remove() - Returns true if the item was successfully removed, false if it wasn't in the queue. - If multiple copies of the item are enqueued, only the first one is removed. - O(log n) - - - - - Call this method to change the priority of an item. - Useful for multi-threading, where the queue may become empty between calls to Contains() and UpdatePriority() - If the item is enqueued multiple times, only the first one will be updated. - (If your requirements are complex enough that you need to enqueue the same item multiple times - and be able - to update all of them, please wrap your items in a wrapper class so they can be distinguished). - Returns true if the item priority was updated, false otherwise. - O(log n) - - - - - Attempt to get the priority of the given item. - Useful for multi-threading, where the queue may become empty between calls to Contains() and GetPriority() - If the item is enqueued multiple times, only the priority of the first will be returned. - (If your requirements are complex enough that you need to enqueue the same item multiple times - and be able - to query all their priorities, please wrap your items in a wrapper class so they can be distinguished). - Returns true if the item was found in the queue, false otherwise - O(1) - - - - - A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of being slightly slower than - FastPriorityQueue - This class is kept here for backwards compatibility. It's recommended you use SimplePriorityQueue<TItem, TPriority> - - The type to enqueue - - - - Instantiate a new Priority Queue - - - - - Instantiate a new Priority Queue - - The comparer used to compare priority values. Defaults to Comparer<float>.default - - - - Instantiate a new Priority Queue - - The comparison function to use to compare priority values - - - \ No newline at end of file + + + + + Priority Queue + + + + + A copy of StablePriorityQueue which also has generic priority-type + + The values in the queue. Must extend the GenericPriorityQueue class + The priority-type. Must extend IComparable<TPriority> + + + + Instantiate a new Priority Queue + + + The max nodes ever allowed to be enqueued (going over this will cause undefined + behavior) + + + + + Instantiate a new Priority Queue + + + The max nodes ever allowed to be enqueued (going over this will cause undefined + behavior) + + The comparer used to compare TPriority values. + + + + Instantiate a new Priority Queue + + + The max nodes ever allowed to be enqueued (going over this will cause undefined + behavior) + + The comparison function to use to compare TPriority values + + + + Returns the number of nodes in the queue. + O(1) + + + + + Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this + number (ie. once Count == MaxSize), + attempting to enqueue another item will cause undefined behavior. O(1) + + + + + Removes every node from the queue. + O(n) (So, don't do this often!) + + + + + Returns (in O(1)!) whether the given node is in the queue. O(1) + + + + + Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by + first-in-first-out. + If the queue is full, the result is undefined. + If the node is already enqueued, the result is undefined. + O(log n) + + + + + Returns true if 'higher' has higher priority than 'lower', false otherwise. + Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + + + + + Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and + returns it. + If queue is empty, result is undefined + O(log n) + + + + + Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + Attempting to decrease the queue size to a size too small to hold the existing nodes results in + undefined behavior + O(n) + + + + + Returns the head of the queue, without removing it (use Dequeue() for that). + If the queue is empty, behavior is undefined. + O(1) + + + + + This method must be called on a node every time its priority changes while it is in the queue. + Forgetting to call this method will result in a corrupted queue! + Calling this method on a node not in the queue results in undefined behavior + O(log n) + + + + + Removes a node from the queue. The node does not need to be the head of the queue. + If the node is not in the queue, the result is undefined. If unsure, check Contains() first + O(log n) + + + + + Should not be called in production code. + Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + + + + + The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, + in the node's constructor). + Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead + + + + + Represents the current position in the queue + + + + + Represents the order the node was inserted in + + + + + A helper-interface only needed to make writing unit tests a bit easier (hence the 'internal' access + modifier) + + + + + Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + Attempting to decrease the queue size to a size too small to hold the existing nodes results in + undefined behavior + + + + + Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this + number (ie. once Count == MaxSize), + attempting to enqueue another item will cause undefined behavior. + + + + + A copy of FastPriorityQueue which is also stable - that is, when two nodes are enqueued with the same + priority, they + are always dequeued in the same order. + See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more + information + + The values in the queue. Must extend the StablePriorityQueueNode class + + + + Instantiate a new Priority Queue + + + The max nodes ever allowed to be enqueued (going over this will cause undefined + behavior) + + + + + Returns the number of nodes in the queue. + O(1) + + + + + Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this + number (ie. once Count == MaxSize), + attempting to enqueue another item will cause undefined behavior. O(1) + + + + + Removes every node from the queue. + O(n) (So, don't do this often!) + + + + + Returns (in O(1)!) whether the given node is in the queue. O(1) + + + + + Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by + first-in-first-out. + If the queue is full, the result is undefined. + If the node is already enqueued, the result is undefined. + O(log n) + + + + + Returns true if 'higher' has higher priority than 'lower', false otherwise. + Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + + + + + Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and + returns it. + If queue is empty, result is undefined + O(log n) + + + + + Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + Attempting to decrease the queue size to a size too small to hold the existing nodes results in + undefined behavior + O(n) + + + + + Returns the head of the queue, without removing it (use Dequeue() for that). + If the queue is empty, behavior is undefined. + O(1) + + + + + This method must be called on a node every time its priority changes while it is in the queue. + Forgetting to call this method will result in a corrupted queue! + Calling this method on a node not in the queue results in undefined behavior + O(log n) + + + + + Removes a node from the queue. The node does not need to be the head of the queue. + If the node is not in the queue, the result is undefined. If unsure, check Contains() first + O(log n) + + + + + Should not be called in production code. + Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + + + + + An implementation of a min-Priority Queue using a heap. Has O(1) .Contains()! + See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more + information + + The values in the queue. Must extend the FastPriorityQueueNode class + + + + Instantiate a new Priority Queue + + + The max nodes ever allowed to be enqueued (going over this will cause undefined + behavior) + + + + + Returns the number of nodes in the queue. + O(1) + + + + + Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this + number (ie. once Count == MaxSize), + attempting to enqueue another item will cause undefined behavior. O(1) + + + + + Removes every node from the queue. + O(n) (So, don't do this often!) + + + + + Returns (in O(1)!) whether the given node is in the queue. O(1) + + + + + Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by + first-in-first-out. + If the queue is full, the result is undefined. + If the node is already enqueued, the result is undefined. + O(log n) + + + + + Returns true if 'higher' has higher priority than 'lower', false otherwise. + Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + + + + + Removes the head of the queue and returns it. + If queue is empty, result is undefined + O(log n) + + + + + Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + Attempting to decrease the queue size to a size too small to hold the existing nodes results in + undefined behavior + O(n) + + + + + Returns the head of the queue, without removing it (use Dequeue() for that). + If the queue is empty, behavior is undefined. + O(1) + + + + + This method must be called on a node every time its priority changes while it is in the queue. + Forgetting to call this method will result in a corrupted queue! + Calling this method on a node not in the queue results in undefined behavior + O(log n) + + + + + Removes a node from the queue. The node does not need to be the head of the queue. + If the node is not in the queue, the result is undefined. If unsure, check Contains() first + O(log n) + + + + + Should not be called in production code. + Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + + + + + Represents the order the node was inserted in + + + + + The IPriorityQueue interface. This is mainly here for purists, and in case I decide to add more + implementations later. + For speed purposes, it is actually recommended that you *don't* access the priority queue through this + interface, since the JIT can + (theoretically?) optimize method calls from concrete-types slightly better. + + + + + Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by + first-in-first-out. + See implementation for how duplicates are handled. + + + + + Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and + returns it. + + + + + Removes every node from the queue. + + + + + Returns whether the given node is in the queue. + + + + + Removes a node from the queue. The node does not need to be the head of the queue. + + + + + Call this method to change the priority of a node. + + + + + Returns the head of the queue, without removing it (use Dequeue() for that). + + + + + Returns the number of nodes in the queue. + + + + + The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, + in the node's constructor). + Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead + + + + + Represents the current position in the queue + + + + + A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of + being slightly slower than + FastPriorityQueue + Methods tagged as O(1) or O(log n) are assuming there are no duplicates. Duplicates may increase the + algorithmic complexity. + + The type to enqueue + + The priority-type to use for nodes. Must extend + IComparable<TPriority> + + + + + Instantiate a new Priority Queue + + + + + Instantiate a new Priority Queue + + The comparer used to compare TPriority values. Defaults to Comparer<TPriority>.default + + + + Instantiate a new Priority Queue + + The comparison function to use to compare TPriority values + + + + Given an item of type T, returns the exist SimpleNode in the queue + + + + + Adds an item to the Node-cache to allow for many methods to be O(1) or O(log n) + + + + + Removes an item to the Node-cache to allow for many methods to be O(1) or O(log n) (assuming no + duplicates) + + + + + Returns the number of nodes in the queue. + O(1) + + + + + Returns the head of the queue, without removing it (use Dequeue() for that). + Throws an exception when the queue is empty. + O(1) + + + + + Removes every node from the queue. + O(n) + + + + + Returns whether the given item is in the queue. + O(1) + + + + + Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and + returns it. + If queue is empty, throws an exception + O(log n) + + + + + Enqueue the item with the given priority, without calling lock(_queue) + + + + + Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by + first-in-first-out. + This queue automatically resizes itself, so there's no concern of the queue becoming 'full'. + Duplicates and null-values are allowed. + O(log n) + + + + + Enqueue a node to the priority queue if it doesn't already exist. Lower values are placed in front. + Ties are broken by first-in-first-out. + This queue automatically resizes itself, so there's no concern of the queue becoming 'full'. Null + values are allowed. + Returns true if the node was successfully enqueued; false if it already exists. + O(log n) + + + + + Removes an item from the queue. The item does not need to be the head of the queue. + If the item is not in the queue, an exception is thrown. If unsure, check Contains() first. + If multiple copies of the item are enqueued, only the first one is removed. + O(log n) + + + + + Call this method to change the priority of an item. + Calling this method on a item not in the queue will throw an exception. + If the item is enqueued multiple times, only the first one will be updated. + (If your requirements are complex enough that you need to enqueue the same item multiple times + and + be able + to update all of them, please wrap your items in a wrapper class so they can be distinguished). + O(log n) + + + + + Returns the priority of the given item. + Calling this method on a item not in the queue will throw an exception. + If the item is enqueued multiple times, only the priority of the first will be returned. + (If your requirements are complex enough that you need to enqueue the same item multiple times + and + be able + to query all their priorities, please wrap your items in a wrapper class so they can be + distinguished). + O(1) + + + + Get the head of the queue, without removing it (use TryDequeue() for that). + Useful for multi-threading, where the queue may become empty between calls to Contains() and First + Returns true if successful, false otherwise + O(1) + + + + Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and + sets it to first. + Useful for multi-threading, where the queue may become empty between calls to Contains() and Dequeue() + Returns true if successful; false if queue was empty + O(log n) + + + + + Attempts to remove an item from the queue. The item does not need to be the head of the queue. + Useful for multi-threading, where the queue may become empty between calls to Contains() and Remove() + Returns true if the item was successfully removed, false if it wasn't in the queue. + If multiple copies of the item are enqueued, only the first one is removed. + O(log n) + + + + + Call this method to change the priority of an item. + Useful for multi-threading, where the queue may become empty between calls to Contains() and + UpdatePriority() + If the item is enqueued multiple times, only the first one will be updated. + (If your requirements are complex enough that you need to enqueue the same item multiple times + and + be able + to update all of them, please wrap your items in a wrapper class so they can be distinguished). + Returns true if the item priority was updated, false otherwise. + O(log n) + + + + + Attempt to get the priority of the given item. + Useful for multi-threading, where the queue may become empty between calls to Contains() and + GetPriority() + If the item is enqueued multiple times, only the priority of the first will be returned. + (If your requirements are complex enough that you need to enqueue the same item multiple times + and + be able + to query all their priorities, please wrap your items in a wrapper class so they can be + distinguished). + Returns true if the item was found in the queue, false otherwise + O(1) + + + + + A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of + being slightly slower than + FastPriorityQueue + This class is kept here for backwards compatibility. It's recommended you use SimplePriorityQueue<TItem, + TPriority> + + The type to enqueue + + + + Instantiate a new Priority Queue + + + + + Instantiate a new Priority Queue + + The comparer used to compare priority values. Defaults to Comparer<float>.default + + + + Instantiate a new Priority Queue + + The comparison function to use to compare priority values + + + diff --git a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml.meta b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml.meta similarity index 75% rename from Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml.meta rename to Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml.meta index a763245f6..6b1401b99 100644 --- a/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml.meta +++ b/Libraries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7d9fff55274ac464188deece12ab7e4a +guid: 0bdeb43b7e4bb9686a8e54567f5e4068 TextScriptImporter: externalObjects: {} userData: diff --git a/README.md b/README.md index 2f3c5b7a8..c79146e68 100644 --- a/README.md +++ b/README.md @@ -1,140 +1,173 @@ -![neodroid](.github/images/header.png) - -# Droid - -Droid is a unity package that enables prototyping reinforcement learning environments within the [Unity](https://unity3d.com/) engine and communication to the [Neo](https://github.com/sintefneodroid/neo) counterpart of the [Neodroid](https://github.com/sintefneodroid) platform. - - - - - - - - - - -
- - Build Status - - - - Coverage Status - - - - GitHub Issues - - - - GitHub Forks - - - - GitHub Stars - - - - GitHub License - -
- -

- - unity - - - csharp - - - netmq - -

-

- - flatbuffers - -

- -This project has similarities with Unity's own project [Unity Machine Learning Agents](https://github.com/Unity-Technologies/ml-agents). Most of the efforts done in this project were made prior to their announcement, [Introducing: Unity Machine Learning Agents](https://blogs.unity3d.com/2017/09/19/introducing-unity-machine-learning-agents/), when the authors was in need of a capable tool. Newcomers wanting a more supported experience may wish to use the [Unity Machine Learning Agents](https://github.com/Unity-Technologies/ml-agents) project instead. - -The entire Neodroid platform serves as a tool for academic research specific to the authors interests, hence explaining the existence and future direction of this project. - -## Notable Features - -- In-editor simulations for ease of debugging -- Connect multiple external agents (i.e. multiple client computers) -- Blazing fast serialisation -- Modular unity style component construction of scenes (enables rapid prototyping of complex -environments and ease of integration with existing projects) -- Support reverse curriculum generation inherently -(Ability to reinitialise any previous seen state or configure new ones) - -## Usage - -- Download the newest Droid.unitypackage from [releases](https://github.com/sintefneodroid/droid/releases) and import into your Unity project. - -***Or*** - -- Acquire the [Droid (Temporarily down)](http://u3d.as/14cC) package from the built-in asset store of the Unity Editor. - -## Demo - -![manipulator](.github/images/animated.gif) - -## Repository Structure ---- - - sintefneodroid/droid # This repository - │ - ├── docs - │ ├── source # Documentation files - │ │ - │ ├── make.bat # Compile docs - │ └── Makefile # ^ - │ - ├── Examples # Prebuilt Neodroid environments - │ ├── Assets # Model checkpoints - │ │ ├── Neodroid # Symlinked folder to top-level Neodroid folder - │ │ ├── SceneAssets # All scene-specific assets for the prebuilt environments - │ │ └── Scenes # All prebuilt environment scenes - │ │ - │ └── Examples.sln # C# project file - │ - ├── .github # Images and such for this README - │ - ├── Neodroid # The Neodroid unity package - │ ├── Prototyping # All classes for quick prototyping of observations and actions - │ │ ├── Actors - │ │ ├── Evaluation - │ │ ├── Observers - │ │ ├── Displayers - │ │ ├── Configurables - │ │ └── Motors - │ │ - │ ├── Environments # Classes for encapsulating all Neodroid environments - │ ├── Managers # Classes for managing the simulation of Neodroid environments - │ └── Utilities # Lots of helper functionalities - │ - ├── LICENSE # License file (Important but boring) - └── README.md # The top-level README ---- - -# Citation - -For citation you may use the following bibtex entry: -```` -@misc{neodroid, - author = {Heider, Christian}, - title = {Neodroid Platform}, - year = {2018}, - publisher = {GitHub}, - journal = {GitHub repository}, - howpublished = {\url{https://github.com/sintefneodroid}}, -} -```` -# Other Components Of The Neodroid Platform -- [agent](https://github.com/sintefneodroid/agent) -- [neo](https://github.com/sintefneodroid/neo) +![neodroid](.github/images/header.png) + +# Droid + +Droid is a unity package that enables prototyping reinforcement learning environments within the [Unity](https://unity3d.com/) engine and communication to the [Neo](https://github.com/sintefneodroid/neo) counterpart of the [Neodroid](https://github.com/sintefneodroid) platform. + +--- + +_[Neodroid](https://github.com/sintefneodroid) is developed with support from Research Council of Norway Grant #262900. ([https://www.forskningsradet.no/prosjektbanken/#/project/NFR/262900](https://www.forskningsradet.no/prosjektbanken/#/project/NFR/262900))_ + +--- + + + + + + + + + + + +
+ + Build Status + + + + Coverage Status + + + + GitHub Issues + + + + GitHub Forks + + + + GitHub Stars + + + + GitHub License + +
+ +

+ + unity + + + csharp + + + netmq + +

+

+ + flatbuffers + +

+ +This project has similarities with Unity's own project [Unity Machine Learning Agents](https://github.com/Unity-Technologies/ml-agents). Most of the efforts done in this project were made prior to their announcement, [Introducing: Unity Machine Learning Agents](https://blogs.unity3d.com/2017/09/19/introducing-unity-machine-learning-agents/), when the authors was in need of a capable tool. Newcomers wanting a more supported experience may wish to use the [Unity Machine Learning Agents](https://github.com/Unity-Technologies/ml-agents) project instead. + +The entire Neodroid platform serves as a tool for academic research specific to the authors interests, hence explaining the existence and future direction of this project. + +## Notable Features + +- In-editor simulations for ease of debugging +- Connect multiple external agents (i.e. multiple client computers) +- Blazing fast serialisation +- Modular unity style component construction of scenes (enables rapid prototyping of complex +environments and ease of integration with existing projects) +- Support reverse curriculum generation inherently +(Ability to reinitialise any previous seen state or configure new ones) + +## Usage + +- Edit your Unity projects "Packages/manifest.json" to include the string + `"com.neodroid.droid": "https://github.com/sintefneodroid/droid.git"}`. + + Example `manifest.json` + ```` + { + "dependencies": { + "com.unity.package-manager-ui": "0.0.0-builtin", + ... + "com.neodroid.droid": "https://github.com/sintefneodroid/droid.git", + } + } + ```` + You can use `"com.neodroid.droid": "https://github.com/sintefneodroid/droid.git#branch"` for a specific branch. + +***Or*** + +- Download the newest Droid.unitypackage from [releases](https://github.com/sintefneodroid/droid/releases) and import into your Unity project. + +***Or*** + +- Acquire the [Droid (Temporarily down)](http://u3d.as/14cC) package from the built-in asset store of the Unity Editor. + +## Demo + +![manipulator](.github/images/animated.gif) + +### Videoes +[![Manipulator](https://img.youtube.com/vi/niYacuKt8cs/0.jpg)](https://www.youtube.com/watch?v=niYacuKt8cs) +[![Drone](https://img.youtube.com/vi/PVc5T_YIHdk/0.jpg)](https://www.youtube.com/watch?v=PVc5T_YIHdk) +[![Drone2](https://img.youtube.com/vi/c6IDgzMhGNk/0.jpg)](https://www.youtube.com/watch?v=c6IDgzMhGNk) +[![Domain Randomization](https://img.youtube.com/vi/d13xndC4BAk/0.jpg)](https://www.youtube.com/watch?v=d13xndC4BAk) + +## Repository Structure +--- + + sintefneodroid/droid # This repository + │ + ├── Samples # Prebuilt Neodroid environments + │ └── MultiArmedBandit # Sample Project + │ + ├── Editor # Editor Implementation + │ ├── GameObjects + │ ├── ScriptableObjects + │ ├── Windows + │ ├── Resources + │ └── Utilies + │ + ├── Runtime # Runtime Implementation + │ ├── Prototyping # All classes for quick prototyping of observations and actions + │ │ ├── Actors + │ │ ├── Evaluation + │ │ ├── Observers + │ │ ├── Displayers + │ │ ├── Configurables + │ │ └── Motors + │ │ + │ ├── Environments # Classes for encapsulating all Neodroid environments + │ ├── Managers # Classes for managing the simulation of Neodroid environments + │ └── Utilities # Lots of helper functionalities + │ + ├── Documentation # Unity Package Documentation + │ + ├── Gizmos # Icons + │ + ├── Tests # Tests + │ + ├── .github # Images and such for this README + │ + ├── LICENSE.md # License file (Important but boring) + ├── README.md # The top-level README + └── TUTORIAL.md # Very quick tutorial to get started +--- + +# Citation + +For citation you may use the following bibtex entry: +```` +@misc{neodroid, + author = {Heider, Christian}, + title = {Neodroid Platform}, + year = {2018}, + publisher = {GitHub}, + journal = {GitHub repository}, + howpublished = {\url{https://github.com/sintefneodroid}}, +} +```` +# Other Components Of The Neodroid Platform +- [agent](https://github.com/sintefneodroid/agent) +- [neo](https://github.com/sintefneodroid/neo) diff --git a/Runtime/.idea/.idea.Neodroid/.idea/codeStyles/Project.xml b/Runtime/.idea/.idea.Neodroid/.idea/codeStyles/Project.xml index 0211a90fa..6d799a050 100644 --- a/Runtime/.idea/.idea.Neodroid/.idea/codeStyles/Project.xml +++ b/Runtime/.idea/.idea.Neodroid/.idea/codeStyles/Project.xml @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Runtime/.idea/.idea.Neodroid/.idea/contentModel.xml b/Runtime/.idea/.idea.Neodroid/.idea/contentModel.xml index 5828e1619..ea7c6031d 100644 --- a/Runtime/.idea/.idea.Neodroid/.idea/contentModel.xml +++ b/Runtime/.idea/.idea.Neodroid/.idea/contentModel.xml @@ -1,855 +1,855 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Runtime/.idea/.idea.Neodroid/.idea/dbnavigator.xml b/Runtime/.idea/.idea.Neodroid/.idea/dbnavigator.xml index cc2c7551c..49729ef4a 100644 --- a/Runtime/.idea/.idea.Neodroid/.idea/dbnavigator.xml +++ b/Runtime/.idea/.idea.Neodroid/.idea/dbnavigator.xml @@ -1,453 +1,453 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Runtime/.idea/.idea.Neodroid/.idea/indexLayout.xml b/Runtime/.idea/.idea.Neodroid/.idea/indexLayout.xml index 2ea38ec40..f1feadf0e 100644 --- a/Runtime/.idea/.idea.Neodroid/.idea/indexLayout.xml +++ b/Runtime/.idea/.idea.Neodroid/.idea/indexLayout.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/Runtime/.idea/.idea.Neodroid/.idea/inspectionProfiles/Project_Default.xml b/Runtime/.idea/.idea.Neodroid/.idea/inspectionProfiles/Project_Default.xml index 5b992e805..61c3060b5 100644 --- a/Runtime/.idea/.idea.Neodroid/.idea/inspectionProfiles/Project_Default.xml +++ b/Runtime/.idea/.idea.Neodroid/.idea/inspectionProfiles/Project_Default.xml @@ -1,36 +1,36 @@ - - - + + + \ No newline at end of file diff --git a/Runtime/.idea/.idea.Neodroid/.idea/modules.xml b/Runtime/.idea/.idea.Neodroid/.idea/modules.xml index 6ed1378e5..5ef4abcc0 100644 --- a/Runtime/.idea/.idea.Neodroid/.idea/modules.xml +++ b/Runtime/.idea/.idea.Neodroid/.idea/modules.xml @@ -1,8 +1,8 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/Runtime/.idea/.idea.Neodroid/.idea/vcs.xml b/Runtime/.idea/.idea.Neodroid/.idea/vcs.xml index 2e3f6920d..6c0b86358 100644 --- a/Runtime/.idea/.idea.Neodroid/.idea/vcs.xml +++ b/Runtime/.idea/.idea.Neodroid/.idea/vcs.xml @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/Runtime/.idea/.idea.Neodroid/.idea/workspace.xml b/Runtime/.idea/.idea.Neodroid/.idea/workspace.xml index a3594161c..0ce7659ae 100644 --- a/Runtime/.idea/.idea.Neodroid/.idea/workspace.xml +++ b/Runtime/.idea/.idea.Neodroid/.idea/workspace.xml @@ -1,439 +1,439 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - DEFINITION_ORDER - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + 1522074927137 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Runtime/.idea/.idea.Neodroid/riderModule.iml b/Runtime/.idea/.idea.Neodroid/riderModule.iml index cc7f540fb..1a4e0d95f 100644 --- a/Runtime/.idea/.idea.Neodroid/riderModule.iml +++ b/Runtime/.idea/.idea.Neodroid/riderModule.iml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/Runtime/EcsPrototyping.meta b/Runtime/EcsPrototyping.meta new file mode 100644 index 000000000..1338e538a --- /dev/null +++ b/Runtime/EcsPrototyping.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a2af1d79dfb04fc6bfa0443edaefd5c0 +timeCreated: 1549534443 \ No newline at end of file diff --git a/Runtime/EcsPrototyping/Components.meta b/Runtime/EcsPrototyping/Components.meta new file mode 100644 index 000000000..69808dbd3 --- /dev/null +++ b/Runtime/EcsPrototyping/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0cb8f6f5b6dad25fb578d3d2548db79 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/EcsPrototyping/Components/Sensors.meta b/Runtime/EcsPrototyping/Components/Sensors.meta new file mode 100644 index 000000000..352afd7ac --- /dev/null +++ b/Runtime/EcsPrototyping/Components/Sensors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3881782740715e10386e9301aa00f193 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/EcsPrototyping/Components/Sensors/CameraSensorComponent.cs b/Runtime/EcsPrototyping/Components/Sensors/CameraSensorComponent.cs new file mode 100644 index 000000000..b5845512e --- /dev/null +++ b/Runtime/EcsPrototyping/Components/Sensors/CameraSensorComponent.cs @@ -0,0 +1,18 @@ +#if ECS_EXISTS +using System; +using Unity.Entities; + +namespace droid.Runtime.EcsPrototyping.Components.Sensors +{ +// Serializable attribute is for editor support. + [Serializable] + public struct HelloRotationSpeed : IComponentData + { + public float rotationalMultiplier; + } + +// ComponentDataWrapper is for creating a Monobehaviour representation of this component (for editor support). + [UnityEngine.DisallowMultipleComponent] + public class HelloRotationSpeedComponent : ComponentDataWrapper { } +} +#endif diff --git a/Runtime/EcsPrototyping/Components/Sensors/CameraSensorComponent.cs.meta b/Runtime/EcsPrototyping/Components/Sensors/CameraSensorComponent.cs.meta new file mode 100644 index 000000000..94e4bb8a2 --- /dev/null +++ b/Runtime/EcsPrototyping/Components/Sensors/CameraSensorComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4f1df11bb417483e8b159baf536e8110 +timeCreated: 1549534475 \ No newline at end of file diff --git a/Runtime/Prototyping/Displayers/Experimental/ECS.meta b/Runtime/EcsPrototyping/ECS.meta similarity index 100% rename from Runtime/Prototyping/Displayers/Experimental/ECS.meta rename to Runtime/EcsPrototyping/ECS.meta diff --git a/Runtime/Prototyping/Displayers/Experimental/ECS/ECSDisplayer.cs b/Runtime/EcsPrototyping/ECS/ECSDisplayer.cs similarity index 99% rename from Runtime/Prototyping/Displayers/Experimental/ECS/ECSDisplayer.cs rename to Runtime/EcsPrototyping/ECS/ECSDisplayer.cs index d94ec21b4..6607c8a87 100644 --- a/Runtime/Prototyping/Displayers/Experimental/ECS/ECSDisplayer.cs +++ b/Runtime/EcsPrototyping/ECS/ECSDisplayer.cs @@ -39,4 +39,4 @@ protected virtual void RegisterComponent() { public abstract void Display(string value); } } -#endif \ No newline at end of file +#endif diff --git a/Runtime/Prototyping/Displayers/Experimental/ECS/ECSDisplayer.cs.meta b/Runtime/EcsPrototyping/ECS/ECSDisplayer.cs.meta similarity index 100% rename from Runtime/Prototyping/Displayers/Experimental/ECS/ECSDisplayer.cs.meta rename to Runtime/EcsPrototyping/ECS/ECSDisplayer.cs.meta diff --git a/Runtime/Prototyping/Displayers/Experimental/ECS/ECSScatterPlotDisplayer.cs b/Runtime/EcsPrototyping/ECS/ECSScatterPlotDisplayer.cs similarity index 99% rename from Runtime/Prototyping/Displayers/Experimental/ECS/ECSScatterPlotDisplayer.cs rename to Runtime/EcsPrototyping/ECS/ECSScatterPlotDisplayer.cs index 5db3e1e5f..92e35f52d 100644 --- a/Runtime/Prototyping/Displayers/Experimental/ECS/ECSScatterPlotDisplayer.cs +++ b/Runtime/EcsPrototyping/ECS/ECSScatterPlotDisplayer.cs @@ -161,4 +161,4 @@ public void ScatterPlot(ValuePoint[] points) { } } } -#endif \ No newline at end of file +#endif diff --git a/Runtime/Prototyping/Displayers/Experimental/ECS/ECSScatterPlotDisplayer.cs.meta b/Runtime/EcsPrototyping/ECS/ECSScatterPlotDisplayer.cs.meta similarity index 100% rename from Runtime/Prototyping/Displayers/Experimental/ECS/ECSScatterPlotDisplayer.cs.meta rename to Runtime/EcsPrototyping/ECS/ECSScatterPlotDisplayer.cs.meta diff --git a/Runtime/EcsPrototyping/HelloRotationSpeedComponent.cs b/Runtime/EcsPrototyping/HelloRotationSpeedComponent.cs new file mode 100644 index 000000000..1a9cf8dec --- /dev/null +++ b/Runtime/EcsPrototyping/HelloRotationSpeedComponent.cs @@ -0,0 +1,19 @@ +#if ECS_EXISTS +using System; +using Unity.Entities; +using UnityEngine.Serialization; + +namespace droid.Runtime.EcsPrototyping +{ +// Serializable attribute is for editor support. + [Serializable] + public struct HelloRotationSpeed : IComponentData + { + public float rotationalMultiplier; + } + +// ComponentDataWrapper is for creating a Monobehaviour representation of this component (for editor support). + [UnityEngine.DisallowMultipleComponent] + public class HelloRotationSpeedComponent : ComponentDataWrapper { } +} +#endif diff --git a/Runtime/EcsPrototyping/HelloRotationSpeedComponent.cs.meta b/Runtime/EcsPrototyping/HelloRotationSpeedComponent.cs.meta new file mode 100644 index 000000000..f7710b8b6 --- /dev/null +++ b/Runtime/EcsPrototyping/HelloRotationSpeedComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43d1136dd3b1ecaa4b88b76e9799114c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/EcsPrototyping/HelloRotationSpeedSystem.cs b/Runtime/EcsPrototyping/HelloRotationSpeedSystem.cs new file mode 100644 index 000000000..0e7971982 --- /dev/null +++ b/Runtime/EcsPrototyping/HelloRotationSpeedSystem.cs @@ -0,0 +1,42 @@ +#if ECS_EXISTS +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.Jobs; +using Unity.Mathematics; +using Unity.Transforms; +using UnityEngine; + +// This system updates all entities in the scene with both a HelloRotationSpeed and Rotation component. +namespace droid.Runtime.EcsPrototyping +{ + public class HelloRotationSpeedSystem : JobComponentSystem + { + // Use the [BurstCompile] attribute to compile a job with Burst. You may see significant speed ups, so try it! + [BurstCompile] + struct HelloRotationSpeedJob : IJobProcessComponentData + { + // The [ReadOnly] attribute tells the job scheduler that this job cannot write to dT. + [ReadOnly] public float DeltaT; + + // rotation is read/write in this job + public void Execute(ref Rotation rotation, [ReadOnly] ref HelloRotationSpeed rotSpeed) + { + // Rotate something about its up vector at the speed given by HelloRotationSpeed. + rotation.Value = + math.mul(math.normalize(rotation.Value), quaternion.AxisAngle(math.up(), rotSpeed.rotationalMultiplier * this.DeltaT)); + } + } + + // OnUpdate runs on the main thread. + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new HelloRotationSpeedJob(){ + DeltaT = Time.deltaTime + }; + + return job.Schedule(this, inputDependencies); + } + } +} +#endif diff --git a/Runtime/EcsPrototyping/HelloRotationSpeedSystem.cs.meta b/Runtime/EcsPrototyping/HelloRotationSpeedSystem.cs.meta new file mode 100644 index 000000000..3a91ec1e9 --- /dev/null +++ b/Runtime/EcsPrototyping/HelloRotationSpeedSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 274e79a9ee31a5049bf0c5a7a5b8ec23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/EcsPrototyping/Systems.meta b/Runtime/EcsPrototyping/Systems.meta new file mode 100644 index 000000000..8a4a23170 --- /dev/null +++ b/Runtime/EcsPrototyping/Systems.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1770d026b5c38ebc79f34694b7c83b59 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/EcsPrototyping/Systems/CamersSensorSystem.cs b/Runtime/EcsPrototyping/Systems/CamersSensorSystem.cs new file mode 100644 index 000000000..23fae19b6 --- /dev/null +++ b/Runtime/EcsPrototyping/Systems/CamersSensorSystem.cs @@ -0,0 +1,43 @@ +#if ECS_EXISTS +using droid.Runtime.EcsPrototyping.Components.Sensors; +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.Jobs; +using Unity.Mathematics; +using Unity.Transforms; +using UnityEngine; + +// This system updates all entities in the scene with both a HelloRotationSpeed and Rotation component. +namespace droid.Runtime.EcsPrototyping.Systems +{ + public class HelloRotationSpeedSystem : JobComponentSystem + { + // Use the [BurstCompile] attribute to compile a job with Burst. You may see significant speed ups, so try it! + [BurstCompile] + struct HelloRotationSpeedJob : IJobProcessComponentData + { + // The [ReadOnly] attribute tells the job scheduler that this job cannot write to dT. + [ReadOnly] public float DeltaT; + + // rotation is read/write in this job + public void Execute(ref Rotation rotation, [ReadOnly] ref HelloRotationSpeed rotSpeed) + { + // Rotate something about its up vector at the speed given by HelloRotationSpeed. + rotation.Value = + math.mul(math.normalize(rotation.Value), quaternion.AxisAngle(math.up(), rotSpeed.rotationalMultiplier * this.DeltaT)); + } + } + + // OnUpdate runs on the main thread. + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new HelloRotationSpeedJob(){ + DeltaT = Time.deltaTime + }; + + return job.Schedule(this, inputDependencies); + } + } +} +#endif diff --git a/Runtime/EcsPrototyping/Systems/CamersSensorSystem.cs.meta b/Runtime/EcsPrototyping/Systems/CamersSensorSystem.cs.meta new file mode 100644 index 000000000..d9cbfa9b9 --- /dev/null +++ b/Runtime/EcsPrototyping/Systems/CamersSensorSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a34a95c58a614b57a5915720999ea1d6 +timeCreated: 1549534476 \ No newline at end of file diff --git a/Runtime/Utilities/Enums.meta b/Runtime/Enums.meta similarity index 77% rename from Runtime/Utilities/Enums.meta rename to Runtime/Enums.meta index 3b8b018a3..84a3d88d5 100644 --- a/Runtime/Utilities/Enums.meta +++ b/Runtime/Enums.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 61c96163e9d164fa4bbfd53b43457489 +guid: f2d984bb34f22a289a492e5c72f07b0c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/Utilities/Enums/Axis.cs b/Runtime/Enums/Axis.cs similarity index 78% rename from Runtime/Utilities/Enums/Axis.cs rename to Runtime/Enums/Axis.cs index 1b555edbf..8a1f52276 100644 --- a/Runtime/Utilities/Enums/Axis.cs +++ b/Runtime/Enums/Axis.cs @@ -1,51 +1,41 @@ -namespace Neodroid.Runtime.Utilities.Enums { +namespace droid.Runtime.Enums { /// - /// /// public enum Axis { /// - /// /// X_, /// - /// /// Y_, /// - /// /// Z_, /// - /// /// Rot_x_, /// - /// /// Rot_y_, /// - /// /// Rot_z_, /// - /// /// Dir_x_, /// - /// /// Dir_y_, /// - /// /// Dir_z_ } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Enums/Axis.cs.meta b/Runtime/Enums/Axis.cs.meta similarity index 100% rename from Runtime/Utilities/Enums/Axis.cs.meta rename to Runtime/Enums/Axis.cs.meta diff --git a/Runtime/Enums/BoundingBox.meta b/Runtime/Enums/BoundingBox.meta new file mode 100644 index 000000000..473b64b8c --- /dev/null +++ b/Runtime/Enums/BoundingBox.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b3504b931a113d4b964ba3e6b7bccfc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Enums/BoundingBox/BasedOn.cs b/Runtime/Enums/BoundingBox/BasedOn.cs new file mode 100644 index 000000000..dce48ef63 --- /dev/null +++ b/Runtime/Enums/BoundingBox/BasedOn.cs @@ -0,0 +1,13 @@ +namespace droid.Runtime.Enums.BoundingBox { + public enum BasedOn { + /// + /// Base the bounding box on colliders + /// + Collider_ = 0, + + /// + /// Base the bounding box on geometries + /// + Geometry_ = 1 + } +} diff --git a/Runtime/Enums/BoundingBox/BasedOn.cs.meta b/Runtime/Enums/BoundingBox/BasedOn.cs.meta new file mode 100644 index 000000000..c86dbbe70 --- /dev/null +++ b/Runtime/Enums/BoundingBox/BasedOn.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 499e9cd4a8304b69b414cac5400f9d94 +timeCreated: 1552905710 \ No newline at end of file diff --git a/Runtime/Enums/BoundingBox/BoundingBoxOrientation.cs b/Runtime/Enums/BoundingBox/BoundingBoxOrientation.cs new file mode 100644 index 000000000..a1adb2183 --- /dev/null +++ b/Runtime/Enums/BoundingBox/BoundingBoxOrientation.cs @@ -0,0 +1,21 @@ +namespace droid.Runtime.Enums.BoundingBox { + /// + /// + /// + public enum BoundingBoxOrientation { + /// + /// + /// + Axis_aligned_ = 0, + + /// + /// + /// + Object_oriented_ = 1, + + /// + /// + /// + Camera_oriented_ = 2 + } +} diff --git a/Runtime/Enums/BoundingBox/BoundingBoxOrientation.cs.meta b/Runtime/Enums/BoundingBox/BoundingBoxOrientation.cs.meta new file mode 100644 index 000000000..b061a68c1 --- /dev/null +++ b/Runtime/Enums/BoundingBox/BoundingBoxOrientation.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a35b486c8aa245719db2d1dc3fcbf52f +timeCreated: 1552905731 \ No newline at end of file diff --git a/Runtime/Enums/CoordinateSpace.cs b/Runtime/Enums/CoordinateSpace.cs new file mode 100644 index 000000000..134558f9b --- /dev/null +++ b/Runtime/Enums/CoordinateSpace.cs @@ -0,0 +1,17 @@ +namespace droid.Runtime.Enums { + /// + /// + public enum CoordinateSpace { + /// + /// + Global_, + + /// + /// + Local_, + + /// + /// + Environment_ + } +} diff --git a/Runtime/Utilities/Enums/CoordinateSystem.cs.meta b/Runtime/Enums/CoordinateSpace.cs.meta similarity index 100% rename from Runtime/Utilities/Enums/CoordinateSystem.cs.meta rename to Runtime/Enums/CoordinateSpace.cs.meta diff --git a/Runtime/Utilities/Enums/DimensionCombination.cs b/Runtime/Enums/DimensionCombination.cs similarity index 79% rename from Runtime/Utilities/Enums/DimensionCombination.cs rename to Runtime/Enums/DimensionCombination.cs index 7bdb36d01..64f85e92d 100644 --- a/Runtime/Utilities/Enums/DimensionCombination.cs +++ b/Runtime/Enums/DimensionCombination.cs @@ -1,46 +1,37 @@ -namespace Neodroid.Runtime.Utilities.Enums { +namespace droid.Runtime.Enums { /// - /// /// public enum Dimension2DCombination { /// - /// /// Xy_, /// - /// /// Xz_, /// - /// /// Yz_ } /// - /// /// public enum Dimension3DCombination { /// - /// /// Xyz_, /// - /// /// Xyw_, /// - /// /// Xzw_, /// - /// /// Yzw_ } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Enums/DimensionCombination.cs.meta b/Runtime/Enums/DimensionCombination.cs.meta similarity index 100% rename from Runtime/Utilities/Enums/DimensionCombination.cs.meta rename to Runtime/Enums/DimensionCombination.cs.meta diff --git a/Runtime/Enums/FrameFinishes.cs b/Runtime/Enums/FrameFinishes.cs new file mode 100644 index 000000000..c13696abd --- /dev/null +++ b/Runtime/Enums/FrameFinishes.cs @@ -0,0 +1,27 @@ +namespace droid.Runtime.Enums { + /// + /// Determines where in the monobehaviour cycle a frame/step is finished + /// + public enum FrameFinishes { + /// + /// When ever all scripts has run their respective updates + /// NOTE: Not working as expected, does not seem to work with physics engine. + /// + Late_update_, + + /// + /// NOTE: Not working as expected, does not seem to work with physics engine. + /// + End_of_frame_, + + /// + /// When ever the scene has been rendered + /// + On_render_image_, + + /// + /// When ever the scene has been rendered, default + /// + On_post_render_ + } +} diff --git a/Runtime/Enums/FrameFinishes.cs.meta b/Runtime/Enums/FrameFinishes.cs.meta new file mode 100644 index 000000000..0bde618d1 --- /dev/null +++ b/Runtime/Enums/FrameFinishes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fe9adc411788b5c4ae11d6cd88d6803 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Enums/Normalisation.cs b/Runtime/Enums/Normalisation.cs new file mode 100644 index 000000000..fa37d141b --- /dev/null +++ b/Runtime/Enums/Normalisation.cs @@ -0,0 +1,21 @@ +namespace droid.Runtime.Enums { + /// + /// How should spaces be normalised + /// + public enum Normalisation { + /// + /// No normalisation + /// + None_, + + /// + /// Between 0 and 1 + /// + Zero_one_, + + /// + /// Between -1 and 1 + /// + Minus_one_one_ + } +} diff --git a/Runtime/Enums/Normalisation.cs.meta b/Runtime/Enums/Normalisation.cs.meta new file mode 100644 index 000000000..b2da74c32 --- /dev/null +++ b/Runtime/Enums/Normalisation.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 82dc76be468e4b72bcda2c7de95a3d12 +timeCreated: 1568293843 \ No newline at end of file diff --git a/Runtime/Enums/RandomSamplingMode.cs b/Runtime/Enums/RandomSamplingMode.cs new file mode 100644 index 000000000..078e68d33 --- /dev/null +++ b/Runtime/Enums/RandomSamplingMode.cs @@ -0,0 +1,26 @@ +namespace droid.Runtime.Enums { + /// + /// + /// + public enum RandomSamplingMode { + /// + /// + /// + On_update_, + + /// + /// + /// + On_tick_, + + /// + /// + /// + On_reset_, + + /// + /// + /// + Disabled_ + } +} diff --git a/Runtime/Enums/RandomSamplingMode.cs.meta b/Runtime/Enums/RandomSamplingMode.cs.meta new file mode 100644 index 000000000..86b63b265 --- /dev/null +++ b/Runtime/Enums/RandomSamplingMode.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c637e084deba4ac1b4645b98f499d772 +timeCreated: 1566282089 \ No newline at end of file diff --git a/Runtime/Enums/SimulationType.cs b/Runtime/Enums/SimulationType.cs new file mode 100644 index 000000000..cb5839794 --- /dev/null +++ b/Runtime/Enums/SimulationType.cs @@ -0,0 +1,27 @@ +namespace droid.Runtime.Enums { + /// + /// Determines the discrete timesteps of the simulation environment. + /// + public enum SimulationType { + /// + /// Waiting for frame instead means stable physics(Multiple fixed updates) and camera has updated their + /// rendertextures. Pauses the game after every reaction until next reaction is received. + /// + Frame_dependent_, // TODO: Sometimes some frame seems to be dropped with the frame dependent configuration at high frame rates. + + /// + /// Camera sensors should be manually rendered to ensure validity and freshness with camera.Render() + /// + Physics_dependent_, + + /// + /// Camera sensors should be manually rendered to ensure validity and freshness with camera.Render() + /// + Event_dependent_, + + /// + /// Continue simulation + /// + Independent_ + } +} diff --git a/Runtime/Enums/SimulationType.cs.meta b/Runtime/Enums/SimulationType.cs.meta new file mode 100644 index 000000000..128f54bd5 --- /dev/null +++ b/Runtime/Enums/SimulationType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cb339cd947fb1070ad4df3a01cd01a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Enums/WaitOn.cs b/Runtime/Enums/WaitOn.cs new file mode 100644 index 000000000..5113f46ad --- /dev/null +++ b/Runtime/Enums/WaitOn.cs @@ -0,0 +1,20 @@ +namespace droid.Runtime.Enums { + /// + /// + public enum WaitOn { + /// + /// + Never_, + + /// + /// // Do not wait from reactions from agent + /// + Update_, + + /// + /// // Frame + /// // Note: unstable physics with the FixedUpdate setting + /// + Fixed_update_ + } +} diff --git a/Runtime/Utilities/Enums/WaitOn.cs.meta b/Runtime/Enums/WaitOn.cs.meta similarity index 100% rename from Runtime/Utilities/Enums/WaitOn.cs.meta rename to Runtime/Enums/WaitOn.cs.meta diff --git a/Runtime/Environments/Experimental/ImitationEnvironment.cs b/Runtime/Environments/Experimental/ImitationEnvironment.cs index 3c81a40ac..0432bd5ec 100644 --- a/Runtime/Environments/Experimental/ImitationEnvironment.cs +++ b/Runtime/Environments/Experimental/ImitationEnvironment.cs @@ -1,9 +1,10 @@ -using UnityEngine; +using droid.Runtime.Environments.Prototyping; +using UnityEngine; -namespace Neodroid.Runtime.Environments.Experimental { +namespace droid.Runtime.Environments.Experimental { /// /// /// [AddComponentMenu("Neodroid/Environments/NotUsed/Imitation")] public class ImitationEnvironment : PrototypingEnvironment { } -} \ No newline at end of file +} diff --git a/Runtime/Environments/NeodroidEnvironment.cs b/Runtime/Environments/NeodroidEnvironment.cs index 0475f33a4..8e68e0369 100644 --- a/Runtime/Environments/NeodroidEnvironment.cs +++ b/Runtime/Environments/NeodroidEnvironment.cs @@ -1,185 +1,87 @@ using System; -using System.Globalization; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; +using droid.Runtime.GameObjects; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using droid.Runtime.Managers; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Utilities; using UnityEditor; using UnityEngine; -namespace Neodroid.Runtime.Environments { +namespace droid.Runtime.Environments { /// - /// - /// + /// + /// public abstract class NeodroidEnvironment : PrototypingGameObject, - //IResetable, IEnvironment { - /// - /// - /// - public abstract override String PrototypingTypeName { get; } + #region Fields - /// - /// - /// - [Header("Environment", order = 100), SerializeField] - protected IManager _Simulation_Manager; + #endregion - /// - /// - /// - [SerializeField] - int _episode_length = 1000; + #if UNITY_EDITOR + const int _script_execution_order = -20; + #endif + /// /// - /// /// - [SerializeField] - protected float _Lastest_Reset_Time; + public abstract override String PrototypingTypeName { get; } - /// - /// - /// - public bool Terminated { - get { return this._Terminated; } - set { this._Terminated = value; } - } /// - /// /// - [SerializeField] - protected float _Energy_Spent; + public abstract void PostStep(); /// - /// /// - [SerializeField] - protected bool _Terminated; - - #if UNITY_EDITOR - const int _script_execution_order = -20; - #endif + /// + public abstract Reaction SampleReaction(); /// - /// /// + /// /// - public void IdentifierString(DataPoller recipient) { recipient.PollData(this.Identifier); } + public abstract void React(Reaction reaction); + /// - /// /// /// - public void EnergyString(DataPoller recipient) { - recipient.PollData(this._Energy_Spent.ToString(CultureInfo.InvariantCulture)); - } + public abstract EnvironmentSnapshot Snapshot(); /// - /// /// /// - public void FrameString(DataPoller recipient) { - recipient.PollData($"{this.CurrentFrameNumber}/{this.EpisodeLength}"); - } + public void IdentifierString(DataPoller recipient) { recipient.PollData(this.Identifier); } /// - /// /// /// public void TerminatedBoolean(DataPoller recipient) { - if (this._Terminated) { + if (this.Terminated) { recipient.PollData(true); } recipient.PollData(false); } - /// - /// - /// - [SerializeField] - protected bool _Terminable = true; - - /// - /// - /// - [SerializeField] - protected string _LastTermination_Reason = "None"; - - /// - /// - /// - protected bool _Configure; - - /// - /// - /// - protected bool _ReplyWithDescriptionThisStep; - - public Reaction LastReaction { get { return this._last_reaction; } set { this._last_reaction = value; } } - - /// - /// - /// - public int CurrentFrameNumber { - get { return this._current_frame_number; } - set { this._current_frame_number = value; } - } - - /// - /// - /// - public int EpisodeLength { - get { return this._episode_length; } - set { this._episode_length = value; } - } - - /// - /// - /// - [SerializeField] - protected bool _Resetting; - - [SerializeField] int _current_frame_number; - [SerializeField] Reaction _last_reaction; - - /// - /// - /// - public bool IsResetting { - get { return this._Resetting; } - } - - /// - /// - /// - public String LastTerminationReason { - get { return this._LastTermination_Reason; } - set { this._LastTermination_Reason = value; } - } - /// /// /// - protected override void Setup() { + public override void Setup() { this.PreSetup(); - if (this._Simulation_Manager == null) { - this._Simulation_Manager = FindObjectOfType(); + + if (this.SimulationManager == null) { + this.SimulationManager = FindObjectOfType(); } #if UNITY_EDITOR if (!Application.isPlaying) { var manager_script = MonoScript.FromMonoBehaviour(this); if (MonoImporter.GetExecutionOrder(manager_script) != _script_execution_order) { - MonoImporter.SetExecutionOrder( - manager_script, - _script_execution_order); // Ensures that PreStep is called first, before all other scripts. - Debug.LogWarning( - "Execution Order changed, you will need to press play again to make everything function correctly!"); + MonoImporter.SetExecutionOrder(manager_script, + _script_execution_order); // Ensures that PreStep is called first, before all other scripts. + Debug.LogWarning("Execution Order changed, you will need to press play again to make everything function correctly!"); EditorApplication.isPlaying = false; //TODO: UnityEngine.Experimental.LowLevel.PlayerLoop.SetPlayerLoop(new UnityEngine.Experimental.LowLevel.PlayerLoopSystem()); } @@ -191,65 +93,85 @@ protected override void Setup() { /// /// protected override void RegisterComponent() { - if (this._Simulation_Manager != null) { - this._Simulation_Manager = (IManager)NeodroidUtilities.MaybeRegisterComponent( - (PausableManager)this._Simulation_Manager, - this); + if (this.SimulationManager != null) { + this.SimulationManager = + NeodroidRegistrationUtilities.RegisterComponent((NeodroidManager)this.SimulationManager, this); } } /// /// /// - protected override void UnRegisterComponent() { this._Simulation_Manager?.UnRegister(this); } + protected override void UnRegisterComponent() { this.SimulationManager?.UnRegister(this); } /// - /// /// - protected virtual void PreSetup() { } + /// + public abstract void ObservationsString(DataPoller recipient); + + #region Public Methods /// - /// /// - public abstract void PostStep(); + /// + public void FrameString(DataPoller recipient) { recipient.PollData($"{this.StepI}"); } + + #endregion + + #region Properties /// - /// /// - /// - public abstract Reaction SampleReaction(); + [field : SerializeField] + public int StepI { get; protected internal set; } /// - /// /// - /// - /// - public abstract EnvironmentState ReactAndCollectState(Reaction reaction); + [field : SerializeField] + protected Single LastResetTime { get; set; } /// - /// /// - /// - /// - public abstract void React(Reaction reaction); + [field : SerializeField] + protected Boolean Terminable { get; set; } = true; /// - /// /// - public abstract void Tick(); + [field : SerializeField] + public bool Terminated { get; set; } = false; /// /// /// - /// - public abstract EnvironmentState CollectState(); + [field : SerializeField] + public Reaction LastReaction { get; set; } /// - /// /// - /// - public abstract void ObservationsString(DataPoller recipient); + [field : SerializeField] + public bool IsResetting { get; set; } + + /// + /// + [field : SerializeField] + public String LastTerminationReason { get; set; } = "None"; + + /// + /// + [field : SerializeField] + protected Boolean Configure { get; set; } + + /// + /// + [field : SerializeField] + protected Boolean ReplyWithDescriptionThisStep { get; set; } + + /// + /// + [field : Header("Environment", order = 100)] + [field : SerializeField] + protected IManager SimulationManager { get; set; } - public abstract void EnvironmentReset(); + #endregion } -} \ No newline at end of file +} diff --git a/Runtime/Environments/Prototyping.meta b/Runtime/Environments/Prototyping.meta new file mode 100644 index 000000000..0335aec87 --- /dev/null +++ b/Runtime/Environments/Prototyping.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 26e1e787c83e45c086f64c60908d8b8d +timeCreated: 1567947953 \ No newline at end of file diff --git a/Runtime/Environments/Prototyping/AbstractSpatialPrototypingEnvironment.cs b/Runtime/Environments/Prototyping/AbstractSpatialPrototypingEnvironment.cs new file mode 100644 index 000000000..4d20f9b8f --- /dev/null +++ b/Runtime/Environments/Prototyping/AbstractSpatialPrototypingEnvironment.cs @@ -0,0 +1,1140 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.Enums; +using droid.Runtime.GameObjects; +using droid.Runtime.GameObjects.BoundingBoxes; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Prototyping.ObjectiveFunctions; +using droid.Runtime.Utilities; +using droid.Runtime.Utilities.Extensions; +using UnityEngine; +using Object = System.Object; + +namespace droid.Runtime.Environments.Prototyping { + /// + /// + /// + [RequireComponent(typeof(Transform))] + public abstract class AbstractSpatialPrototypingEnvironment : NeodroidEnvironment, + ISpatialPrototypingEnvironment { + #region Fields + + #endregion + + #region ProtectedMembers + + /// + /// + protected Object _Reaction_Lock = new Object(); + + /// + /// + /// + protected WaitForFixedUpdate _Wait_For_Fixed_Update = new WaitForFixedUpdate(); + + /// + /// + /// + protected List _Observables = new List(); + + /// + /// + protected Rigidbody[] _Tracked_Rigid_Bodies; + + /// + /// + protected Transform[] _Poses; + + #endregion + + #region PrivateMembers + + /// + /// + Vector3[] _reset_positions; + + /// + /// + Quaternion[] _reset_rotations; + + Vector3[] _reset_scales; + + /// + /// + GameObject[] _tracked_game_objects; + + /// + /// + Vector3[] _reset_velocities; + + /// + /// + Vector3[] _reset_angulars; + + /// + /// + Pose[] _received_poses; + + /// + /// + Body[] _received_bodies; + + /// + /// + Configuration[] _last_configuration; + + /// + /// + Animation[] _animations; + + /// + /// + float[] _reset_animation_times; + + #endregion + + #region Events + + /// + /// + public event Action PreStepEvent; + + /// + /// + /// + public event Action StepEvent; + + /// + /// + /// + public event Action PostStepEvent; + + #endregion + + #region Private Methods + + /// + /// Termination of an episode, can be supplied with a reason for various purposes debugging or clarification + /// for a learner. + /// + /// + public void Terminate(string reason = "None") { + lock (this._Reaction_Lock) { + if (this.Terminable) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.LogWarning($"Environment {this.Identifier} as terminated because {reason}"); + } + #endif + + this.Terminated = true; + this.LastTerminationReason = reason; + } + } + } + + /// + /// + public override void Tick() { + if (this.IsResetting) { + + this.PrototypingReset(); + + this.LoopConfigurables(); + this.LoopSensors(); + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Reset"); + } + #endif + + this.IsResetting = false; + } else { + this.LoopConfigurables(this.UpdateObservationsWithEveryTick); + this.LoopSensors(this.UpdateObservationsWithEveryTick); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Tick"); + } + #endif + + this.LoopListeners(); + } + + /// + /// + protected void LoopSensors(bool update = true) { + foreach (var s in this.Sensors.Values) { + s?.Tick(); + if (update) { + s?.UpdateObservation(); + } + } + } + + protected void LoopListeners() { + foreach (var obs in this.Listeners.Values) { + obs?.Tick(); + } + } + + /// + /// + protected void LoopConfigurables(bool update = true) { + foreach (var con in this.Configurables.Values) { + con?.Tick(); + if (update) { + con?.UpdateCurrentConfiguration(); + } + } + } + + /// + /// + void SaveInitialPoses() { + var ignored_layer = LayerMask.NameToLayer($"IgnoredByNeodroid"); + if (this.TrackOnlyChildren) { + this._tracked_game_objects = + NeodroidSceneUtilities.RecursiveChildGameObjectsExceptLayer(this.transform, ignored_layer); + } else { + this._tracked_game_objects = NeodroidSceneUtilities.FindAllGameObjectsExceptLayer(ignored_layer); + } + + var length = this._tracked_game_objects.Length; + + this._reset_positions = new Vector3[length]; + this._reset_rotations = new Quaternion[length]; + this._reset_scales = new Vector3[length]; + this._Poses = new Transform[length]; + for (var i = 0; i < length; i++) { + var go = this._tracked_game_objects[i]; + var trans = go.transform; + this._reset_positions[i] = trans.position; + this._reset_rotations[i] = trans.rotation; + this._reset_scales[i] = trans.localScale; + this._Poses[i] = trans; + var maybe_joint = go.GetComponent(); + if (maybe_joint != null) { + var maybe_joint_fix = maybe_joint.GetComponent(); + if (maybe_joint_fix == null) { + // ReSharper disable once RedundantAssignment + maybe_joint_fix = maybe_joint.gameObject.AddComponent(); + } + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Added a JointFix component to {maybe_joint_fix.name}"); + } + #endif + } + } + } + + /// + /// + void SaveInitialBodies() { + /*var body_list = new List(); + foreach (var go in this._tracked_game_objects) { + if (go != null) { + var body = go.GetComponent(); + if (body) + body_list.Add(body); + } + } + this._bodies = body_list.ToArray(); + */ //Should be equivalent to the line below, but kept as a reference in case of confusion + + this._Tracked_Rigid_Bodies = this._tracked_game_objects.Where(go => go != null) + .Select(go => go.GetComponent()).Where(body => body) + .ToArray(); + + this._reset_velocities = new Vector3[this._Tracked_Rigid_Bodies.Length]; + this._reset_angulars = new Vector3[this._Tracked_Rigid_Bodies.Length]; + for (var i = 0; i < this._Tracked_Rigid_Bodies.Length; i++) { + this._reset_velocities[i] = this._Tracked_Rigid_Bodies[i].velocity; + this._reset_angulars[i] = this._Tracked_Rigid_Bodies[i].angularVelocity; + } + } + + /// + /// + void SaveInitialAnimations() { + this._animations = this._tracked_game_objects.Where(go => go != null) + .Select(go => go.GetComponent()).Where(anim => anim).ToArray(); + this._reset_animation_times = new float[this._animations.Length]; + for (var i = 0; i < this._animations.Length; i++) { + if (this._animations[i]) { + if (this._animations[i].clip) { + this._reset_animation_times[i] = + this._animations[i].CrossFadeQueued(this._animations[i].clip.name) + .time; //TODO: IS NOT USED AS RIGHT NOW and should use animations clips instead the legacy "clip.name". + //TODO: DOES NOT WORK + } + } + } + } + + /// + /// + /// + public override void PreSetup() { + if (this.ObjectiveFunction == null) { + this.ObjectiveFunction = this.GetComponent(); + } + + if (!this.PlayableArea) { + this.PlayableArea = this.GetComponent(); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("PreSetup"); + } + #endif + + if (this._tracked_game_objects == null || this._tracked_game_objects.Length == 0) { + this.SaveInitialPoses(); + this.SaveInitialAnimations(); + this.StartCoroutine(this.SaveInitialBodiesIe()); + } + } + + /// + /// + /// + IEnumerator SaveInitialBodiesIe() { + yield return this._Wait_For_Fixed_Update; + this.SaveInitialBodies(); + this.RemotePostSetup(); + } + + /// + /// + /// + void Step(Reaction reaction) { + lock (this._Reaction_Lock) { + this.PreStepEvent?.Invoke(); + + if (reaction.Parameters.EpisodeCount) { + this.StepI++; + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.LogWarning("Step did count"); + } + #endif + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.LogWarning("Step did not count"); + } + #endif + } + + this.SendToActors(reaction); + + this.StepEvent?.Invoke(); + + this.LoopSensors(); + } + } + + /// + /// + /// + /// + protected abstract void SendToActors(Reaction reaction); + + /// + /// + /// + /// + /// + public override void React(Reaction reaction) { + this.LastReaction = reaction; + this.Terminable = reaction.Parameters.Terminable; + + this._last_configuration = reaction.Configurations; + + this.ReplyWithDescriptionThisStep = reaction.Parameters.Describe; + + if (reaction.Parameters.Configure && reaction.Unobservables != null) { + this._received_poses = reaction.Unobservables.Poses; + this._received_bodies = reaction.Unobservables.Bodies; + } + + this.SendToDisplayers(reaction); + + if (reaction.Parameters.StepResetObserveEnu == StepResetObserve.Reset_) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Resetting environment({this.Identifier})"); + } + #endif + this.Terminate($"Reaction caused a reset"); + this.IsResetting = true; + } else if (reaction.Parameters.StepResetObserveEnu == StepResetObserve.Step_) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Stepping in environment({this.Identifier})"); + } + #endif + this.Step(reaction); + } + } + + /// + /// + /// + public override void PostStep() { + this.PostStepEvent?.Invoke(); + if (this.Configure) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Configuring"); + } + #endif + this.Configure = false; + this.Reconfigure(); + } + + this.ReplyWithDescriptionThisStep = false; + } + + /// + /// + public override void PrototypingReset() { + this.LastResetTime = Time.realtimeSinceStartup; + this.StepI = 0; + this.ObjectiveFunction?.PrototypingReset(); + + SetEnvironmentTransforms(ref this._tracked_game_objects, + ref this._reset_positions, + ref this._reset_rotations, + ref this._reset_scales); + + this.SetBodies(ref this._Tracked_Rigid_Bodies, ref this._reset_velocities, ref this._reset_angulars); + + this.ResetRegisteredObjects(); + this.Reconfigure(); + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Reset called on environment {this.Identifier}"); + } + #endif + + this.Terminated = false; + } + + /// + /// + protected void ResetRegisteredObjects() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Resetting registered objects"); + } + #endif + + foreach (var configurable in this.Configurables.Values) { + configurable?.PrototypingReset(); + } + + foreach (var resetable in this.Listeners.Values) { + resetable?.PrototypingReset(); + } + + this.InnerResetRegisteredObjects(); + + foreach (var sensor in this.Sensors.Values) { + sensor?.PrototypingReset(); + } + } + + /// + /// + protected void Reconfigure() { + if (this._received_poses != null) { + var positions = new Vector3[this._received_poses.Length]; + var rotations = new Quaternion[this._received_poses.Length]; + var scales = new Vector3[this._received_poses.Length]; + for (var i = 0; i < this._received_poses.Length; i++) { + positions[i] = this._received_poses[i].position; + rotations[i] = this._received_poses[i].rotation; + scales[i] = this._reset_scales[i]; //TODO: this._received_poses[i].scale; + } + + SetEnvironmentTransforms(ref this._tracked_game_objects, + ref positions, + ref rotations, + ref scales); + } + + if (this._received_bodies != null) { + var velocities = new Vector3[this._received_bodies.Length]; + var angulars = new Vector3[this._received_bodies.Length]; + for (var i = 0; i < this._received_bodies.Length; i++) { + velocities[i] = this._received_bodies[i].Velocity; + angulars[i] = this._received_bodies[i].AngularVelocity; + } + + this.SetBodies(ref this._Tracked_Rigid_Bodies, ref velocities, ref angulars); + } + + if (this._last_configuration != null) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Configuration length: {this._last_configuration.Length}"); + } + #endif + foreach (var configuration in this._last_configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Configuring configurable with the specified name: " + configuration.ConfigurableName); + } + #endif + if (this.Configurables.ContainsKey(configuration.ConfigurableName)) { + this.Configurables[configuration.ConfigurableName].ApplyConfiguration(configuration); + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Could find not configurable with the specified name: {configuration.ConfigurableName}"); + } + #endif + } + } + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Has no received_configurations"); + } + #endif + } + + this.LoopConfigurables(); + this.LoopSensors(); + } + + /// + /// + /// + void SendToDisplayers(Reaction reaction) { + if (reaction.Displayables != null && reaction.Displayables.Length > 0) { + foreach (var displayable in reaction.Displayables) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + displayable + " To " + this.name + "'s displayers"); + } + #endif + var displayable_name = displayable.DisplayableName; + if (this.Displayers.ContainsKey(displayable_name) && this.Displayers[displayable_name] != null) { + var v = displayable.DisplayableValue; + this.Displayers[displayable_name].Display(v); + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Could find not displayer with the specified name: " + displayable_name); + } + #endif + } + } + } + } + + #endregion + + #region EnvironmentStateSetters + + /// + /// + /// + /// + /// + static void SetEnvironmentTransforms(ref GameObject[] child_game_objects, + ref Vector3[] positions, + ref Quaternion[] rotations, + ref Vector3[] scales) { + for (var i = 0; i < child_game_objects.Length; i++) { + if (child_game_objects[i] != null && i < positions.Length && i < rotations.Length) { + var rigid_body = child_game_objects[i].GetComponent(); + if (rigid_body) { + rigid_body.Sleep(); + } + + child_game_objects[i].transform.position = positions[i]; + child_game_objects[i].transform.rotation = rotations[i]; + child_game_objects[i].transform.localScale = scales[i]; + if (rigid_body) { + rigid_body.WakeUp(); + } + + var joint_fix = child_game_objects[i].GetComponent(); + if (joint_fix) { + joint_fix.JointReset(); + } + + var anim = child_game_objects[i].GetComponent(); + if (anim) { + anim.Rewind(); + anim.Play(); + anim.Sample(); + anim.Stop(); + } + } + } + } + + /// + /// + /// + /// + /// + /// + void SetBodies(ref Rigidbody[] bodies, ref Vector3[] velocities, ref Vector3[] angulars) { + if (bodies != null && bodies.Length > 0) { + for (var i = 0; i < bodies.Length; i++) { + if (i < bodies.Length && bodies[i] != null && i < velocities.Length && i < angulars.Length) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Setting {bodies[i].name}, velocity to {velocities[i]} and angular velocity to {angulars[i]}"); + } + + #endif + + bodies[i].Sleep(); + bodies[i].velocity = velocities[i]; + bodies[i].angularVelocity = angulars[i]; + bodies[i].WakeUp(); + } + } + } + } + + #endregion + + #region Transformations + + /// + /// + /// + /// + public Vector3 TransformPoint(Vector3 point) { + switch (this.CoordinateSpace) { + case CoordinateSpace.Environment_ when this.CoordinateReferencePoint: + return this.CoordinateReferencePoint.transform.InverseTransformPoint(point); + case CoordinateSpace.Local_: + return this.transform.InverseTransformPoint(point); + //return point - this.transform.position; + default: + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Defaulting TransformPoint"); + } + #endif + return point; + } + } + + /// + /// + /// + /// + public void TransformPoint(ref Vector3 point) { + switch (this.CoordinateSpace) { + case CoordinateSpace.Environment_ when this.CoordinateReferencePoint: + point = this.CoordinateReferencePoint.transform.InverseTransformPoint(point); + break; + case CoordinateSpace.Local_: + //point = point - this.transform.position; + point = this.transform.InverseTransformPoint(point); + break; + default: + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Defaulting TransformPoint"); + } + #endif + break; + } + } + + /// + /// + /// + /// + public Vector3 InverseTransformPoint(Vector3 point) { + switch (this.CoordinateSpace) { + case CoordinateSpace.Environment_ when this.CoordinateReferencePoint: + return this.CoordinateReferencePoint.transform.TransformPoint(point); + case CoordinateSpace.Local_: + //return point - this.transform.position; + return this.transform.TransformPoint(point); + default: + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Defaulting InverseTransformPoint"); + } + #endif + return point; + } + } + + /// + /// + /// + /// + public void InverseTransformPoint(ref Vector3 point) { + switch (this.CoordinateSpace) { + case CoordinateSpace.Environment_ when this.CoordinateReferencePoint: + point = this.CoordinateReferencePoint.transform.TransformPoint(point); + break; + case CoordinateSpace.Local_: + //point = point - this.transform.position; + point = this.transform.TransformPoint(point); + break; + default: + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Defaulting InverseTransformPoint"); + } + #endif + break; + } + } + + /// + /// + /// + /// + public Vector3 TransformDirection(Vector3 direction) { + switch (this.CoordinateSpace) { + case CoordinateSpace.Environment_ when this.CoordinateReferencePoint: + return this.CoordinateReferencePoint.transform.InverseTransformDirection(direction); + case CoordinateSpace.Local_: + return this.transform.InverseTransformDirection(direction); + default: + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Defaulting TransformDirection"); + } + #endif + return direction; + } + } + + /// + /// + /// + /// + public void TransformDirection(ref Vector3 direction) { + switch (this.CoordinateSpace) { + case CoordinateSpace.Environment_ when this.CoordinateReferencePoint: + direction = this.CoordinateReferencePoint.transform.InverseTransformDirection(direction); + break; + case CoordinateSpace.Local_: + direction = this.transform.InverseTransformDirection(direction); + break; + case CoordinateSpace.Global_: + default: + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Defaulting TransformDirection"); + } + #endif + break; + } + } + + /// + /// + /// + /// + public Vector3 InverseTransformDirection(Vector3 direction) { + switch (this.CoordinateSpace) { + case CoordinateSpace.Environment_ when this.CoordinateReferencePoint: + return this.CoordinateReferencePoint.transform.TransformDirection(direction); + case CoordinateSpace.Local_: + return this.transform.TransformDirection(direction); + + default: + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Defaulting InverseTransformDirection"); + } + #endif + return direction; + } + } + + public void InverseTransformDirection(ref Vector3 direction) { + switch (this.CoordinateSpace) { + case CoordinateSpace.Environment_ when this.CoordinateReferencePoint: + direction = this.CoordinateReferencePoint.transform.TransformDirection(direction); + break; + case CoordinateSpace.Local_: + direction = this.transform.TransformDirection(direction); + break; + default: + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Defaulting InverseTransformDirection"); + } + #endif + break; + } + } + + /// + /// + /// + /// + public Quaternion TransformRotation(Quaternion quaternion) { + if (this.CoordinateSpace == CoordinateSpace.Environment_) { + if (this.CoordinateReferencePoint) { + return Quaternion.Inverse(this.CoordinateReferencePoint.rotation) * quaternion; + } + + //Quaternion.Euler(this._coordinate_reference_point.transform.TransformDirection(quaternion.forward)); + } else if (this.CoordinateSpace == CoordinateSpace.Local_) { + if (this.CoordinateReferencePoint) { + return Quaternion.Inverse(this.Transform.rotation) * quaternion; + } + } + + return quaternion; + } + + /// + /// + /// + /// + public void TransformRotation(ref Quaternion quaternion) { + if (this.CoordinateSpace == CoordinateSpace.Environment_) { + if (this.CoordinateReferencePoint) { + quaternion = Quaternion.Inverse(this.CoordinateReferencePoint.rotation) * quaternion; + } + + //Quaternion.Euler(this._coordinate_reference_point.transform.TransformDirection(quaternion.forward)); + } else if (this.CoordinateSpace == CoordinateSpace.Local_) { + if (this.CoordinateReferencePoint) { + quaternion = Quaternion.Inverse(this.Transform.rotation) * quaternion; + } + } + } + + public Quaternion InverseTransformRotation(Quaternion quaternion) { + if (this.CoordinateSpace == CoordinateSpace.Environment_) { + if (this.CoordinateReferencePoint) { + return this.CoordinateReferencePoint.rotation * quaternion; + } + + //Quaternion.Euler(this._coordinate_reference_point.transform.TransformDirection(quaternion.forward)); + } else if (this.CoordinateSpace == CoordinateSpace.Local_) { + if (this.CoordinateReferencePoint) { + return this.Transform.rotation * quaternion; + } + } + + return quaternion; + } + + public void InverseTransformRotation(ref Quaternion quaternion) { + if (this.CoordinateSpace == CoordinateSpace.Environment_) { + if (this.CoordinateReferencePoint) { + quaternion = this.CoordinateReferencePoint.rotation * quaternion; + } else if (this.CoordinateSpace == CoordinateSpace.Local_) { + if (this.CoordinateReferencePoint) { + quaternion = this.Transform.rotation * quaternion; + } + } + + //Quaternion.Euler(this._coordinate_reference_point.transform.TransformDirection(quaternion.forward)); + } + } + + #endregion + + #region Getters + + /// + /// + public SortedDictionary Displayers { get; } = + new SortedDictionary(); + + /// + /// + public SortedDictionary Configurables { get; } = + new SortedDictionary(); + + /// + /// + public SortedDictionary Sensors { get; } = new SortedDictionary(); + + /// + /// + public SortedDictionary Listeners { get; } = + new SortedDictionary(); + + /// + /// + /// + public override string PrototypingTypeName { get { return "PrototypingEnvironment"; } } + + /// + /// + [field : Header("References", order = 20)] + [field : SerializeField] + public IEpisodicObjectiveFunction ObjectiveFunction { get; set; } + + /// + /// + public Transform Transform { get { return this.transform; } } + + /// + /// + [field : Header("(Optional)", order = 80)] + [field : SerializeField] + public BoundingBox PlayableArea { get; set; } + + /// + /// + [field : Header("General", order = 30)] + [field : SerializeField] + public Transform CoordinateReferencePoint { get; set; } + + /// + /// + [field : SerializeField] + public CoordinateSpace CoordinateSpace { get; set; } = CoordinateSpace.Local_; + + /// + /// + protected Rigidbody[] TrackedRigidBodies { get { return this._Tracked_Rigid_Bodies; } } + + /// + /// + [field : SerializeField] + protected Boolean TrackOnlyChildren { get; set; } = true; + + /// + /// + /// + [field : SerializeField] + protected Boolean UpdateObservationsWithEveryTick { get; set; } = true; + + #endregion + + #region Registration + + /// + /// + /// + public void Register(IDisplayer displayer) { this.Register(displayer, displayer.Identifier); } + + /// + /// + /// + /// + /// + public void Register(IDisplayer obj, string identifier) { + if (!this.Displayers.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} has registered displayer {identifier}"); + } + #endif + this.Displayers.Add(identifier, obj); + } else { + Debug.LogWarning($"WARNING! Please check for duplicates, Environment {this.name} already has displayer {identifier} registered"); + } + } + + /// + /// + /// + /// + public void Register(ISensor sensor) { this.Register(sensor, sensor.Identifier); } + + /// + /// /// + /// + /// + /// + /// + public void Register(ISensor sensor, string identifier) { + if (!this.Sensors.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} has registered sensor {identifier}"); + } + #endif + + this.Sensors.Add(identifier, sensor); + } else { + Debug.LogWarning($"WARNING! Please check for duplicates, Environment {this.name} already has observer {identifier} registered"); + } + } + + /// + /// + /// + /// + public void Register(IConfigurable configurable) { this.Register(configurable, configurable.Identifier); } + + /// + /// + /// + /// + /// + public void Register(IConfigurable configurable, string identifier) { + if (!this.Configurables.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} has registered configurable {identifier}"); + } + #endif + + this.Configurables.Add(identifier, configurable); + } else { + Debug.LogWarning($"WARNING! Please check for duplicates, Environment {this.name} already has configurable {identifier} registered"); + } + } + + /// + /// + /// + /// + public void Register(IUnobservable environment_listener) { + this.Register(environment_listener, environment_listener.Identifier); + } + + /// + /// + /// + /// + /// + public void Register(IUnobservable environment_listener, string identifier) { + if (!this.Listeners.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} has registered resetable {identifier}"); + } + #endif + this.Listeners.Add(identifier, environment_listener); + } else { + Debug.LogWarning($"WARNING! Please check for duplicates, Environment {this.name} already has resetable {identifier} registered"); + } + } + + /// + /// + /// + public void UnRegister(ISensor sensor) { this.UnRegister(sensor, sensor.Identifier); } + + /// + /// + /// + /// + /// + public void UnRegister(ISensor t, string identifier) { + if (this.Sensors.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} unregistered sensor {identifier}"); + } + #endif + this.Sensors.Remove(identifier); + } + } + + /// + /// + /// + public void UnRegister(IConfigurable configurable) { + this.UnRegister(configurable, configurable.Identifier); + } + + /// + /// + /// + /// + /// + public void UnRegister(IConfigurable t, string identifier) { + if (this.Configurables.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} unregistered configurable {identifier}"); + } + #endif + this.Configurables.Remove(identifier); + } + } + + /// + /// + /// + public void UnRegister(IDisplayer displayer) { this.UnRegister(displayer, displayer.Identifier); } + + /// + /// + /// + /// + /// + public void UnRegister(IDisplayer t, string identifier) { + if (this.Displayers.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} unregistered configurable {identifier}"); + } + #endif + this.Displayers.Remove(identifier); + } + } + + /// + /// + /// + public void UnRegister(IUnobservable environment_listener) { + this.UnRegister(environment_listener, environment_listener.Identifier); + } + + /// + /// + /// + /// + /// + public void UnRegister(IUnobservable t, string identifier) { + if (this.Listeners.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} unregistered resetable {identifier}"); + } + #endif + this.Listeners.Remove(identifier); + } + } + + #endregion + + /// + /// + /// + protected abstract void InnerResetRegisteredObjects(); + + public override String ToString() { + var e = " - "; + + e += this.Identifier; + e += ", Sensors: "; + e += this.Sensors.Count; + e += ", Objective: "; + e += this.ObjectiveFunction != null ? this.ObjectiveFunction.Identifier : "None"; + + return e; + } + } +} diff --git a/Runtime/Environments/Prototyping/AbstractSpatialPrototypingEnvironment.cs.meta b/Runtime/Environments/Prototyping/AbstractSpatialPrototypingEnvironment.cs.meta new file mode 100644 index 000000000..8598753aa --- /dev/null +++ b/Runtime/Environments/Prototyping/AbstractSpatialPrototypingEnvironment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fa96c4d5b1441b59c4efb9d9912bfaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 4e08a2d574ba14804a3b42b6a9abc9dd, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Environments/Prototyping/ActorisedPrototypingEnvironment.cs b/Runtime/Environments/Prototyping/ActorisedPrototypingEnvironment.cs new file mode 100644 index 000000000..244b1b47a --- /dev/null +++ b/Runtime/Environments/Prototyping/ActorisedPrototypingEnvironment.cs @@ -0,0 +1,301 @@ +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using UnityEngine; + +namespace droid.Runtime.Environments.Prototyping { + /// + /// + /// Environment to be used with the prototyping components. + /// + [AddComponentMenu("Neodroid/Environments/ActorisedPrototypingEnvironment")] + public class ActorisedPrototypingEnvironment : AbstractSpatialPrototypingEnvironment, + IActorisedPrototypingEnvironment { + #region NeodroidCallbacks + + /// + /// + /// + protected override void Clear() { + this.Displayers.Clear(); + this.Configurables.Clear(); + this.Actors.Clear(); + this.Sensors.Clear(); + this.Listeners.Clear(); + } + + /// + /// + /// + /// + public override Reaction SampleReaction() { + if (this.Terminated) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("SampleReaction resetting environment"); + } + #endif + + var reset_reaction = new ReactionParameters(StepResetObserve.Reset_, false, true); + return new Reaction(reset_reaction, this.Identifier); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Sampling a reaction for environment {this.Identifier}"); + } + #endif + + var sample_motions = new List(); + + foreach (var actor in this.Actors) { + var actor_value = actor.Value; + if (actor_value?.Actuators != null) { + foreach (var actuator in actor_value.Actuators) { + var actuator_value = actuator.Value; + if (actuator_value != null) { + sample_motions.Add(new ActuatorMotion(actor.Key, actuator.Key, actuator_value.Sample())); + } + } + } + } + + var rp = new ReactionParameters(StepResetObserve.Step_, true, episode_count : true); + return new Reaction(rp, + sample_motions.ToArray(), + null, + null, + null, + "", + this.Identifier); + } + + #endregion + + #region PublicMethods + + #region Getters + + /// + /// + public SortedDictionary Actors { get; } = new SortedDictionary(); + + #endregion + + #region Registration + + /// + /// + /// + /// + public void Register(IActor actor) { this.Register(actor, actor.Identifier); } + + /// + /// + /// + /// + /// + public void Register(IActor actor, string identifier) { + if (!this.Actors.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} has registered actor {identifier}"); + } + #endif + + this.Actors.Add(identifier, actor); + } else { + Debug.LogWarning($"WARNING! Please check for duplicates, Environment {this.name} already has actor {identifier} registered"); + } + } + + /// + /// + /// + public void UnRegister(IActor actor) { this.UnRegister(actor, actor.Identifier); } + + public void UnRegister(IActor t, string obj) { + if (this.Actors.ContainsKey(obj)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} unregistered actor {obj}"); + } + #endif + this.Actors.Remove(obj); + } + } + + #endregion + + #endregion + + #region PrivateMethods + + /// + /// + /// + /// + public override EnvironmentSnapshot Snapshot() { + lock (this._Reaction_Lock) { + var signal = 0f; + + if (this.ObjectiveFunction != null) { + signal = this.ObjectiveFunction.Evaluate(); + } + + EnvironmentDescription description = null; + if (this.ReplyWithDescriptionThisStep + || this.SimulationManager.SimulatorConfiguration.AlwaysSerialiseIndividualObservables) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Describing Environment"); + } + #endif + + description = new EnvironmentDescription(this.ObjectiveFunction, + this.Actors, + this.Configurables, + this.Sensors, + this.Displayers); + } + + this._Observables.Clear(); + + foreach (var item in this.Sensors) { + if (item.Value != null) { + if (item.Value.FloatEnumerable != null) { + this._Observables.AddRange(item.Value.FloatEnumerable); + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Sensor with key {item.Key} has a null FloatEnumerable value"); + } + #endif + } + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Sensor with key {item.Key} has a null value"); + } + #endif + } + } + + var obs = this._Observables.ToArray(); + + var time = Time.realtimeSinceStartup - this.LastResetTime; + + var state = new EnvironmentSnapshot(this.Identifier, + this.StepI, + time, + signal, + this.Terminated, + ref obs, + this.LastTerminationReason, + description); + + if (this.SimulationManager.SimulatorConfiguration.AlwaysSerialiseUnobservables + || this.ReplyWithDescriptionThisStep) { + state.Unobservables = new Unobservables(ref this._Tracked_Rigid_Bodies, ref this._Poses); + } + + return state; + } + } + + /// + /// + /// + /// + public override void ObservationsString(DataPoller recipient) { + recipient.PollData(string.Join("\n\n", + this.Sensors.Values.Select(e => $"{e.Identifier}:\n{e.ToString()}"))); + } + + /// + /// + /// + public override void RemotePostSetup() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("PostSetup"); + } + #endif + + foreach (var configurable in this.Configurables.Values) { + configurable?.RemotePostSetup(); + } + + foreach (var actor in this.Actors.Values) { + actor?.RemotePostSetup(); + } + + foreach (var sensor in this.Sensors.Values) { + sensor?.RemotePostSetup(); + } + } + + /// + /// + /// + void SendToDisplayers(Reaction reaction) { + if (reaction.Displayables != null && reaction.Displayables.Length > 0) { + foreach (var displayable in reaction.Displayables) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + displayable + " To " + this.name + "'s displayers"); + } + #endif + var displayable_name = displayable.DisplayableName; + if (this.Displayers.ContainsKey(displayable_name) && this.Displayers[displayable_name] != null) { + var v = displayable.DisplayableValue; + this.Displayers[displayable_name].Display(v); + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Could find not displayer with the specified name: " + displayable_name); + } + #endif + } + } + } + } + + /// + /// + /// + protected override void SendToActors(Reaction reaction) { + if (reaction.Motions != null && reaction.Motions.Length > 0) { + foreach (var motion in reaction.Motions) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + motion + " To " + this.name + "'s actors"); + } + #endif + var motion_actor_name = motion.ActorName; + if (this.Actors.ContainsKey(motion_actor_name) && this.Actors[motion_actor_name] != null) { + this.Actors[motion_actor_name].ApplyMotion(motion); + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Could find not actor with the specified name: " + motion_actor_name); + } + #endif + } + } + } + } + + /// + /// + protected override void InnerResetRegisteredObjects() { + foreach (var actor in this.Actors.Values) { + actor?.PrototypingReset(); + } + } + + #endregion + } +} diff --git a/Runtime/Environments/PrototypingEnvironment.cs.meta b/Runtime/Environments/Prototyping/ActorisedPrototypingEnvironment.cs.meta similarity index 100% rename from Runtime/Environments/PrototypingEnvironment.cs.meta rename to Runtime/Environments/Prototyping/ActorisedPrototypingEnvironment.cs.meta diff --git a/Runtime/Environments/Prototyping/PrototypingEnvironment.cs b/Runtime/Environments/Prototyping/PrototypingEnvironment.cs new file mode 100644 index 000000000..9189b978c --- /dev/null +++ b/Runtime/Environments/Prototyping/PrototypingEnvironment.cs @@ -0,0 +1,301 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Prototyping.Actors; +using UnityEngine; + +namespace droid.Runtime.Environments.Prototyping { + /// + /// + /// Environment to be used with the prototyping components. + /// + [AddComponentMenu("Neodroid/Environments/PrototypingEnvironment")] + public class PrototypingEnvironment : AbstractSpatialPrototypingEnvironment, + IPrototypingEnvironment { + #region NeodroidCallbacks + + /// + /// + /// + protected override void Clear() { + this.Displayers.Clear(); + this.Configurables.Clear(); + this.Actuators.Clear(); + this.Sensors.Clear(); + this.Listeners.Clear(); + } + + /// + /// + /// + /// + public override Reaction SampleReaction() { + if (this.Terminated) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("SampleReaction resetting environment"); + } + #endif + + var reset_reaction = new ReactionParameters(StepResetObserve.Reset_, false, true); + return new Reaction(reset_reaction, this.Identifier); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Sampling a reaction for environment {this.Identifier}"); + } + #endif + + var sample_motions = new List(); + + foreach (var actuator in this.Actuators) { + var actuator_value = actuator.Value; + if (actuator_value != null) { + sample_motions.Add(new ActuatorMotion(actuator.Key, actuator.Key, actuator_value.Sample())); + } + } + + var rp = new ReactionParameters(StepResetObserve.Step_, true, episode_count : true); + return new Reaction(rp, + sample_motions.ToArray(), + null, + null, + null, + "", + this.Identifier); + } + + #endregion + + #region PublicMethods + + #region Getters + + /// + /// + public SortedDictionary Actuators { get; } = new SortedDictionary(); + + /// + /// + /// + public override string PrototypingTypeName { get { return "PrototypingEnvironment"; } } + + #endregion + + #region Registration + + /// + /// + /// + /// + public void Register(IActuator obj) { this.Register(obj, obj.Identifier); } + + /// + /// + /// + /// + /// + public void Register(IActuator obj, String identifier) { + if (!this.Actuators.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} has registered actuator {identifier}"); + } + #endif + + this.Actuators.Add(identifier, obj); + } else { + Debug.LogWarning($"WARNING! Please check for duplicates, Environment {this.name} already has actuator {identifier} registered"); + } + } + + /// + /// + /// + /// + public void UnRegister(IActuator obj) { this.UnRegister(obj, obj.Identifier); } + + /// + /// + /// + /// + /// + public void UnRegister(IActuator t, String obj) { + if (this.Actuators.ContainsKey(obj)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {this.name} unregistered actuator {obj}"); + } + #endif + this.Actuators.Remove(obj); + } + } + + #endregion + + #endregion + + #region PrivateMethods + + /// + /// + /// + /// + public override EnvironmentSnapshot Snapshot() { + lock (this._Reaction_Lock) { + var signal = 0f; + + if (this.ObjectiveFunction != null) { + signal = this.ObjectiveFunction.Evaluate(); + } + + EnvironmentDescription description = null; + if (this.ReplyWithDescriptionThisStep + || this.SimulationManager.SimulatorConfiguration.AlwaysSerialiseIndividualObservables) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Describing Environment"); + } + #endif + + var virtual_actors = + new SortedDictionary {{"All", new VirtualActor(this.Actuators)}}; + + description = new EnvironmentDescription(this.ObjectiveFunction, + virtual_actors, + this.Configurables, + this.Sensors, + this.Displayers); + } + + this._Observables.Clear(); + foreach (var item in this.Sensors) { + if (item.Value != null) { + if (item.Value.FloatEnumerable != null) { + this._Observables.AddRange(item.Value.FloatEnumerable); + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Sensor with key {item.Key} has a null FloatEnumerable value"); + } + #endif + } + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Sensor with key {item.Key} has a null value"); + } + #endif + } + } + + var obs = this._Observables.ToArray(); + + var time = Time.realtimeSinceStartup - this.LastResetTime; + + var state = new EnvironmentSnapshot(this.Identifier, + this.StepI, + time, + signal, + this.Terminated, + ref obs, + this.LastTerminationReason, + description); + + if (this.SimulationManager.SimulatorConfiguration.AlwaysSerialiseUnobservables + || this.ReplyWithDescriptionThisStep) { + state.Unobservables = new Unobservables(ref this._Tracked_Rigid_Bodies, ref this._Poses); + } + + return state; + } + } + + /// + /// + /// + public override void RemotePostSetup() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("PostSetup"); + } + #endif + + foreach (var configurable in this.Configurables.Values) { + configurable?.RemotePostSetup(); + } + + foreach (var actuator in this.Actuators.Values) { + actuator?.RemotePostSetup(); + } + + foreach (var sensor in this.Sensors.Values) { + sensor?.RemotePostSetup(); + } + } + + /// + /// + /// + /// + public override void ObservationsString(DataPoller recipient) { + recipient.PollData(string.Join("\n\n", + this.Sensors.Values.Select(e => $"{e.Identifier}:\n{e.ToString()}"))); + } + + protected override void SendToActors(Reaction reaction) { + if (reaction.Motions != null && reaction.Motions.Length > 0) { + foreach (var motion in reaction.Motions) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + motion + " To " + this.name + " actuator"); + } + #endif + var motion_actuator_name = motion.ActuatorName; + if (this.Actuators.ContainsKey(motion_actuator_name) + && this.Actuators[motion_actuator_name] != null) { + this.Actuators[motion_actuator_name].ApplyMotion(motion); + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Could find not actuator with the specified name: " + motion_actuator_name); + } + #endif + } + } + } + } + + /// + /// + protected override void InnerResetRegisteredObjects() { + foreach (var actuator in this.Actuators.Values) { + actuator?.PrototypingReset(); + } + } + + #endregion + + /// + /// + /// + /// + public override String ToString() { + var e = " - "; + + e += this.Identifier; + e += ", Sensors: "; + e += this.Sensors.Count; + e += ", Actuators: "; + e += this.Actuators.Count; + e += ", Objective: "; + e += this.ObjectiveFunction != null ? this.ObjectiveFunction.Identifier : "None"; + + return e; + } + } +} diff --git a/Runtime/Environments/Prototyping/PrototypingEnvironment.cs.meta b/Runtime/Environments/Prototyping/PrototypingEnvironment.cs.meta new file mode 100644 index 000000000..dbbcb5149 --- /dev/null +++ b/Runtime/Environments/Prototyping/PrototypingEnvironment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a2e55e7cb1b037a08e96ce3b11a9114 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: -20 + icon: {fileID: 2800000, guid: 4e08a2d574ba14804a3b42b6a9abc9dd, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Environments/PrototypingEnvironment.cs b/Runtime/Environments/PrototypingEnvironment.cs deleted file mode 100644 index ae07565bd..000000000 --- a/Runtime/Environments/PrototypingEnvironment.cs +++ /dev/null @@ -1,1311 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Prototyping.Evaluation; -using Neodroid.Runtime.Utilities.BoundingBoxes; -using Neodroid.Runtime.Utilities.Enums; -using Neodroid.Runtime.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Extensions; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; -using Object = System.Object; - -namespace Neodroid.Runtime.Environments { - /// - /// - /// Environment to be used with the prototyping components. - /// - [AddComponentMenu("Neodroid/Environments/PrototypingEnvironment")] - public class PrototypingEnvironment : NeodroidEnvironment, - IPrototypingEnvironment { - #region NeodroidCallbacks - - /// - /// - /// - protected override void PreSetup() { - if (this._objective_function == null) { - //this._objective_function = this.GetComponent(); - } - - if (!this.PlayableArea) { - this.PlayableArea = this.GetComponent(); - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Setting up"); - } - #endif - - if (this._tracked_game_objects == null || this._tracked_game_objects.Length == 0) { - this.SaveInitialPoses(); - this.SaveInitialAnimations(); - this.StartCoroutine(this.SaveInitialBodiesIe()); - } - } - - /// - /// - /// - protected override void Clear() { - this.Displayers.Clear(); - this.Configurables.Clear(); - this.Actors.Clear(); - this.Observers.Clear(); - this.Resetables.Clear(); - this.Listeners.Clear(); - } - - /// - /// - /// - public override void PostStep() { - this.PostStepEvent?.Invoke(); - if (this._Configure) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Configuring"); - } - #endif - this._Configure = false; - this.Configure(); - } - - if (!this._Simulation_Manager.IsSyncingEnvironments) { - this._ReplyWithDescriptionThisStep = false; - } - } - - /// - /// - /// - /// - public override Reaction SampleReaction() { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Sampling a reaction for environment {this.Identifier}"); - } - #endif - - this._sample_motions.Clear(); - - foreach (var actor in this.Actors) { - var actor_value = actor.Value; - if (actor_value != null && actor_value.Motors != null) { - foreach (var motor in actor_value.Motors) { - var motor_value = motor.Value; - if (motor_value != null) - this._sample_motions.Add(new MotorMotion(actor.Key, motor.Key, motor_value.Sample())); - } - } - } - - if (this._Terminated) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("SampleReaction resetting environment"); - } - #endif - - var reset_reaction = - new ReactionParameters(false, false, true, episode_count : true) {IsExternal = false}; - return new Reaction(reset_reaction, this.Identifier); - } - - var rp = new ReactionParameters(true, true, episode_count : true) {IsExternal = false}; - return new Reaction(rp, this._sample_motions.ToArray(), null, null, null, "", this.Identifier); - } - - /// - /// - /// - protected void UpdateObserversData() { - foreach (var obs in this.Observers.Values) { - obs?.UpdateObservation(); - } - } - - /// - /// - /// - protected void UpdateConfigurableValues() { - foreach (var con in this.Configurables.Values) { - con?.UpdateCurrentConfiguration(); - } - } - - #endregion - - #region Fields - - /// - /// - /// - [Header("References", order = 20), SerializeField] - ObjectiveFunction _objective_function; - - /// - /// - /// - [Header("General", order = 30), SerializeField] - Transform _coordinate_reference_point; - - /// - /// - /// - [SerializeField] - bool _track_only_children = true; - - /// - /// - /// - [SerializeField] - CoordinateSystem _coordinate_system = CoordinateSystem.Local_coordinates_; - - /// - /// - /// - [Header("(Optional)", order = 80), SerializeField] - BoundingBox _playable_area; - - /// - /// - /// - Object _react_lock = new Object(); - - [SerializeField] int _reset_i; - - WaitForFixedUpdate _wait_for_fixed_update = new WaitForFixedUpdate(); - List _observables = new List(); - List _sample_motions = new List(); - - #endregion - - #region PrivateMembers - - /// - /// - /// - Vector3[] _reset_positions; - - /// - /// - /// - Quaternion[] _reset_rotations; - - /// - /// - /// - GameObject[] _tracked_game_objects; - - /// - /// - /// - Vector3[] _reset_velocities; - - /// - /// - /// - Vector3[] _reset_angulars; - - /// - /// - /// - Rigidbody[] _tracked_rigid_bodies; - - /// - /// - /// - Transform[] _poses; - - /// - /// - /// - Pose[] _received_poses; - - /// - /// - /// - Body[] _received_bodies; - - /// - /// - /// - Configuration[] _received_configurations; - - /// - /// - /// - Animation[] _animations; - - /// - /// - /// - float[] _reset_animation_times; - - [SerializeField] bool _initials_saved_flag; - [SerializeField] bool _update_observations_with_every_tick; - - #endregion - - #region PublicMethods - - #region Getters - - /// - /// - /// - public Dictionary Displayers { get; } = new Dictionary(); - - /// - /// - /// - public Dictionary Configurables { get; } = new Dictionary(); - - /// - /// - /// - public Dictionary Actors { get; } = new Dictionary(); - - /// - /// - /// - public SortedDictionary Observers { get; } = new SortedDictionary(); - - /// - /// - /// - public Dictionary Resetables { get; } = new Dictionary(); - - /// - /// - /// - public Dictionary Listeners { get; } = - new Dictionary(); - - /// - /// - /// - public override string PrototypingTypeName { - get { return "PrototypingEnvironment"; } - } - - /// - /// - /// - public IObjective ObjectiveFunction { - get { return this._objective_function; } - set { this._objective_function = (ObjectiveFunction)value; } - } - - /// - /// - /// - public Transform Transform { - get { return this.transform; } - } - - /// - /// - /// - public BoundingBox PlayableArea { - get { return this._playable_area; } - set { this._playable_area = value; } - } - - /// - /// - /// - public Transform CoordinateReferencePoint { - get { return this._coordinate_reference_point; } - set { this._coordinate_reference_point = value; } - } - - /// - /// - /// - public CoordinateSystem CoordinateSystem { - get { return this._coordinate_system; } - set { this._coordinate_system = value; } - } - - #endregion - - /// - /// Termination of an episode, can be supplied with a reason for various purposes debugging or clarification for a learner. - /// - /// - public void Terminate(string reason = "None") { - lock (this._react_lock) { - if (this._Terminable) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.LogWarning($"Environment {this.Identifier} as terminated because {reason}"); - } - #endif - - this._Terminated = true; - this._LastTermination_Reason = reason; - } - } - } - - /// - /// - /// - /// - /// - public override EnvironmentState ReactAndCollectState(Reaction reaction) { - this.React(reaction); - - return this.CollectState(); - } - - /// - /// - /// - /// - /// - public override void React(Reaction reaction) { - lock (this._react_lock) { - this.LastReaction = reaction; - this._Terminable = reaction.Parameters.Terminable; - - if (reaction.Parameters.IsExternal) { - this._received_configurations = reaction.Configurations; - - if (!this._ReplyWithDescriptionThisStep) { - this._ReplyWithDescriptionThisStep = reaction.Parameters.Describe; - } - - this._Configure = reaction.Parameters.Configure; - if (this._Configure && reaction.Unobservables != null) { - this._received_poses = reaction.Unobservables.Poses; - this._received_bodies = reaction.Unobservables.Bodies; - } - } - - this.SendToDisplayers(reaction); - - if (reaction.Parameters.Reset) { - this.Terminate( - $"{(reaction.Parameters.IsExternal ? "External" : "Internal")} reaction caused a reset"); - this._Resetting = true; - } else if (reaction.Parameters.Step) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Stepping in environment({this.Identifier})"); - } - #endif - this.Step(reaction); - } - } - } - - /// - /// - /// - public override void Tick() { - if (this._Resetting) { - if (this._reset_i >= this._Simulation_Manager.SimulatorConfiguration.ResetIterations) { - this._Resetting = false; - this._reset_i = 0; - this.UpdateConfigurableValues(); - this.UpdateObserversData(); - } else { - this.EnvironmentReset(); - this._reset_i += 1; - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"Reset {this._reset_i}/{this._Simulation_Manager.SimulatorConfiguration.ResetIterations}"); - } - #endif - } else { - if (_update_observations_with_every_tick) { - this.UpdateObserversData(); - } - } - - - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Tick"); - } - #endif - } - - #region Registration - - /// - /// - /// - public void Register(IDisplayer displayer) { this.Register(displayer, displayer.Identifier); } - - /// - /// - /// - /// - /// - public void Register(IDisplayer obj, string identifier) { - if (!this.Displayers.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} has registered displayer {identifier}"); - } - #endif - this.Displayers.Add(identifier, obj); - } else { - Debug.LogWarning( - $"WARNING! Please check for duplicates, Environment {this.name} already has displayer {identifier} registered"); - } - } - - /// - /// - /// - /// - public void Register(IActor actor) { this.Register(actor, actor.Identifier); } - - /// - /// - /// - /// - /// - public void Register(IActor actor, string identifier) { - if (!this.Actors.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} has registered actor {identifier}"); - } - #endif - - this.Actors.Add(identifier, actor); - } else { - Debug.LogWarning( - $"WARNING! Please check for duplicates, Environment {this.name} already has actor {identifier} registered"); - } - } - - /// - /// - /// - /// - public void Register(IObserver observer) { this.Register(observer, observer.Identifier); } - - /// - /// /// - /// - /// - /// - public void Register(IObserver observer, string identifier) { - if (!this.Observers.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} has registered observer {identifier}"); - } - #endif - - this.Observers.Add(identifier, observer); - } else { - Debug.LogWarning( - $"WARNING! Please check for duplicates, Environment {this.name} already has observer {identifier} registered"); - } - } - - /// - /// - /// - /// - public void Register(IConfigurable configurable) { this.Register(configurable, configurable.Identifier); } - - /// - /// - /// - /// - /// - public void Register(IConfigurable configurable, string identifier) { - if (!this.Configurables.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} has registered configurable {identifier}"); - } - #endif - - this.Configurables.Add(identifier, configurable); - } else { - Debug.LogWarning( - $"WARNING! Please check for duplicates, Environment {this.name} already has configurable {identifier} registered"); - } - } - - /// - /// - /// - /// - /// - public void Register(IResetable resetable, string identifier) { - if (!this.Resetables.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} has registered resetable {identifier}"); - } - #endif - this.Resetables.Add(identifier, resetable); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"WARNING! Please check for duplicates, Environment {this.name} already has resetable {identifier} registered"); - } - #endif - } - } - - /// - /// - /// - /// - public void Register(IResetable resetable) { this.Register(resetable, resetable.Identifier); } - - public void Register(IEnvironmentListener environment_listener) { - this.Register(environment_listener, environment_listener.Identifier); - } - - public void Register(IEnvironmentListener environment_listener, string identifier) { - if (!this.Listeners.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} has registered listener {identifier}"); - } - #endif - this.Listeners.Add(identifier, environment_listener); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"WARNING! Please check for duplicates, Environment {this.name} already has listener {identifier} registered"); - } - #endif - } - } - - /// - /// - /// - /// - public void UnRegister(IActor actor) { this.UnRegister(actor, actor.Identifier); } - - public void UnRegister(IActor t, string obj) { - if (this.Actors.ContainsKey(obj)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} unregistered actor {obj}"); - } - #endif - this.Actors.Remove(obj); - } - } - - /// - /// - /// - /// - public void UnRegister(IObserver observer) { this.UnRegister(observer, observer.Identifier); } - - public void UnRegister(IObserver t, string identifier) { - if (this.Observers.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} unregistered observer {identifier}"); - } - #endif - this.Observers.Remove(identifier); - } - } - - /// - /// - /// - /// - public void UnRegister(IConfigurable configurable) { - this.UnRegister(configurable, configurable.Identifier); - } - - public void UnRegister(IConfigurable t, string identifier) { - if (this.Configurables.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} unregistered configurable {identifier}"); - } - #endif - this.Configurables.Remove(identifier); - } - } - - /// - /// - /// - /// - public void UnRegister(IDisplayer displayer) { this.UnRegister(displayer, displayer.Identifier); } - - public void UnRegister(IDisplayer t, string identifier) { - if (this.Displayers.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} unregistered configurable {identifier}"); - } - #endif - this.Displayers.Remove(identifier); - } - } - - /// - /// - /// - /// - public void UnRegister(IResetable resetable) { this.UnRegister(resetable, resetable.Identifier); } - - public void UnRegister(IResetable t, string identifier) { - if (this.Resetables.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} unregistered resetable {identifier}"); - } - #endif - this.Resetables.Remove(identifier); - } - } - - /// - /// - /// - /// - public void UnRegister(IEnvironmentListener environment_listener) { - this.UnRegister(environment_listener, environment_listener.Identifier); - } - - public void UnRegister(IEnvironmentListener t, string identifier) { - if (this.Listeners.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {this.name} unregistered listener {identifier}"); - } - #endif - this.Listeners.Remove(identifier); - } - } - - #endregion - - #region Transformations - - /// - /// - /// - /// - /// - public Vector3 TransformPosition(Vector3 position) { - if (this._coordinate_system == CoordinateSystem.Relative_to_reference_point_) { - if (this._coordinate_reference_point) { - return this._coordinate_reference_point.transform.InverseTransformPoint(position); - } - - return position; - } - - if (this._coordinate_system == CoordinateSystem.Local_coordinates_) { - return position - this.transform.position; - } - - return position; - } - - /// - /// - /// - /// - /// - public Vector3 InverseTransformPosition(Vector3 position) { - if (this._coordinate_system == CoordinateSystem.Relative_to_reference_point_) { - if (this._coordinate_reference_point) { - return this._coordinate_reference_point.transform.TransformPoint(position); - } - - return position; - } - - if (this._coordinate_system == CoordinateSystem.Local_coordinates_) { - return position - this.transform.position; - } - - return position; - } - - /// - /// - /// - /// - /// - public Vector3 TransformDirection(Vector3 direction) { - if (this._coordinate_system == CoordinateSystem.Relative_to_reference_point_) { - if (this._coordinate_reference_point) { - return this._coordinate_reference_point.transform.InverseTransformDirection(direction); - } - - return direction; - } - - if (this._coordinate_system == CoordinateSystem.Local_coordinates_) { - return this.transform.InverseTransformDirection(direction); - } - - return direction; - } - - /// - /// - /// - /// - /// - public Vector3 InverseTransformDirection(Vector3 direction) { - if (this._coordinate_system == CoordinateSystem.Relative_to_reference_point_) { - if (this._coordinate_reference_point) { - return this._coordinate_reference_point.transform.TransformDirection(direction); - } - - return direction; - } - - if (this._coordinate_system == CoordinateSystem.Local_coordinates_) { - return this.transform.InverseTransformDirection(direction); - } - - return direction; - } - - /// - /// - /// - /// - /// - public Quaternion TransformRotation(Quaternion quaternion) { - if (this._coordinate_system == CoordinateSystem.Relative_to_reference_point_) { - if (this._coordinate_reference_point) { - return Quaternion.Inverse(this._coordinate_reference_point.rotation) * quaternion; - } - - //Quaternion.Euler(this._coordinate_reference_point.transform.TransformDirection(quaternion.forward)); - } - - return quaternion; - } - - #endregion - - #endregion - - #region PrivateMethods - - /// - /// - /// - void SaveInitialPoses() { - var ignored_layer = LayerMask.NameToLayer("IgnoredByNeodroid"); - if (this._track_only_children) { - this._tracked_game_objects = - NeodroidUtilities.RecursiveChildGameObjectsExceptLayer(this.transform, ignored_layer); - } else { - this._tracked_game_objects = NeodroidUtilities.FindAllGameObjectsExceptLayer(ignored_layer); - } - - var length = this._tracked_game_objects.Length; - - this._reset_positions = new Vector3[length]; - this._reset_rotations = new Quaternion[length]; - this._poses = new Transform[length]; - for (var i = 0; i < length; i++) { - var go = this._tracked_game_objects[i]; - var trans = go.transform; - this._reset_positions[i] = trans.position; - this._reset_rotations[i] = trans.rotation; - this._poses[i] = trans; - var maybe_joint = go.GetComponent(); - if (maybe_joint != null) { - var maybe_joint_fix = maybe_joint.GetComponent(); - if (maybe_joint_fix == null) { - // ReSharper disable once RedundantAssignment - maybe_joint_fix = maybe_joint.gameObject.AddComponent(); - } - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Added a JointFix component to {maybe_joint_fix.name}"); - } - #endif - } - } - } - - /// - /// - /// - void SaveInitialBodies() { - /*var body_list = new List(); - foreach (var go in this._tracked_game_objects) { - if (go != null) { - var body = go.GetComponent(); - if (body) - body_list.Add(body); - } - } - this._bodies = body_list.ToArray(); - */ //Should be equalvalent to the line below, but kept as a reference in case of confusion - - this._tracked_rigid_bodies = this._tracked_game_objects.Where(go => go != null) - .Select(go => go.GetComponent()).Where(body => body).ToArray(); - - this._reset_velocities = new Vector3[this._tracked_rigid_bodies.Length]; - this._reset_angulars = new Vector3[this._tracked_rigid_bodies.Length]; - for (var i = 0; i < this._tracked_rigid_bodies.Length; i++) { - this._reset_velocities[i] = this._tracked_rigid_bodies[i].velocity; - this._reset_angulars[i] = this._tracked_rigid_bodies[i].angularVelocity; - } - } - - /// - /// - /// - void SaveInitialAnimations() { - this._animations = this._tracked_game_objects.Where(go => go != null) - .Select(go => go.GetComponent()).Where(anim => anim).ToArray(); - this._reset_animation_times = new float[this._animations.Length]; - for (var i = 0; i < this._animations.Length; i++) { - if (this._animations[i]) { - if (this._animations[i].clip) { - this._reset_animation_times[i] = - this._animations[i].CrossFadeQueued(this._animations[i].clip.name) - .time; //TODO: IS NOT USED AS RIGHT NOW and should use animations clips instead the legacy "clip.name". - //TODO: DOES NOT WORK - } - } - } - } - - /// - /// - /// - /// - IEnumerator SaveInitialBodiesIe() { - yield return this._wait_for_fixed_update; - this.SaveInitialBodies(); - } - - /// - /// - /// - /// - public override EnvironmentState CollectState() { - lock (this._react_lock) { - if (this.Actors != null) - foreach (var a in this.Actors.Values) { - if (a.Motors != null) - foreach (var m in a.Motors.Values) { - this._Energy_Spent += m.GetEnergySpend(); - } - } - - var signal = 0f; - - if (this._objective_function != null) { - signal = this._objective_function.Evaluate(); - } - - EnvironmentDescription description = null; - if (this._ReplyWithDescriptionThisStep) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Describing Environment"); - } - #endif - var threshold = 0f; - if (this._objective_function != null) { - threshold = this._objective_function.SolvedThreshold; - } - - description = new EnvironmentDescription( - this.EpisodeLength, - this.Actors, - this.Configurables, - threshold); - } - - this._observables.Clear(); - foreach (var item in this.Observers) { - if (item.Value != null) { - if (item.Value.FloatEnumerable != null) { - this._observables.AddRange(item.Value.FloatEnumerable); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Observer with key {item.Key} has a null FloatEnumerable value"); - } - #endif - } - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Observer with key {item.Key} has a null value"); - } - #endif - } - } - - var obs = this._observables.ToArray(); - - var time = Time.time - this._Lastest_Reset_Time; - - var state = new EnvironmentState( - this.Identifier, - this._Energy_Spent, - this.CurrentFrameNumber, - time, - signal, - this._Terminated, - ref obs, - this.LastTerminationReason, - description); - - if (this._Simulation_Manager.SimulatorConfiguration.AlwaysSerialiseUnobservables - || this._ReplyWithDescriptionThisStep) { - state.Unobservables = new Unobservables(ref this._tracked_rigid_bodies, ref this._poses); - } - - if (this._Simulation_Manager.SimulatorConfiguration.AlwaysSerialiseIndividualObservables - || this._ReplyWithDescriptionThisStep) { - state.Observers = this.Observers.Values.ToArray(); - } - - return state; - } - } - - /// - /// - /// - /// - public override void ObservationsString(DataPoller recipient) { - recipient.PollData( - string.Join( - "\n\n", - this.Observers.Values.Select(e => $"{e.Identifier}:\n{string.Join(",", e.FloatEnumerable)}"))); - } - - /// - /// - /// - public override void EnvironmentReset() { - this._Lastest_Reset_Time = Time.time; - this.CurrentFrameNumber = 0; - this._objective_function?.EnvironmentReset(); - - this.SetEnvironmentPoses(this._tracked_game_objects, this._reset_positions, this._reset_rotations); - this.SetEnvironmentBodies(this._tracked_rigid_bodies, this._reset_velocities, this._reset_angulars); - - this.ResetRegisteredObjects(); - this.Configure(); - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Reset called on environment {this.Identifier}"); - } - #endif - - this._Terminated = false; - } - - /// - /// - /// - protected void Configure() { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Configure was called"); - } - #endif - - if (this._received_poses != null) { - var positions = new Vector3[this._received_poses.Length]; - var rotations = new Quaternion[this._received_poses.Length]; - for (var i = 0; i < this._received_poses.Length; i++) { - positions[i] = this._received_poses[i].position; - rotations[i] = this._received_poses[i].rotation; - } - - this.SetEnvironmentPoses(this._tracked_game_objects, positions, rotations); - } - - if (this._received_bodies != null) { - var vels = new Vector3[this._received_bodies.Length]; - var angs = new Vector3[this._received_bodies.Length]; - for (var i = 0; i < this._received_bodies.Length; i++) { - vels[i] = this._received_bodies[i].Velocity; - angs[i] = this._received_bodies[i].AngularVelocity; - } - - this.SetEnvironmentBodies(this._tracked_rigid_bodies, vels, angs); - } - - if (this._received_configurations != null) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Configuration length: {this._received_configurations.Length}"); - } - #endif - foreach (var configuration in this._received_configurations) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Configuring configurable with the specified name: " + configuration.ConfigurableName); - } - #endif - if (this.Configurables.ContainsKey(configuration.ConfigurableName)) { - this.Configurables[configuration.ConfigurableName].ApplyConfiguration(configuration); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"Could find not configurable with the specified name: {configuration.ConfigurableName}"); - } - #endif - } - } - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Has no received_configurations"); - } - #endif - } - - this.UpdateConfigurableValues(); - this.UpdateObserversData(); - } - - /// - /// - /// - /// - void SendToDisplayers(Reaction reaction) { - if (reaction.Displayables != null && reaction.Displayables.Length > 0) { - foreach (var displayable in reaction.Displayables) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + displayable + " To " + this.name + "'s displayers"); - } - #endif - var displayable_name = displayable.DisplayableName; - if (this.Displayers.ContainsKey(displayable_name) && this.Displayers[displayable_name] != null) { - var v = displayable.DisplayableValue; - this.Displayers[displayable_name].Display(v); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Could find not displayer with the specified name: " + displayable_name); - } - #endif - } - } - } - } - - /// - /// - /// - /// - void SendToMotors(Reaction reaction) { - if (reaction.Motions != null && reaction.Motions.Length > 0) { - foreach (var motion in reaction.Motions) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + motion + " To " + this.name + "'s actors"); - } - #endif - var motion_actor_name = motion.ActorName; - if (this.Actors.ContainsKey(motion_actor_name) && this.Actors[motion_actor_name] != null) { - this.Actors[motion_actor_name].ApplyMotion(motion); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Could find not actor with the specified name: " + motion_actor_name); - } - #endif - } - } - } - } - - /// - /// - /// - public event Action PreStepEvent; - - /// - /// - /// - public event Action StepEvent; - - /// - /// - /// - public event Action PostStepEvent; - - /// - /// - /// - /// - void Step(Reaction reaction) { - lock (this._react_lock) { - this.PreStepEvent?.Invoke(); - - if (reaction.Parameters.EpisodeCount) { - this.CurrentFrameNumber++; - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.LogWarning("Step did not count towards CurrentFrameNumber"); - } - #endif - } - - this.SendToMotors(reaction); - - this.StepEvent?.Invoke(); - - if (this.EpisodeLength > 0 && this.CurrentFrameNumber >= this.EpisodeLength) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Maximum episode length reached, Length {this.CurrentFrameNumber}"); - } - #endif - - this.Terminate("Maximum episode length reached"); - } - - this.UpdateObserversData(); - } - } - - /// - /// - /// - protected void ResetRegisteredObjects() { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Resetting registered objects"); - } - #endif - - foreach (var configurable in this.Configurables.Values) { - configurable?.EnvironmentReset(); - } - - foreach (var resetable in this.Resetables.Values) { - resetable?.EnvironmentReset(); - } - - foreach (var actor in this.Actors.Values) { - actor?.EnvironmentReset(); - } - - foreach (var observer in this.Observers.Values) { - observer?.EnvironmentReset(); - } - - foreach (var listener in this.Listeners.Values) { - listener?.EnvironmentReset(); - } - } - - #region EnvironmentStateSetters - - /// - /// - /// - /// - /// - /// - void SetEnvironmentPoses(GameObject[] child_game_objects, Vector3[] positions, Quaternion[] rotations) { - if (this._Simulation_Manager != null) { - for (var iterations = 1; - iterations <= this._Simulation_Manager.SimulatorConfiguration.ResetIterations; - iterations++) { - for (var i = 0; i < child_game_objects.Length; i++) { - if (child_game_objects[i] != null && i < positions.Length && i < rotations.Length) { - var rigid_body = child_game_objects[i].GetComponent(); - if (rigid_body) { - rigid_body.Sleep(); - } - - child_game_objects[i].transform.position = positions[i]; - child_game_objects[i].transform.rotation = rotations[i]; - if (rigid_body) { - rigid_body.WakeUp(); - } - - var joint_fix = child_game_objects[i].GetComponent(); - if (joint_fix) { - joint_fix.Reset(); - } - - var anim = child_game_objects[i].GetComponent(); - if (anim) { - anim.Rewind(); - anim.Play(); - anim.Sample(); - anim.Stop(); - } - } - } - } - } - } - - /// - /// - /// - /// - /// - /// - void SetEnvironmentBodies(Rigidbody[] bodies, Vector3[] velocities, Vector3[] angulars) { - if (bodies != null && bodies.Length > 0) { - for (var i = 0; i < bodies.Length; i++) { - if (i < bodies.Length && bodies[i] != null && i < velocities.Length && i < angulars.Length) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"Setting {bodies[i].name}, velocity to {velocities[i]} and angular velocity to {angulars[i]}"); - } - - #endif - - bodies[i].Sleep(); - bodies[i].velocity = velocities[i]; - bodies[i].angularVelocity = angulars[i]; - bodies[i].WakeUp(); - } - } - } - } - - #endregion - - #endregion - } -} \ No newline at end of file diff --git a/Runtime/Environments/RandomisedEnvironment.cs b/Runtime/Environments/RandomisedEnvironment.cs index 76d20905e..02fe1bf15 100644 --- a/Runtime/Environments/RandomisedEnvironment.cs +++ b/Runtime/Environments/RandomisedEnvironment.cs @@ -1,31 +1,27 @@ -using UnityEngine; -using Random = System.Random; +using droid.Runtime.Environments.Prototyping; +using UnityEngine; -namespace Neodroid.Runtime.Environments { +namespace droid.Runtime.Environments { /// /// /// [AddComponentMenu("Neodroid/Environments/RandomisedEnvironment")] public class RandomisedEnvironment : PrototypingEnvironment { /// - /// - /// - Random _random_generator = new Random(); - - /// - /// /// void RandomiseEnvironment() { foreach (var configurable in this.Configurables) { - var value = configurable.Value.SampleConfiguration(this._random_generator); - configurable.Value.ApplyConfiguration(value); + var value = configurable.Value.SampleConfigurations(); + foreach (var v in value) { + configurable.Value.ApplyConfiguration(v); + } } } /// /// /// - protected override void PreSetup() { + public override void PreSetup() { base.PreSetup(); this.RandomiseEnvironment(); } @@ -34,20 +30,20 @@ protected override void PreSetup() { /// /// public override void PostStep() { - if (this._Terminated) { - this._Terminated = false; - this.EnvironmentReset(); + if (this.Terminated) { + this.Terminated = false; + this.PrototypingReset(); this.RandomiseEnvironment(); } - if (this._Configure) { - this._Configure = false; - this.Configure(); + if (this.Configure) { + this.Configure = false; + this.Reconfigure(); } - this.UpdateConfigurableValues(); - this.UpdateObserversData(); + this.LoopConfigurables(); + this.LoopSensors(); } } -} \ No newline at end of file +} diff --git a/Runtime/Environments/ScriptedEnviroment.cs b/Runtime/Environments/ScriptedEnviroment.cs index 29b3d0b4d..9466ed943 100644 --- a/Runtime/Environments/ScriptedEnviroment.cs +++ b/Runtime/Environments/ScriptedEnviroment.cs @@ -1,89 +1,85 @@ using System; using System.Collections.Generic; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using droid.Runtime.Managers; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Utilities; using UnityEngine; using Random = UnityEngine.Random; -namespace Neodroid.Runtime.Environments { +namespace droid.Runtime.Environments { /// /// /// [AddComponentMenu("Neodroid/Environments/ScriptedEnvironment")] public class ScriptedEnvironment : NeodroidEnvironment { /// - /// /// [SerializeField] - Renderer _actor_renderer; + Renderer _actor_renderer = null; /// - /// /// [SerializeField] - int _actor_x; + int _actor_x = 0; /// - /// /// [SerializeField] - int _actor_y; + int _actor_y = 0; /// - /// /// [SerializeField] - Renderer _goal_renderer; + Renderer _goal_renderer = null; /// - /// /// [SerializeField] - int _goal_x; + int _goal_x = 0; /// - /// /// [SerializeField] - int _goal_y; + int _goal_y = 0; /// - /// /// - int[,] _grid; + int[,] _grid = null; /// - /// /// [SerializeField] - int _height; + int _height = 0; + + List _motions = new List(); /// - /// /// [SerializeField] - IManager _time_simulation_manager; - - List _motions = new List(); + IManager _time_simulation_manager = null; /// - /// /// [SerializeField] - int _width; + int _width = 0; + + public override void RemotePostSetup() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("PostSetup"); + } + #endif + + } /// /// - /// /// public override string PrototypingTypeName { get { return "ScriptedEnvironment"; } } /// - /// /// public int ActorX { get { return this._actor_x; } @@ -91,7 +87,6 @@ public int ActorX { } /// - /// /// public int ActorY { get { return this._actor_y; } @@ -99,7 +94,6 @@ public int ActorY { } /// - /// /// public int GoalX { get { return this._goal_x; } @@ -107,7 +101,6 @@ public int GoalX { } /// - /// /// public int GoalY { get { return this._goal_y; } @@ -116,9 +109,8 @@ public int GoalY { /// /// - /// /// - protected override void Setup() { + public override void Setup() { this._grid = new int[this._width, this._height]; var k = 0; @@ -128,11 +120,13 @@ protected override void Setup() { } } - this._time_simulation_manager = (IManager)NeodroidUtilities.MaybeRegisterComponent( - (NeodroidManager)this._time_simulation_manager, - this); + this._time_simulation_manager = + NeodroidRegistrationUtilities.RegisterComponent((AbstractNeodroidManager)this + ._time_simulation_manager, + this); } + /// /// /// @@ -148,29 +142,21 @@ public override void PostStep() { /// /// - /// /// /// public override Reaction SampleReaction() { this._motions.Clear(); var strength = Random.Range(0, 4); - this._motions.Add(new MotorMotion("", "", strength)); - - var rp = new ReactionParameters(true, true, episode_count : true) {IsExternal = false}; - return new Reaction(rp, this._motions.ToArray(), null, null, null, ""); - } - - /// - /// - /// - /// - /// - /// - /// - public override EnvironmentState ReactAndCollectState(Reaction reaction) { - this.React(reaction); - return this.CollectState(); + this._motions.Add(new ActuatorMotion("", "", strength)); + + var rp = new ReactionParameters(StepResetObserve.Step_, true, episode_count : true); + return new Reaction(rp, + this._motions.ToArray(), + null, + null, + null, + ""); } public override void React(Reaction reaction) { @@ -199,18 +185,23 @@ public override void React(Reaction reaction) { /// public override void Tick() { } - public override EnvironmentState CollectState() { + public override EnvironmentSnapshot Snapshot() { var actor_idx = this._grid[this.ActorX, this.ActorY]; var goal_idx = this._grid[this.GoalX, this.GoalY]; var terminated = actor_idx == goal_idx; var signal = terminated ? 1 : 0; - var time = Time.time - this._Lastest_Reset_Time; + var time = Time.realtimeSinceStartup - this.LastResetTime; var observables = new float[] {actor_idx}; - return new EnvironmentState(this.Identifier, 0, 0, time, signal, terminated, ref observables); + return new EnvironmentSnapshot(this.Identifier, + 0, + time, + signal, + terminated, + ref observables); } /// @@ -218,9 +209,9 @@ public override EnvironmentState CollectState() { /// /// public override void ObservationsString(DataPoller recipient) { - recipient.PollData(this.CollectState().ToString()); + recipient.PollData(this.Snapshot().ToString()); } - public override void EnvironmentReset() { } + public override void PrototypingReset() { } } } diff --git a/Runtime/Utilities/GameObjects.meta b/Runtime/GameObjects.meta similarity index 77% rename from Runtime/Utilities/GameObjects.meta rename to Runtime/GameObjects.meta index 5a7958a4b..15ed6fc74 100644 --- a/Runtime/Utilities/GameObjects.meta +++ b/Runtime/GameObjects.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: afda4f922e71747149cb5759a19c8b47 +guid: bf359ef327bb2aca393323d75e5c4850 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/Utilities/BoundingBoxes.meta b/Runtime/GameObjects/BoundingBoxes.meta similarity index 100% rename from Runtime/Utilities/BoundingBoxes.meta rename to Runtime/GameObjects/BoundingBoxes.meta diff --git a/Runtime/GameObjects/BoundingBoxes/BoundingBox.cs b/Runtime/GameObjects/BoundingBoxes/BoundingBox.cs new file mode 100644 index 000000000..ac335d990 --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/BoundingBox.cs @@ -0,0 +1,770 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums.BoundingBox; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects.BoundingBoxes.Experimental; +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEditor; +using UnityEngine; + +#if UNITY_EDITOR + +#endif + +namespace droid.Runtime.GameObjects.BoundingBoxes { + /// + /// + /// + [ExecuteInEditMode] + public class BoundingBox : MonoBehaviour { + /// + /// + Transform _bb_transform = null; + + /// + /// + protected Bounds _Bounds = new Bounds(); + + /// + /// + protected Vector3 _Bounds_Offset; + + /// + /// + Collider[] _children_colliders = null; + + /// + /// + MeshFilter[] _children_meshes = null; + + GameObject _empty_go = null; + + /// + /// + Vector3[,] _lines = null; + + List _lines_list = new List(); + + Collider _local_collider; + + MeshFilter _local_mesh; + + Vector3 _point_bbl; + Vector3 _point_bbr; + Vector3 _point_bfl; + Vector3 _point_bfr; + Vector3 _point_tbl; + Vector3 _point_tbr; + Vector3 _point_tfl; + Vector3 _point_tfr; + + /// + /// + Vector3[] _points = null; + + #region fields + + /// + /// + [SerializeField] + public bool _use_bb_transform = false; + + [SerializeField] bool _use_shared_mesh = false; + + /// + /// + [SearchableEnum] + public BasedOn basedOn = BasedOn.Geometry_; + + /// + /// + [SerializeField] + float bb_margin = 0; + + /// + /// + [SerializeField] + BoundingBoxOrientation BbAligning = BoundingBoxOrientation.Axis_aligned_; + + /// + /// + [SerializeField] + bool cacheChildren = true; + + /// + /// + [SerializeField] + Color editorPreviewLineColor = new Color(1f, + 0.36f, + 0.38f, + 0.74f); + + /// + /// + [SerializeField] + ISpatialPrototypingEnvironment environment = null; + + /// + /// + [SerializeField] + bool freezeAfterFirstCalculation = true; + + /// + /// + [SerializeField] + bool includeChildren = false; + + /// + /// + [SerializeField] + bool _only_active_children = true; + + /// + /// + [SerializeField] + bool includeSelf = true; + + /// + /// + [SerializeField] + bool OnAwakeSetup = true; + + /// + /// + [SerializeField] + bool RunInEditModeSetup = false; + + #endregion + + #region Properties + + /// + /// + public Vector3[] BoundingBoxCoordinates { + get { + return new[] { + this._point_tfl, + this._point_tfr, + this._point_tbl, + this._point_tbr, + this._point_bfl, + this._point_bfr, + this._point_bbl, + this._point_bbr + }; + } + } + + /// + /// + public Bounds Bounds { get { return this._Bounds; } } + + public Vector3 Max { get { return this._Bounds.max; } } + + public Vector3 Min { get { return this._Bounds.min; } } + + /// + /// + public string BoundingBoxCoordinatesAsString { + get { + var str_rep = ""; + str_rep += $"\"_top_front_left\":{this.BoundingBoxCoordinates[0]}, "; + str_rep += $"\"_top_front_right\":{this.BoundingBoxCoordinates[1]}, "; + str_rep += $"\"_top_back_left\":{this.BoundingBoxCoordinates[2]}, "; + str_rep += $"\"_top_back_right\":{this.BoundingBoxCoordinates[3]}, "; + str_rep += $"\"_bottom_front_left\":{this.BoundingBoxCoordinates[4]}, "; + str_rep += $"\"_bottom_front_right\":{this.BoundingBoxCoordinates[5]}, "; + str_rep += $"\"_bottom_back_left\":{this.BoundingBoxCoordinates[6]}, "; + str_rep += $"\"_bottom_back_right\":{this.BoundingBoxCoordinates[7]}"; + return str_rep; + } + } + + /// + /// + public string BoundingBoxCoordinatesWorldSpaceAsJson { + get { + var str_rep = "{"; + var transform1 = this.transform; + if (this._use_bb_transform) { + transform1 = this._bb_transform; + } + + var rotation = transform1.rotation; + var position = transform1.position; + if (this.environment != null) { + str_rep += + $"\"top_front_left\":{JsonifyVec3(this.environment.TransformPoint(rotation * this._point_tfl + position))}, "; + str_rep += + $"\"bottom_back_right\":{JsonifyVec3(this.environment.TransformPoint(rotation * this._point_bbr + position))}"; + } + + str_rep += "}"; + return str_rep; + } + } + + /// + /// + public Vector3[,] Lines { get { return this._lines; } } + + /// + /// + public Vector3[] Points { get { return this._points; } } + + /// + /// + /// + public Color EditorPreviewLineColor { + get { return this.editorPreviewLineColor; } + set { this.editorPreviewLineColor = value; } + } + + #endregion + + /// + /// + /// + /// + /// + public Rect ScreenSpaceBoundingRect(Camera a_camera, float margin = 0f) { + if (this.basedOn == BasedOn.Collider_) { + var a = this._local_collider as MeshCollider; + if (a) { + return a.sharedMesh.GetCameraMinMaxRect(this.transform, a_camera, this.bb_margin - margin); + } + } + + if (this._local_mesh) { + if (this._use_shared_mesh || !Application.isPlaying) { + var a = this._local_mesh.sharedMesh.GetCameraMinMaxPoints(this.transform, a_camera); + if (this.includeChildren) { + foreach (var children_mesh in this._children_meshes) { + a = children_mesh.sharedMesh.GetCameraMinMaxPoints(children_mesh.transform, + a_camera, + a[0], + a[1]); + } + + return BoundingBoxUtilities.GetMinMaxRect(a[0], a[1], this.bb_margin - margin); + } + } else { + var a = this._local_mesh.mesh.GetCameraMinMaxPoints(this.transform, a_camera); + if (this.includeChildren) { + foreach (var children_mesh in this._children_meshes) { + a = children_mesh.mesh.GetCameraMinMaxPoints(children_mesh.transform, + a_camera, + a[0], + a[1]); + } + + return BoundingBoxUtilities.GetMinMaxRect(a[0], a[1], this.bb_margin - margin); + } + } + } else { + if (this._use_shared_mesh || !Application.isPlaying) { + if (this._children_meshes != null && this._children_meshes.Length > 0) { + var a = this._children_meshes[0].sharedMesh + .GetCameraMinMaxPoints(this._children_meshes[0].transform, a_camera); + if (this.includeChildren) { + for (var index = 1; index < this._children_meshes.Length; index++) { + var children_mesh = this._children_meshes[index]; + a = children_mesh.sharedMesh.GetCameraMinMaxPoints(children_mesh.transform, + a_camera, + a[0], + a[1]); + } + + return BoundingBoxUtilities.GetMinMaxRect(a[0], a[1], this.bb_margin - margin); + } + } + } else { + if (this._children_meshes != null && this._children_meshes.Length > 0) { + var a = this._children_meshes[0].mesh + .GetCameraMinMaxPoints(this._children_meshes[0].transform, a_camera); + if (this.includeChildren) { + for (var index = 1; index < this._children_meshes.Length; index++) { + var children_mesh = this._children_meshes[index]; + a = children_mesh.mesh.GetCameraMinMaxPoints(children_mesh.transform, + a_camera, + a[0], + a[1]); + } + + return BoundingBoxUtilities.GetMinMaxRect(a[0], a[1], this.bb_margin - margin); + } + } + } + } + + return new Rect(); + } + + /// + /// + /// + /// + static string JsonifyVec3(Vector3 vec) { return $"[{vec.x},{vec.y},{vec.z}]"; } + + /// + /// + void BoundingBoxReset() { + this.Awake(); + this.Start(); + } + + /// + /// + void Start() { + if (!this.OnAwakeSetup) { + this.Setup(); + } + } + + /// + /// + void Awake() { + if (!this.enabled) { + return; + } + + if (this.environment == null) { + this.environment = FindObjectOfType(); + } + + if (!this._bb_transform) { + this._empty_go = new GameObject {hideFlags = HideFlags.HideAndDontSave}; + this._bb_transform = this._empty_go.transform; + } + + if (this.OnAwakeSetup) { + this.Setup(); + } + } + + /// + /// + void Setup() { + if (!this.RunInEditModeSetup && !Application.isPlaying) { + return; + } + + if (!this._bb_transform) { + this._empty_go = new GameObject {hideFlags = HideFlags.HideAndDontSave}; + this._bb_transform = this._empty_go.transform; + } + + if (this.includeSelf) { + this._local_collider = this.GetComponent(); + this._local_mesh = this.GetComponent(); + } + + if (this.includeChildren) { + this._children_meshes = this.GetComponentsInChildren(); + this._children_colliders = this.GetComponentsInChildren(); + } + + this.CalculateBoundingBox(); + } + + /// + /// + void LateUpdate() { + if (this.freezeAfterFirstCalculation) { + return; + } + + if (this.includeChildren && !this.cacheChildren) { + if (this._children_meshes != this.GetComponentsInChildren()) { + this.BoundingBoxReset(); + } + + if (this._children_colliders != this.GetComponentsInChildren()) { + this.BoundingBoxReset(); + } + } else { + this.CalculateBoundingBox(); + } + } + + /// + /// + void FitCollidersAabb() { + var transform1 = this.transform; + this._bb_transform.rotation = transform1.rotation; + this._bb_transform.position = transform1.position; + + var bounds = new Bounds(this._bb_transform.position, Vector3.zero); + + if (this.includeSelf && this._local_collider) { + this._bb_transform.position = this._local_collider.bounds.center; + bounds = this._local_collider.bounds; + } + + if (this.includeChildren && this._children_colliders != null) { + foreach (var a_collider in this._children_colliders) { + if (a_collider && a_collider != this._local_collider) { + if (this._only_active_children) { + if (a_collider.gameObject.activeInHierarchy + && a_collider.gameObject.activeSelf + && a_collider.enabled) { + if (bounds.size == Vector3.zero) { + this._bb_transform.rotation = a_collider.transform.rotation; + this._bb_transform.position = a_collider.bounds.center; + bounds = a_collider.bounds; + } else { + bounds.Encapsulate(a_collider.bounds); + } + } + } else { + if (bounds.size == Vector3.zero) { + this._bb_transform.rotation = a_collider.transform.rotation; + this._bb_transform.position = a_collider.bounds.center; + bounds = a_collider.bounds; + } else { + bounds.Encapsulate(a_collider.bounds); + } + } + } + } + } + + this._Bounds = bounds; + this._Bounds_Offset = this._Bounds.center - this._bb_transform.position; + } + + /// + /// + void FitRenderersAabb() { + var transform1 = this.transform; + var position = transform1.position; + this._bb_transform.position = position; + this._bb_transform.rotation = transform1.rotation; + + var bounds = new Bounds(position, Vector3.zero); + + if (this.includeSelf && this._local_mesh) { + Mesh a_mesh; + + if (this._use_shared_mesh) { + a_mesh = this._local_mesh.sharedMesh; + } else { + a_mesh = this._local_mesh.mesh; + } + + if (a_mesh.isReadable) { + var vc = a_mesh.vertexCount; + for (var i = 0; i < vc; i++) { + bounds.Encapsulate(this._local_mesh.transform.TransformPoint(a_mesh.vertices[i])); + } + } else { + Debug.LogWarning("Make sure mesh is marked as readable when imported!"); + } + } + + if (this.includeChildren && this._children_meshes != null) { + foreach (var t in this._children_meshes) { + if (t) { + if (this._only_active_children) { + if (t.gameObject.activeInHierarchy && t.gameObject.activeSelf) { + if (bounds.size == Vector3.zero) { + var transform2 = t.transform; + position = transform2.position; + this._bb_transform.position = position; + this._bb_transform.rotation = transform2.rotation; + bounds = new Bounds(position, Vector3.zero); + } + + Mesh a_mesh; + + if (this._use_shared_mesh) { + a_mesh = t.sharedMesh; + } else { + a_mesh = t.mesh; + } + + if (a_mesh) { + if (a_mesh.isReadable) { + var vc = a_mesh.vertexCount; + for (var j = 0; j < vc; j++) { + bounds.Encapsulate(t.transform.TransformPoint(a_mesh.vertices[j])); + } + } else { + Debug.LogWarning("Make sure mesh is marked as readable when imported!"); + } + } + } + } else { + if (bounds.size == Vector3.zero) { + bounds = new Bounds(t.transform.position, Vector3.zero); + } + + Mesh a_mesh; + + if (this._use_shared_mesh) { + a_mesh = t.sharedMesh; + } else { + a_mesh = t.mesh; + } + + if (a_mesh) { + var vc = a_mesh.vertexCount; + for (var j = 0; j < vc; j++) { + bounds.Encapsulate(t.transform.TransformPoint(a_mesh.vertices[j])); + } + } + } + } + } + } + + this._Bounds = bounds; + this._Bounds_Offset = this._Bounds.center - position; + } + + /// + /// + void CalculateBoundingBox() { + if (!this.RunInEditModeSetup && !Application.isPlaying || this._bb_transform == null) { + return; + } + + if (this.basedOn == BasedOn.Collider_) { + switch (this.BbAligning) { + case BoundingBoxOrientation.Axis_aligned_: + this.FitCollidersAabb(); + this.RecalculatePoints(); + this.RecalculateLines(); + break; + case BoundingBoxOrientation.Object_oriented_: + this.FitCollidersOobb(); + break; + case BoundingBoxOrientation.Camera_oriented_: + this.FitRenderersCabb(); + break; + default: throw new ArgumentOutOfRangeException(); + } + } else { + switch (this.BbAligning) { + case BoundingBoxOrientation.Axis_aligned_: + this.FitRenderersAabb(); + this.RecalculatePoints(); + this.RecalculateLines(); + break; + case BoundingBoxOrientation.Object_oriented_: + this.FitRenderersOobb(); + break; + case BoundingBoxOrientation.Camera_oriented_: + this.FitRenderersCabb(); + + break; + default: throw new ArgumentOutOfRangeException(); + } + } + } + + void FitRenderersCabb() { + throw new NotImplementedException(); + + /* + var transform1 = this.transform; + var position = transform1.position; + this._bb_transform.position = position; + this._bb_transform.rotation = transform1.rotation; + + var a = this._local_mesh.sharedMesh.GetCameraMinMaxPoints(this._bb_transform, + this._camera, + this.use_view_port); + var min = a[0]; + var max = a[1]; + var extent = a[2]; + + if (this.use_view_port) { + min = this._camera.ViewportToWorldPoint(min); + max = this._camera.ViewportToWorldPoint(max); + } else { + min = this._camera.ScreenToWorldPoint(min); + max = this._camera.ScreenToWorldPoint(max); + extent = max - min; + } + + var cobb_extent = extent; + var cobb_center = + new Vector3(min.x + extent.x / 2.0f, min.y + extent.y / 2.0f, min.z + extent.z / 2.0f); + + this._point_tfr = cobb_center + Vector3.Scale(cobb_extent, BoundingBoxUtilities._Top_Front_Right); + this._point_tfl = cobb_center + Vector3.Scale(cobb_extent, BoundingBoxUtilities._Top_Front_Left); + this._point_tbl = cobb_center + Vector3.Scale(cobb_extent, BoundingBoxUtilities._Top_Back_Left); + this._point_tbr = cobb_center + Vector3.Scale(cobb_extent, BoundingBoxUtilities._Top_Back_Right); + this._point_bfr = cobb_center + Vector3.Scale(cobb_extent, BoundingBoxUtilities._Bottom_Front_Right); + this._point_bfl = cobb_center + Vector3.Scale(cobb_extent, BoundingBoxUtilities._Bottom_Front_Left); + this._point_bbl = cobb_center + Vector3.Scale(cobb_extent, BoundingBoxUtilities._Bottom_Back_Left); + this._point_bbr = cobb_center + Vector3.Scale(cobb_extent, BoundingBoxUtilities._Bottom_Back_Right); + + this._Bounds.center = cobb_center; + this._Bounds.extents = cobb_extent; + + this._points = new[] { + this._point_tfr, + this._point_tfl, + this._point_tbl, + this._point_tbr, + this._point_bfr, + this._point_bfl, + this._point_bbl, + this._point_bbr + }; + + var rot = Quaternion.identity; + var pos = Vector3.zero; + + //rot = transform1.rotation; + //pos = transform1.position; + + this._lines_list.Clear(); + + for (var i = 0; i < 4; i++) { + //width + var line = new[] {rot * this.Points[2 * i] + pos, rot * this.Points[2 * i + 1] + pos}; + this._lines_list.Add(line); + + //height + line = new[] {rot * this.Points[i] + pos, rot * this.Points[i + 4] + pos}; + this._lines_list.Add(line); + + //depth + line = new[] {rot * this.Points[2 * i] + pos, rot * this.Points[2 * i + 3 - 4 * (i % 2)] + pos}; + this._lines_list.Add(line); + } + + this._lines = new Vector3[BoundingBoxUtilities._Num_Lines, BoundingBoxUtilities._Num_Points_Per_Line]; + for (var j = 0; j < BoundingBoxUtilities._Num_Lines; j++) { + this.Lines[j, 0] = this._lines_list[j][0]; + this.Lines[j, 1] = this._lines_list[j][1]; + } + */ + } + + void FitRenderersOobb() { throw new NotImplementedException(); } + + void FitCollidersOobb() { throw new NotImplementedException(); } + + /// + /// + void RecalculatePoints() { + this._point_tfr = this._Bounds_Offset + + Vector3.Scale(this._Bounds.extents, BoundingBoxUtilities._Top_Front_Right); + this._point_tfl = this._Bounds_Offset + + Vector3.Scale(this._Bounds.extents, BoundingBoxUtilities._Top_Front_Left); + this._point_tbl = this._Bounds_Offset + + Vector3.Scale(this._Bounds.extents, BoundingBoxUtilities._Top_Back_Left); + this._point_tbr = this._Bounds_Offset + + Vector3.Scale(this._Bounds.extents, BoundingBoxUtilities._Top_Back_Right); + this._point_bfr = this._Bounds_Offset + + Vector3.Scale(this._Bounds.extents, BoundingBoxUtilities._Bottom_Front_Right); + this._point_bfl = this._Bounds_Offset + + Vector3.Scale(this._Bounds.extents, BoundingBoxUtilities._Bottom_Front_Left); + this._point_bbl = this._Bounds_Offset + + Vector3.Scale(this._Bounds.extents, BoundingBoxUtilities._Bottom_Back_Left); + this._point_bbr = this._Bounds_Offset + + Vector3.Scale(this._Bounds.extents, BoundingBoxUtilities._Bottom_Back_Right); + + this._points = new[] { + this._point_tfr, + this._point_tfl, + this._point_tbl, + this._point_tbr, + this._point_bfr, + this._point_bfl, + this._point_bbl, + this._point_bbr + }; + } + + /// + /// + void RecalculateLines() { + var transform1 = this.transform; + if (this._bb_transform) { + transform1 = this._bb_transform; + } + + var rot = Quaternion.identity; + var pos = Vector3.zero; + if (this._use_bb_transform) { + rot = transform1.rotation; + } + + pos = transform1.position; + + this._lines_list.Clear(); + + for (var i = 0; i < 4; i++) { + //width + var line = new[] {rot * this.Points[2 * i] + pos, rot * this.Points[2 * i + 1] + pos}; + this._lines_list.Add(line); + + //height + line = new[] {rot * this.Points[i] + pos, rot * this.Points[i + 4] + pos}; + this._lines_list.Add(line); + + //depth + line = new[] {rot * this.Points[2 * i] + pos, rot * this.Points[2 * i + 3 - 4 * (i % 2)] + pos}; + this._lines_list.Add(line); + } + + this._lines = new Vector3[BoundingBoxUtilities._Num_Lines, BoundingBoxUtilities._Num_Points_Per_Line]; + for (var j = 0; j < BoundingBoxUtilities._Num_Lines; j++) { + this.Lines[j, 0] = this._lines_list[j][0]; + this.Lines[j, 1] = this._lines_list[j][1]; + } + } + + /// + /// + void OnMouseDown() { + //if (_permanent) + // return; + //this.enabled = !this.enabled; + } + + #if UNITY_EDITOR + /// + /// + void OnValidate() { + if (!this.enabled) { + return; + } + + if (EditorApplication.isPlaying) { + return; + } + + this.CalculateBoundingBox(); + } + + /// + /// + void OnDrawGizmosSelected() { + if (this.enabled) { + Gizmos.color = this.editorPreviewLineColor; + + if (this.Lines != null) { + for (var i = 0; i < this.Lines.GetLength(0); i++) { + Gizmos.DrawLine(this.Lines[i, 0], this.Lines[i, 1]); + } + } else { + Gizmos.DrawWireCube(this.Bounds.center, this.Bounds.size); + } + + if (this._bb_transform) { + Handles.Label(this._bb_transform.position, this.name); + } else { + Handles.Label(this.transform.position, this.name); + } + } + } + #endif + } +} diff --git a/Runtime/Utilities/BoundingBoxes/BoundingBox.cs.meta b/Runtime/GameObjects/BoundingBoxes/BoundingBox.cs.meta similarity index 78% rename from Runtime/Utilities/BoundingBoxes/BoundingBox.cs.meta rename to Runtime/GameObjects/BoundingBoxes/BoundingBox.cs.meta index 53212c840..2352d417b 100644 --- a/Runtime/Utilities/BoundingBoxes/BoundingBox.cs.meta +++ b/Runtime/GameObjects/BoundingBoxes/BoundingBox.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: db43f7d76c98f4ba1bb808154c33d6bb, type: 3} + icon: {fileID: 2800000, guid: af4792457046746828ff2d22efe682aa, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Runtime/GameObjects/BoundingBoxes/Draw3DBoundingBox.cs b/Runtime/GameObjects/BoundingBoxes/Draw3DBoundingBox.cs new file mode 100644 index 000000000..53a15eaff --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Draw3DBoundingBox.cs @@ -0,0 +1,156 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace droid.Runtime.GameObjects.BoundingBoxes { + /// + /// + /// + [RequireComponent(typeof(Camera))] + [ExecuteInEditMode] + public class Draw3DBoundingBox : MonoBehaviour { + List _colors = new List(); + [SerializeField] Material _line_material; + List _names = new List(); + + List _outlines = new List(); + + //List _triangles = new List(); + //[SerializeField] GUISkin _gui_skin; + + Camera _camera; + [SerializeField] bool _draw_label = true; + BoundingBox[] _bounding_boxes; + [SerializeField] bool _cacheBoundingBoxes = true; + + void Awake() { + if (!this._line_material) { + var shader = Shader.Find("Unlit/Color"); + this._line_material = new Material(shader); + } + + //GUI.skin = this._gui_skin; + + this._camera = this.GetComponent(); + } + + void OnPostRender() { + if (this._outlines == null) { + return; + } + + if (this._line_material) { + this._line_material.SetPass(0); + } + + GL.Begin(GL.LINES); + for (var j = 0; j < this._outlines.Count; j++) { + GL.Color(this._colors[j]); + for (var i = 0; i < this._outlines[j].GetLength(0); i++) { + GL.Vertex(this._outlines[j][i, 0]); + GL.Vertex(this._outlines[j][i, 1]); + } + } + + GL.End(); +/* + GL.Begin(GL.TRIANGLES); + + for (var j = 0; j < this._triangles.Count; j++) { + GL.Color(this._colors[j]); + for (var i = 0; i < this._triangles[j].GetLength(0); i++) { + GL.Vertex(this._triangles[j][i, 0]); + GL.Vertex(this._triangles[j][i, 1]); + GL.Vertex(this._triangles[j][i, 2]); + } + } + + GL.End(); + */ + } + + /// + /// + /// + /// + /// + public void SetOutlines(Vector3[,] new_outlines, Color new_color, GameObject game_object) { + if (new_outlines == null) { + return; + } + + if (this._outlines == null) { + return; + } + + if (new_outlines.GetLength(0) > 0) { + this._outlines.Add(new_outlines); + this._colors.Add(new_color); + this._names.Add(game_object); + } + } +/* + /// + /// + /// + /// + /// + public void SetTriangles(Vector3[,] new_triangles, Color new_color, GameObject game_object) { + if (new_triangles == null) { + return; + } + + if (this._triangles == null) { + return; + } + + if (new_triangles.GetLength(0) > 0) { + this._colors.Add(new_color); + this._triangles.Add(new_triangles); + this._names.Add(game_object); + } + } +*/ + + void OnPreRender() { + this._outlines.Clear(); + this._colors.Clear(); + this._names.Clear(); + //this._triangles.Clear(); + if (!this._cacheBoundingBoxes || this._bounding_boxes == null || this._bounding_boxes.Length == 0) { + this._bounding_boxes = FindObjectsOfType(); + } + + foreach (var bb in this._bounding_boxes) { + if (bb) { + this.SetOutlines(bb.Lines, bb.EditorPreviewLineColor, bb.gameObject); + } + } + } + + const float _padding = 4; + + void OnGUI() { + if (this._draw_label) { + var i = 0; + foreach (var t in this._outlines) { + var point = t[0, 0]; + var box_position = this._camera.WorldToScreenPoint(point); + box_position.y = Screen.height - box_position.y; + + var text = this._names[i].name; + + var content = GUI.skin.box.CalcSize(new GUIContent(text)); + content.x = content.x + _padding; + content.y = content.y + _padding; + var rect = new Rect(box_position.x - content.x / 2, + box_position.y - content.y / 2, + content.x, + content.y); + GUI.Box(rect, text); + //GUI.Label(this._rect, text); + i++; + } + } + } + } +} diff --git a/Runtime/GameObjects/BoundingBoxes/Draw3DBoundingBox.cs.meta b/Runtime/GameObjects/BoundingBoxes/Draw3DBoundingBox.cs.meta new file mode 100644 index 000000000..8002a52bf --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Draw3DBoundingBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b5262a22bdff171d9c6615614469b95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: af4792457046746828ff2d22efe682aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/BoundingBoxes/DrawScreenSpaceBoundingBox.cs b/Runtime/GameObjects/BoundingBoxes/DrawScreenSpaceBoundingBox.cs new file mode 100644 index 000000000..f1cba8f2f --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/DrawScreenSpaceBoundingBox.cs @@ -0,0 +1,84 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace droid.Runtime.GameObjects.BoundingBoxes { + /// + /// + /// + [RequireComponent(typeof(Camera))] + [ExecuteInEditMode] + public class DrawScreenSpaceBoundingBox : MonoBehaviour { + List _names = new List(); + List _rects = new List(); + Camera _camera = null; + + [SerializeField] bool _draw_label = true; + [SerializeField] BoundingBox[] bounding_boxes = null; + [SerializeField] bool _cache_bounding_boxes = false; + [SerializeField] GUISkin gui_style = null; + [SerializeField] bool _draw_coords = false; + + void Awake() { + if (!this._camera) { + this._camera = this.GetComponent(); + } + + if (!this.gui_style) { + this.gui_style = Resources.FindObjectsOfTypeAll().First(a => a.name == "BoundingBox"); + } + + this.bounding_boxes = FindObjectsOfType(); + } + + void Compute() { + this._rects.Clear(); + this._names.Clear(); + + if (!this._cache_bounding_boxes) { + this.bounding_boxes = FindObjectsOfType(); + } + + foreach (var bb in this.bounding_boxes) { + if (this._camera.WorldToScreenPoint(bb.Bounds.center).z < 0) { + return; + } + + var a = bb.ScreenSpaceBoundingRect(this._camera); + + this._rects.Add(a); + this._names.Add(bb.name); + } + } + + void OnGUI() { + if (this.gui_style) { + GUI.skin = this.gui_style; + } + + this.Draw(); + } + + void Draw() { + this.Compute(); + var i = 0; + foreach (var rect in this._rects) { + var text = ""; + if (this._draw_label) { + text += $"{this._names[i]}"; + } + + if (this._draw_coords) { + text += $"\n{rect}\n{rect.center}"; + } + + var a = rect; + a.y = Screen.height - (a.y + a.height); + + GUI.Box(a, text); + + i++; + } + } + } +} diff --git a/Runtime/GameObjects/BoundingBoxes/DrawScreenSpaceBoundingBox.cs.meta b/Runtime/GameObjects/BoundingBoxes/DrawScreenSpaceBoundingBox.cs.meta new file mode 100644 index 000000000..52e5445b1 --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/DrawScreenSpaceBoundingBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a69c9a240ee53baafadb71c70054e1ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: af4792457046746828ff2d22efe682aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/BoundingBoxes/Experimental.meta b/Runtime/GameObjects/BoundingBoxes/Experimental.meta similarity index 100% rename from Runtime/Utilities/BoundingBoxes/Experimental.meta rename to Runtime/GameObjects/BoundingBoxes/Experimental.meta diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/BoundingBoxUtilities.cs b/Runtime/GameObjects/BoundingBoxes/Experimental/BoundingBoxUtilities.cs new file mode 100644 index 000000000..a64031c2c --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/BoundingBoxUtilities.cs @@ -0,0 +1,185 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.GameObjects.BoundingBoxes.Experimental { + /// + /// + /// + public static class BoundingBoxUtilities { + /// + /// + /// + public const int _Num_Points_Per_Line = 2; + + public const int _Num_Lines = 12; + public static Vector3 _Top_Front_Right = new Vector3(1, 1, 1); + public static Vector3 _Top_Front_Left = new Vector3(-1, 1, 1); + public static Vector3 _Bottom_Back_Right = new Vector3(1, -1, -1); + public static Vector3 _Bottom_Back_Left = new Vector3(-1, -1, -1); + public static Vector3 _Bottom_Front_Left = new Vector3(-1, -1, 1); + public static Vector3 _Bottom_Front_Right = new Vector3(1, -1, 1); + public static Vector3 _Top_Back_Right = new Vector3(1, 1, -1); + public static Vector3 _Top_Back_Left = new Vector3(-1, 1, -1); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static Vector3[] GetCameraMinMaxPoints(this Mesh mesh, + Transform t, + Camera cam, + Vector3 min, + Vector3 max, + bool use_view_port = false) { + var a = mesh.vertices; + + Vector3 point; + + foreach (var t1 in a) { + if (use_view_port) { + point = cam.WorldToViewportPoint(t.TransformPoint(t1)); + } else { + point = cam.WorldToScreenPoint(t.TransformPoint(t1)); + } + + point.GetMinMax(ref min, ref max); + } + + var size = max - min; + + return new[] {min, max, size}; + } + + /// + /// + /// + /// + /// + /// + /// + /// + public static Vector3[] GetCameraMinMaxPoints(this Mesh mesh, + Transform t, + Camera cam, + bool use_view_port = false) { + var a = mesh.vertices; + + Vector3 min; + if (use_view_port) { + min = cam.WorldToViewportPoint(t.TransformPoint(a[0])); + } else { + min = cam.WorldToScreenPoint(t.TransformPoint(a[0])); + } + + var max = min; + + var point = min; + point.GetMinMax(ref min, ref max); + + for (var i = 1; i < a.Length; i++) { + if (use_view_port) { + point = cam.WorldToViewportPoint(t.TransformPoint(a[i])); + } else { + point = cam.WorldToScreenPoint(t.TransformPoint(a[i])); + } + + point.GetMinMax(ref min, ref max); + } + + var size = max - min; + + return new[] {min, max, size}; + } + + /// + /// + /// + /// + /// + /// + /// + /// + public static Rect GetCameraMinMaxRect(this Mesh mesh, + Transform t, + Camera cam, + float margin = 0, + bool use_viewport = false) { + var cen = mesh.GetCameraMinMaxPoints(t, cam, use_viewport); + var min = cen[0]; + var max = cen[1]; + + var r = Rect.MinMaxRect(min.x, + min.y, + max.x, + max.y); + r.xMin -= margin; + r.xMax += margin; + r.yMin -= margin; + r.yMax += margin; + + return r; + } + + public static Rect GetMinMaxRect(Vector3 min, Vector3 max, float margin = 0) { + var r = Rect.MinMaxRect(min.x, + min.y, + max.x, + max.y); + r.xMin -= margin; + r.xMax += margin; + r.yMin -= margin; + r.yMax += margin; + + return r; + } + + /// + /// + /// + /// + /// + /// + /// + public static Rect Normalise(this Rect rect, float width, float height) { + if (width < float.Epsilon || Math.Abs(height) < float.Epsilon) { + return new Rect(); + } + + return new Rect { + x = rect.x / width, + width = rect.width / width, + y = rect.y / width, + height = rect.height / height + }; + } + + /// + /// + /// + /// + /// + /// + public static Bounds TransformBounds(this Transform transform, Bounds local_bounds) { + var center = transform.TransformPoint(local_bounds.center); + + // transform the local extents' axes + var extents = local_bounds.extents; + var axis_x = transform.TransformVector(extents.x, 0, 0); + var axis_y = transform.TransformVector(0, extents.y, 0); + var axis_z = transform.TransformVector(0, 0, extents.z); + + // sum their absolute value to get the world extents + extents.x = Mathf.Abs(axis_x.x) + Mathf.Abs(axis_y.x) + Mathf.Abs(axis_z.x); + extents.y = Mathf.Abs(axis_x.y) + Mathf.Abs(axis_y.y) + Mathf.Abs(axis_z.y); + extents.z = Mathf.Abs(axis_x.z) + Mathf.Abs(axis_y.z) + Mathf.Abs(axis_z.z); + + return new Bounds {center = center, extents = extents}; + } + } +} diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/BoundingBoxUtilities.cs.meta b/Runtime/GameObjects/BoundingBoxes/Experimental/BoundingBoxUtilities.cs.meta new file mode 100644 index 000000000..e363208f7 --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/BoundingBoxUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a00e52ae110c4ae4a3c5fe6b3588001 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: af4792457046746828ff2d22efe682aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/Corners.cs b/Runtime/GameObjects/BoundingBoxes/Experimental/Corners.cs new file mode 100644 index 000000000..78c13d3ae --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/Corners.cs @@ -0,0 +1,242 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.GameObjects.BoundingBoxes.Experimental { + /// + /// + public static class Corners { + public static Vector3[] ExtractCorners(Vector3 v3_center, + Vector3 v3_extents, + Transform reference_transform = null) { + var v3_front_top_left = new Vector3(v3_center.x - v3_extents.x, + v3_center.y + v3_extents.y, + v3_center.z - v3_extents.z); // Front top left corner + var v3_front_top_right = new Vector3(v3_center.x + v3_extents.x, + v3_center.y + v3_extents.y, + v3_center.z - v3_extents.z); // Front top right corner + var v3_front_bottom_left = new Vector3(v3_center.x - v3_extents.x, + v3_center.y - v3_extents.y, + v3_center.z - v3_extents.z); // Front bottom left corner + var v3_front_bottom_right = new Vector3(v3_center.x + v3_extents.x, + v3_center.y - v3_extents.y, + v3_center.z - v3_extents.z); // Front bottom right corner + var v3_back_top_left = new Vector3(v3_center.x - v3_extents.x, + v3_center.y + v3_extents.y, + v3_center.z + v3_extents.z); // Back top left corner + var v3_back_top_right = new Vector3(v3_center.x + v3_extents.x, + v3_center.y + v3_extents.y, + v3_center.z + v3_extents.z); // Back top right corner + var v3_back_bottom_left = new Vector3(v3_center.x - v3_extents.x, + v3_center.y - v3_extents.y, + v3_center.z + v3_extents.z); // Back bottom left corner + var v3_back_bottom_right = new Vector3(v3_center.x + v3_extents.x, + v3_center.y - v3_extents.y, + v3_center.z + v3_extents.z); // Back bottom right corner + if (reference_transform) { + v3_front_top_left = reference_transform.TransformPoint(v3_front_top_left); + v3_front_top_right = reference_transform.TransformPoint(v3_front_top_right); + v3_front_bottom_left = reference_transform.TransformPoint(v3_front_bottom_left); + v3_front_bottom_right = reference_transform.TransformPoint(v3_front_bottom_right); + v3_back_top_left = reference_transform.TransformPoint(v3_back_top_left); + v3_back_top_right = reference_transform.TransformPoint(v3_back_top_right); + v3_back_bottom_left = reference_transform.TransformPoint(v3_back_bottom_left); + v3_back_bottom_right = reference_transform.TransformPoint(v3_back_bottom_right); + } + + return new[] { + v3_front_top_left, + v3_front_top_right, + v3_front_bottom_left, + v3_front_bottom_right, + v3_back_top_left, + v3_back_top_right, + v3_back_bottom_left, + v3_back_bottom_right + }; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static void DrawBox(Vector3 v3_front_top_left, + Vector3 v3_front_top_right, + Vector3 v3_front_bottom_left, + Vector3 v3_front_bottom_right, + Vector3 v3_back_top_left, + Vector3 v3_back_top_right, + Vector3 v3_back_bottom_left, + Vector3 v3_back_bottom_right, + Color color) { + Debug.DrawLine(v3_front_top_left, v3_front_top_right, color); + Debug.DrawLine(v3_front_top_right, v3_front_bottom_right, color); + Debug.DrawLine(v3_front_bottom_right, v3_front_bottom_left, color); + Debug.DrawLine(v3_front_bottom_left, v3_front_top_left, color); + + Debug.DrawLine(v3_back_top_left, v3_back_top_right, color); + Debug.DrawLine(v3_back_top_right, v3_back_bottom_right, color); + Debug.DrawLine(v3_back_bottom_right, v3_back_bottom_left, color); + Debug.DrawLine(v3_back_bottom_left, v3_back_top_left, color); + + Debug.DrawLine(v3_front_top_left, v3_back_top_left, color); + Debug.DrawLine(v3_front_top_right, v3_back_top_right, color); + Debug.DrawLine(v3_front_bottom_right, v3_back_bottom_right, color); + Debug.DrawLine(v3_front_bottom_left, v3_back_bottom_left, color); + } + + /// + /// Draws a Circle using Debug.Draw functions + /// + /// Center point. + /// Radius of the circle. + /// Color for Debug.Draw. + /// Number of segments for the circle, used for precision of the draw. + /// Duration to show the circle. + public static void DrawCircle(Vector2 center, + float radius, + Color color, + float num_segments = 40, + float duration = 0.01f) { + var rot_quaternion = Quaternion.AngleAxis(360.0f / num_segments, Vector3.forward); + var vertex_start = new Vector2(radius, 0.0f); + for (var i = 0; i < num_segments; i++) { + Vector2 rotated_point = rot_quaternion * vertex_start; + + // Draw the segment, shifted by the center + Debug.DrawLine(center + vertex_start, + center + rotated_point, + color, + duration); + + vertex_start = rotated_point; + } + } + + /// + /// Draws a box using Debug.Draw functions + /// + /// World top left corner. + /// World bottom right corner. + /// Color for Debug.Draw. + /// Duration to show the box. + public static void DrawBox(Vector2 world_top_left, + Vector2 world_bottom_right, + Color color, + float duration = 0.01f) { + var world_top_right = new Vector2(world_bottom_right.x, world_top_left.y); + var world_bottom_left = new Vector2(world_top_left.x, world_bottom_right.y); + + Debug.DrawLine(world_top_left, + world_bottom_left, + color, + duration); + Debug.DrawLine(world_bottom_left, + world_bottom_right, + color, + duration); + Debug.DrawLine(world_bottom_right, + world_top_right, + color, + duration); + Debug.DrawLine(world_top_right, + world_top_left, + color, + duration); + } + + /// + /// Draws an array of edges, where an edge is defined by two Vector2 points, using Debug.Draw + /// + /// World points, defining each vertex of an edge in world space. + /// Color for Debug.Draw. + /// Duration to show the edges. + public static void DrawEdges(Vector2[] world_points, Color color, float duration = 0.01f) { + // Draw each segment except the last + for (var i = 0; i < world_points.Length - 1; i++) { + Vector3 next_point = world_points[i + 1]; + Vector3 current_point = world_points[i]; + Debug.DrawLine(current_point, + next_point, + color, + duration); + } + } + + /// + /// Draws a polygon, defined by all verteces of the polygon, using Debug.Draw + /// + /// World points, defining each vertex of the polygon in world space. + /// Color for Debug.Draw. + /// Duration to show the polygon. + public static void DrawPolygon(Vector2[] world_points, Color color, float duration = 0.01f) { + DrawEdges(world_points, color, duration); + + // Polygons are just edges with the first and last points connected + if (world_points.Length > 1) { + Debug.DrawLine(world_points[world_points.Length - 1], + world_points[0], + color, + duration); + } + } + + /// + /// Draws an arrow using Debug.Draw + /// + /// Origin point in world space. + /// Endpoint in world space. + /// Color for Debug.Draw. + /// Duration to show the arrow. + public static void DrawArrow(Vector2 origin, Vector2 endpoint, Color color, float duration = 0.01f) { + // Draw the line that makes up the body of the arrow + Debug.DrawLine(origin, + endpoint, + color, + 0.01f); + + // Draw arrowhead so we can see direction + var arrow_direction = endpoint - origin; + DebugDrawArrowhead(endpoint, + arrow_direction.normalized, + GetArrowSizeForLine(arrow_direction), + color, + duration); + } + + static float GetArrowSizeForLine(Vector2 line) { + const Single default_arrow_percentage = 0.05f; + return (line * default_arrow_percentage).magnitude; + } + + static void DebugDrawArrowhead(Vector2 origin, + Vector2 direction, + float size, + Color color, + float duration = 0.01f, + float theta = 30.0f) { + // Theta angle is the acute angle of the arrow, so flip direction or else arrow will be pointing "backwards" + var arrowhead_handle = -direction * size; + + var arrow_rotation_r = Quaternion.AngleAxis(theta, Vector3.forward); + Vector2 arrowhead_r = arrow_rotation_r * arrowhead_handle; + Debug.DrawLine(origin, + origin + arrowhead_r, + color, + duration); + + var arrow_rotation_l = Quaternion.AngleAxis(-theta, Vector3.forward); + Vector2 arrowhead_l = arrow_rotation_l * arrowhead_handle; + Debug.DrawLine(origin, + origin + arrowhead_l, + color, + duration); + } + } +} diff --git a/Runtime/Utilities/BoundingBoxes/Corners.cs.meta b/Runtime/GameObjects/BoundingBoxes/Experimental/Corners.cs.meta similarity index 100% rename from Runtime/Utilities/BoundingBoxes/Corners.cs.meta rename to Runtime/GameObjects/BoundingBoxes/Experimental/Corners.cs.meta diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/DrawBoundingBoxes.cs b/Runtime/GameObjects/BoundingBoxes/Experimental/DrawBoundingBoxes.cs new file mode 100644 index 000000000..e51c2ecde --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/DrawBoundingBoxes.cs @@ -0,0 +1,73 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace droid.Runtime.GameObjects.BoundingBoxes.Experimental { + /// + /// + /// + [ExecuteInEditMode] + public class ShowBoundingBoxes : MonoBehaviour { + public Color _Color = Color.green; + public GameObject _Line_Object; + Dictionary _lines = new Dictionary(); + + MeshFilter[] _mesh_filter_objects; + + void ReallocateLineRenderers() { + this._mesh_filter_objects = FindObjectsOfType(); + this._lines.Clear(); + } + + // void OnWillRenderObject() { throw new System.NotImplementedException(); } + + void Update() { + if (this._lines == null || this._mesh_filter_objects == null) { + this.ReallocateLineRenderers(); + } + + this.CalcPositionsAndDrawBoxes(); + } + + void CalcPositionsAndDrawBoxes() { + foreach (var mesh_filter_object in this._mesh_filter_objects) { + if (mesh_filter_object.gameObject.CompareTag("Target")) { + GameObject liner; + if (!this._lines.ContainsKey(mesh_filter_object.gameObject)) { + liner = Instantiate(this._Line_Object, this._Line_Object.transform); + this._lines.Add(mesh_filter_object.gameObject, liner); + } else { + Debug.Log("found Target"); + liner = this._lines[mesh_filter_object.gameObject]; + } + + var bounds = mesh_filter_object.mesh.bounds; + + //Bounds bounds; + //BoxCollider bc = GetComponent(); + //if (bc != null) + // bounds = bc.bounds; + //else + //return; + + var v3_center = bounds.center; + var v3_extents = bounds.extents; + + var corners = Corners.ExtractCorners(v3_center, v3_extents, mesh_filter_object.transform); + + liner.GetComponent().SetPosition(0, corners[4]); + liner.GetComponent().SetPosition(1, corners[5]); + + Corners.DrawBox(corners[0], + corners[1], + corners[2], + corners[3], + corners[4], + corners[5], + corners[6], + corners[7], + this._Color); + } + } + } + } +} diff --git a/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxes.cs.meta b/Runtime/GameObjects/BoundingBoxes/Experimental/DrawBoundingBoxes.cs.meta similarity index 100% rename from Runtime/Utilities/BoundingBoxes/DrawBoundingBoxes.cs.meta rename to Runtime/GameObjects/BoundingBoxes/Experimental/DrawBoundingBoxes.cs.meta diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/Unused.meta b/Runtime/GameObjects/BoundingBoxes/Experimental/Unused.meta new file mode 100644 index 000000000..69db1dc38 --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/Unused.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6015fea9bf954faeb2ddfec834fa51c1 +timeCreated: 1552906291 \ No newline at end of file diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/Unused/BoundingBoxUtilities.cs b/Runtime/GameObjects/BoundingBoxes/Experimental/Unused/BoundingBoxUtilities.cs new file mode 100644 index 000000000..6e0005f95 --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/Unused/BoundingBoxUtilities.cs @@ -0,0 +1,420 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.BoundingBoxes.Experimental.Unused { + public static class BoundingBoxUtilities { + /// + /// + /// + /// + /// + /// + public static void DrawBoxFromCenter(Vector3 p, float r, Color c) { + // p is pos.yition of the center, r is "radius" and c is the color of the box + //Bottom lines + Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(r + p.x, -r + p.y, -r + p.z), c); + Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(-r + p.x, -r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(-r + p.x, -r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(r + p.x, -r + p.y, -r + p.z), c); + + //Vertical lines + Debug.DrawLine(new Vector3(-r + p.x, r + p.y, -r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); + Debug.DrawLine(new Vector3(-r + p.x, r + p.y, -r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, r + p.y, r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, r + p.y, r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); + + //Top lines + Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(-r + p.x, r + p.y, -r + p.z), c); + Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, -r + p.y, -r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(r + p.x, r + p.y, r + p.z), c); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public static void DrawRect(float x_size, float y_size, float z_size, Vector3 pos, Color color) { + var x = x_size / 2; + var y = y_size / 2; + var z = z_size / 2; + + //Vertical lines + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(-x + pos.x, y + pos.y, -z + pos.z), + color); + Debug.DrawLine(new Vector3(x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(x + pos.x, y + pos.y, -z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, z + pos.z), + new Vector3(-x + pos.x, y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(x + pos.x, -y + pos.y, z + pos.z), + new Vector3(x + pos.x, y + pos.y, z + pos.z), + color); + + //Horizontal top + Debug.DrawLine(new Vector3(-x + pos.x, y + pos.y, -z + pos.z), + new Vector3(x + pos.x, y + pos.y, -z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, y + pos.y, z + pos.z), + new Vector3(x + pos.x, y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, y + pos.y, -z + pos.z), + new Vector3(-x + pos.x, y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(x + pos.x, y + pos.y, -z + pos.z), + new Vector3(x + pos.x, y + pos.y, z + pos.z), + color); + + //Horizontal bottom + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(x + pos.x, -y + pos.y, -z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, z + pos.z), + new Vector3(x + pos.x, -y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(-x + pos.x, -y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(x + pos.x, -y + pos.y, z + pos.z), + color); + } + + /// + /// + /// + /// + /// + /// + public static bool DidTransformsChange( + Transform[] old_transforms, + Transform[] newly_acquired_transforms) { + if (old_transforms.Length != newly_acquired_transforms.Length) { + return true; + } + + var i = 0; + foreach (var old in old_transforms) { + if (old.position != newly_acquired_transforms[i].position + || old.rotation != newly_acquired_transforms[i].rotation) { + return true; + } + + i++; + } + + return false; + } + + /// + /// + /// + /// + /// + public static Bounds GetTotalMeshFilterBounds(Transform object_transform) { + var mesh_filter = object_transform.GetComponent(); + + var result = mesh_filter != null ? mesh_filter.mesh.bounds : new Bounds(); + + foreach (Transform transform in object_transform) { + var bounds = GetTotalMeshFilterBounds(transform); + result.Encapsulate(bounds.min); + result.Encapsulate(bounds.max); + } + + /*var bounds1 = GetTotalColliderBounds(objectTransform); + result.Encapsulate(bounds1.min); + result.Encapsulate(bounds1.max); + */ + /* + foreach (Transform transform in objectTransform) { + var bounds = GetTotalColliderBounds(transform); + result.Encapsulate(bounds.min); + result.Encapsulate(bounds.max); + } + */ + var scaled_min = result.min; + var local_scale = object_transform.localScale; + scaled_min.Scale(local_scale); + result.min = scaled_min; + var scaled_max = result.max; + scaled_max.Scale(local_scale); + result.max = scaled_max; + return result; + } + + /// + /// + /// + /// + public static Bounds GetTotalColliderBounds(Transform object_transform) { + var mesh_filter = object_transform.GetComponent(); + + var result = mesh_filter != null ? mesh_filter.bounds : new Bounds(); + + foreach (Transform transform in object_transform) { + var bounds = GetTotalColliderBounds(transform); + result.Encapsulate(bounds.min); + result.Encapsulate(bounds.max); + } + + var scaled_min = result.min; + var local_scale = object_transform.localScale; + scaled_min.Scale(local_scale); + result.min = scaled_min; + var scaled_max = result.max; + scaled_max.Scale(local_scale); + result.max = scaled_max; + return result; + } + + /// + /// + /// + /// + public static Bounds GetMaxBounds(GameObject g) { + var b = new Bounds(g.transform.position, Vector3.zero); + foreach (var r in g.GetComponentsInChildren()) { + b.Encapsulate(r.bounds); + } + + return b; + } + + /// + /// + /// + /// + /// + /// + /// + public static Rect GetBoundsScreenRectEncapsulationSlow(this Bounds bounds, + Camera cam, + float margin = 0) { + var rect = new Rect(); + + var points = new Vector3[8]; + var screen_pos = new Vector3[8]; + + var b = bounds; // reference object ex Simple + points[0] = new Vector3(b.min.x, b.min.y, b.min.z); + points[1] = new Vector3(b.max.x, b.min.y, b.min.z); + points[2] = new Vector3(b.max.x, b.max.y, b.min.z); + points[3] = new Vector3(b.min.x, b.max.y, b.min.z); + points[4] = new Vector3(b.min.x, b.min.y, b.max.z); + points[5] = new Vector3(b.max.x, b.min.y, b.max.z); + points[6] = new Vector3(b.max.x, b.max.y, b.max.z); + points[7] = new Vector3(b.min.x, b.max.y, b.max.z); + + var screen_bounds = new Bounds(); + for (var i = 0; i < 8; i++) { + screen_pos[i] = cam.WorldToScreenPoint(points[i]); + + if (i == 0) { + screen_bounds = new Bounds(screen_pos[0], Vector3.zero); + } + + screen_bounds.Encapsulate(screen_pos[i]); + } + + //Debug.Log(screen_bounds.ToString()); + + rect.xMin = screen_bounds.min.x; + rect.yMin = screen_bounds.min.y; + rect.xMax = screen_bounds.max.x; + rect.yMax = screen_bounds.max.y; + + return rect; + } + + /* + /// + /// + /// + /// + /// + /// + /// + public static Rect GetBoundingBoxScreenRect(this BoundingBox bb, Camera cam, Single margin = 0) { + var min = Vector2.zero; + + if (bb != null && bb.Points?.Length > 0) { + if (bb._use_bb_transform && bb._bb_transform) { + min = cam.WorldToScreenPoint(bb._bb_transform.TransformPoint(bb.Points[0])); + } else { + min = cam.WorldToScreenPoint(bb.Points[0]); + } + } + + var max = min; + + var point = min; + GetMinMax(point, ref min, ref max); + + if (bb != null) { + for (var i = 1; i < bb.Points?.Length; i++) { + if (bb._use_bb_transform && bb._bb_transform) { + point = cam.WorldToScreenPoint(bb._bb_transform.TransformPoint(bb.Points[i])); + } else { + point = cam.WorldToScreenPoint(bb.Points[i]); + } + + GetMinMax(point, ref min, ref max); + } + } + + var r = Rect.MinMaxRect(min.x, min.y, max.x, max.y); + r.xMin -= margin; + r.xMax += margin; + r.yMin -= margin; + r.yMax += margin; + + return r; + } + */ + + /// + /// + /// + /// + /// + /// + /// + public static void CalculateLimits(Camera a_cam, + Bounds a_area, + out Rect a_limits, + out float a_max_height) { + // Half the FOV angle in radians + var angle = a_cam.fieldOfView * Mathf.Deg2Rad * 0.5f; + + // half the size of the viewing frustum at a distance of "1" from the camera + var tan = Vector2.one * Mathf.Tan(angle); + tan.x *= a_cam.aspect; + + // the center point of the area and it's extents + // the center point is taken from the bottom center of the bounding box + var dim = a_area.extents; + var center = a_area.center - new Vector3(0, a_area.extents.y, 0); + + // the maximum distance the camera can be above the area plane for each direction + var max_dist = new Vector2(dim.x / tan.x, dim.z / tan.y); + + // actual distance of the camera above our plane + var dist = a_cam.transform.position.y - center.y; + + // the max movement range around the center of the plane + dim.x *= 1f - dist / max_dist.x; + dim.z *= 1f - dist / max_dist.y; + + // maximum world space y coordinate the camera can be moved to + a_max_height = center.y + Mathf.Min(max_dist.x, max_dist.y); + + // the min and max x and z coordinates the camera can be at the current distance. + a_limits = new Rect(center.x - dim.x, + center.z - dim.z, + dim.x * 2, + dim.z * 2); + } + + public static bool CullToFrustum(Mesh mesh, Camera cam, Transform trans, bool update_position) { + var fov = cam.fieldOfView; + cam.fieldOfView = fov * 0.97f; + var planes = GeometryUtility.CalculateFrustumPlanes(cam); + cam.fieldOfView = fov; + if (GeometryUtility.TestPlanesAABB(planes, mesh.bounds)) { + return true; + } + + Debug.Log("Culling :" + trans.name); + return false; + } + + /// + /// + /// + /// + /// + /// + /// + /// + public static Rect GetMinMaxRect(this Bounds bounds, Transform t, Camera cam, float margin = 0) { + var cen = bounds.center; + var ext = bounds.extents; + + var x_min = cen.x - ext.x; + var y_min = cen.y - ext.y; + var z_min = cen.z - ext.z; + var x_max = cen.x + ext.x; + var y_max = cen.y + ext.y; + var z_max = cen.z + ext.z; + + Vector2 min = cam.WorldToScreenPoint(new Vector3(x_min, y_min, z_min)); + var max = min; + + var point = min; + point.GetMinMax(ref min, ref max); + + point = cam.WorldToScreenPoint(new Vector3(x_max, y_max, z_max)); + point.GetMinMax(ref min, ref max); + + point = cam.WorldToScreenPoint(new Vector3(x_max, y_min, z_min)); + point.GetMinMax(ref min, ref max); + + point = cam.WorldToScreenPoint(new Vector3(x_min, y_max, z_min)); + point.GetMinMax(ref min, ref max); + + point = cam.WorldToScreenPoint(new Vector3(x_min, y_min, z_max)); + point.GetMinMax(ref min, ref max); + + point = cam.WorldToScreenPoint(new Vector3(x_max, y_min, z_max)); + point.GetMinMax(ref min, ref max); + + point = cam.WorldToScreenPoint(new Vector3(x_max, y_max, z_min)); + point.GetMinMax(ref min, ref max); + + point = cam.WorldToScreenPoint(new Vector3(x_min, y_max, z_max)); + point.GetMinMax(ref min, ref max); + + var r = Rect.MinMaxRect(min.x, + min.y, + max.x, + max.y); + r.xMin -= margin; + r.xMax += margin; + r.yMin -= margin; + r.yMax += margin; + + return r; + } + + /// + /// + /// + /// + /// + public static float MaxDim(this Vector3 vec) { return Mathf.Max(vec.x, vec.y, vec.z); } + + /// + /// + /// + /// + /// + public static float MinDim(this Vector3 vec) { return Mathf.Min(vec.x, vec.y, vec.z); } + + /// + /// + /// + /// + /// + /// + /// + public static Vector3[] GetMinMaxPoints(this MeshCollider mesh, Transform t, Camera cam) { + return mesh.sharedMesh.GetCameraMinMaxPoints(t, cam); + } + } +} diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/Unused/BoundingBoxUtilities.cs.meta b/Runtime/GameObjects/BoundingBoxes/Experimental/Unused/BoundingBoxUtilities.cs.meta new file mode 100644 index 000000000..83c25309f --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/Unused/BoundingBoxUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a2b8de5172ef2ad08fb6dd97d1f1a50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/VectorSpace.cs b/Runtime/GameObjects/BoundingBoxes/Experimental/VectorSpace.cs new file mode 100644 index 000000000..cc65cd15c --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/VectorSpace.cs @@ -0,0 +1,37 @@ +using System.Runtime.CompilerServices; +using UnityEngine; + +namespace droid.Runtime.GameObjects.BoundingBoxes.Experimental { + /// + /// + /// + public static class VectorSpace { + /// + /// + /// + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetMinMax(this Vector2 point, ref Vector2 min, ref Vector2 max) { + min = new Vector2(min.x >= point.x ? point.x : min.x, min.y >= point.y ? point.y : min.y); + max = new Vector2(max.x <= point.x ? point.x : max.x, max.y <= point.y ? point.y : max.y); + } + + /// + /// + /// + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetMinMax(this Vector3 point, ref Vector3 min, ref Vector3 max) { + min = new Vector3(min.x >= point.x ? point.x : min.x, + min.y >= point.y ? point.y : min.y, + min.z >= point.z ? point.z : min.z); + max = new Vector3(max.x <= point.x ? point.x : max.x, + max.y <= point.y ? point.y : max.y, + max.z <= point.z ? point.z : max.z); + } + } +} diff --git a/Runtime/GameObjects/BoundingBoxes/Experimental/VectorSpace.cs.meta b/Runtime/GameObjects/BoundingBoxes/Experimental/VectorSpace.cs.meta new file mode 100644 index 000000000..169f9e2d4 --- /dev/null +++ b/Runtime/GameObjects/BoundingBoxes/Experimental/VectorSpace.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0276b01f5fa642aebec7433757302175 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 74cbd222f712445a5a713d322a8c730c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Sensors.meta b/Runtime/GameObjects/ChildSensors.meta similarity index 100% rename from Runtime/Utilities/Sensors.meta rename to Runtime/GameObjects/ChildSensors.meta diff --git a/Runtime/GameObjects/ChildSensors/ChildCollider2DSensor.cs b/Runtime/GameObjects/ChildSensors/ChildCollider2DSensor.cs new file mode 100644 index 000000000..df86d6953 --- /dev/null +++ b/Runtime/GameObjects/ChildSensors/ChildCollider2DSensor.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.ChildSensors { + /// + /// + /// + public class ChildCollider2DSensor : ChildColliderSensor { + void OnTriggerEnter2D(Collider2D other) { + this._on_trigger_enter_delegate?.Invoke(this.gameObject, other); + } + + void OnTriggerStay2D(Collider2D other) { this._on_trigger_stay_delegate?.Invoke(this.gameObject, other); } + void OnTriggerExit2D(Collider2D other) { this._on_trigger_exit_delegate?.Invoke(this.gameObject, other); } + + void OnCollisionEnter2D(Collision2D collision) { + this._on_collision_enter_delegate?.Invoke(this.gameObject, collision); + } + + void OnCollisionStay2D(Collision2D collision) { + this._on_collision_stay_delegate?.Invoke(this.gameObject, collision); + } + + void OnCollisionExit2D(Collision2D collision) { + this._on_collision_exit_delegate?.Invoke(this.gameObject, collision); + } + } +} diff --git a/Runtime/GameObjects/ChildSensors/ChildCollider2DSensor.cs.meta b/Runtime/GameObjects/ChildSensors/ChildCollider2DSensor.cs.meta new file mode 100644 index 000000000..8d2e7483d --- /dev/null +++ b/Runtime/GameObjects/ChildSensors/ChildCollider2DSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc7956a79788b0c4c856692a61a14a27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 544a7ab396cb843e6a4c43fcfe553321, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/ChildSensors/ChildCollider3DSensor.cs b/Runtime/GameObjects/ChildSensors/ChildCollider3DSensor.cs new file mode 100644 index 000000000..18e7e71f6 --- /dev/null +++ b/Runtime/GameObjects/ChildSensors/ChildCollider3DSensor.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.ChildSensors { + /// + /// + /// + public class ChildCollider3DSensor : ChildColliderSensor { + void OnTriggerEnter(Collider other) { this._on_trigger_enter_delegate?.Invoke(this.gameObject, other); } + void OnTriggerStay(Collider other) { this._on_trigger_stay_delegate?.Invoke(this.gameObject, other); } + void OnTriggerExit(Collider other) { this._on_trigger_exit_delegate?.Invoke(this.gameObject, other); } + + void OnCollisionEnter(Collision collision) { + this._on_collision_enter_delegate?.Invoke(this.gameObject, collision); + } + + void OnCollisionStay(Collision collision) { + this._on_collision_stay_delegate?.Invoke(this.gameObject, collision); + } + + void OnCollisionExit(Collision collision) { + this._on_collision_exit_delegate?.Invoke(this.gameObject, collision); + } + } +} diff --git a/Runtime/GameObjects/ChildSensors/ChildCollider3DSensor.cs.meta b/Runtime/GameObjects/ChildSensors/ChildCollider3DSensor.cs.meta new file mode 100644 index 000000000..d6bab62a8 --- /dev/null +++ b/Runtime/GameObjects/ChildSensors/ChildCollider3DSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac14dd0370c56774e91b517e351983e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 544a7ab396cb843e6a4c43fcfe553321, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/ChildSensors/ChildColliderSensor.cs b/Runtime/GameObjects/ChildSensors/ChildColliderSensor.cs new file mode 100644 index 000000000..19b253dbf --- /dev/null +++ b/Runtime/GameObjects/ChildSensors/ChildColliderSensor.cs @@ -0,0 +1,130 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.ChildSensors { + /// + /// + /// + public abstract class ChildColliderSensor : MonoBehaviour + where TCollider : Component { + /// + /// + /// + /// + public delegate void OnChildCollisionEnterDelegate(GameObject child_sensor_game_object, + TCollision collision); + + /// + /// + /// + /// + public delegate void OnChildCollisionExitDelegate(GameObject child_sensor_game_object, + TCollision collision); + + /// + /// + /// + /// + public delegate void OnChildCollisionStayDelegate(GameObject child_sensor_game_object, + TCollision collision); + + /// + /// + /// + /// + public delegate void OnChildTriggerEnterDelegate(GameObject child_sensor_game_object, TCollider collider); + + /// + /// + /// + /// + public delegate void OnChildTriggerExitDelegate(GameObject child_sensor_game_object, TCollider collider); + + /// + /// + /// + /// + public delegate void OnChildTriggerStayDelegate(GameObject child_sensor_game_object, TCollider collider); + + /// + /// + /// + [SerializeField] + protected Component _caller; + + /// + /// + /// + [SerializeField] + protected OnChildCollisionEnterDelegate _on_collision_enter_delegate; + + /// + /// + /// + [SerializeField] + protected OnChildCollisionExitDelegate _on_collision_exit_delegate; + + /// + /// + /// + [SerializeField] + protected OnChildCollisionStayDelegate _on_collision_stay_delegate; + + /// + /// + /// + [SerializeField] + protected OnChildTriggerEnterDelegate _on_trigger_enter_delegate; + + /// + /// + /// + [SerializeField] + protected OnChildTriggerExitDelegate _on_trigger_exit_delegate; + + /// + /// + /// + [SerializeField] + protected OnChildTriggerStayDelegate _on_trigger_stay_delegate; + + /// + /// + public OnChildCollisionEnterDelegate OnCollisionEnterDelegate { + set { this._on_collision_enter_delegate = value; } + } + + /// + /// + public OnChildTriggerEnterDelegate OnTriggerEnterDelegate { + set { this._on_trigger_enter_delegate = value; } + } + + /// + /// + public OnChildTriggerStayDelegate OnTriggerStayDelegate { + set { this._on_trigger_stay_delegate = value; } + } + + /// + /// + public OnChildCollisionStayDelegate OnCollisionStayDelegate { + set { this._on_collision_stay_delegate = value; } + } + + /// + /// + public OnChildCollisionExitDelegate OnCollisionExitDelegate { + set { this._on_collision_exit_delegate = value; } + } + + /// + /// + public OnChildTriggerExitDelegate OnTriggerExitDelegate { + set { this._on_trigger_exit_delegate = value; } + } + + /// + /// + public Component Caller { get { return this._caller; } set { this._caller = value; } } + } +} diff --git a/Runtime/Utilities/Sensors/ChildColliderSensor.cs.meta b/Runtime/GameObjects/ChildSensors/ChildColliderSensor.cs.meta similarity index 100% rename from Runtime/Utilities/Sensors/ChildColliderSensor.cs.meta rename to Runtime/GameObjects/ChildSensors/ChildColliderSensor.cs.meta diff --git a/Runtime/GameObjects/Flipping.meta b/Runtime/GameObjects/Flipping.meta new file mode 100644 index 000000000..7897ee422 --- /dev/null +++ b/Runtime/GameObjects/Flipping.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fae73f522a85b0237b2e2d317caa490f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/Flipping/Flip.compute b/Runtime/GameObjects/Flipping/Flip.compute new file mode 100644 index 000000000..860b9cf4f --- /dev/null +++ b/Runtime/GameObjects/Flipping/Flip.compute @@ -0,0 +1,15 @@ + #pragma kernel Flip +// Create a RenderTexture with enableRandomWrite flag and set it +// with cs.SetTexture +RWTexture2D Result; +Texture2D ImageInput; +int width; +int height; + +float2 flip; +[numthreads(8,8,1)] +void Flip (uint3 id : SV_DispatchThreadID) +{ + flip = float2(width , height) - id.xy ; + Result[id.xy] = float4(ImageInput[flip].x, ImageInput[flip].y, ImageInput[flip].z, 1.0); +} diff --git a/Runtime/GameObjects/Flipping/Flip.compute.meta b/Runtime/GameObjects/Flipping/Flip.compute.meta new file mode 100644 index 000000000..996e7c0a7 --- /dev/null +++ b/Runtime/GameObjects/Flipping/Flip.compute.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 971a09b9c1fe45848a30bddde090dd47 +timeCreated: 1568099886 \ No newline at end of file diff --git a/Runtime/GameObjects/Flipping/Flipper.cs b/Runtime/GameObjects/Flipping/Flipper.cs new file mode 100644 index 000000000..e826b3e62 --- /dev/null +++ b/Runtime/GameObjects/Flipping/Flipper.cs @@ -0,0 +1,48 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.Flipping { + /// + /// + /// + public class Flipper : MonoBehaviour { + [SerializeField] ComputeShader _shader; + [SerializeField] Texture2D _texture_2d; + + void Start() { this._texture_2d = new Texture2D(256, 256); } + + /// + /// + /// + /// + /// + public void FlipImage(Texture my_texture, Texture2D result) { + var kernel_handle = this._shader.FindKernel("Flip"); + var tex = new RenderTexture(my_texture.width, my_texture.height, 24) {enableRandomWrite = true}; + tex.Create(); + + this._shader.SetTexture(kernel_handle, "Result", tex); + this._shader.SetTexture(kernel_handle, "ImageInput", my_texture); + this._shader.SetInt("width", my_texture.width); + this._shader.SetInt("height", my_texture.height); + this._shader.Dispatch(kernel_handle, + my_texture.width / 8, + my_texture.height / 8, + 1); + + RenderTexture.active = tex; + result.ReadPixels(new Rect(0, + 0, + tex.width, + tex.height), + 0, + 0); + result.Apply(); + } + + void OnRenderImage(RenderTexture src, RenderTexture dest) { + this.FlipImage(src, this._texture_2d); + + Graphics.Blit(this._texture_2d, dest); + } + } +} diff --git a/Runtime/GameObjects/Flipping/Flipper.cs.meta b/Runtime/GameObjects/Flipping/Flipper.cs.meta new file mode 100644 index 000000000..71e25118b --- /dev/null +++ b/Runtime/GameObjects/Flipping/Flipper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4562f24b22454f94a9a9c6a9ddbd9d3d +timeCreated: 1568139312 \ No newline at end of file diff --git a/Runtime/GameObjects/NeodroidCamera.meta b/Runtime/GameObjects/NeodroidCamera.meta new file mode 100644 index 000000000..6f7326bff --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7397c53712cc2fd5a95a9c9fcd84fa9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/CameraFitter.cs b/Runtime/GameObjects/NeodroidCamera/CameraFitter.cs new file mode 100644 index 000000000..e4f6c985c --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/CameraFitter.cs @@ -0,0 +1,118 @@ +using System.Collections; +using droid.Runtime.GameObjects.BoundingBoxes; +using droid.Runtime.GameObjects.BoundingBoxes.Experimental.Unused; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + [RequireComponent(typeof(Camera))] + public class CameraFitter : MonoBehaviour { + [SerializeField] BoundingBox bb; + [SerializeField] float margin = 0f; + Camera _camera; + + void Start() { + if (!this.bb) { + this.bb = FindObjectOfType(); + } + + if (!this._camera) { + this._camera = this.GetComponent(); + } + } + + void OnPreRender() { + if (this.bb) { + this._camera.transform.LookAt(this.bb.transform); + var radius = this.bb.Bounds.extents.MaxDim(); + this._camera.MoveToDisplayInstant(radius, this.bb.transform.position, this.margin); + } + } + } + + /// + /// + /// + public static class Utils { + // cam - camera to use + // center - screen pixel center + // pixelHeight - height of the rectangle in pixels + // time - time to take zooming + static IEnumerator ZoomToDisplay(this Camera cam, Vector3 center, float pixel_height, float time) { + var cam_tran = cam.transform; + var ray = cam.ScreenPointToRay(center); + var end_rotation = Quaternion.LookRotation(ray.direction); + var position = cam_tran.position; + var end_position = ProjectPointOnPlane(cam_tran.forward, position, ray.origin); + var opp = Mathf.Tan(cam.fieldOfView * 0.5f * Mathf.Deg2Rad); + opp *= pixel_height / Screen.height; + var end_fov = Mathf.Atan(opp) * 2.0f * Mathf.Rad2Deg; + + var timer = 0.0f; + var start_rotation = cam_tran.rotation; + var start_fov = cam.fieldOfView; + var start_position = position; + + while (timer <= 1.0f) { + var t = Mathf.Sin(timer * Mathf.PI * 0.5f); + cam_tran.rotation = Quaternion.Slerp(start_rotation, end_rotation, t); + cam_tran.position = Vector3.Lerp(start_position, end_position, t); + cam.fieldOfView = Mathf.Lerp(start_fov, end_fov, t); + timer += Time.deltaTime / time; + yield return null; + } + + cam_tran.rotation = end_rotation; + cam_tran.position = end_position; + cam.fieldOfView = end_fov; + } + + // cam - camera to use + // center - screen pixel center + // pixelHeight - height of the rectangle in pixels + public static void ZoomToDisplayInstant(this Camera cam, Vector2 center, float pixel_height) { + var cam_tran = cam.transform; + var ray = cam.ScreenPointToRay(center); + var end_rotation = Quaternion.LookRotation(ray.direction); + var end_position = ProjectPointOnPlane(cam_tran.forward, cam_tran.position, ray.origin); + + var opp = Mathf.Tan(cam.fieldOfView * 0.5f * Mathf.Deg2Rad); + opp *= pixel_height / Screen.height; + var end_fov = Mathf.Atan(opp) * 2.0f * Mathf.Rad2Deg; + + cam_tran.rotation = end_rotation; + cam_tran.position = end_position; + cam.fieldOfView = end_fov; + } + + // cam - camera to use + // center - screen pixel center + // pixelHeight - height of the rectangle in pixels + /// + /// + /// + /// + /// + /// + /// + public static void MoveToDisplayInstant(this Camera cam, + float radius, + Vector3 bb_position, + float margin = 1f) { + var bound_sphere_radius = radius + margin; + var fov = Mathf.Deg2Rad * cam.fieldOfView; + var cam_distance = bound_sphere_radius * .5f / Mathf.Tan(fov * .5f); + + var transform = cam.transform; + transform.position = bb_position - transform.forward * cam_distance; + } + + public static Vector3 ProjectPointOnPlane(Vector3 plane_normal, Vector3 plane_point, Vector3 point) { + plane_normal.Normalize(); + var distance = -Vector3.Dot(plane_normal.normalized, point - plane_point); + return point + plane_normal * distance; + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/CameraFitter.cs.meta b/Runtime/GameObjects/NeodroidCamera/CameraFitter.cs.meta new file mode 100644 index 000000000..33a1715e0 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/CameraFitter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83679d70048bdfce4a7d7f6f8d583a5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/CameraObservationTextureController.cs b/Runtime/GameObjects/NeodroidCamera/CameraObservationTextureController.cs new file mode 100644 index 000000000..f9b60ec5f --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/CameraObservationTextureController.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + [ExecuteInEditMode] + [Serializable] + public class CameraObservationTextureController : MonoBehaviour { + [SerializeField] Camera[] _cameras = null; + [SerializeField] FilterMode _filter_mode = FilterMode.Bilinear; + + [SerializeField] + Vector2Int _size = new Vector2Int(NeodroidConstants._Default_Observation_Texture_Xy_Size, + NeodroidConstants._Default_Observation_Texture_Xy_Size); + //[SerializeField] GraphicsFormat _texture_format = GraphicsFormat.R8G8B8A8_UNorm; + + [SerializeField] Texture[] _textures = null; + [SerializeField] TextureWrapMode _wrap_mode = TextureWrapMode.Clamp; + + void Awake() { + this._cameras = FindObjectsOfType(); + + var textures = new List(); + + foreach (var a_camera in this._cameras) { + var target = a_camera.targetTexture; + if (target) { + textures.Add(target); + } + } + + this._textures = textures.ToArray(); + + foreach (var texture in this._textures) { + if (texture) { + //texture.height = this._size.y; + //texture.width = this._size.x; + texture.filterMode = this._filter_mode; + texture.wrapMode = this._wrap_mode; + //texture.graphicsFormat = this._texture_format; + } + } + } + } +} diff --git a/Runtime/Utilities/NeodroidCamera/CameraObservationTextureController.cs.meta b/Runtime/GameObjects/NeodroidCamera/CameraObservationTextureController.cs.meta similarity index 100% rename from Runtime/Utilities/NeodroidCamera/CameraObservationTextureController.cs.meta rename to Runtime/GameObjects/NeodroidCamera/CameraObservationTextureController.cs.meta diff --git a/Runtime/GameObjects/NeodroidCamera/ConfigurableSampleToggleList.cs b/Runtime/GameObjects/NeodroidCamera/ConfigurableSampleToggleList.cs new file mode 100644 index 000000000..7a8a535fd --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/ConfigurableSampleToggleList.cs @@ -0,0 +1,47 @@ +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Prototyping.Configurables; +using UnityEngine; +using UnityEngine.UI; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + public class ConfigurableSampleToggleList : MonoBehaviour { + Configurable[] _all_configurables = null; + [SerializeField] Toggle _sample_toggle_button_prefab = null; + + void Awake() { + this._all_configurables = FindObjectsOfType(); + //this._all_configurables = FindObjectOfType().Configurables; + + foreach (var configurable in this._all_configurables) { + if (configurable.enabled) { + var button = Instantiate(this._sample_toggle_button_prefab, this.transform); + button.isOn = configurable.RandomSamplingMode == RandomSamplingMode.On_tick_; + button.onValueChanged.AddListener(value => Set(configurable, value)); + var text = button.GetComponentInChildren(); + button.name = configurable.Identifier; + text.text = configurable.Identifier; + } + } + } + + void Toggle(IConfigurable configurable) { + if (configurable.RandomSamplingMode != RandomSamplingMode.Disabled_) { + configurable.RandomSamplingMode = RandomSamplingMode.Disabled_; + } else { + configurable.RandomSamplingMode = RandomSamplingMode.On_tick_; + } + } + + static void Set(IConfigurable configurable, bool value) { + if (value) { + configurable.RandomSamplingMode = RandomSamplingMode.On_tick_; + } else { + configurable.RandomSamplingMode = RandomSamplingMode.Disabled_; + } + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/ConfigurableSampleToggleList.cs.meta b/Runtime/GameObjects/NeodroidCamera/ConfigurableSampleToggleList.cs.meta new file mode 100644 index 000000000..cacaa4195 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/ConfigurableSampleToggleList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c14b16833cca3c66adaa5d654305c83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental.meta b/Runtime/GameObjects/NeodroidCamera/Experimental.meta new file mode 100644 index 000000000..c47fd2e9c --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c81a1a39595f42a2580db346873bf9a5 +timeCreated: 1550523075 \ No newline at end of file diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental/CreateStereoCubemaps.cs b/Runtime/GameObjects/NeodroidCamera/Experimental/CreateStereoCubemaps.cs new file mode 100644 index 000000000..51b89e517 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental/CreateStereoCubemaps.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Experimental { + /// + /// + /// + public class CreateStereoCubemaps : MonoBehaviour { + /// + /// + /// + [SerializeField] + RenderTexture cubemapLeftEye; + + [SerializeField] RenderTexture cubemapRightEye; + [SerializeField] RenderTexture cubemapEquirect; + [SerializeField] bool renderStereo = false; + [SerializeField] float stereoSeparation = 0.064f; + + [SerializeField] Camera _cam; + + void Start() { + this._cam = this.GetComponent(); + + if (this._cam == null) { + this._cam = this.GetComponentInParent(); + } + } + + void LateUpdate() { + if (this._cam == null) { + Debug.Log("stereo 360 capture node has no camera or parent camera"); + } + + if (this.renderStereo) { + this._cam.stereoSeparation = this.stereoSeparation; + this._cam.RenderToCubemap(this.cubemapLeftEye, 63, Camera.MonoOrStereoscopicEye.Left); + this._cam.RenderToCubemap(this.cubemapRightEye, 63, Camera.MonoOrStereoscopicEye.Right); + } else { + this._cam.RenderToCubemap(this.cubemapLeftEye, 63, Camera.MonoOrStereoscopicEye.Mono); + } + + //optional: convert cubemaps to equirect + if (this.cubemapEquirect != null) { + if (this.renderStereo) { + this.cubemapLeftEye.ConvertToEquirect(this.cubemapEquirect, Camera.MonoOrStereoscopicEye.Left); + this.cubemapRightEye.ConvertToEquirect(this.cubemapEquirect, Camera.MonoOrStereoscopicEye.Right); + } else { + this.cubemapLeftEye.ConvertToEquirect(this.cubemapEquirect); + } + } + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental/CreateStereoCubemaps.cs.meta b/Runtime/GameObjects/NeodroidCamera/Experimental/CreateStereoCubemaps.cs.meta new file mode 100644 index 000000000..d18fbb8aa --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental/CreateStereoCubemaps.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 219450474d12d1835a0a1701a632e99d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental/DisparityCameraBehaviour.cs b/Runtime/GameObjects/NeodroidCamera/Experimental/DisparityCameraBehaviour.cs new file mode 100644 index 000000000..742956781 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental/DisparityCameraBehaviour.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Experimental { + /// + /// + /// + public class DisparityCameraBehaviour : MonoBehaviour { + //TODO: Implement + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental/DisparityCameraBehaviour.cs.meta b/Runtime/GameObjects/NeodroidCamera/Experimental/DisparityCameraBehaviour.cs.meta new file mode 100644 index 000000000..09739b7a7 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental/DisparityCameraBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19298aa030ea40c29995fdbbc6646e9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental/MultiPassCamera.cs b/Runtime/GameObjects/NeodroidCamera/Experimental/MultiPassCamera.cs new file mode 100644 index 000000000..29102eeb1 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental/MultiPassCamera.cs @@ -0,0 +1,300 @@ +using System; +using System.Linq; +using droid.Runtime.GameObjects.NeodroidCamera.Synthesis; +using UnityEditor; +using UnityEngine; +using UnityEngine.Rendering; +using Object = UnityEngine.Object; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Experimental { + /// + /// + /// + [ExecuteInEditMode] + public class MultiPassCamera : MonoBehaviour { + /// + /// + Renderer[] _all_renders = null; + + /// + /// + MaterialPropertyBlock _block = null; + + [SerializeField] RenderTexture depthRenderTexture = null; + [SerializeField] RenderTexture objectIdRenderTexture = null; + [SerializeField] RenderTexture tagIdRenderTexture = null; + [SerializeField] RenderTexture flowRenderTexture = null; + + /// + /// + void Start() { this.Setup(); } + + void Awake() { + //this._asf= new TextureFlipper(); + } + + void CheckBlock() { + if (this._block == null) { + this._block = new MaterialPropertyBlock(); + } + } + + [SerializeField] CapturePassMaterial[] _capture_passes; + + [SerializeField] Camera _camera; + [SerializeField] Boolean debug = true; + [SerializeField] Boolean always_re = true; + [SerializeField] Mesh m_quad; + [SerializeField] GUISkin gui_style = null; + + /// + /// + /// + /// + public static Mesh CreateFullscreenQuad() { + var r = new Mesh { + vertices = new[] { + new Vector3(1.0f, 1.0f, 0.0f), + new Vector3(-1.0f, 1.0f, 0.0f), + new Vector3(-1.0f, -1.0f, 0.0f), + new Vector3(1.0f, -1.0f, 0.0f) + }, + triangles = new[] { + 0, + 1, + 2, + 2, + 3, + 0 + } + }; + r.UploadMeshData(true); + return r; + } + + /// + /// + void Setup() { + if (!this.gui_style) { + this.gui_style = Resources.FindObjectsOfTypeAll().First(a => a.name == "BoundingBox"); + } + + this._all_renders = FindObjectsOfType(); + if (this._capture_passes == null || this._capture_passes.Length == 0 || this.always_re) { + this._capture_passes = new[] { + new CapturePassMaterial(CameraEvent.AfterDepthTexture, + BuiltinRenderTextureType.Depth) { + _SupportsAntialiasing + = false, + _RenderTexture + = this + .depthRenderTexture + }, + new CapturePassMaterial(CameraEvent.AfterForwardAlpha, + BuiltinRenderTextureType.MotionVectors) { + _SupportsAntialiasing + = false, + _RenderTexture + = this + .flowRenderTexture + }, + new CapturePassMaterial(CameraEvent.AfterForwardAlpha, + BuiltinRenderTextureType.None) { + _SupportsAntialiasing + = false, + _RenderTexture + = this + .objectIdRenderTexture, + _TextureId + = Shader + .PropertyToID("_TmpFrameBuffer") + }, + new CapturePassMaterial(CameraEvent.AfterDepthTexture, + BuiltinRenderTextureType.None) { + _SupportsAntialiasing + = false, + _RenderTexture + = this + .tagIdRenderTexture, + _TextureId + = Shader + .PropertyToID("_CameraDepthTexture") + } + }; + } + + if (this.m_quad == null) { + this.m_quad = CreateFullscreenQuad(); + } + + this._camera = this.GetComponent(); + //this._camera.SetReplacementShader(this.uberMaterial.shader,""); + + this._camera.RemoveAllCommandBuffers(); // cleanup capturing camera + + this._camera.depthTextureMode = DepthTextureMode.Depth | DepthTextureMode.MotionVectors; + + foreach (var capture_pass in this._capture_passes) { + var cb = new CommandBuffer {name = capture_pass.Source.ToString()}; + + cb.Clear(); + + if (capture_pass._Material) { + cb.GetTemporaryRT(capture_pass._TextureId, + -1, + -1, + 0, + FilterMode.Point); + //cb.Blit(capture_pass.Source, capture_pass._RenderTexture, capture_pass._Material); + cb.Blit(capture_pass.Source, capture_pass._TextureId); + cb.SetRenderTarget(new RenderTargetIdentifier[] {capture_pass._RenderTexture}, + capture_pass._RenderTexture); + cb.DrawMesh(this.m_quad, + Matrix4x4.identity, + capture_pass._Material, + 0, + 0); + cb.ReleaseTemporaryRT(capture_pass._TextureId); + } else { + cb.Blit(capture_pass.Source, capture_pass._RenderTexture); + } + + this._camera.AddCommandBuffer(capture_pass.When, cb); + } + + this.CheckBlock(); + foreach (var r in this._all_renders) { + r.GetPropertyBlock(this._block); + var sm = r.sharedMaterial; + if (sm) { + var id = sm.GetInstanceID(); + var color = ColorEncoding.EncodeIdAsColor(id); + + this._block.SetColor(SynthesisUtilities._Shader_MaterialId_Color_Name, color); + r.SetPropertyBlock(this._block); + } + } + } + + const int _size = 100; + const int _margin = 20; + + void OnGUI() { + if (this.debug) { + var index = 0; + + foreach (var pass in this._capture_passes) { + var xi = (_size + _margin) * index++; + var x = xi % (Screen.width - _size); + var y = (_size + _margin) * (xi / (Screen.width - _size)); + var r = new Rect(_margin + x, + _margin + y, + _size, + _size); + //this._asf?.Flip(pass._RenderTexture); + + GUI.DrawTexture(r, pass._RenderTexture, ScaleMode.ScaleToFit); + GUI.TextField(r, pass.Source.ToString(), this.gui_style.box); + } + } + } + + TextureFlipper _asf; + } + + /// + /// + /// + [Serializable] + public struct CapturePassMaterial { + public bool _SupportsAntialiasing; + public bool _NeedsRescale; + public Material _Material; + public RenderTexture _RenderTexture; + public CameraEvent When; + public BuiltinRenderTextureType Source; + public int _TextureId; + + public CapturePassMaterial(CameraEvent when = CameraEvent.AfterEverything, + BuiltinRenderTextureType source = BuiltinRenderTextureType.CurrentActive) { + this.When = when; + this.Source = source; + this._Material = null; + this._RenderTexture = null; + this._SupportsAntialiasing = false; + this._NeedsRescale = false; + this._TextureId = 0; + } + } + + public class TextureFlipper : IDisposable { + Shader _m_sh_v_flip; + Material _m_vf_lip_material; + RenderTexture _m_work_texture; + + public TextureFlipper() { + this._m_sh_v_flip = Shader.Find("Neodroid/Experimental/VerticalFlipper"); + if (this._m_sh_v_flip) { + this._m_vf_lip_material = new Material(this._m_sh_v_flip); + } + } + + public void Flip(RenderTexture target) { + if (this._m_work_texture == null + || this._m_work_texture.width != target.width + || this._m_work_texture.height != target.height) { + UnityHelpers.Destroy(this._m_work_texture); + this._m_work_texture = new RenderTexture(target.width, + target.height, + target.depth, + target.format, + RenderTextureReadWrite.Linear); + } + + if (this._m_vf_lip_material) { + Graphics.Blit(target, this._m_work_texture, this._m_vf_lip_material); + Graphics.Blit(this._m_work_texture, target); + } + } + + public void Dispose() { + UnityHelpers.Destroy(this._m_work_texture); + this._m_work_texture = null; + if (this._m_vf_lip_material) { + UnityHelpers.Destroy(this._m_vf_lip_material); + this._m_vf_lip_material = null; + } + } + } + + /// + /// What is this: + /// Motivation : + /// Notes: + /// + public static class UnityHelpers { + public static void Destroy(Object obj, bool allow_destroying_assets = false) { + if (obj == null) { + return; + } + #if UNITY_EDITOR + if (EditorApplication.isPlaying) { + Object.Destroy(obj); + } else { + Object.DestroyImmediate(obj, allow_destroying_assets); + } + #else + Object.Destroy(obj); + #endif + obj = null; + } + + public static bool IsPlaying() { + #if UNITY_EDITOR + return EditorApplication.isPlaying; + #else + return true; + #endif + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental/MultiPassCamera.cs.meta b/Runtime/GameObjects/NeodroidCamera/Experimental/MultiPassCamera.cs.meta new file mode 100644 index 000000000..8f0850b99 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental/MultiPassCamera.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 07254c940472d322babaf44a17fb5f56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - _replacement_shader: {fileID: 4800000, guid: 65c1b5085509542dea35733cfc881720, type: 3} + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental/UberCamera.cs b/Runtime/GameObjects/NeodroidCamera/Experimental/UberCamera.cs new file mode 100644 index 000000000..9117f6c63 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental/UberCamera.cs @@ -0,0 +1,342 @@ +using System; +using System.Linq; +using UnityEngine; +using UnityEngine.Rendering; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Experimental { + /// + /// + /// + [RequireComponent(typeof(Camera))] + [ExecuteInEditMode] + public class UberCamera : MonoBehaviour { + #region fields + + [SerializeField] Shader copy_shader = null; + [SerializeField] Material _copy_material = null; + [SerializeField] Material _off_screen_mat = null; + [SerializeField] Camera _camera = null; + [SerializeField] Boolean _debugging = true; + [SerializeField] GUISkin gui_style = null; + + CommandBuffer[] _copy_cbs = null; + CommandBuffer _copy_fb_cb = null; + CommandBuffer _copy_gb_cb = null; + CommandBuffer _clear_gb_cb = null; + CommandBuffer _copy_velocity_cb = null; + RenderTexture[] _fb_rts = null; + RenderTexture[] _gb_rts = null; + Mesh _quad_mesh = null; + + RenderTargetIdentifier[] _m_rt_fb_ids = null; + RenderTargetIdentifier[] _m_rt_gb_ids = null; + int _tmp_texture_id = Shader.PropertyToID("_TmpFrameBuffer"); + static readonly int _clear_color = Shader.PropertyToID("_ClearColor"); + + static readonly Tuple _texture_wh = new Tuple(256, 256); + + const int _preview_size = 100; + const int _preview_margin = 20; + + #endregion + + /// + /// + /// + public Boolean Debugging { get { return this._debugging; } set { this._debugging = value; } } + + protected Tuple GetCaptureResolutionFromCamera() { + var w = this._camera.pixelWidth; + var h = this._camera.pixelHeight; + var aspect = (float)h / w; + w = _texture_wh.Item1; + h = (int)(w * aspect); + return new Tuple(w, h); + } + + void Update() { + if (_texture_wh.Item1 == Screen.width && _texture_wh.Item2 == Screen.height) { + return; + } + + var xw = _texture_wh.Item1; + var yh = _texture_wh.Item2; + + var x = Screen.width / 2 - xw / 2; + var y = Screen.height / 2 - yh / 2; + + this._camera.pixelRect = new Rect(x, + y, + xw, + yh); + } + + void Awake() { + if (!this.gui_style) { + this.gui_style = Resources.FindObjectsOfTypeAll().First(a => a.name == "BoundingBox"); + } + + if (!this._copy_material) { + this._copy_material = new Material(this.copy_shader); + } + + if (!this._quad_mesh) { + this._quad_mesh = CreateFullscreenQuad(); + } + + if (!this._camera) { + this._camera = this.GetComponent(); + } + + this.Dispose(); + + if (this._fb_rts == null || this._fb_rts.Length != 2) { + this._fb_rts = new RenderTexture[2]; + for (var i = 0; i < this._fb_rts.Length; ++i) { + this._fb_rts[i] = new RenderTexture(_texture_wh.Item1, + _texture_wh.Item2, + 0, + RenderTextureFormat.ARGBHalf) { + filterMode = FilterMode.Point, + name = $"rt_fb{i}" + }; + this._fb_rts[i].Create(); + } + } + + this._m_rt_gb_ids = new RenderTargetIdentifier[] {this._fb_rts[0], this._fb_rts[1]}; + + if (this._gb_rts == null || this._gb_rts.Length != 8) { + /* + half4 albedo : SV_Target0; + half4 occlusion : SV_Target1; + half4 specular : SV_Target2; + half4 smoothness : SV_Target3; + half4 normal : SV_Target4; + half4 emission : SV_Target5; + half4 depth : SV_Target6; + */ + var names = new[] { + "albedo", + "occlusion", + "specular", + "smoothness", + "normal", + "emission", + "depth", + "velocity" + }; + this._gb_rts = new RenderTexture[8]; + for (var i = 0; i < this._gb_rts.Length; ++i) { + this._gb_rts[i] = new RenderTexture(_texture_wh.Item1, + _texture_wh.Item2, + 0, + RenderTextureFormat.ARGBHalf) { + filterMode = FilterMode.Point, + name = $"{names[i]}" + }; + this._gb_rts[i].Create(); + } + } + + this._m_rt_fb_ids = new RenderTargetIdentifier[] { + this._gb_rts[0], + this._gb_rts[1], + this._gb_rts[2], + this._gb_rts[3], + this._gb_rts[4], + this._gb_rts[5], + this._gb_rts[6] + }; + + this.Setup(); + } + + /// + /// + /// + /// + public static Mesh CreateFullscreenQuad() { + var r = new Mesh { + vertices = new[] { + new Vector3(1.0f, 1.0f, 0.0f), + new Vector3(-1.0f, 1.0f, 0.0f), + new Vector3(-1.0f, -1.0f, 0.0f), + new Vector3(1.0f, -1.0f, 0.0f) + }, + triangles = new[] { + 0, + 1, + 2, + 2, + 3, + 0 + } + }; + r.UploadMeshData(true); + return r; + } + + /// + /// + void Setup() { + if (this.copy_shader == null) { + Debug.LogError("Copy shader is missing!"); + return; + } + + if (this._off_screen_mat != null) { + if (this._camera.targetTexture != null) { + this._off_screen_mat.EnableKeyword("OFFSCREEN"); + } else { + this._off_screen_mat.DisableKeyword("OFFSCREEN"); + } + } + + this._copy_fb_cb = new CommandBuffer {name = "Copy FrameBuffer"}; + this._copy_fb_cb.GetTemporaryRT(this._tmp_texture_id, + -1, + -1, + 0, + FilterMode.Point); + this._copy_fb_cb.Blit(BuiltinRenderTextureType.CurrentActive, this._tmp_texture_id); + this._copy_fb_cb.SetRenderTarget(this._m_rt_gb_ids, this._fb_rts[0]); + this._copy_fb_cb.DrawMesh(this._quad_mesh, + Matrix4x4.identity, + this._copy_material, + 0, + 0); + this._copy_fb_cb.ReleaseTemporaryRT(this._tmp_texture_id); + this._camera.AddCommandBuffer(CameraEvent.AfterEverything, this._copy_fb_cb); + + this._clear_gb_cb = new CommandBuffer { + name = "Cleanup GBuffer" + }; // clear gbuffer (Unity doesn't clear emission buffer - it is not needed usually) + if (this._camera.allowHDR) { + this._clear_gb_cb.SetRenderTarget(BuiltinRenderTextureType.CameraTarget); + } else { + this._clear_gb_cb.SetRenderTarget(BuiltinRenderTextureType.GBuffer3); + } + + this._clear_gb_cb.DrawMesh(this._quad_mesh, + Matrix4x4.identity, + this._copy_material, + 0, + 3); + this._copy_material.SetColor(_clear_color, this._camera.backgroundColor); + + this._copy_gb_cb = new CommandBuffer {name = "Copy GBuffer"}; // copy gbuffer + this._copy_gb_cb.SetRenderTarget(this._m_rt_fb_ids, this._gb_rts[0]); + this._copy_gb_cb.DrawMesh(this._quad_mesh, + Matrix4x4.identity, + this._copy_material, + 0, + 2); + this._camera.AddCommandBuffer(CameraEvent.BeforeGBuffer, this._clear_gb_cb); + this._camera.AddCommandBuffer(CameraEvent.BeforeLighting, this._copy_gb_cb); + + this._copy_velocity_cb = new CommandBuffer {name = "Copy Velocity"}; + this._copy_velocity_cb.SetRenderTarget(this._gb_rts[7]); + this._copy_velocity_cb.DrawMesh(this._quad_mesh, + Matrix4x4.identity, + this._copy_material, + 0, + 4); + this._camera.AddCommandBuffer(CameraEvent.BeforeImageEffectsOpaque, this._copy_velocity_cb); + this._camera.depthTextureMode = DepthTextureMode.Depth | DepthTextureMode.MotionVectors; + + this._copy_cbs = new[] { + this._copy_fb_cb, + this._clear_gb_cb, + this._copy_gb_cb, + this._copy_velocity_cb + }; + } + + void OnGUI() { + if (this._debugging) { + var index = 0; + + if (this._gb_rts != null) { + foreach (var pass in this._gb_rts) { + var xi = (_preview_size + _preview_margin) * index++; + var x = xi % (Screen.width - _preview_size); + var y = (_preview_size + _preview_margin) * (xi / (Screen.width - _preview_size)); + var r = new Rect(_preview_margin + x, + _preview_margin + y, + _preview_size, + _preview_size); + //this._asf?.Flip(pass._RenderTexture); + + GUI.DrawTexture(r, pass, ScaleMode.ScaleToFit); + GUI.TextField(r, pass.name, this.gui_style.box); + } + } + + if (this._fb_rts != null) { + foreach (var pass in this._fb_rts) { + var xi = (_preview_size + _preview_margin) * index++; + var x = xi % (Screen.width - _preview_size); + var y = (_preview_size + _preview_margin) * (xi / (Screen.width - _preview_size)); + var r = new Rect(_preview_margin + x, + _preview_margin + y, + _preview_size, + _preview_size); + //this._asf?.Flip(pass._RenderTexture); + + GUI.DrawTexture(r, pass, ScaleMode.ScaleToFit); + GUI.TextField(r, pass.name, this.gui_style.box); + } + } + } + } + + void OnDestroy() { + //this.Dispose(); + } + + void Dispose() { + this._camera.RemoveAllCommandBuffers(); // cleanup capturing camera + + if (this._copy_fb_cb != null) { + this._camera.RemoveCommandBuffer(CameraEvent.AfterEverything, this._copy_fb_cb); + this._copy_fb_cb.Release(); + this._copy_fb_cb = null; + } + + if (this._clear_gb_cb != null) { + this._camera.RemoveCommandBuffer(CameraEvent.BeforeGBuffer, this._clear_gb_cb); + this._clear_gb_cb.Release(); + this._clear_gb_cb = null; + } + + if (this._copy_gb_cb != null) { + this._camera.RemoveCommandBuffer(CameraEvent.BeforeLighting, this._copy_gb_cb); + this._copy_gb_cb.Release(); + this._copy_gb_cb = null; + } + + if (this._copy_velocity_cb != null) { + this._camera.RemoveCommandBuffer(CameraEvent.BeforeImageEffectsOpaque, this._copy_velocity_cb); + this._copy_velocity_cb.Release(); + this._copy_velocity_cb = null; + } + + if (this._fb_rts != null) { + foreach (var rt in this._fb_rts) { + rt.Release(); + } + + this._fb_rts = null; + } + + if (this._gb_rts != null) { + foreach (var rt in this._gb_rts) { + rt.Release(); + } + + this._gb_rts = null; + } + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Experimental/UberCamera.cs.meta b/Runtime/GameObjects/NeodroidCamera/Experimental/UberCamera.cs.meta new file mode 100644 index 000000000..4f3f6806e --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Experimental/UberCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 491fc7b1f7d94dd3966637b8355f0e1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/FlowCameraBehaviour.cs b/Runtime/GameObjects/NeodroidCamera/FlowCameraBehaviour.cs new file mode 100644 index 000000000..9c521fecc --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/FlowCameraBehaviour.cs @@ -0,0 +1,67 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + [ExecuteInEditMode] + [RequireComponent(typeof(Camera))] + public class FlowCameraBehaviour : MonoBehaviour { + /// + /// + [SerializeField] + Color _background_color = Color.white; + + [SerializeField] [Range(0, 1)] float _blending = 0.5f; + + /// + /// + Material _material; + + [SerializeField] [Range(0, 100)] float _overlay_amplitude = 60; + + /// + /// + [SerializeField] + Shader _shader = null; + + /// + /// + void Awake() { + this.GetComponent().depthTextureMode |= DepthTextureMode.Depth | DepthTextureMode.MotionVectors; + } + + /// + /// + /// + /// + void OnRenderImage(RenderTexture source, RenderTexture destination) { + if (this._material == null) { + var shader = this._shader; + if (shader != null) { + this._material = new Material(shader) {hideFlags = HideFlags.DontSave}; + } + } + + var material = this._material; + if (material != null) { + material.SetColor("_BackgroundColor", this._background_color); + material.SetFloat("_Blending", this._blending); + material.SetFloat("_Amplitude", this._overlay_amplitude); + Graphics.Blit(source, destination, material); + } + } + + /// + /// + void OnDestroy() { + /*if (this._material != null) { + if (Application.isPlaying) { + Destroy(this._material); + } else { + DestroyImmediate(this._material); + } + }*/ + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/FlowCameraBehaviour.cs.meta b/Runtime/GameObjects/NeodroidCamera/FlowCameraBehaviour.cs.meta new file mode 100644 index 000000000..9207dc92e --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/FlowCameraBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2e54ebded2e5489fa2596cf3ab24e37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/IgnoreLightSource.cs b/Runtime/GameObjects/NeodroidCamera/IgnoreLightSource.cs new file mode 100644 index 000000000..b81fde2d2 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/IgnoreLightSource.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + [ExecuteInEditMode] + public class IgnoreLightSource : MonoBehaviour { + [SerializeField] bool _automatically_add_lights_without_infrared_component = false; + [SerializeField] bool _ignore_infrared_if_empty = true; + + [SerializeField] Light[] _lights_to_ignore = null; + + // Use this for initialization + void Start() { + if (this._lights_to_ignore == null + || this._lights_to_ignore.Length == 0 && this._ignore_infrared_if_empty) { + var infrared_light_sources = FindObjectsOfType(); + var lights = new List(); + foreach (var ils in infrared_light_sources) { + lights.Add(ils.GetComponent()); + } + + this._lights_to_ignore = lights.ToArray(); + } else if (this._automatically_add_lights_without_infrared_component) { + var lights = this._lights_to_ignore.ToList(); + var d = FindObjectsOfType(); + foreach (var light1 in d) { + if (!light1.gameObject.GetComponent()) { + if (!lights.Exists(l => l != null && light1.GetHashCode() == l.GetHashCode())) { + lights.Add(light1); + } + } + } + + this._lights_to_ignore = lights.ToArray(); + } + } + + // Update is called once per frame + void Update() { } + + void OnPreCull() { + if (this._lights_to_ignore != null) { + foreach (var l in this._lights_to_ignore) { + if (l) { + l.enabled = false; + } + } + } + } + + void OnPreRender() { + if (this._lights_to_ignore != null) { + foreach (var l in this._lights_to_ignore) { + if (l) { + l.enabled = false; + } + } + } + } + + void OnPostRender() { + if (this._lights_to_ignore != null) { + foreach (var l in this._lights_to_ignore) { + if (l) { + l.enabled = true; + } + } + } + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/IgnoreLightSource.cs.meta b/Runtime/GameObjects/NeodroidCamera/IgnoreLightSource.cs.meta new file mode 100644 index 000000000..e15335ce7 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/IgnoreLightSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90d8486c2d1444fb8ac452a5a74cf74b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/InfraredLightSource.cs b/Runtime/GameObjects/NeodroidCamera/InfraredLightSource.cs new file mode 100644 index 000000000..07c5e1baf --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/InfraredLightSource.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + public class InfraredLightSource : MonoBehaviour { } +} diff --git a/Runtime/GameObjects/NeodroidCamera/InfraredLightSource.cs.meta b/Runtime/GameObjects/NeodroidCamera/InfraredLightSource.cs.meta new file mode 100644 index 000000000..2d26cfb8d --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/InfraredLightSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb842d57fd4d0474497a6d1b0c477f96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/LineProject.cs b/Runtime/GameObjects/NeodroidCamera/LineProject.cs new file mode 100644 index 000000000..2b14d4ee1 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/LineProject.cs @@ -0,0 +1,41 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + [RequireComponent(typeof(LineRenderer))] + [ExecuteInEditMode] + public class LineProject : MonoBehaviour { + LineRenderer _line_renderer = null; + [SerializeField] Vector3 _direction = Vector3.down; + [SerializeField] float _length = 30f; + + Vector3 _old_pos = Vector3.zero; + + void Awake() { + this._line_renderer = this.GetComponent(); + this.Project(); + } + + void OnEnable() { this.Project(); } + + void Update() { + if (Application.isPlaying) { + if (this.transform.position != this._old_pos) { + this.Project(); + } + } + } + + void Project() { + var position = this.transform.position; + if (Physics.Raycast(position, + this._direction, + out var ray, + this._length)) { + this._line_renderer.SetPositions(new[] {position, ray.point}); + } + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/LineProject.cs.meta b/Runtime/GameObjects/NeodroidCamera/LineProject.cs.meta new file mode 100644 index 000000000..17526ff1d --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/LineProject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c228034271aa09ca09a437dce55e37a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/PostComputeTransform.cs b/Runtime/GameObjects/NeodroidCamera/PostComputeTransform.cs new file mode 100644 index 000000000..0f9426251 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/PostComputeTransform.cs @@ -0,0 +1,118 @@ +using UnityEngine; +using UnityEngine.Rendering; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + [RequireComponent(typeof(Camera))] + [ExecuteInEditMode] + public class PostComputeTransform : MonoBehaviour { + /// + /// + /// + public ComputeShader _TransformationComputeShader; + + //[SerializeField] Material _post_material; + + [Header("Specific", order = 102)] + [SerializeField] + Camera _camera = null; + + ComputeBuffer _transformation_compute_buffer; + CommandBuffer _transformation_command_buffer; + + void Awake() { + if (this._camera == null) { + this._camera = this.GetComponent(); + } + + this.MyRenderTexture = new RenderTexture(256, 256, 0) {enableRandomWrite = true}; + this.MyRenderTexture.Create(); + + if (this._TransformationComputeShader) { + var kernel_id = this._TransformationComputeShader.FindKernel("CSMain"); + + this._transformation_command_buffer = new CommandBuffer(); + + /* + var target_texture = this._camera.targetTexture; + this._TransformationComputeShader.SetTexture(kernel_id, + "Result", + target_texture); + + this._transformation_compute_buffer = new ComputeBuffer(target_texture.width * target_texture.height * target_texture.depth, + sizeof(float)) {name = "My Buffer"}; + +*/ + + //Graphics.SetRandomWriteTarget(1, my_buffer); + + //myBuffer.SetData(minMaxHeight); + //this.my_buffer.targetTexture.GetNativeDepthBufferPtr().GetBuffer(0, "minMax", minMaxBuffer); + + //_TransformationComputeShader.SetFloat("gamma", 2.2); + //_TransformationComputeShader.Dispatch(0, map.Length, 1, 1); + + //my_buffer.SetData(*target_texture.GetNativeTexturePtr()); + +// this._TransformationComputeShader.SetTexture(kernelHandle, "Result", target_texture); + + this._transformation_command_buffer.SetComputeTextureParam(this._TransformationComputeShader, + kernel_id, + "Result", + this.MyRenderTexture); + //this._transformation_command_buffer.SetComputeBufferParam(this._TransformationComputeShader, kernel_id,"Result",this._transformation_compute_buffer); + this._transformation_command_buffer.DispatchCompute(this._TransformationComputeShader, + kernel_id, + 256 / 32, + 256 / 32, + 1); + //this._camera.AddCommandBuffer(CameraEvent.AfterEverything, this._transformation_command_buffer); + } + } + + void Update() { + if (this._TransformationComputeShader) { + this._TransformationComputeShader.SetTexture(0, "Result", this.MyRenderTexture); + //this._TransformationComputeShader.SetBuffer(0,"",this._transformation_compute_buffer); + this._TransformationComputeShader.Dispatch(0, + 256 / 32, + 256 / 32, + 1); + } + } + + /// + /// + /// + public RenderTexture MyRenderTexture { get; set; } + +// Postprocess the image +/* + void OnRenderImage(RenderTexture source, RenderTexture destination) { + + + + Graphics.Blit(source, destination); + } +*/ + + /// + /// + /// + public void OnDisable() { this.Cleanup(); } + + void Cleanup() { + if (this._transformation_command_buffer != null) { + this._camera.RemoveCommandBuffer(CameraEvent.AfterEverything, this._transformation_command_buffer); + } + } + + void OnDestroy() { + this.Cleanup(); + +//DestroyImmediate(this._GammaCommandBuffer); + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/PostComputeTransform.cs.meta b/Runtime/GameObjects/NeodroidCamera/PostComputeTransform.cs.meta new file mode 100644 index 000000000..0d6ec7898 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/PostComputeTransform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a61e1dc5342f6e616b450111ca9a25a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/ReplacementShaderEffect.cs b/Runtime/GameObjects/NeodroidCamera/ReplacementShaderEffect.cs new file mode 100644 index 000000000..3a89433a8 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/ReplacementShaderEffect.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + [ExecuteInEditMode] + public class ReplacementShaderEffect : MonoBehaviour { + [SerializeField] string _replace_render_type = ""; + + [SerializeField] Shader _replacement_shader = null; + + void Start() { + if (this._replacement_shader != null) { + this.GetComponent().SetReplacementShader(this._replacement_shader, this._replace_render_type); + } + } + + void OnEnable() { + if (this._replacement_shader != null) { + this.GetComponent().SetReplacementShader(this._replacement_shader, this._replace_render_type); + } + } + + void OnDisable() { this.GetComponent().ResetReplacementShader(); } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/ReplacementShaderEffect.cs.meta b/Runtime/GameObjects/NeodroidCamera/ReplacementShaderEffect.cs.meta new file mode 100644 index 000000000..9400c8b44 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/ReplacementShaderEffect.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2773a5ee782b3475e9f2cac8306134fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - _replacement_shader: {fileID: 4800000, guid: 65c1b5085509542dea35733cfc881720, type: 3} + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Segmentation.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation.meta similarity index 100% rename from Runtime/Utilities/Segmentation.meta rename to Runtime/GameObjects/NeodroidCamera/Segmentation.meta diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/CategorySegmenter.cs b/Runtime/GameObjects/NeodroidCamera/Segmentation/CategorySegmenter.cs new file mode 100644 index 000000000..b78ee0bad --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/CategorySegmenter.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.GameObjects.NeodroidCamera.Synthesis; +using droid.Runtime.Structs; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Segmentation { + /// + /// + /// + enum SegmentationMode { + Tag_, + Layer_ + } + + /// + /// + /// + [ExecuteInEditMode] + public class CategorySegmenter : Segmenter { + /// + /// + Renderer[] _all_renders = null; + + /// + /// + MaterialPropertyBlock _block = null; + + [SerializeField] Shader segmentation_shader = null; + [SerializeField] Camera _camera = null; + + [SerializeField] protected ColorByCategory[] _colors_by_category = null; + + [SerializeField] SegmentationMode _segmentation_mode = SegmentationMode.Tag_; + + [SerializeField] ScriptableObjects.Segmentation _segmentation_preset = null; + + /// + /// + public bool _Replace_Untagged_Color = true; + + /// + /// + public Color _Untagged_Color = Color.black; + + /// + /// + public ColorByCategory[] ColorsByCategory { get { return this._colors_by_category; } } + + /// + /// + public Dictionary ColorsDictGameObject { get; set; } = new Dictionary(); + + /// + /// + public override Dictionary ColorsDict { + get { + var colors = new Dictionary(); + foreach (var key_val in this.ColorsDictGameObject) { + colors.Add(key_val.Key, key_val.Value); + } + + return colors; + } + } + + /// + /// + void Start() { + //this.Setup(); + } + + /// + /// + void Awake() { this.Setup(); } + + void CheckBlock() { + if (this._block == null) { + this._block = new MaterialPropertyBlock(); + } + } + + SynthesisUtilities.CapturePass[] _capture_passes; + + /// + /// + void Setup() { + if (this._colors_by_category != null && this._colors_by_category.Length > 0) { + foreach (var tag_color in this._colors_by_category) { + if (!this.ColorsDictGameObject.ContainsKey(tag_color._Category_Name)) { + this.ColorsDictGameObject.Add(tag_color._Category_Name, tag_color._Color); + } + } + } + + if (this._segmentation_preset) { + var segmentation_color_by_tags = this._segmentation_preset._color_by_categories; + if (segmentation_color_by_tags != null) { + foreach (var tag_color in segmentation_color_by_tags) { + if (!this.ColorsDictGameObject.ContainsKey(tag_color._Category_Name)) { + this.ColorsDictGameObject.Add(tag_color._Category_Name, tag_color._Color); + } + } + } + } + + this._all_renders = FindObjectsOfType(); + if (!this._camera) { + this._camera = this.GetComponent(); + } + + if (this.ColorsDictGameObject == null) { + this.ColorsDictGameObject = new Dictionary(); + } + + switch (this._segmentation_mode) { + case SegmentationMode.Tag_: + this._capture_passes = new[] { + new SynthesisUtilities.CapturePass { + _Name = "_tag_id", + _ReplacementMode = + SynthesisUtilities.ReplacementModes + .Tag_id_, + _SupportsAntialiasing = + false + } + }; + break; + case SegmentationMode.Layer_: + this._capture_passes = new[] { + new SynthesisUtilities.CapturePass { + _Name = "_layer_id", + _ReplacementMode = + SynthesisUtilities.ReplacementModes + .Layer_id_, + _SupportsAntialiasing = + false + } + }; + break; + default: throw new ArgumentOutOfRangeException(); + } + + SynthesisUtilities.SetupCapturePassesReplacementShader(this._camera, + this.segmentation_shader, + ref this._capture_passes); + + this.CheckBlock(); + foreach (var a_renderer in this._all_renders) { + a_renderer.GetPropertyBlock(this._block); + string category_name; + var category_int = 0; + Color color; + string shader_data_name; + switch (this._segmentation_mode) { + case SegmentationMode.Tag_: + category_name = a_renderer.tag; + shader_data_name = SynthesisUtilities._Shader_Tag_Color_Name; + break; + case SegmentationMode.Layer_: + category_int = a_renderer.gameObject.layer; + category_name = LayerMask.LayerToName(category_int); + shader_data_name = SynthesisUtilities._Shader_Layer_Color_Name; + break; + default: throw new ArgumentOutOfRangeException(); + } + + if (!this.ColorsDictGameObject.ContainsKey(category_name)) { + if (!this._Replace_Untagged_Color) { + switch (this._segmentation_mode) { + case SegmentationMode.Tag_: + category_int = category_name.GetHashCode(); + color = ColorEncoding.EncodeTagHashCodeAsColor(category_int); + //color = ColorEncoding.EncodeIdAsColor(category_int); + break; + case SegmentationMode.Layer_: + color = ColorEncoding.EncodeLayerAsColor(category_int); + break; + default: + //color = ColorEncoding.EncodeIdAsColor(category_int); + throw new ArgumentOutOfRangeException(); + } + } else { + color = this._Untagged_Color; + } + + this.ColorsDictGameObject.Add(category_name, color); + } else { + color = this.ColorsDictGameObject[category_name]; + } + + this._block.SetColor(shader_data_name, color); + + a_renderer.SetPropertyBlock(this._block); + } + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/CategorySegmenter.cs.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation/CategorySegmenter.cs.meta new file mode 100644 index 000000000..8e6c18b67 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/CategorySegmenter.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 3f0377162d14313d39cbce87f94ca1e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - segmentation_shader: {fileID: 4800000, guid: 106a7bfad8c599727ab5499e52b6f53e, + type: 3} + - _camera: {instanceID: 0} + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/MaterialIdSegmenter.cs b/Runtime/GameObjects/NeodroidCamera/Segmentation/MaterialIdSegmenter.cs new file mode 100644 index 000000000..fe3feb2a6 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/MaterialIdSegmenter.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.GameObjects.NeodroidCamera.Synthesis; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Segmentation { + /// + /// + /// + [ExecuteInEditMode] + public class MaterialIdSegmenter : Segmenter { + /// + /// + Renderer[] _all_renders = null; + + /// + /// + MaterialPropertyBlock _block = null; + + [SerializeField] Shader segmentation_shader = null; + [SerializeField] Camera _camera = null; + + /// + /// + public Dictionary ColorsDictGameObject { get; set; } = new Dictionary(); + + /// + /// + public override Dictionary ColorsDict { + get { + var colors = new Dictionary(); + foreach (var key_val in this.ColorsDictGameObject) { + if (!colors.ContainsKey(key_val.Key.name)) { + colors.Add(key_val.Key.name, key_val.Value); + } + } + + return colors; + } + } + + // Use this for initialization + /// + /// + void Start() { this.Setup(); } + + void CheckBlock() { + if (this._block == null) { + this._block = new MaterialPropertyBlock(); + } + } + + SynthesisUtilities.CapturePass[] _capture_passes = { + new SynthesisUtilities.CapturePass { + _Name = + "_material_id", + _ReplacementMode + = SynthesisUtilities.ReplacementModes + .Material_id_, + _SupportsAntialiasing + = false + } + }; + + /// + /// + void Setup() { + this._all_renders = FindObjectsOfType(); + + this._camera = this.GetComponent(); + SynthesisUtilities.SetupCapturePassesReplacementShader(this._camera, + this.segmentation_shader, + ref this._capture_passes); + + this.ColorsDictGameObject = new Dictionary(); + this.CheckBlock(); + foreach (var r in this._all_renders) { + r.GetPropertyBlock(this._block); + var sm = r.sharedMaterial; + if (sm) { + var id = sm.GetInstanceID(); + var color = ColorEncoding.EncodeIdAsColor(id); + if (!this.ColorsDictGameObject.ContainsKey(sm)) { + this.ColorsDictGameObject.Add(sm, color); + } + + this._block.SetColor(SynthesisUtilities._Shader_MaterialId_Color_Name, color); + r.SetPropertyBlock(this._block); + } + } + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/MaterialIdSegmenter.cs.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation/MaterialIdSegmenter.cs.meta new file mode 100644 index 000000000..aa2cc1951 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/MaterialIdSegmenter.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: d7bdd700ad374c83b86a813127e132de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - segmentation_shader: {fileID: 4800000, guid: 106a7bfad8c599727ab5499e52b6f53e, + type: 3} + - _camera: {instanceID: 0} + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/ObjectIdSegmenter.cs b/Runtime/GameObjects/NeodroidCamera/Segmentation/ObjectIdSegmenter.cs new file mode 100644 index 000000000..48bfd29ae --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/ObjectIdSegmenter.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.GameObjects.NeodroidCamera.Synthesis; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Segmentation { + /// + /// + /// + [ExecuteInEditMode] + public class ObjectIdSegmenter : Segmenter { + /// + /// + Renderer[] _all_renders; + + /// + /// + MaterialPropertyBlock _block; + + [SerializeField] Shader segmentation_shader = null; + [SerializeField] Camera _camera; + + /// + /// + public Dictionary ColorsDictGameObject { get; set; } = + new Dictionary(); + + /// + /// + public override Dictionary ColorsDict { + get { + var colors = new Dictionary(); + foreach (var key_val in this.ColorsDictGameObject) { + colors.Add(key_val.Key.GetInstanceID().ToString(), key_val.Value); + } + + return colors; + } + } + + // Use this for initialization + /// + /// + void Start() { this.Setup(); } + + void CheckBlock() { + if (this._block == null) { + this._block = new MaterialPropertyBlock(); + } + } + + SynthesisUtilities.CapturePass[] _capture_passes = { + new SynthesisUtilities.CapturePass { + _Name = + "_object_id", + _ReplacementMode + = SynthesisUtilities.ReplacementModes + .Object_id_, + _SupportsAntialiasing + = false + } + }; + + /// + /// + void Setup() { + this._camera = this.GetComponent(); + SynthesisUtilities.SetupCapturePassesReplacementShader(this._camera, + this.segmentation_shader, + ref this._capture_passes); + this.ColorsDictGameObject = new Dictionary(); + this._all_renders = FindObjectsOfType(); + this.CheckBlock(); + foreach (var r in this._all_renders) { + r.GetPropertyBlock(this._block); + var game_object = r.gameObject; + var id = game_object.GetInstanceID(); + var layer = game_object.layer; + var go_tag = game_object.tag; + + if (!this.ColorsDictGameObject.ContainsKey(game_object)) { + this.ColorsDictGameObject.Add(game_object, ColorEncoding.EncodeIdAsColor(id)); + } else { + #if NEODROID_DEBUG + if (true) { + Debug.LogWarning($"ColorDict Duplicate {game_object}"); + } + #endif + } + + this._block.SetColor(SynthesisUtilities._Shader_ObjectId_Color_Name, + ColorEncoding.EncodeIdAsColor(id)); +/* +this._block?.SetInt(SynthesisUtils._Shader_OutputMode_Name,(int) SynthesisUtils.ReplacementModes + .Object_id_); + */ + //this._block.SetColor("_CategoryIdColor", ColorEncoding.EncodeLayerAsColor(layer)); + //this._block.SetColor("_MaterialIdColor", ColorEncoding.EncodeIdAsColor(id)); + //this._block.SetColor("_CategoryColor", ColorEncoding.EncodeTagHashCodeAsColor(go_tag)); + r.SetPropertyBlock(this._block); + } + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/ObjectIdSegmenter.cs.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation/ObjectIdSegmenter.cs.meta new file mode 100644 index 000000000..b11a6c39f --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/ObjectIdSegmenter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08d8186d4ab68d634912ff814b6d0f62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete.meta new file mode 100644 index 000000000..d0c61b172 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9b96c6e5300b4624aeb606c348627dc8 +timeCreated: 1550523594 \ No newline at end of file diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByInstance.cs b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByInstance.cs new file mode 100644 index 000000000..52de648a0 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByInstance.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Structs; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Segmentation.Obsolete { + /// + /// + /// + [ExecuteInEditMode] + public class ChangeMaterialOnRenderByInstance : ObsoleteSegmenter { + /// + /// + Renderer[] _all_renders; + + /// + /// + MaterialPropertyBlock _block; + + /// + /// + LinkedList[] _original_colors; + + [SerializeField] ColorByInstance[] instanceColorArray; + + /// + /// + public Dictionary ColorsDictGameObject { get; } = new Dictionary(); + + /// + /// + public override Dictionary ColorsDict { + get { + var colors = new Dictionary(); + foreach (var key_val in this.ColorsDictGameObject) { + colors.Add(key_val.Key.GetInstanceID().ToString(), key_val.Value); + } + + return colors; + } + } + + /// + /// + public ColorByInstance[] InstanceColors { + get { + if (this.ColorsDictGameObject != null) { + this.instanceColorArray = new ColorByInstance[this.ColorsDictGameObject.Keys.Count]; + var i = 0; + foreach (var key in this.ColorsDictGameObject.Keys) { + var seg = new ColorByInstance {_Game_Object = key, _Color = this.ColorsDictGameObject[key]}; + this.instanceColorArray[i] = seg; + i++; + } + + return this.instanceColorArray; + } + + return null; + } + set { + foreach (var seg in value) { + this.ColorsDictGameObject[seg._Game_Object] = seg._Color; + } + } + } + + // Use this for initialization + /// + /// + void Start() { this.Setup(); } + + /// + /// + void Awake() { + this._all_renders = FindObjectsOfType(); + this._block = new MaterialPropertyBlock(); + this.Setup(); + } + + // Update is called once per frame + /// + /// + void Update() { + var renderers = FindObjectsOfType(); + if (this.ColorsDictGameObject == null) { + this.Setup(); + } else if (this.ColorsDictGameObject.Keys.Count != renderers.Length) { + this._all_renders = renderers; + this.Setup(); + } + } + + void CheckBlock() { + if (this._block == null) { + this._block = new MaterialPropertyBlock(); + } + } + + /// + /// + void Setup() { + this.CheckBlock(); + + this.ColorsDictGameObject.Clear(); + foreach (var rend in this._all_renders) { + if (rend) { + this.ColorsDictGameObject.Add(rend.gameObject, Random.ColorHSV()); + } + } + } + + /// + /// + protected override void Change() { + this.CheckBlock(); + this._original_colors = new LinkedList[this._all_renders.Length]; + + for (var i = 0; i < this._original_colors.Length; i++) { + this._original_colors[i] = new LinkedList(); + } + + for (var i = 0; i < this._all_renders.Length; i++) { + var c_renderer = this._all_renders[i]; + if (c_renderer) { + foreach (var mat in c_renderer.sharedMaterials) { + if (mat != null && mat.HasProperty(this._Default_Color_Tag)) { + this._original_colors[i].AddFirst(mat.color); + } + + if (this.ColorsDictGameObject.ContainsKey(c_renderer.gameObject)) { + var val = this.ColorsDictGameObject[c_renderer.gameObject]; + this._block.SetColor(this._Segmentation_Color_Tag, val); + this._block.SetColor(this._Outline_Color_Tag, this._Outline_Color); + this._block.SetFloat(this._Outline_Width_Factor_Tag, this._Outline_Width_Factor); + } + + c_renderer.SetPropertyBlock(this._block); + } + } + } + } + + /// + /// + protected override void Restore() { + this.CheckBlock(); + for (var i = 0; i < this._all_renders.Length; i++) { + var c_renderer = this._all_renders[i]; + if (c_renderer) { + foreach (var mat in c_renderer.sharedMaterials) { + if (mat != null && this._original_colors != null && i < this._original_colors.Length) { + var c_original_color = this._original_colors[i]; + if (c_original_color != null) { + var c = this._original_colors[i]; + var last = c?.Last; + if (last != null) { + var last_val = last.Value; + this._block.SetColor(this._Default_Color_Tag, last_val); + c_original_color.RemoveLast(); + c_renderer.SetPropertyBlock(this._block); + } + } + } + } + } + } + } + } +} diff --git a/Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByInstance.cs.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByInstance.cs.meta similarity index 100% rename from Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByInstance.cs.meta rename to Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByInstance.cs.meta diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByTag.cs b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByTag.cs new file mode 100644 index 000000000..905a9164b --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByTag.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Structs; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Segmentation.Obsolete { + /// + /// + /// + [ExecuteInEditMode] + public class ChangeMaterialOnRenderByTag : ObsoleteSegmenter { + /// + /// + Renderer[] _all_renders; + + /// + /// + MaterialPropertyBlock _block; + + /// + /// + [SerializeField] + protected ColorByCategory[] _colors_by_category; + + /// + /// + LinkedList[] _original_colors; + + /// + /// + public bool _Replace_Untagged_Color = true; + + [SerializeField] ScriptableObjects.Segmentation _segmentation = null; + + /// + /// + Dictionary _tag_colors_dict = new Dictionary(); + + /// + /// + public Color _Untagged_Color = Color.black; + + /// + /// + public ColorByCategory[] ColorsByCategory { get { return this._colors_by_category; } } + + /// + /// + public override Dictionary ColorsDict { get { return this._tag_colors_dict; } } + + /// + /// + void Awake() { + this._block = new MaterialPropertyBlock(); + this._tag_colors_dict.Clear(); + var colors_by_tag = this._colors_by_category; + if (colors_by_tag != null && colors_by_tag.Length > 0) { + foreach (var tag_color in this._colors_by_category) { + if (!this._tag_colors_dict.ContainsKey(tag_color._Category_Name)) { + this._tag_colors_dict.Add(tag_color._Category_Name, tag_color._Color); + } + } + } + + if (this._segmentation) { + var segmentation_color_by_tags = this._segmentation._color_by_categories; + if (segmentation_color_by_tags != null) { + foreach (var tag_color in segmentation_color_by_tags) { + if (!this._tag_colors_dict.ContainsKey(tag_color._Category_Name)) { + this._tag_colors_dict.Add(tag_color._Category_Name, tag_color._Color); + } + } + } + } + + this.Setup(); + } + + /// + /// + void Update() { + this.Setup(); // Renderers maybe be disable and enabled, that is why every update we find all renderers again + } + + /// + /// + void Setup() { + this.CheckBlock(); + + this._all_renders = FindObjectsOfType(); + } + + /// + /// + protected override void Change() { + this._original_colors = new LinkedList[this._all_renders.Length]; + for (var i = 0; i < this._original_colors.Length; i++) { + this._original_colors[i] = new LinkedList(); + } + + this.CheckBlock(); + + for (var i = 0; i < this._all_renders.Length; i++) { + var c_renderer = this._all_renders[i]; + if (c_renderer) { + if (this._tag_colors_dict != null && this._tag_colors_dict.ContainsKey(this._all_renders[i].tag)) { + foreach (var mat in this._all_renders[i].sharedMaterials) { + if (mat != null && mat.HasProperty(this._Default_Color_Tag)) { + this._original_colors[i].AddFirst(mat.color); + } + + this._block.SetColor(this._Segmentation_Color_Tag, + this._tag_colors_dict[this._all_renders[i].tag]); + + this._block.SetColor(this._Outline_Color_Tag, this._Outline_Color); + this._block.SetFloat(this._Outline_Width_Factor_Tag, this._Outline_Width_Factor); + this._all_renders[i].SetPropertyBlock(this._block); + } + } else if (this._Replace_Untagged_Color) { + foreach (var mat in this._all_renders[i].sharedMaterials) { + if (mat != null && mat.HasProperty(this._Default_Color_Tag)) { + this._original_colors[i].AddFirst(mat.color); + } + + this._block.SetColor(this._Segmentation_Color_Tag, this._Untagged_Color); + + this._block.SetColor(this._Outline_Color_Tag, this._Outline_Color); + this._block.SetFloat(this._Outline_Width_Factor_Tag, this._Outline_Width_Factor); + this._all_renders[i].SetPropertyBlock(this._block); + } + } + } + } + } + + void CheckBlock() { + if (this._block == null) { + this._block = new MaterialPropertyBlock(); + } + } + + /// + /// + protected override void Restore() { + this.CheckBlock(); + + for (var i = 0; i < this._all_renders.Length; i++) { + if (this._all_renders[i]) { + foreach (var mat in this._all_renders[i].sharedMaterials) { + if (mat != null && this._original_colors != null && i < this._original_colors.Length) { + var c = this._original_colors[i]; + var last = c?.Last; + if (last != null) { + var last_val = last.Value; + this._block.SetColor(this._Default_Color_Tag, last_val); + this._original_colors[i].RemoveLast(); + this._all_renders[i].SetPropertyBlock(this._block); + } + } + } + } + } + } + } +} diff --git a/Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByTag.cs.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByTag.cs.meta similarity index 100% rename from Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByTag.cs.meta rename to Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ChangeMaterialOnRenderByTag.cs.meta diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ObsoleteSegmenter.cs b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ObsoleteSegmenter.cs new file mode 100644 index 000000000..70b12b4e8 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ObsoleteSegmenter.cs @@ -0,0 +1,41 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Segmentation.Obsolete { + /// + /// + /// + public abstract class ObsoleteSegmenter : Segmenter { + /// + /// + /// + protected int _Default_Color_Tag = Shader.PropertyToID("_Color"); + + protected int _Segmentation_Color_Tag = Shader.PropertyToID("_SegmentationColor"); + protected int _Outline_Color_Tag = Shader.PropertyToID("_OutlineColor"); + protected int _Outline_Width_Factor_Tag = Shader.PropertyToID("_OutlineWidthFactor"); + + [SerializeField, Range(0, 2)] protected float _Outline_Width_Factor = 0.05f; + [SerializeField] protected Color _Outline_Color = Color.magenta; + + public Color OutlineColor { get { return this._Outline_Color; } } + + void OnPreRender() { + // change + this.Change(); + } + + protected abstract void Change(); + + /*void OnPreCull() { + // change +}*/ + /// + /// + void OnPostRender() { + // change back + this.Restore(); + } + + protected abstract void Restore(); + } +} diff --git a/Runtime/Utilities/Segmentation/Segmenter.cs.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ObsoleteSegmenter.cs.meta similarity index 100% rename from Runtime/Utilities/Segmentation/Segmenter.cs.meta rename to Runtime/GameObjects/NeodroidCamera/Segmentation/Obsolete/ObsoleteSegmenter.cs.meta diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/Segmenter.cs b/Runtime/GameObjects/NeodroidCamera/Segmentation/Segmenter.cs new file mode 100644 index 000000000..deb1e9ade --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/Segmenter.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Segmentation { + /// + /// + /// + public abstract class Segmenter : MonoBehaviour, + IColorProvider { + /// + /// + /// + public abstract Dictionary ColorsDict { get; } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Segmentation/Segmenter.cs.meta b/Runtime/GameObjects/NeodroidCamera/Segmentation/Segmenter.cs.meta new file mode 100644 index 000000000..723a7e67e --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Segmentation/Segmenter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b80ad616dba28d2cb6e2eb717f4cc4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/SynchroniseCameraProperties.cs b/Runtime/GameObjects/NeodroidCamera/SynchroniseCameraProperties.cs new file mode 100644 index 000000000..a80ac502b --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/SynchroniseCameraProperties.cs @@ -0,0 +1,426 @@ +using System; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera { + /// + /// + /// + [RequireComponent(typeof(Camera))] + [ExecuteInEditMode] + [Serializable] + public class SynchroniseCameraProperties : MonoBehaviour { + /// + /// + [SerializeField] + SynchroniseCameraProperties[] _cameras = null; + + /// + /// + [SerializeField] + bool _run_only_in_edit_mode = true; + + /// + /// + [SerializeField] + bool _only_run_on_awake = false; + + /// + /// + [SerializeField] + bool _sync_culling_mask = true; + + /// + /// + [SerializeField] + bool _sync_far_clip_plane = true; + + /// + /// + [SerializeField] + bool _sync_fov = true; + + /// + /// + [SerializeField] + bool _sync_near_clip_plane = true; + + /// + /// + [SerializeField] + bool _sync_orthographic_projection = true; + + /// + /// + [SerializeField] + bool _sync_orthographic_size = true; + + /// + /// + [SerializeField] + bool _sync_physicality = true; + + /// + /// + [SerializeField] + bool _sync_sensor_size = true; + + /// + /// + [SerializeField] + bool _sync_lens_shift = true; + + /// + /// + [SerializeField] + bool _sync_gate_fit = true; + + /// + /// + [SerializeField] + bool _sync_focal_length = true; + +/* + /// + /// + [SerializeField] + bool _sync_sensor_type = true; + + /// + /// + [SerializeField] + bool _sync_fov_axis = true; +*/ + [SerializeField] Camera _camera; + + #region old + + int _old_culling_mask = 0; + + float _old_far_clip_plane = 0; + + float _old_fov = 0; + + float _old_near_clip_plane = 0; + + bool _old_orthographic_projection = false; + + float _old_orthographic_size = 0; + + float _old_foc; + bool _old_physicality = false; + Camera.GateFitMode _old_gate_fit = Camera.GateFitMode.Fill; + Vector2 _old_sensor_size = Vector2.one; + Vector2 _old_lens_shift = Vector2.zero; + + #endregion + + /// + /// + /// + public float Foc { + get { return this._camera.focalLength; } + set { + if (this._sync_focal_length) { + this._camera.focalLength = value; + this._old_foc = value; + } + } + } + + /// + /// + /// + public float OrtSize { + get { return this._camera.orthographicSize; } + set { + if (this._sync_orthographic_size) { + this._camera.orthographicSize = value; + this._old_orthographic_size = value; + } + } + } + + /// + /// + /// + public float Near { + get { return this._camera.nearClipPlane; } + set { + if (this._sync_far_clip_plane) { + this._camera.nearClipPlane = value; + this._old_near_clip_plane = value; + } + } + } + + public float Fov { + get { return this._camera.fieldOfView; } + set { + if (this._sync_fov) { + this._camera.fieldOfView = value; + this._old_fov = value; + } + } + } + + public bool Ort { + get { return this._camera.orthographic; } + set { + if (this._sync_orthographic_projection) { + this._camera.orthographic = value; + this._old_orthographic_projection = value; + } + } + } + + public int Mask { + get { return this._camera.cullingMask; } + set { + if (this._sync_culling_mask) { + this._camera.cullingMask = value; + this._old_culling_mask = value; + } + } + } + + public float Far { + get { return this._camera.farClipPlane; } + set { + if (this._sync_far_clip_plane) { + this._camera.farClipPlane = value; + this._old_far_clip_plane = value; + } + } + } + + public bool Physicality { + get { return this._camera.usePhysicalProperties; } + set { + if (this._sync_physicality) { + this._camera.usePhysicalProperties = value; + this._old_physicality = value; + } + } + } + + public Camera.GateFitMode Gate { + get { return this._camera.gateFit; } + set { + if (this._sync_gate_fit) { + this._camera.gateFit = value; + this._old_gate_fit = value; + } + } + } + + public Vector2 SensSize { + get { return this._camera.sensorSize; } + set { + if (this._sync_sensor_size) { + this._camera.sensorSize = value; + this._old_sensor_size = value; + } + } + } + + public Vector2 Shift { + get { return this._camera.lensShift; } + set { + if (this._sync_lens_shift) { + this._camera.lensShift = value; + this._old_lens_shift = value; + } + } + } + + /// + /// + public void Awake() { + this._camera = this.GetComponent(); + if (this._camera) { + this.OrtSize = this._camera.orthographicSize; + this.Near = this._camera.nearClipPlane; + this.Far = this._camera.farClipPlane; + this.Mask = this._camera.cullingMask; + this.Ort = this._camera.orthographic; + this.Fov = this._camera.fieldOfView; + this.Foc = this._camera.focalLength; + this.Physicality = this._camera.usePhysicalProperties; + this.Gate = this._camera.gateFit; + this.SensSize = this._camera.sensorSize; + this.Shift = this._camera.lensShift; + + this._cameras = FindObjectsOfType(); + } else { + Debug.Log("No camera component found on GameObject"); + } + + this.Sync_Cameras(); + } + + public void Sync_Cameras() { + if (this.enabled) { + if (this._camera) { + if (this._sync_orthographic_size) { + var orthographic_size = this.OrtSize; + if (Math.Abs(this._old_orthographic_size - orthographic_size) + > NeodroidConstants._Double_Tolerance) { + this.OrtSize = orthographic_size; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.OrtSize = orthographic_size; + } + } + } + } + + if (this._sync_near_clip_plane) { + var near_clip_plane = this._camera.nearClipPlane; + if (Math.Abs(this._old_near_clip_plane - near_clip_plane) > NeodroidConstants._Double_Tolerance) { + this._old_near_clip_plane = near_clip_plane; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Near = near_clip_plane; + } + } + } + } + + if (this._sync_far_clip_plane) { + var far_clip_plane = this._camera.farClipPlane; + if (Math.Abs(this._old_far_clip_plane - far_clip_plane) > NeodroidConstants._Double_Tolerance) { + this._old_far_clip_plane = far_clip_plane; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Far = far_clip_plane; + } + } + } + } + + if (this._sync_culling_mask) { + var culling_mask = this._camera.cullingMask; + if (this._old_culling_mask != culling_mask) { + this._old_culling_mask = culling_mask; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Mask = culling_mask; + } + } + } + + if (this._sync_orthographic_projection) { + var orthographic = this._camera.orthographic; + if (this._old_orthographic_projection != orthographic) { + this._old_orthographic_projection = orthographic; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Ort = orthographic; + } + } + } + } + } + + if (this._sync_fov) { + var fov = this._camera.fieldOfView; + if (Math.Abs(this._old_fov - fov) > NeodroidConstants._Double_Tolerance) { + this._old_fov = fov; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Fov = fov; + } + } + } + } + + if (this._sync_focal_length) { + var foc = this._camera.focalLength; + if (Math.Abs(this._old_foc - foc) > NeodroidConstants._Double_Tolerance) { + this._old_foc = foc; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Foc = foc; + } + } + } + } + + if (this._sync_physicality) { + var physicality = this._camera.usePhysicalProperties; + if (this._old_physicality != physicality) { + this._old_physicality = physicality; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Physicality = physicality; + } + } + } + } + + if (this._sync_sensor_size) { + var a = this._camera.sensorSize; + if (this._old_sensor_size != a) { + this._old_sensor_size = a; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.SensSize = a; + } + } + } + } + + if (this._sync_lens_shift) { + var a = this._camera.lensShift; + if (this._old_lens_shift != a) { + this._old_lens_shift = a; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Shift = a; + } + } + } + } + + if (this._sync_gate_fit) { + var a = this._camera.gateFit; + if (this._old_gate_fit != a) { + this._old_gate_fit = a; + foreach (var cam in this._cameras) { + if (cam != this && cam != null) { + cam.Gate = a; + } + } + } + } + } else { + #if NEODROID_DEBUG + Debug.Log($"No Camera component found on {this.name} GameObject"); + #endif + } + } else { + #if NEODROID_DEBUG + //Debug.Log($"No SyncCameraProperties component found on {this.name} GameObject"); + + #endif + } + } + + /// + /// + public void Update() { + if (!this._only_run_on_awake) { + if (this._run_only_in_edit_mode) { + #if UNITY_EDITOR + if (!Application.isPlaying) { + this.Sync_Cameras(); + } + #endif + } else { + this.Sync_Cameras(); + } + } + } + } +} diff --git a/Runtime/Utilities/NeodroidCamera/SynchroniseCameraProperties.cs.meta b/Runtime/GameObjects/NeodroidCamera/SynchroniseCameraProperties.cs.meta similarity index 100% rename from Runtime/Utilities/NeodroidCamera/SynchroniseCameraProperties.cs.meta rename to Runtime/GameObjects/NeodroidCamera/SynchroniseCameraProperties.cs.meta diff --git a/Runtime/GameObjects/NeodroidCamera/Synthesis.meta b/Runtime/GameObjects/NeodroidCamera/Synthesis.meta new file mode 100644 index 000000000..3e329e6d2 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Synthesis.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f489246e5b7956380a76296f66681966 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Synthesis/ColorEncoding.cs b/Runtime/GameObjects/NeodroidCamera/Synthesis/ColorEncoding.cs new file mode 100644 index 000000000..67f5ed733 --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Synthesis/ColorEncoding.cs @@ -0,0 +1,168 @@ +using UnityEngine; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Synthesis { + /// + /// + /// + public static class ColorEncoding { + /// + /// + /// + /// + /// + public static byte ReverseBits(byte value) { + return (byte)((value * 0x0202020202 & 0x010884422010) % 1023); + } + + /// + /// + /// + /// + /// + /// + public static int SparsifyBits(byte value, int sparse) { + var ret_val = 0; + for (var bits = 0; bits < 8; bits++, value >>= 1) { + ret_val |= value & 1; + ret_val <<= sparse; + } + + return ret_val >> sparse; + } + + /// + /// + /// + /// + /// + public static Color EncodeIdAsColor(int instance_id) { + var uid = instance_id * 2; + if (uid < 0) { + uid = -uid + 1; + } + + var sid = (SparsifyBits((byte)(uid >> 16), 3) << 2) + | (SparsifyBits((byte)(uid >> 8), 3) << 1) + | SparsifyBits((byte)uid, 3); + //Debug.Log(uid + " >>> " + System.Convert.ToString(sid, 2).PadLeft(24, '0')); + + var r = (byte)(sid >> 8); + var g = (byte)(sid >> 16); + var b = (byte)sid; + + //Debug.Log(r + " " + g + " " + b); + return new Color32(r, + g, + b, + 255); + } + + /// + /// + /// + /// + /// + /// + public static Color EncodeTagHashCodeAsColor(int hash) { + //var a = (byte)(hash >> 24); + var r = (byte)(hash >> 16); + var g = (byte)(hash >> 8); + var b = (byte)hash; + return new Color32(r, + g, + b, + 255); + } + + /// + /// + /// + /// + /// + /// + public static Color EncodeLayerAsColor(int layer, float z = .7f) { + // z value must be in the range (0.5 .. 1.0) + // in order to avoid color overlaps when using 'divider' in this func + + // First 8 layers are Unity Builtin layers + // Unity supports up to 32 layers in total + + // Lets create palette of unique 16 colors + var unique_colors = new[] { + new Color(1, + 1, + 1, + 1), + new Color(z, + z, + z, + 1), // 0 + new Color(1, + 1, + z, + 1), + new Color(1, + z, + 1, + 1), + new Color(z, + 1, + 1, + 1), // + new Color(1, + z, + 0, + 1), + new Color(z, + 0, + 1, + 1), + new Color(0, + 1, + z, + 1), // 7 + + new Color(1, + 0, + 0, + 1), + new Color(0, + 1, + 0, + 1), + new Color(0, + 0, + 1, + 1), // 8 + new Color(1, + 1, + 0, + 1), + new Color(1, + 0, + 1, + 1), + new Color(0, + 1, + 1, + 1), // + new Color(1, + z, + z, + 1), + new Color(z, + 1, + z, + 1) // 15 + }; + + // Create as many colors as necessary by using base 16 color palette + // To create more than 16 - will simply adjust brightness with 'divider' + var color = unique_colors[layer % unique_colors.Length]; + var divider = 1.0f + Mathf.Floor(layer / unique_colors.Length); + color /= divider; + + return color; + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Synthesis/ColorEncoding.cs.meta b/Runtime/GameObjects/NeodroidCamera/Synthesis/ColorEncoding.cs.meta new file mode 100644 index 000000000..b12e2b20f --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Synthesis/ColorEncoding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9e4864e2a9ab401eba46d67f5be7a69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/NeodroidCamera/Synthesis/SynthesisUtilities.cs b/Runtime/GameObjects/NeodroidCamera/Synthesis/SynthesisUtilities.cs new file mode 100644 index 000000000..5895503fc --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Synthesis/SynthesisUtilities.cs @@ -0,0 +1,262 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace droid.Runtime.GameObjects.NeodroidCamera.Synthesis { + /// + /// + /// + public static class SynthesisUtilities { + static readonly int _sensitivity = Shader.PropertyToID("_Sensitivity"); + public const string _Shader_Layer_Color_Name = "_LayerColor"; + public const string _Shader_Tag_Color_Name = "_TagColor"; + public const string _Shader_MaterialId_Color_Name = "_MaterialIdColor"; + public const string _Shader_ObjectId_Color_Name = "_ObjectIdColor"; + public const string _Shader_OutputMode_Name = "_OutputMode"; + + public static CapturePass[] _Default_Capture_Passes = { + new CapturePass { + _Name = "_img", + _ReplacementMode = + ReplacementModes.None_ + }, + new CapturePass { + _Name = "_id", + _SupportsAntialiasing = + false, + _ReplacementMode = + ReplacementModes + .Object_id_ + }, + new CapturePass { + _Name = "_layer", + _SupportsAntialiasing = + false, + _ReplacementMode = + ReplacementModes + .Layer_id_ + }, + new CapturePass { + _Name = "_depth", + _ReplacementMode = + ReplacementModes + .Depth_compressed_ + }, + new CapturePass { + _Name = "_normals", + _ReplacementMode = + ReplacementModes + .Normals_ + }, + new CapturePass { + _Name = "_mat_id", + _SupportsAntialiasing = + false, + _ReplacementMode = + ReplacementModes + .Material_id_ + }, + new CapturePass { + _Name = "_tag", + _SupportsAntialiasing = + false, + _ReplacementMode = + ReplacementModes + .Material_id_ + }, + new CapturePass { + _Name = "_flow", + _SupportsAntialiasing = + false, + _NeedsRescale = true, + _ReplacementMode = + ReplacementModes.Flow_ + } + }; + + /// + /// + /// + [Serializable] + public struct CapturePass { + // configuration + public string _Name; + public bool _SupportsAntialiasing; + public bool _NeedsRescale; + public Camera _Camera; + public ReplacementModes _ReplacementMode; + } + + /// + /// + /// + public enum ReplacementModes { + /// + /// + /// + Object_id_ = 0, + + /// + /// + /// + Material_id_ = 1, + + /// + /// + /// + Layer_id_ = 2, + + /// + /// + /// + Tag_id_ = 3, + + /// + /// + /// + Depth_compressed_ = 4, + + /// + /// + /// + Depth_multichannel_ = 5, + + /// + /// + /// + Normals_ = 6, + + /// + /// + /// + None_ = 7, + + /// + /// + /// + Flow_ = 8 + } + + /// + /// + /// + public static void SetupCapturePassesFull(Camera camera, + Shader replacement_shader, + Shader optical_flow_shader, + Material optical_flow_material, + float optical_flow_sensitivity, + ref CapturePass[] capture_passes) { + SetupHiddenCapturePassCameras(camera, ref capture_passes); + CleanRefreshPassCameras(camera, ref capture_passes); + + // cache materials and setup material properties + if (!optical_flow_material || optical_flow_material.shader != optical_flow_shader) { + optical_flow_material = new Material(optical_flow_shader); + } + + optical_flow_material.SetFloat(_sensitivity, optical_flow_sensitivity); + + // setup command buffers and replacement shaders + AddReplacementShaderCommandBufferOnCamera(capture_passes[1]._Camera, + replacement_shader, + capture_passes[1]._ReplacementMode); + AddReplacementShaderCommandBufferOnCamera(capture_passes[2]._Camera, + replacement_shader, + capture_passes[2]._ReplacementMode); + AddReplacementShaderCommandBufferOnCamera(capture_passes[6]._Camera, + replacement_shader, + capture_passes[6]._ReplacementMode); + + AddReplacementShaderCommandBufferOnCamera(capture_passes[5]._Camera, + replacement_shader, + capture_passes[5]._ReplacementMode); + + AddReplacementShaderCommandBufferOnCamera(capture_passes[3]._Camera, + replacement_shader, + capture_passes[3]._ReplacementMode, + Color.white); + AddReplacementShaderCommandBufferOnCamera(capture_passes[4]._Camera, + replacement_shader, + capture_passes[4]._ReplacementMode); + SetupCameraWithPostShader(capture_passes[8]._Camera, + optical_flow_material, + DepthTextureMode.Depth | DepthTextureMode.MotionVectors); + } + + public static void SetupCapturePassesReplacementShader(Camera camera, + Shader replacement_shader, + ref CapturePass[] capture_passes) { + SetupHiddenCapturePassCameras(camera, ref capture_passes); + CleanRefreshPassCameras(camera, ref capture_passes); + + foreach (var capture_pass in capture_passes) { + AddReplacementShaderCommandBufferOnCamera(capture_pass._Camera, + replacement_shader, + capture_pass._ReplacementMode); + } + } + + static void CleanRefreshPassCameras(Camera camera, ref CapturePass[] capture_passes) { + var target_display = 1; + foreach (var pass in capture_passes) { + if (pass._Camera == camera) { + continue; + } + + pass._Camera.RemoveAllCommandBuffers(); // cleanup capturing camera + pass._Camera.CopyFrom(camera); // copy all "main" camera parameters into capturing camera + pass._Camera.targetDisplay = + target_display++; // set targetDisplay here since it gets overriden by CopyFrom() + } + } + + static void AddReplacementShaderCommandBufferOnCamera(Camera cam, Shader shader, ReplacementModes mode) { + AddReplacementShaderCommandBufferOnCamera(cam, + shader, + mode, + Color.black); + } + + static void AddReplacementShaderCommandBufferOnCamera(Camera camera, + Shader shader, + ReplacementModes mode, + Color clear_color) { + var cb = new CommandBuffer {name = mode.ToString()}; + cb.SetGlobalInt(_Shader_OutputMode_Name, (int)mode); + camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, cb); + camera.AddCommandBuffer(CameraEvent.BeforeFinalPass, cb); + camera.SetReplacementShader(shader, ""); + camera.backgroundColor = clear_color; + camera.clearFlags = CameraClearFlags.SolidColor; + } + + static void SetupCameraWithPostShader(Camera cam, + Material material, + DepthTextureMode depth_texture_mode = DepthTextureMode.None) { + var cb = new CommandBuffer {name = cam.name}; + cb.Blit(null, BuiltinRenderTextureType.CurrentActive, material); + cam.AddCommandBuffer(CameraEvent.AfterEverything, cb); + cam.depthTextureMode = depth_texture_mode; + } + + /// + /// + /// + /// + /// + static void SetupHiddenCapturePassCameras(Camera camera, ref CapturePass[] capture_passes) { + capture_passes[0]._Camera = camera; + for (var q = 1; q < capture_passes.Length; q++) { + capture_passes[q]._Camera = CreateHiddenCamera(capture_passes[q]._Name, camera.transform); + } + } + + static Camera CreateHiddenCamera(string cam_name, Transform parent) { + var go = new GameObject(cam_name, typeof(Camera)) {hideFlags = HideFlags.HideAndDontSave}; + go.transform.parent = parent; + + var new_camera = go.GetComponent(); + return new_camera; + } + } +} diff --git a/Runtime/GameObjects/NeodroidCamera/Synthesis/SynthesisUtilities.cs.meta b/Runtime/GameObjects/NeodroidCamera/Synthesis/SynthesisUtilities.cs.meta new file mode 100644 index 000000000..f479926af --- /dev/null +++ b/Runtime/GameObjects/NeodroidCamera/Synthesis/SynthesisUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b114e6a82d44566851139786248b4d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Plotting.meta b/Runtime/GameObjects/Plotting.meta similarity index 100% rename from Runtime/Utilities/Plotting.meta rename to Runtime/GameObjects/Plotting.meta diff --git a/Runtime/Utilities/Plotting/DrawSpaces.cs b/Runtime/GameObjects/Plotting/DrawSpaces.cs similarity index 83% rename from Runtime/Utilities/Plotting/DrawSpaces.cs rename to Runtime/GameObjects/Plotting/DrawSpaces.cs index e37f5f19f..f575c1f1d 100644 --- a/Runtime/Utilities/Plotting/DrawSpaces.cs +++ b/Runtime/GameObjects/Plotting/DrawSpaces.cs @@ -1,8 +1,7 @@ using UnityEngine; -namespace Neodroid.Runtime.Utilities.Plotting { +namespace droid.Runtime.GameObjects.Plotting { /// - /// /// public class DrawSpaces : MonoBehaviour { void OnDrawGizmos() { @@ -35,8 +34,9 @@ void OnDrawGizmos() { void DrawHelperAtCenter(Vector3 direction, Color color, float scale) { Gizmos.color = color; - var destination = this.transform.position + direction * scale; - Gizmos.DrawLine(this.transform.position, destination); + var position = this.transform.position; + var destination = position + direction * scale; + Gizmos.DrawLine(position, destination); } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Plotting/DrawSpaces.cs.meta b/Runtime/GameObjects/Plotting/DrawSpaces.cs.meta similarity index 100% rename from Runtime/Utilities/Plotting/DrawSpaces.cs.meta rename to Runtime/GameObjects/Plotting/DrawSpaces.cs.meta diff --git a/Runtime/Utilities/Plotting/Meshes.cs b/Runtime/GameObjects/Plotting/Meshes.cs similarity index 97% rename from Runtime/Utilities/Plotting/Meshes.cs rename to Runtime/GameObjects/Plotting/Meshes.cs index 5ab26021a..22aec28c3 100644 --- a/Runtime/Utilities/Plotting/Meshes.cs +++ b/Runtime/GameObjects/Plotting/Meshes.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace Neodroid.Runtime.Utilities.Plotting { +namespace droid.Runtime.GameObjects.Plotting { public class Meshes { public static Mesh ConeMesh() { var mesh = new Mesh(); @@ -241,9 +241,8 @@ public static Mesh SphereMesh() { uvs[uvs.Length - 1] = Vector2.zero; for (var lat = 0; lat < nb_lat; lat++) { for (var lon = 0; lon <= nb_long; lon++) { - uvs[lon + lat * (nb_long + 1) + 1] = new Vector2( - (float)lon / nb_long, - 1f - (float)(lat + 1) / (nb_lat + 1)); + uvs[lon + lat * (nb_long + 1) + 1] = + new Vector2((float)lon / nb_long, 1f - (float)(lat + 1) / (nb_lat + 1)); } } @@ -298,4 +297,4 @@ public static Mesh SphereMesh() { return mesh; } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Plotting/Meshes.cs.meta b/Runtime/GameObjects/Plotting/Meshes.cs.meta similarity index 100% rename from Runtime/Utilities/Plotting/Meshes.cs.meta rename to Runtime/GameObjects/Plotting/Meshes.cs.meta diff --git a/Runtime/GameObjects/Plotting/PlotFunctions.cs b/Runtime/GameObjects/Plotting/PlotFunctions.cs new file mode 100644 index 000000000..f44a39028 --- /dev/null +++ b/Runtime/GameObjects/Plotting/PlotFunctions.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; +using droid.Runtime.Structs; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using UnityEngine; + +namespace droid.Runtime.GameObjects.Plotting { + public static class PlotFunctions { + static List _points = new List(); + + /// + /// + /// + /// + /// + /// + /// + /// + public static Points.ValuePoint[] SampleRandomSeries(int size, + float min_val = 0, + float max_val = 5, + float particle_size_min = 0.2f, + float particle_size_max = 1.8f) { + var s = new SampleSpace3 {_space = Space3.MinusOneOne}; + _points.Clear(); + for (var j = 0; j < size; j++) { + var point = s.Sample() * max_val; + var vp = new Points.ValuePoint(point, + Random.Range(min_val, max_val), + Random.Range(particle_size_min, particle_size_max)); + _points.Add(vp); + } + + var points = _points.ToArray(); + return points; + } + } +} diff --git a/Runtime/Utilities/Plotting/PlotFunctions.cs.meta b/Runtime/GameObjects/Plotting/PlotFunctions.cs.meta similarity index 100% rename from Runtime/Utilities/Plotting/PlotFunctions.cs.meta rename to Runtime/GameObjects/Plotting/PlotFunctions.cs.meta diff --git a/Runtime/GameObjects/Plotting/ValueRangePlotter.cs b/Runtime/GameObjects/Plotting/ValueRangePlotter.cs new file mode 100644 index 000000000..730cd37f5 --- /dev/null +++ b/Runtime/GameObjects/Plotting/ValueRangePlotter.cs @@ -0,0 +1,41 @@ +using System; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER + +namespace droid.Runtime.GameObjects.Plotting { + [ExecuteInEditMode] + public class ValueRangePlotter : MonoBehaviour { + Material _material; + [SerializeField] Shader _shader = null; + [SerializeField] Bounds _value_range = new Bounds(Vector3.zero, Vector3.one * 2); + static readonly Int32 _range = Shader.PropertyToID("_Range"); + + void OnDestroy() { + if (this._material != null) { + if (Application.isPlaying) { + Destroy(this._material); + } else { + DestroyImmediate(this._material); + } + } + } + + public void OnRenderObject() { + if (this._material == null) { + this._material = new Material(this._shader); + this._material.hideFlags = HideFlags.DontSave; + } + + this._material.SetVector(_range, + new Vector4(this._value_range.min.x, + this._value_range.max.x, + this._value_range.center.y, + this._value_range.extents.y + this._value_range.center.y)); + + this._material.SetPass(0); + Graphics.DrawProceduralNow(MeshTopology.LineStrip, 512); + } + } +} +#endif diff --git a/Runtime/Utilities/Plotting/ValueRangePlotter.cs.meta b/Runtime/GameObjects/Plotting/ValueRangePlotter.cs.meta similarity index 100% rename from Runtime/Utilities/Plotting/ValueRangePlotter.cs.meta rename to Runtime/GameObjects/Plotting/ValueRangePlotter.cs.meta diff --git a/Runtime/GameObjects/PrototypingGameObject.cs b/Runtime/GameObjects/PrototypingGameObject.cs new file mode 100644 index 000000000..82e61ec55 --- /dev/null +++ b/Runtime/GameObjects/PrototypingGameObject.cs @@ -0,0 +1,202 @@ +using System; +using droid.Runtime.Interfaces; +using UnityEditor; +using UnityEngine; + +namespace droid.Runtime.GameObjects { + /// + /// + /// + public abstract class PrototypingGameObject : MonoBehaviour, + IRegisterable { + #if NEODROID_DEBUG + /// + /// + + [field : SerializeField] + public bool Debugging { get; set; } + #endif + + /// + public virtual string PrototypingTypeName { get { return this.GetType().Name; } } + + /// + /// + /// + public string Identifier { + get { + if (!string.IsNullOrWhiteSpace(this.CustomName)) { + return this.CustomName.Trim(); + } + + return this.name + this.PrototypingTypeName; + } + } + + /// + /// + [field : Header("Development", order = 90)] + [field : SerializeField] + public Boolean DisablesChildren { get; set; } = false; + + [field : SerializeField] + public Boolean UnregisterAtDisable { get; set; } = false; + + /// + /// + [field : SerializeField] + protected String CustomName { get; set; } = ""; + + /// + /// + protected void Start() { this.ReRegister(); } + + /// + /// + /// + void ReRegister() { + try { + if (this.enabled && this.isActiveAndEnabled) { + this.Setup(); + this.UnRegisterComponent(); + this.RegisterComponent(); + } + } catch (ArgumentNullException e) { + Debug.LogWarning(e); + Debug.Log($"You must override RegisterComponent and UnRegisterComponent for component {this.GetType()} for gameobject {this.Identifier} in order to Re-register component on every 'OnValidate' while in edit-mode"); + } + } + + /// + /// + protected void Awake() { + if (this.enabled && this.isActiveAndEnabled) { + this.Clear(); + } + } + + /// + /// + void OnDisable() { + if (this.DisablesChildren) { + var children = this.GetComponentsInChildren(); + foreach (var child in children) { + if (child.gameObject != this.gameObject) { + child.enabled = false; + child.gameObject.SetActive(false); + } + } + + foreach (Transform child in this.transform) { + if (child != this.transform) { + child.GetComponent()?.CallOnDisable(); + child.gameObject.SetActive(false); + } + } + } + + if (this.UnregisterAtDisable) { + this.UnRegisterComponent(); + } + } + + /// + /// + void CallOnDisable() { this.OnDisable(); } + + /// + /// + void CallOnEnable() { this.OnEnable(); } + + /// + /// + void OnEnable() { + if (this.DisablesChildren) { + foreach (Transform child in this.transform) { + if (child != this.transform) { + child.gameObject.SetActive(true); + child.GetComponent()?.CallOnEnable(); + } + } + + var children = this.GetComponentsInChildren(); + foreach (var child in children) { + if (child.gameObject != this.gameObject) { + child.enabled = true; + child.gameObject.SetActive(true); + } + } + } + + #if UNITY_EDITOR + if (EditorApplication.isPlayingOrWillChangePlaymode) { + return; + } + #endif + + this.ReRegister(); + } + + /// + /// + public virtual void Setup() { this.PreSetup(); } + + /// + /// + public virtual void PreSetup() { } + + /// + /// + /// + public virtual void RemotePostSetup() { } + + /// + /// + protected virtual void Clear() { } + + /// + /// + public virtual void Tick() { } + + /// + /// + /// + public virtual void PrototypingReset() { } + + #if UNITY_EDITOR + /// + /// + void OnValidate() { // Only called in the editor + if (!EditorApplication.isPlayingOrWillChangePlaymode) { + this.ReRegister(); + } + } + #endif + + /// + /// + /// + protected abstract void UnRegisterComponent(); + + /// + /// + /// + protected abstract void RegisterComponent(); + + /// + /// + public void RefreshStart() { + if (this.enabled && this.isActiveAndEnabled) { + this.Start(); + } + } + + /// + /// + public void RefreshAwake() { + if (this.enabled && this.isActiveAndEnabled) { + this.Awake(); + } + } + } +} diff --git a/Runtime/Utilities/GameObjects/PrototypingGameObject.cs.meta b/Runtime/GameObjects/PrototypingGameObject.cs.meta similarity index 100% rename from Runtime/Utilities/GameObjects/PrototypingGameObject.cs.meta rename to Runtime/GameObjects/PrototypingGameObject.cs.meta diff --git a/Runtime/Utilities/StatusDisplayer.meta b/Runtime/GameObjects/StatusDisplayer.meta similarity index 100% rename from Runtime/Utilities/StatusDisplayer.meta rename to Runtime/GameObjects/StatusDisplayer.meta diff --git a/Runtime/GameObjects/StatusDisplayer/AutoSetupStatusDisplayer.cs b/Runtime/GameObjects/StatusDisplayer/AutoSetupStatusDisplayer.cs new file mode 100644 index 000000000..824d54f9b --- /dev/null +++ b/Runtime/GameObjects/StatusDisplayer/AutoSetupStatusDisplayer.cs @@ -0,0 +1,160 @@ + +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Managers; +using droid.Runtime.Prototyping.ObjectiveFunctions; +using UnityEditor.Events; +using UnityEngine.Events; +using UnityEngine.UI; +#if UNITY_EDITOR +using droid.Runtime.Environments; +using UnityEngine; + +namespace droid.Runtime.GameObjects.StatusDisplayer { + /// + /// + /// + [ExecuteInEditMode] + public class AutoSetupStatusDisplayer : MonoBehaviour { + [SerializeField] bool _clean_empty_no_target_events = true; + + [SerializeField] NeodroidEnvironment _environment = null; + [SerializeField] TextUpdater _environment_frame = null; + [SerializeField] TextUpdater _environment_obs = null; + + [SerializeField] TextUpdater _environment_text = null; + [SerializeField] ObjectiveFunction _evaluation_function = null; + [SerializeField] AbstractNeodroidManager _manager = null; + [SerializeField] Button _reset_button = null; + [SerializeField] TextUpdater _signal = null; + [SerializeField] TextUpdater _episode_length = null; + [SerializeField] TextUpdater _status_text = null; + [SerializeField] ToggleUpdater _terminated = null; + [SerializeField] Toggle _testing_toggle = null; + [SerializeField] UnityEventCallState _unity_event_call_state = UnityEventCallState.RuntimeOnly; + + #if NEODROID_DEBUG + bool Debugging { get { return this._debugging; } set { this._debugging = value; } } + [SerializeField] bool _debugging; + #endif + + void TryRegister(DataPoller poller, UnityAction f) { + if (poller) { + var count = poller.PollEvent.GetPersistentEventCount(); + if (this._clean_empty_no_target_events && count > 0) { + //poller.PollEvent.RemoveAllListeners(); // Only non-persistant listeners. + for (var i = 0; i < count; i++) { + if (poller.PollEvent.GetPersistentTarget(i) == null + || poller.PollEvent.GetPersistentMethodName(i) == null) { + UnityEventTools.RemovePersistentListener(poller.PollEvent, i); + } + } + } + + count = poller.PollEvent.GetPersistentEventCount(); + if (count == 0) { + UnityEventTools.AddObjectPersistentListener(poller.PollEvent, f, poller); + poller.PollEvent.SetPersistentListenerState(0, this._unity_event_call_state); + } else if (count > 0 && poller.PollEvent.GetPersistentTarget(0) != poller) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"PollEvent on {poller} already has a listeners"); + } + #endif + } + } + } + + void TryRegisterVoid(UnityEventBase poller, UnityAction f) { + var count = poller.GetPersistentEventCount(); + if (this._clean_empty_no_target_events && count > 0) { + //poller.PollEvent.RemoveAllListeners(); // Only non-persistant listeners. + for (var i = 0; i < count; i++) { + if (poller.GetPersistentTarget(i) == null || poller.GetPersistentMethodName(i) == null) { + UnityEventTools.RemovePersistentListener(poller, i); + } + } + } + + count = poller.GetPersistentEventCount(); + if (count == 0) { + UnityEventTools.AddVoidPersistentListener(poller, f); + poller.SetPersistentListenerState(0, this._unity_event_call_state); + } else if (count > 0) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"PollEvent on {poller} already has a listeners"); + } + #endif + } + } + + void TryRegisterProperty(Toggle.ToggleEvent poller, UnityAction f) { + var count = poller.GetPersistentEventCount(); + if (this._clean_empty_no_target_events && count > 0) { + //poller.PollEvent.RemoveAllListeners(); // Only non-persistent listeners. + for (var i = 0; i < count; i++) { + if (poller.GetPersistentTarget(i) == null || poller.GetPersistentMethodName(i) == null) { + UnityEventTools.RemovePersistentListener(poller, i); + } + } + } + + count = poller.GetPersistentEventCount(); + if (count == 0) { + UnityEventTools.AddPersistentListener(poller, f); + poller.SetPersistentListenerState(0, this._unity_event_call_state); + } else if (count > 0) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"PollEvent on {poller} already has a listeners"); + } + #endif + } + } + + void Start() { + if (!this._environment) { + this._environment = FindObjectOfType(); + } + + var neodroid_environment = this._environment; + + if (neodroid_environment != null) { + this.TryRegister(this._environment_text, neodroid_environment.IdentifierString); + this.TryRegister(this._environment_frame, neodroid_environment.FrameString); + this.TryRegister(this._environment_obs, neodroid_environment.ObservationsString); + this.TryRegister(this._terminated, neodroid_environment.TerminatedBoolean); + } + + if (!this._evaluation_function) { + this._evaluation_function = FindObjectOfType(); + } + + var evaluation_function = this._evaluation_function; + if (evaluation_function != null) { + this.TryRegister(this._signal, evaluation_function.SignalString); + this.TryRegister(this._episode_length, evaluation_function.EpisodeLengthString); + + } + + if (!this._manager) { + this._manager = FindObjectOfType(); + } + + if (this._manager) { + if (this._status_text) { + this.TryRegister(this._status_text, this._manager.StatusString); + } + + if (this._testing_toggle) { + this.TryRegisterProperty(this._testing_toggle.onValueChanged, this._manager.SetTesting); + } + } + + if (this._reset_button) { + this.TryRegisterVoid(this._reset_button.onClick, this._manager.ResetAllEnvironments); + } + } + } +} +#endif diff --git a/Runtime/Utilities/StatusDisplayer/AutoSetupStatusDisplayer.cs.meta b/Runtime/GameObjects/StatusDisplayer/AutoSetupStatusDisplayer.cs.meta similarity index 100% rename from Runtime/Utilities/StatusDisplayer/AutoSetupStatusDisplayer.cs.meta rename to Runtime/GameObjects/StatusDisplayer/AutoSetupStatusDisplayer.cs.meta diff --git a/Runtime/Utilities/EventRecipients.meta b/Runtime/GameObjects/StatusDisplayer/EventRecipients.meta similarity index 100% rename from Runtime/Utilities/EventRecipients.meta rename to Runtime/GameObjects/StatusDisplayer/EventRecipients.meta diff --git a/Runtime/GameObjects/StatusDisplayer/EventRecipients/DataPoller.cs b/Runtime/GameObjects/StatusDisplayer/EventRecipients/DataPoller.cs new file mode 100644 index 000000000..ac36edcb3 --- /dev/null +++ b/Runtime/GameObjects/StatusDisplayer/EventRecipients/DataPoller.cs @@ -0,0 +1,39 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace droid.Runtime.GameObjects.StatusDisplayer.EventRecipients { + /// + /// + /// + public abstract class DataPoller : MonoBehaviour { + [SerializeField] UnityEvent _poll_event; + + [SerializeField] bool _invoke_on_validate = false; + + /// + /// + public UnityEvent PollEvent { get { return this._poll_event; } set { this._poll_event = value; } } + + /// + /// + /// + public abstract void PollData(dynamic data); + + void OnValidate() { + if (this._invoke_on_validate) { + this._poll_event?.Invoke(); + } + } + + void OnEnable() { this._poll_event?.Invoke(); } + + // Update is called once per frame + /// + /// + void Update() { + if (!this._invoke_on_validate) { + this._poll_event?.Invoke(); + } + } + } +} diff --git a/Runtime/Utilities/EventRecipients/DataPoller.cs.meta b/Runtime/GameObjects/StatusDisplayer/EventRecipients/DataPoller.cs.meta similarity index 100% rename from Runtime/Utilities/EventRecipients/DataPoller.cs.meta rename to Runtime/GameObjects/StatusDisplayer/EventRecipients/DataPoller.cs.meta diff --git a/Runtime/GameObjects/StatusDisplayer/EventRecipients/InputFieldUpdater.cs b/Runtime/GameObjects/StatusDisplayer/EventRecipients/InputFieldUpdater.cs new file mode 100644 index 000000000..33476dda4 --- /dev/null +++ b/Runtime/GameObjects/StatusDisplayer/EventRecipients/InputFieldUpdater.cs @@ -0,0 +1,32 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace droid.Runtime.GameObjects.StatusDisplayer.EventRecipients { + /// + /// + /// + [RequireComponent(typeof(InputField))] + [ExecuteInEditMode] + public class InputFieldUpdater : DataPoller { + /// + /// + [SerializeField] + InputField _input_field; + + /// + /// + void Start() { this._input_field = this.GetComponent(); } + + /// + /// + /// + /// + public override void PollData(dynamic data) { + if (data is string) { + if (this._input_field) { + this._input_field.text = data; + } + } + } + } +} diff --git a/Runtime/GameObjects/StatusDisplayer/EventRecipients/InputFieldUpdater.cs.meta b/Runtime/GameObjects/StatusDisplayer/EventRecipients/InputFieldUpdater.cs.meta new file mode 100644 index 000000000..941dc88bb --- /dev/null +++ b/Runtime/GameObjects/StatusDisplayer/EventRecipients/InputFieldUpdater.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7d09b2cf7694107829c164357ad5c96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GameObjects/StatusDisplayer/EventRecipients/TextUpdater.cs b/Runtime/GameObjects/StatusDisplayer/EventRecipients/TextUpdater.cs new file mode 100644 index 000000000..3d3ffa531 --- /dev/null +++ b/Runtime/GameObjects/StatusDisplayer/EventRecipients/TextUpdater.cs @@ -0,0 +1,32 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace droid.Runtime.GameObjects.StatusDisplayer.EventRecipients { + /// + /// + /// + [RequireComponent(typeof(Text))] + [ExecuteInEditMode] + public class TextUpdater : DataPoller { + /// + /// + [SerializeField] + Text _text; + + /// + /// + void Start() { this._text = this.GetComponent(); } + + /// + /// + /// + /// + public override void PollData(dynamic data) { + if (data is string) { + if (this._text) { + this._text.text = data; + } + } + } + } +} diff --git a/Runtime/Utilities/EventRecipients/TextUpdater.cs.meta b/Runtime/GameObjects/StatusDisplayer/EventRecipients/TextUpdater.cs.meta similarity index 100% rename from Runtime/Utilities/EventRecipients/TextUpdater.cs.meta rename to Runtime/GameObjects/StatusDisplayer/EventRecipients/TextUpdater.cs.meta diff --git a/Runtime/GameObjects/StatusDisplayer/EventRecipients/ToggleUpdater.cs b/Runtime/GameObjects/StatusDisplayer/EventRecipients/ToggleUpdater.cs new file mode 100644 index 000000000..8b11b5ffe --- /dev/null +++ b/Runtime/GameObjects/StatusDisplayer/EventRecipients/ToggleUpdater.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace droid.Runtime.GameObjects.StatusDisplayer.EventRecipients { + /// + /// + /// + [RequireComponent(typeof(Toggle))] + [ExecuteInEditMode] + public class ToggleUpdater : DataPoller { + /// + /// + [SerializeField] + Toggle _toggle; + + // Use this for initialization + /// + /// + void Start() { this._toggle = this.GetComponent(); } + + /// + /// + /// + /// + public override void PollData(dynamic data) { + if (data is bool) { + if (this._toggle) { + this._toggle.isOn = data; + } + } + } + } +} diff --git a/Runtime/Utilities/EventRecipients/ToggleUpdater.cs.meta b/Runtime/GameObjects/StatusDisplayer/EventRecipients/ToggleUpdater.cs.meta similarity index 100% rename from Runtime/Utilities/EventRecipients/ToggleUpdater.cs.meta rename to Runtime/GameObjects/StatusDisplayer/EventRecipients/ToggleUpdater.cs.meta diff --git a/Runtime/GameObjects/StatusDisplayer/RenderTextureList.cs b/Runtime/GameObjects/StatusDisplayer/RenderTextureList.cs new file mode 100644 index 000000000..63a2b6e87 --- /dev/null +++ b/Runtime/GameObjects/StatusDisplayer/RenderTextureList.cs @@ -0,0 +1,75 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.UI; + +namespace droid.Runtime.GameObjects.StatusDisplayer { + /// + /// + /// + public class RenderTextureList : MonoBehaviour { + /// + /// + /// + public Sprite[] AnimalImages; + + /// + /// + /// + public GameObject ContentPanel; + + /// + /// + /// + public GameObject ListItemPrefab; + + ArrayList _camera_observations; + + void Start() { + // 1. Get the data to be displayed + this._camera_observations = new ArrayList { + new CameraObservation(this.AnimalImages[0], "A"), + new CameraObservation(this.AnimalImages[1], "B"), + new CameraObservation(this.AnimalImages[2], "C"), + new CameraObservation(this.AnimalImages[3], "D") + }; + + if (this.ListItemPrefab) { + foreach (CameraObservation animal in this._camera_observations) { + var r = Instantiate(this.ListItemPrefab, this.ContentPanel.transform, true); + var controller = r.GetComponent(); + controller.Icon.sprite = animal._Icon; + controller.Name.text = animal._Name; + r.transform.localScale = Vector3.one; + } + } + } + } + + /// + /// + /// + public class RenderTextureListItem : MonoBehaviour { + /// + /// + /// + public Image Icon; + + /// + /// + /// + public Text Name; + } + + /// + /// + /// + public class CameraObservation { + public Sprite _Icon; + public string _Name; + + public CameraObservation(Sprite icon, string name) { + this._Icon = icon; + this._Name = name; + } + } +} diff --git a/Runtime/GameObjects/StatusDisplayer/RenderTextureList.cs.meta b/Runtime/GameObjects/StatusDisplayer/RenderTextureList.cs.meta new file mode 100644 index 000000000..8452d095a --- /dev/null +++ b/Runtime/GameObjects/StatusDisplayer/RenderTextureList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6eea735738074974b0955af8a9f48392 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a861b8894568348a9a71a5b438e2ef74, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Interfaces/IActor.cs b/Runtime/Interfaces/IActor.cs index 44232c218..ba967d34e 100644 --- a/Runtime/Interfaces/IActor.cs +++ b/Runtime/Interfaces/IActor.cs @@ -1,13 +1,27 @@ using System.Collections.Generic; using UnityEngine; -namespace Neodroid.Runtime.Interfaces { - public interface IActor : IRegisterable { - Dictionary Motors { get; } +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface IActor : IRegisterable, + IHasRegister { + /// + /// + /// + SortedDictionary Actuators { get; } + + /// + /// + /// Transform Transform { get; } - void ApplyMotion(IMotorMotion motion); - void EnvironmentReset(); - void UnRegister(IMotor motor); - void Register(IMotor motor); + + /// + /// + /// + /// + void ApplyMotion(IMotion motion); + } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IActor.cs.meta b/Runtime/Interfaces/IActor.cs.meta index f7927ad86..babd68ace 100644 --- a/Runtime/Interfaces/IActor.cs.meta +++ b/Runtime/Interfaces/IActor.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Runtime/Interfaces/IActorisedPrototypingEnvironment.cs b/Runtime/Interfaces/IActorisedPrototypingEnvironment.cs new file mode 100644 index 000000000..72cad6eaa --- /dev/null +++ b/Runtime/Interfaces/IActorisedPrototypingEnvironment.cs @@ -0,0 +1,7 @@ +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface IActorisedPrototypingEnvironment : ISpatialPrototypingEnvironment, + IHasRegister { } +} diff --git a/Runtime/Interfaces/IActorisedPrototypingEnvironment.cs.meta b/Runtime/Interfaces/IActorisedPrototypingEnvironment.cs.meta new file mode 100644 index 000000000..792e264b4 --- /dev/null +++ b/Runtime/Interfaces/IActorisedPrototypingEnvironment.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d2e275b7177a48f194258c5065c0f0ff +timeCreated: 1558615112 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IActuator.cs b/Runtime/Interfaces/IActuator.cs new file mode 100644 index 000000000..07414804d --- /dev/null +++ b/Runtime/Interfaces/IActuator.cs @@ -0,0 +1,25 @@ +using droid.Runtime.Structs.Space; + +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface IActuator : IRegisterable { + /// + /// + /// + Space1 MotionSpace { get; set; } + + /// + /// + /// + /// + float Sample(); + + /// + /// + /// + /// + void ApplyMotion(IMotion motion); + } +} diff --git a/Runtime/Interfaces/IActuator.cs.meta b/Runtime/Interfaces/IActuator.cs.meta new file mode 100644 index 000000000..17cefd445 --- /dev/null +++ b/Runtime/Interfaces/IActuator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 53376307124e4a86bfcd077ef7a02784 +timeCreated: 1552375365 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/ICategoryProvider.cs b/Runtime/Interfaces/ICategoryProvider.cs new file mode 100644 index 000000000..2a06275ea --- /dev/null +++ b/Runtime/Interfaces/ICategoryProvider.cs @@ -0,0 +1,9 @@ +namespace droid.Runtime.Interfaces { + /// + /// + public interface ICategoryProvider { + /// + /// + int CurrentCategoryValue { get; } + } +} diff --git a/Runtime/Interfaces/ICategoryProvider.cs.meta b/Runtime/Interfaces/ICategoryProvider.cs.meta new file mode 100644 index 000000000..1b79c2504 --- /dev/null +++ b/Runtime/Interfaces/ICategoryProvider.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 16e74541dcc94a30ad87a554e91e380a +timeCreated: 1551693147 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IColorProvider.cs b/Runtime/Interfaces/IColorProvider.cs new file mode 100644 index 000000000..0ca10d07b --- /dev/null +++ b/Runtime/Interfaces/IColorProvider.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace droid.Runtime.Interfaces { + /// + /// + public interface IColorProvider { + /// + /// + Dictionary ColorsDict { get; } + } +} diff --git a/Runtime/Interfaces/IColorProvider.cs.meta b/Runtime/Interfaces/IColorProvider.cs.meta new file mode 100644 index 000000000..9ee4ba627 --- /dev/null +++ b/Runtime/Interfaces/IColorProvider.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 41001a908a674c9a8df7977d82760114 +timeCreated: 1537957572 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IConfigurable.cs b/Runtime/Interfaces/IConfigurable.cs index 63971922a..f498583b0 100644 --- a/Runtime/Interfaces/IConfigurable.cs +++ b/Runtime/Interfaces/IConfigurable.cs @@ -1,10 +1,33 @@ -using System; +using droid.Runtime.Enums; +using droid.Runtime.Messaging.Messages; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { + /// + /// + /// public interface IConfigurable : IRegisterable { + /// + /// + /// void UpdateCurrentConfiguration(); + + /// + /// + /// + /// void ApplyConfiguration(IConfigurableConfiguration configuration); - void EnvironmentReset(); - IConfigurableConfiguration SampleConfiguration(Random random_generator); + + + /// + /// + /// + /// + Configuration[] SampleConfigurations(); + + /// + /// + /// + RandomSamplingMode RandomSamplingMode { get; set; } + } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IConfigurable.cs.meta b/Runtime/Interfaces/IConfigurable.cs.meta index 8c7af649d..92ce08d26 100644 --- a/Runtime/Interfaces/IConfigurable.cs.meta +++ b/Runtime/Interfaces/IConfigurable.cs.meta @@ -1,11 +1,12 @@ fileFormatVersion: 2 guid: 57d605860d5617f49840d896695de19c +licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IConfigurableConfiguration.cs b/Runtime/Interfaces/IConfigurableConfiguration.cs index e941aba63..b2c80d879 100644 --- a/Runtime/Interfaces/IConfigurableConfiguration.cs +++ b/Runtime/Interfaces/IConfigurableConfiguration.cs @@ -1,6 +1,20 @@ -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { + /// + /// + /// public interface IConfigurableConfiguration { + /// + /// + /// float ConfigurableValue { get; } + /// + /// + /// string ConfigurableName { get; } + + /// + /// + /// + bool SampleRandom { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IConfigurableConfiguration.cs.meta b/Runtime/Interfaces/IConfigurableConfiguration.cs.meta index dab89fb95..ba89a156c 100644 --- a/Runtime/Interfaces/IConfigurableConfiguration.cs.meta +++ b/Runtime/Interfaces/IConfigurableConfiguration.cs.meta @@ -1,11 +1,12 @@ fileFormatVersion: 2 guid: a6170c53acc618a429fdca07bb2b07ac +licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IDisplayer.cs b/Runtime/Interfaces/IDisplayer.cs index 4251efd4f..32d47b3ea 100644 --- a/Runtime/Interfaces/IDisplayer.cs +++ b/Runtime/Interfaces/IDisplayer.cs @@ -1,5 +1,59 @@ -namespace Neodroid.Runtime.Interfaces { +using droid.Runtime.Structs; +using UnityEngine; + +namespace droid.Runtime.Interfaces { public interface IDisplayer : IRegisterable { - void Display(object o); + //void Display(dynamic o); + //void Display(object o); + + void Display(float value); + + /// + /// + /// + void Display(double value); + + /// + /// + /// + void Display(float[] values); + + /// + /// + /// + void Display(string value); + + /// + /// + /// + void Display(Vector3 value); + + /// + /// + /// + void Display(Vector3[] value); + + /// + /// + /// + void Display(Points.ValuePoint point); + + /// + /// + /// + void Display(Points.ValuePoint[] points); + + /// + /// + /// + void Display(Points.StringPoint point); + + /// + /// + /// + void Display(Points.StringPoint[] points); + + // void PlotSeries(dynamic points); + void PlotSeries(Points.ValuePoint[] points); } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IDisplayer.cs.meta b/Runtime/Interfaces/IDisplayer.cs.meta index b91a10b61..1c52fe53e 100644 --- a/Runtime/Interfaces/IDisplayer.cs.meta +++ b/Runtime/Interfaces/IDisplayer.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Runtime/Interfaces/IEnvironment.cs b/Runtime/Interfaces/IEnvironment.cs index 00a418c6e..70d31e584 100644 --- a/Runtime/Interfaces/IEnvironment.cs +++ b/Runtime/Interfaces/IEnvironment.cs @@ -1,19 +1,56 @@ -using Neodroid.Runtime.Messaging.Messages; +using droid.Runtime.Messaging.Messages; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { + /// + /// + /// public interface IEnvironment : IRegisterable { + /// + /// + /// Reaction LastReaction { get; } - int CurrentFrameNumber { get; } + + /// + /// + /// + int StepI { get; } + + /// + /// + /// bool Terminated { get; } + + /// + /// + /// string LastTerminationReason { get; } - int EpisodeLength { get; } + + /// + /// + /// bool IsResetting { get; } - EnvironmentState CollectState(); + /// + /// + /// + /// + EnvironmentSnapshot Snapshot(); + + /// + /// + /// + /// void React(Reaction reaction); - EnvironmentState ReactAndCollectState(Reaction reaction); + + /// + /// + /// + /// Reaction SampleReaction(); - void Tick(); + + /// + /// + /// void PostStep(); } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IEnvironment.cs.meta b/Runtime/Interfaces/IEnvironment.cs.meta index de4f363d8..20c3a0aa6 100644 --- a/Runtime/Interfaces/IEnvironment.cs.meta +++ b/Runtime/Interfaces/IEnvironment.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Runtime/Interfaces/IEnvironmentListener.cs b/Runtime/Interfaces/IEnvironmentListener.cs deleted file mode 100644 index b51514426..000000000 --- a/Runtime/Interfaces/IEnvironmentListener.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Neodroid.Runtime.Interfaces { - /// - /// - /// - public interface IEnvironmentListener : IResetable { - /// - /// - /// - void PreStep(); - - /// - /// - /// - void Step(); - - /// - /// - /// - void PostStep(); - } -} \ No newline at end of file diff --git a/Runtime/Interfaces/IEnvironmentListener.cs.meta b/Runtime/Interfaces/IEnvironmentListener.cs.meta deleted file mode 100644 index 1485f5cd6..000000000 --- a/Runtime/Interfaces/IEnvironmentListener.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c7ba3927fa9684f6cb4cff12e4bfef09 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Interfaces/IEpisodicObjectiveFunction.cs b/Runtime/Interfaces/IEpisodicObjectiveFunction.cs new file mode 100644 index 000000000..8a3eef52a --- /dev/null +++ b/Runtime/Interfaces/IEpisodicObjectiveFunction.cs @@ -0,0 +1,13 @@ +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface IEpisodicObjectiveFunction : IObjectiveFunction { + + /// + /// The length of an episode + /// + int EpisodeLength { get; set; } + + } +} diff --git a/Runtime/Interfaces/IEpisodicObjectiveFunction.cs.meta b/Runtime/Interfaces/IEpisodicObjectiveFunction.cs.meta new file mode 100644 index 000000000..ba3212d26 --- /dev/null +++ b/Runtime/Interfaces/IEpisodicObjectiveFunction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba64b6155bc34122a43946b867e5555f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Interfaces/IHasArray.cs b/Runtime/Interfaces/IHasArray.cs deleted file mode 100644 index 072e3e548..000000000 --- a/Runtime/Interfaces/IHasArray.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Neodroid.Runtime.Interfaces { - /// - /// - /// - public interface IHasArray { - /// - /// - /// - float[] ObservationArray { get; } - } -} \ No newline at end of file diff --git a/Runtime/Interfaces/IHasArray.cs.meta b/Runtime/Interfaces/IHasArray.cs.meta deleted file mode 100644 index de1989029..000000000 --- a/Runtime/Interfaces/IHasArray.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: b70a9273a7d94f2c85887d4a3b12c095 -timeCreated: 1516146497 \ No newline at end of file diff --git a/Runtime/Interfaces/IHasByteArray.cs b/Runtime/Interfaces/IHasByteArray.cs index da6386dbd..a8aa74725 100644 --- a/Runtime/Interfaces/IHasByteArray.cs +++ b/Runtime/Interfaces/IHasByteArray.cs @@ -1,11 +1,19 @@ -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasByteArray { /// - /// /// byte[] Bytes { get; } + + /// + /// + /// + int[] Shape { get; } + + /// + /// + /// + string ArrayEncoding { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasByteArray.cs.meta b/Runtime/Interfaces/IHasByteArray.cs.meta index da4512c19..77c8e9335 100644 --- a/Runtime/Interfaces/IHasByteArray.cs.meta +++ b/Runtime/Interfaces/IHasByteArray.cs.meta @@ -1,3 +1,13 @@ fileFormatVersion: 2 guid: 4cf457f2d1ab4b5485cdfc384f13fffe -timeCreated: 1515709028 \ No newline at end of file +timeCreated: 1515709028 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasDouble.cs b/Runtime/Interfaces/IHasDouble.cs index 51030e5f5..a1a64840e 100644 --- a/Runtime/Interfaces/IHasDouble.cs +++ b/Runtime/Interfaces/IHasDouble.cs @@ -1,19 +1,16 @@ -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs.Space; using UnityEngine; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasDouble { /// - /// /// Vector2 ObservationValue { get; } /// - /// /// - Space2 ObservationSpace2D { get; } + Space2 DoubleSpace { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasDouble.cs.meta b/Runtime/Interfaces/IHasDouble.cs.meta index fe52cd86a..a67a7882f 100644 --- a/Runtime/Interfaces/IHasDouble.cs.meta +++ b/Runtime/Interfaces/IHasDouble.cs.meta @@ -1,3 +1,13 @@ fileFormatVersion: 2 guid: 5569fe3ec3904596a11d1b9a197f1b02 -timeCreated: 1516204126 \ No newline at end of file +timeCreated: 1516204126 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasDoubleArray.cs b/Runtime/Interfaces/IHasDoubleArray.cs new file mode 100644 index 000000000..ced7166c4 --- /dev/null +++ b/Runtime/Interfaces/IHasDoubleArray.cs @@ -0,0 +1,14 @@ +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Interfaces { + /// + /// + public interface IHasDoubleArray { + /// + /// + Vector2[] ObservationArray { get; } + + Space1[] ObservationSpace { get; } + } +} diff --git a/Runtime/Interfaces/IHasDoubleArray.cs.meta b/Runtime/Interfaces/IHasDoubleArray.cs.meta new file mode 100644 index 000000000..5eacac5c3 --- /dev/null +++ b/Runtime/Interfaces/IHasDoubleArray.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2bb3e12b3dc24b0cb7c1d43ca33a5de3 +timeCreated: 1560187435 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasEulerTransform.cs b/Runtime/Interfaces/IHasEulerTransform.cs index dcb4b1e27..40b3dace9 100644 --- a/Runtime/Interfaces/IHasEulerTransform.cs +++ b/Runtime/Interfaces/IHasEulerTransform.cs @@ -1,39 +1,32 @@ -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs.Space; using UnityEngine; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasEulerTransform { /// - /// /// Vector3 Position { get; } /// - /// /// Vector3 Direction { get; } /// - /// /// Vector3 Rotation { get; } /// - /// /// Space3 PositionSpace { get; } /// - /// /// Space3 DirectionSpace { get; } /// - /// /// Space3 RotationSpace { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasEulerTransform.cs.meta b/Runtime/Interfaces/IHasEulerTransform.cs.meta index 1e6a43958..c3c2c55ea 100644 --- a/Runtime/Interfaces/IHasEulerTransform.cs.meta +++ b/Runtime/Interfaces/IHasEulerTransform.cs.meta @@ -7,7 +7,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasFloatArray.cs b/Runtime/Interfaces/IHasFloatArray.cs new file mode 100644 index 000000000..ebde6bb5d --- /dev/null +++ b/Runtime/Interfaces/IHasFloatArray.cs @@ -0,0 +1,16 @@ +using droid.Runtime.Structs.Space; + +namespace droid.Runtime.Interfaces { + /// + /// + public interface IHasFloatArray { + /// + /// + float[] ObservationArray { get; } + + /// + /// + /// + Space1[] ObservationSpace { get; } + } +} diff --git a/Runtime/Interfaces/IHasFloatArray.cs.meta b/Runtime/Interfaces/IHasFloatArray.cs.meta new file mode 100644 index 000000000..f92fab658 --- /dev/null +++ b/Runtime/Interfaces/IHasFloatArray.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b70a9273a7d94f2c85887d4a3b12c095 +timeCreated: 1516146497 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasFloatEnumerable.cs b/Runtime/Interfaces/IHasFloatEnumerable.cs index cd05b02e5..ee861a5ca 100644 --- a/Runtime/Interfaces/IHasFloatEnumerable.cs +++ b/Runtime/Interfaces/IHasFloatEnumerable.cs @@ -1,13 +1,11 @@ using System.Collections.Generic; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasFloatEnumerable { /// - /// /// IEnumerable FloatEnumerable { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasFloatEnumerable.cs.meta b/Runtime/Interfaces/IHasFloatEnumerable.cs.meta index afc78d070..064851b1a 100644 --- a/Runtime/Interfaces/IHasFloatEnumerable.cs.meta +++ b/Runtime/Interfaces/IHasFloatEnumerable.cs.meta @@ -1,11 +1,12 @@ fileFormatVersion: 2 guid: 1f6de2b2fc05341608185c22c652907a +licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasQuadArray.cs b/Runtime/Interfaces/IHasQuadArray.cs new file mode 100644 index 000000000..190165206 --- /dev/null +++ b/Runtime/Interfaces/IHasQuadArray.cs @@ -0,0 +1,14 @@ +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Interfaces { + /// + /// + public interface IHasQuadArray { + /// + /// + Quaternion[] ObservationArray { get; } + + Space1[] ObservationSpace { get; } + } +} diff --git a/Runtime/Interfaces/IHasQuadArray.cs.meta b/Runtime/Interfaces/IHasQuadArray.cs.meta new file mode 100644 index 000000000..8034a5622 --- /dev/null +++ b/Runtime/Interfaces/IHasQuadArray.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e591939d750a4201b8d70a06f4ea6949 +timeCreated: 1560187455 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasQuadruple.cs b/Runtime/Interfaces/IHasQuadruple.cs index a957895e5..38fea9863 100644 --- a/Runtime/Interfaces/IHasQuadruple.cs +++ b/Runtime/Interfaces/IHasQuadruple.cs @@ -1,19 +1,16 @@ -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs.Space; using UnityEngine; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasQuadruple { /// - /// /// Quaternion ObservationValue { get; } /// - /// /// Space4 QuadSpace { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasQuadruple.cs.meta b/Runtime/Interfaces/IHasQuadruple.cs.meta index af11ea781..6cb6692ff 100644 --- a/Runtime/Interfaces/IHasQuadruple.cs.meta +++ b/Runtime/Interfaces/IHasQuadruple.cs.meta @@ -1,3 +1,13 @@ fileFormatVersion: 2 guid: 1986cd92aa624c00baf42db00093bc29 -timeCreated: 1516204142 \ No newline at end of file +timeCreated: 1516204142 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasQuaternionTransform.cs b/Runtime/Interfaces/IHasQuaternionTransform.cs index 2a8c1ead8..961f4c5d7 100644 --- a/Runtime/Interfaces/IHasQuaternionTransform.cs +++ b/Runtime/Interfaces/IHasQuaternionTransform.cs @@ -1,18 +1,26 @@ -using UnityEngine; +using droid.Runtime.Structs.Space; +using UnityEngine; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasQuaternionTransform { /// - /// /// Vector3 Position { get; } /// - /// /// Quaternion Rotation { get; } + + /// + /// + /// + Space1 PositionSpace { get; } + + /// + /// + /// + Space1 RotationSpace { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasQuaternionTransform.cs.meta b/Runtime/Interfaces/IHasQuaternionTransform.cs.meta index f5ebceed3..6d08edaf8 100644 --- a/Runtime/Interfaces/IHasQuaternionTransform.cs.meta +++ b/Runtime/Interfaces/IHasQuaternionTransform.cs.meta @@ -1,3 +1,13 @@ fileFormatVersion: 2 guid: 8cf8ef4c34664bc48d043d171995c975 -timeCreated: 1515706442 \ No newline at end of file +timeCreated: 1515706442 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasRegister.cs b/Runtime/Interfaces/IHasRegister.cs index 2d864921e..3fac4412f 100644 --- a/Runtime/Interfaces/IHasRegister.cs +++ b/Runtime/Interfaces/IHasRegister.cs @@ -1,34 +1,62 @@ -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IRegisterable { /// - /// /// string Identifier { get; } + + /// + /// + /// + void Tick(); + + /// + /// + void PrototypingReset(); + + /// + /// + void PreSetup(); + + /// + /// + void Setup(); + + /// + /// + /// + void RemotePostSetup(); } /// - /// /// /// public interface IHasRegister where T : IRegisterable { /// - /// /// /// void Register(T obj); /// - /// /// /// /// void Register(T obj, string identifier); + /// + /// + /// + /// void UnRegister(T obj); + /// + /// + /// + /// + /// void UnRegister(T t, string obj); + + } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasRegister.cs.meta b/Runtime/Interfaces/IHasRegister.cs.meta index dd7a1c917..566767e00 100644 --- a/Runtime/Interfaces/IHasRegister.cs.meta +++ b/Runtime/Interfaces/IHasRegister.cs.meta @@ -7,7 +7,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Runtime/Interfaces/IHasRigidbody.cs b/Runtime/Interfaces/IHasRigidbody.cs index abe1e5825..8a9084862 100644 --- a/Runtime/Interfaces/IHasRigidbody.cs +++ b/Runtime/Interfaces/IHasRigidbody.cs @@ -1,29 +1,24 @@ -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs.Space; using UnityEngine; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasRigidbody { /// - /// /// Vector3 Velocity { get; } /// - /// /// Vector3 AngularVelocity { get; } /// - /// /// Space3 VelocitySpace { get; } /// - /// /// Space3 AngularSpace { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasRigidbody.cs.meta b/Runtime/Interfaces/IHasRigidbody.cs.meta index a6053d43f..1bdfc6e7b 100644 --- a/Runtime/Interfaces/IHasRigidbody.cs.meta +++ b/Runtime/Interfaces/IHasRigidbody.cs.meta @@ -7,7 +7,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Runtime/Interfaces/IHasSerialisedString.cs b/Runtime/Interfaces/IHasSerialisedString.cs deleted file mode 100644 index 96c19bfb5..000000000 --- a/Runtime/Interfaces/IHasSerialisedString.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Neodroid.Runtime.Interfaces { - /// - /// - /// - public interface IHasSerialisedString { - string ObservationValue { get; } - } -} \ No newline at end of file diff --git a/Runtime/Interfaces/IHasSerialisedString.cs.meta b/Runtime/Interfaces/IHasSerialisedString.cs.meta deleted file mode 100644 index 2ef272951..000000000 --- a/Runtime/Interfaces/IHasSerialisedString.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 31d195679c6e43c48be20994abcb9670 -timeCreated: 1537875021 \ No newline at end of file diff --git a/Runtime/Interfaces/IHasSingle.cs b/Runtime/Interfaces/IHasSingle.cs index 1bedcad05..915b68713 100644 --- a/Runtime/Interfaces/IHasSingle.cs +++ b/Runtime/Interfaces/IHasSingle.cs @@ -1,18 +1,15 @@ -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs.Space; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasSingle { /// - /// /// float ObservationValue { get; } /// - /// /// - ValueSpace SingleSpace { get; } + Space1 SingleSpace { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasSingle.cs.meta b/Runtime/Interfaces/IHasSingle.cs.meta index dce3e6223..687dcf97e 100644 --- a/Runtime/Interfaces/IHasSingle.cs.meta +++ b/Runtime/Interfaces/IHasSingle.cs.meta @@ -7,7 +7,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasString.cs b/Runtime/Interfaces/IHasString.cs new file mode 100644 index 000000000..738b0483f --- /dev/null +++ b/Runtime/Interfaces/IHasString.cs @@ -0,0 +1,7 @@ +namespace droid.Runtime.Interfaces { + /// + /// + public interface IHasString { + string ObservationValue { get; } + } +} diff --git a/Runtime/Interfaces/IHasString.cs.meta b/Runtime/Interfaces/IHasString.cs.meta new file mode 100644 index 000000000..66bb9494e --- /dev/null +++ b/Runtime/Interfaces/IHasString.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 31d195679c6e43c48be20994abcb9670 +timeCreated: 1537875021 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasTArray.cs b/Runtime/Interfaces/IHasTArray.cs new file mode 100644 index 000000000..09c4b4bd6 --- /dev/null +++ b/Runtime/Interfaces/IHasTArray.cs @@ -0,0 +1,14 @@ +namespace droid.Runtime.Interfaces { + /// + /// + public interface IHasTArray { + /// + /// + dynamic[] ObservationArray { get; } + + /// + /// + /// + ISpace[] ObservationSpace { get; } + } +} diff --git a/Runtime/Interfaces/IHasTArray.cs.meta b/Runtime/Interfaces/IHasTArray.cs.meta new file mode 100644 index 000000000..c48164a0e --- /dev/null +++ b/Runtime/Interfaces/IHasTArray.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 67a8853d625a4375afd3ff53242e1157 +timeCreated: 1560404027 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IHasTriple.cs b/Runtime/Interfaces/IHasTriple.cs index f2d6664c2..dcf813170 100644 --- a/Runtime/Interfaces/IHasTriple.cs +++ b/Runtime/Interfaces/IHasTriple.cs @@ -1,19 +1,16 @@ -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs.Space; using UnityEngine; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// - /// /// public interface IHasTriple { /// - /// /// Vector3 ObservationValue { get; } /// - /// /// Space3 TripleSpace { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IHasTriple.cs.meta b/Runtime/Interfaces/IHasTriple.cs.meta index 79232bf2b..a262b3980 100644 --- a/Runtime/Interfaces/IHasTriple.cs.meta +++ b/Runtime/Interfaces/IHasTriple.cs.meta @@ -1,13 +1,11 @@ fileFormatVersion: 2 guid: 62ff69485781d420fb1cb0fb29a21a40 -timeCreated: 1515377729 -licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Runtime/Interfaces/IHasTripleArray.cs b/Runtime/Interfaces/IHasTripleArray.cs new file mode 100644 index 000000000..220ebeb10 --- /dev/null +++ b/Runtime/Interfaces/IHasTripleArray.cs @@ -0,0 +1,14 @@ +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Interfaces { + /// + /// + public interface IHasTripleArray { + /// + /// + Vector3[] ObservationArray { get; } + + Space1[] ObservationSpace { get; } + } +} diff --git a/Runtime/Interfaces/IHasTripleArray.cs.meta b/Runtime/Interfaces/IHasTripleArray.cs.meta new file mode 100644 index 000000000..511f0b6f8 --- /dev/null +++ b/Runtime/Interfaces/IHasTripleArray.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f247f662a7464ce29b9a46083b0646c3 +timeCreated: 1560187443 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IManager.cs b/Runtime/Interfaces/IManager.cs index 7bbccf050..4767a4f97 100644 --- a/Runtime/Interfaces/IManager.cs +++ b/Runtime/Interfaces/IManager.cs @@ -1,6 +1,12 @@ -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { + /// + /// + /// public interface IManager : IHasRegister { + /// + /// ISimulatorConfiguration SimulatorConfiguration { get; } - bool IsSyncingEnvironments { get; } + + void Setup(); } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/IManager.cs.meta b/Runtime/Interfaces/IManager.cs.meta index fab6ceb09..bbd9face7 100644 --- a/Runtime/Interfaces/IManager.cs.meta +++ b/Runtime/Interfaces/IManager.cs.meta @@ -1,11 +1,12 @@ fileFormatVersion: 2 guid: 3f39f761ec4c6a94998a251f8743da9f +licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IMaterialManipulator.cs b/Runtime/Interfaces/IMaterialManipulator.cs deleted file mode 100644 index 91b8b363e..000000000 --- a/Runtime/Interfaces/IMaterialManipulator.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace Neodroid.Runtime.Interfaces { - /// - /// - /// - public interface IMaterialManipulator { - - /// - /// - /// - Dictionary ColorsDict { get; } - } -} diff --git a/Runtime/Interfaces/IMaterialManipulator.cs.meta b/Runtime/Interfaces/IMaterialManipulator.cs.meta deleted file mode 100644 index 693ff4e71..000000000 --- a/Runtime/Interfaces/IMaterialManipulator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 41001a908a674c9a8df7977d82760114 -timeCreated: 1537957572 \ No newline at end of file diff --git a/Runtime/Interfaces/IMotion.cs b/Runtime/Interfaces/IMotion.cs new file mode 100644 index 000000000..729b8ada2 --- /dev/null +++ b/Runtime/Interfaces/IMotion.cs @@ -0,0 +1,21 @@ +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface IMotion { + /// + /// + /// + string ActuatorName { get; } + + /// + /// + /// + string ActorName { get; } + + /// + /// + /// + float Strength { get; set; } + } +} diff --git a/Runtime/Interfaces/IMotion.cs.meta b/Runtime/Interfaces/IMotion.cs.meta new file mode 100644 index 000000000..7abba10cb --- /dev/null +++ b/Runtime/Interfaces/IMotion.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ccc0fed179bb417e87a6f066e0b0c6a6 +timeCreated: 1552375893 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IMotor.cs b/Runtime/Interfaces/IMotor.cs deleted file mode 100644 index ae5eedef0..000000000 --- a/Runtime/Interfaces/IMotor.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Neodroid.Runtime.Utilities.Structs; - -namespace Neodroid.Runtime.Interfaces { - public interface IMotor : IRegisterable { - float Sample(); - float GetEnergySpend(); - void ApplyMotion(IMotorMotion motion); - void EnvironmentReset(); - ValueSpace MotionValueSpace { get; set; } - } -} \ No newline at end of file diff --git a/Runtime/Interfaces/IMotor.cs.meta b/Runtime/Interfaces/IMotor.cs.meta deleted file mode 100644 index 3264a89c3..000000000 --- a/Runtime/Interfaces/IMotor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8d3aa5ea727882040aa6129daebf19f8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Interfaces/IMotorMotion.cs b/Runtime/Interfaces/IMotorMotion.cs deleted file mode 100644 index 3e0e245cf..000000000 --- a/Runtime/Interfaces/IMotorMotion.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Neodroid.Runtime.Interfaces { - public interface IMotorMotion { - string MotorName { get; } - string ActorName { get; } - float Strength { get; set; } - } -} \ No newline at end of file diff --git a/Runtime/Interfaces/IMotorMotion.cs.meta b/Runtime/Interfaces/IMotorMotion.cs.meta deleted file mode 100644 index ec35ab289..000000000 --- a/Runtime/Interfaces/IMotorMotion.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e4546128ac513574d87f5a9517f816c9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Interfaces/IObjective.cs b/Runtime/Interfaces/IObjective.cs deleted file mode 100644 index 7c7dd51bf..000000000 --- a/Runtime/Interfaces/IObjective.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Neodroid.Runtime.Interfaces { - public interface IObjective : IRegisterable { - float Evaluate(); - float SolvedThreshold { get; set; } - void EnvironmentReset(); - } -} \ No newline at end of file diff --git a/Runtime/Interfaces/IObjective.cs.meta b/Runtime/Interfaces/IObjective.cs.meta deleted file mode 100644 index 2914eda07..000000000 --- a/Runtime/Interfaces/IObjective.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c3f32896716978f4d938b6b18c6c3b22 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Interfaces/IObjectiveFunction.cs b/Runtime/Interfaces/IObjectiveFunction.cs new file mode 100644 index 000000000..15ddf0985 --- /dev/null +++ b/Runtime/Interfaces/IObjectiveFunction.cs @@ -0,0 +1,19 @@ +using droid.Runtime.Structs.Space; + +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface IObjectiveFunction : IRegisterable { + /// + /// Compute signal + /// + /// floating point signal value + float Evaluate(); + + /// + /// The range for which the signal might fall + /// + Space1 SignalSpace { get; set; } + } +} diff --git a/Runtime/Interfaces/IObjectiveFunction.cs.meta b/Runtime/Interfaces/IObjectiveFunction.cs.meta new file mode 100644 index 000000000..504d67f65 --- /dev/null +++ b/Runtime/Interfaces/IObjectiveFunction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c3f32896716978f4d938b6b18c6c3b22 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IObserver.cs b/Runtime/Interfaces/IObserver.cs deleted file mode 100644 index 41664a6a8..000000000 --- a/Runtime/Interfaces/IObserver.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace Neodroid.Runtime.Interfaces { - public interface IObserver : IRegisterable { - void UpdateObservation(); - IEnumerable FloatEnumerable { get; set; } - void EnvironmentReset(); - } -} \ No newline at end of file diff --git a/Runtime/Interfaces/IObserver.cs.meta b/Runtime/Interfaces/IObserver.cs.meta deleted file mode 100644 index 6cad4a671..000000000 --- a/Runtime/Interfaces/IObserver.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4720c817c97c5e946b447715415cbb37 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Interfaces/IPrototypingEnvironment.cs b/Runtime/Interfaces/IPrototypingEnvironment.cs index 30e34d3e5..3be09ddfb 100644 --- a/Runtime/Interfaces/IPrototypingEnvironment.cs +++ b/Runtime/Interfaces/IPrototypingEnvironment.cs @@ -1,72 +1,7 @@ -using System; -using Neodroid.Runtime.Utilities.BoundingBoxes; -using UnityEngine; - -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { /// /// /// - public interface IPrototypingEnvironment : IEnvironment, - IHasRegister, - IHasRegister, - IHasRegister, - IHasRegister, - IHasRegister, - IHasRegister { - /// - /// - /// - /// - /// - Vector3 TransformDirection(Vector3 transform_forward); - /// - /// - /// - /// - /// - Vector3 TransformPosition(Vector3 transform_position); - /// - /// - /// - /// - /// - Vector3 InverseTransformPosition(Vector3 inv_pos); - /// - /// - /// - /// - /// - Vector3 InverseTransformDirection(Vector3 inv_dir); - - /// - /// - /// - /// - /// - Quaternion TransformRotation(Quaternion transform_rotation); - - /// - /// - /// - event Action PreStepEvent; - /// - /// - /// - event Action StepEvent; - /// - /// - /// - event Action PostStepEvent; - - /// - /// - /// - Transform Transform { get; } - /// - /// - /// - BoundingBox PlayableArea { get; } - - void Terminate(string reason); - } -} \ No newline at end of file + public interface IPrototypingEnvironment : ISpatialPrototypingEnvironment, + IHasRegister { } +} diff --git a/Runtime/Interfaces/IPrototypingEnvironment.cs.meta b/Runtime/Interfaces/IPrototypingEnvironment.cs.meta index 22247303f..0f8665b54 100644 --- a/Runtime/Interfaces/IPrototypingEnvironment.cs.meta +++ b/Runtime/Interfaces/IPrototypingEnvironment.cs.meta @@ -1,11 +1,12 @@ fileFormatVersion: 2 guid: d8f0458dd3d845f419087378dcda3bdc +licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/IResetable.cs b/Runtime/Interfaces/IResetable.cs deleted file mode 100644 index de5bebacb..000000000 --- a/Runtime/Interfaces/IResetable.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Neodroid.Runtime.Interfaces { - /// - /// - /// - public interface IResetable : IRegisterable { - /// - /// - /// - void EnvironmentReset(); - } -} \ No newline at end of file diff --git a/Runtime/Interfaces/IResetable.cs.meta b/Runtime/Interfaces/IResetable.cs.meta deleted file mode 100644 index 53bb2e0a2..000000000 --- a/Runtime/Interfaces/IResetable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3cd0e8b5f426845bf8660781437e8321 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Interfaces/ISamplable.cs b/Runtime/Interfaces/ISamplable.cs new file mode 100644 index 000000000..eed52de1f --- /dev/null +++ b/Runtime/Interfaces/ISamplable.cs @@ -0,0 +1,17 @@ +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface ISamplable { + /// + /// + /// + /// + dynamic Sample(); + + /// + /// + /// + ISpace Space { get; } + } +} diff --git a/Runtime/Interfaces/ISamplable.cs.meta b/Runtime/Interfaces/ISamplable.cs.meta new file mode 100644 index 000000000..826e2fa03 --- /dev/null +++ b/Runtime/Interfaces/ISamplable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 423f86642d5d43daa95442eff816a038 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Interfaces/ISensor.cs b/Runtime/Interfaces/ISensor.cs new file mode 100644 index 000000000..b20117c32 --- /dev/null +++ b/Runtime/Interfaces/ISensor.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; + +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface ISensor : IRegisterable { + /// + /// + IEnumerable FloatEnumerable { get; } + + /// + /// + void UpdateObservation(); + + + } +} diff --git a/Runtime/Interfaces/ISensor.cs.meta b/Runtime/Interfaces/ISensor.cs.meta new file mode 100644 index 000000000..f2d8e3653 --- /dev/null +++ b/Runtime/Interfaces/ISensor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4720c817c97c5e946b447715415cbb37 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/ISimulatorConfiguration.cs b/Runtime/Interfaces/ISimulatorConfiguration.cs index 5cd2a499a..554d8dc56 100644 --- a/Runtime/Interfaces/ISimulatorConfiguration.cs +++ b/Runtime/Interfaces/ISimulatorConfiguration.cs @@ -1,26 +1,125 @@ -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.ScriptableObjects; +using droid.Runtime.Enums; +using droid.Runtime.Messaging.Messages; +using UnityEngine; -namespace Neodroid.Runtime.Interfaces { +namespace droid.Runtime.Interfaces { + /// + /// + /// public interface ISimulatorConfiguration { - int ResetIterations { get; set; } + /// + /// + /// bool AlwaysSerialiseIndividualObservables { get; set; } + + /// + /// + /// + bool AlwaysSerialiseAggregatedFloatArray { get; set; } + + /// + /// + /// bool AlwaysSerialiseUnobservables { get; set; } + + /// + /// + /// SimulationType SimulationType { get; set; } + + /// + /// + /// int FrameSkips { get; set; } + + /// + /// + /// FrameFinishes FrameFinishes { get; set; } + + /// + /// + /// int TargetFrameRate { get; set; } + + /// + /// + /// int QualityLevel { get; set; } + + /// + /// + /// float TimeScale { get; set; } + + /// + /// + /// int NumOfEnvironments { get; set; } + + /// + /// + /// int Width { get; set; } + + /// + /// + /// bool FullScreen { get; set; } + + /// + /// + /// int Height { get; set; } + + /// + /// + /// ExecutionPhase StepExecutionPhase { get; set; } + + /// + /// + /// bool UpdateFixedTimeScale { get; set; } + + /// + /// + /// string IpAddress { get; set; } + + /// + /// + /// int Port { get; set; } + + /// + /// + /// bool ReplayReactionInSkips { get; set; } + + /// + /// + /// bool ApplyResolutionSettings { get; set; } + + /// + /// + /// + bool ApplyQualitySettings { get; set; } + + /// + /// + /// + bool ResizableWindow { get; set; } + + /// + /// + /// + ColorSpace ColorSpace { get; set; } + + /// + /// + /// + int VSyncCount { get; set; } } -} \ No newline at end of file +} diff --git a/Runtime/Interfaces/ISimulatorConfiguration.cs.meta b/Runtime/Interfaces/ISimulatorConfiguration.cs.meta index 1b6abfeca..3f83b6b40 100644 --- a/Runtime/Interfaces/ISimulatorConfiguration.cs.meta +++ b/Runtime/Interfaces/ISimulatorConfiguration.cs.meta @@ -1,11 +1,12 @@ fileFormatVersion: 2 guid: 2702bc99201ad6c4d9d5023ed45fc112 +licenseType: Pro MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} userData: assetBundleName: - assetBundleVariant: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/ISpace.cs b/Runtime/Interfaces/ISpace.cs new file mode 100644 index 000000000..51e6e1072 --- /dev/null +++ b/Runtime/Interfaces/ISpace.cs @@ -0,0 +1,44 @@ +using droid.Runtime.Enums; + +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface ISpace { + /// + /// + /// + int DecimalGranularity { get; } + + + + /// + /// + /// + dynamic Max { get; } + + /// + /// + /// + dynamic Min { get; } + + /// + /// + /// + Normalisation Normalised { get; } + + /// + /// + /// + /// + /// + dynamic Reproject(dynamic configuration_configurable_value); + + /// + /// + /// + /// + /// + dynamic Project(dynamic configuration_configurable_value); + } +} diff --git a/Runtime/Interfaces/ISpace.cs.meta b/Runtime/Interfaces/ISpace.cs.meta new file mode 100644 index 000000000..49afde6d7 --- /dev/null +++ b/Runtime/Interfaces/ISpace.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b7c2da52a3014b9f924ccca2aeb89dbb +timeCreated: 1552576509 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/ISpatialPrototypingEnvironment.cs b/Runtime/Interfaces/ISpatialPrototypingEnvironment.cs new file mode 100644 index 000000000..ebef46519 --- /dev/null +++ b/Runtime/Interfaces/ISpatialPrototypingEnvironment.cs @@ -0,0 +1,82 @@ +using System; +using droid.Runtime.GameObjects.BoundingBoxes; +using UnityEngine; + +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface ISpatialPrototypingEnvironment : IEnvironment, + IHasRegister, + IHasRegister, + IHasRegister, + IHasRegister { + /// + /// + Transform Transform { get; } + + /// + /// + BoundingBox PlayableArea { get; } + + /// + /// + /// + /// + Vector3 TransformDirection(Vector3 transform_forward); + + /// + /// + /// + /// + Vector3 TransformPoint(Vector3 point); + + /// + /// + /// + /// + Vector3 InverseTransformPoint(Vector3 point); + + /// + /// + /// + /// + Vector3 InverseTransformDirection(Vector3 inv_dir); + + /// + /// + /// + /// + Quaternion TransformRotation(Quaternion transform_rotation); + + /// + /// + /// + /// + /// + Quaternion InverseTransformRotation(Quaternion transform_rotation); + + /// + /// + event Action PreStepEvent; + + /// + /// + event Action StepEvent; + + /// + /// + event Action PostStepEvent; + + /// + /// + /// + IEpisodicObjectiveFunction ObjectiveFunction { get; } + + /// + /// + /// + /// + void Terminate(string reason); + } +} diff --git a/Runtime/Interfaces/ISpatialPrototypingEnvironment.cs.meta b/Runtime/Interfaces/ISpatialPrototypingEnvironment.cs.meta new file mode 100644 index 000000000..f54496af3 --- /dev/null +++ b/Runtime/Interfaces/ISpatialPrototypingEnvironment.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 062de3e01a19496d84d25e8d2096a260 +timeCreated: 1560406701 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Interfaces/Unobservable.cs b/Runtime/Interfaces/Unobservable.cs new file mode 100644 index 000000000..d533d9114 --- /dev/null +++ b/Runtime/Interfaces/Unobservable.cs @@ -0,0 +1,20 @@ +namespace droid.Runtime.Interfaces { + /// + /// + /// + public interface IUnobservable : IRegisterable { + + /// + /// + void PreStep(); + + /// + /// + void Step(); + + /// + /// + void PostStep(); + + } +} diff --git a/Runtime/Interfaces/Unobservable.cs.meta b/Runtime/Interfaces/Unobservable.cs.meta new file mode 100644 index 000000000..6069315c1 --- /dev/null +++ b/Runtime/Interfaces/Unobservable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cd0e8b5f426845bf8660781437e8321 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/InternalReactions/KeyEventEnabler.cs b/Runtime/InternalReactions/KeyEventEnabler.cs deleted file mode 100644 index b28372fda..000000000 --- a/Runtime/InternalReactions/KeyEventEnabler.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Neodroid.Runtime.Utilities.Misc.SearchableEnum; -using UnityEngine; - -namespace Neodroid.Runtime.PlayerControls { - /// - /// - /// - public class KeyEventEnabler : MonoBehaviour { - [SerializeField] GameObject _game_object; - - [SerializeField] [SearchableEnum] KeyCode _key; - - /// - /// - /// - void Update() { - if (Input.GetKeyDown(this._key)) { - this._game_object.SetActive(!this._game_object.activeSelf); - } - } - } -} \ No newline at end of file diff --git a/Runtime/InternalReactions/KeyEventEnabler.cs.meta b/Runtime/InternalReactions/KeyEventEnabler.cs.meta deleted file mode 100644 index ab1b0082c..000000000 --- a/Runtime/InternalReactions/KeyEventEnabler.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 0d40864cd9d964cb7bf5197b12f20ca6 -timeCreated: 1513880919 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/InternalReactions/PlayerReactions.cs b/Runtime/InternalReactions/PlayerReactions.cs deleted file mode 100644 index 04fdb590d..000000000 --- a/Runtime/InternalReactions/PlayerReactions.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEngine; - -namespace Neodroid.Runtime.PlayerControls { - /// - /// - /// - [ExecuteInEditMode] - public class PlayerReactions : ScriptedReactions { - /// - /// - /// - [SerializeField] - PlayerMotions _player_motions; - - /// - /// - /// - [SerializeField] - bool _auto_reset = true; - - /// - /// - /// - EnvironmentState[] _states; - - List _motions = new List(); - - /// - /// - /// - void Start() { - this._Manager = FindObjectOfType(); - if (Application.isPlaying) { - var reset_reaction = new ReactionParameters(reset : true); - this._states = this._Manager.ReactAndCollectStates(new Reaction(reset_reaction, "all")); - } - } - - void Update() { - if (Application.isPlaying) { - if (this._states == null) { - var reset_reaction_parameters = new ReactionParameters(reset : true); - this._states = this._Manager.ReactAndCollectStates(new Reaction(reset_reaction_parameters, "all")); - } - - var reset = false; - if (this._player_motions != null) { - this._motions.Clear(); - if (this._player_motions._Motions != null) { - foreach (var player_motion in this._player_motions._Motions) { - if (Input.GetKey(player_motion._Key)) { - if (this.Debugging) { - Debug.Log($"{player_motion._Actor} {player_motion._Motor} {player_motion._Strength}"); - } - - if (player_motion._Motor == "Reset") { - reset = true; - break; - } - - var motion = new MotorMotion( - player_motion._Actor, - player_motion._Motor, - player_motion._Strength); - this._motions.Add(motion); - } - } - } - - if (reset) { - var reset_reaction_parameters = new ReactionParameters(reset : true); - this._states = - this._Manager.ReactAndCollectStates(new Reaction(reset_reaction_parameters, "all")); - } else { - var step = this._motions.Count > 0; - if (step) { - foreach (var state in this._states) { - if (this._auto_reset && state.Terminated) { - var reset_reaction = new ReactionParameters(reset : true) {IsExternal = false}; - this._Manager.ReactAndCollectStates(new Reaction(reset_reaction, state.EnvironmentName)); - } - } - - var parameters = - new ReactionParameters(terminable : true, step : true, episode_count : true) { - IsExternal = false - }; - var reaction = new Reaction(parameters, this._motions.ToArray(), null, null, null, ""); - this._states = this._Manager.ReactAndCollectStates(reaction); - } - } - } else { - if (this.Debugging) { - Debug.Log("No PlayerMotions ScriptableObject assigned"); - } - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/InternalReactions/ScriptedReactions.cs b/Runtime/InternalReactions/ScriptedReactions.cs deleted file mode 100644 index 2810c39f5..000000000 --- a/Runtime/InternalReactions/ScriptedReactions.cs +++ /dev/null @@ -1,66 +0,0 @@ -using Neodroid.Runtime.Managers; -using UnityEditor; -using UnityEngine; - -namespace Neodroid.Runtime.PlayerControls { - /// - /// - /// - [ExecuteInEditMode] - public abstract class ScriptedReactions : MonoBehaviour { - /// - /// - /// - [SerializeField] - protected NeodroidManager _Manager; - - /// - /// - /// - [SerializeField] - bool _debugging; - - #if UNITY_EDITOR - const int _script_execution_order = -10000; - #endif - - /// - /// - /// - public static ScriptedReactions Instance { get; private set; } - - /// - /// - /// - public bool Debugging { - get { return this._debugging; } - set { this._debugging = value; } - } - - /// - /// - /// - void Awake() { - if (Instance == null) { - Instance = this; - } else { - Debug.LogWarning("WARNING! Multiple PlayerReactions in the scene! Only using " + Instance); - } - - #if UNITY_EDITOR - if (!Application.isPlaying) { - var manager_script = MonoScript.FromMonoBehaviour(this); - if (MonoImporter.GetExecutionOrder(manager_script) != _script_execution_order) { - MonoImporter.SetExecutionOrder( - manager_script, - _script_execution_order); // Ensures that PreStep is called first, before all other scripts. - Debug.LogWarning( - "Execution Order changed, you will need to press play again to make everything function correctly!"); - EditorApplication.isPlaying = false; - //TODO: UnityEngine.Experimental.LowLevel.PlayerLoop.SetPlayerLoop(new UnityEngine.Experimental.LowLevel.PlayerLoopSystem()); - } - } - #endif - } - } -} \ No newline at end of file diff --git a/Runtime/InternalReactions/ScriptedReactions.cs.meta b/Runtime/InternalReactions/ScriptedReactions.cs.meta deleted file mode 100644 index ef8f32f65..000000000 --- a/Runtime/InternalReactions/ScriptedReactions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d178e7a28816b43f3b71761a024526fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/LICENSE.md b/Runtime/LICENSE.md index c0ee81299..8dada3eda 100644 --- a/Runtime/LICENSE.md +++ b/Runtime/LICENSE.md @@ -1,201 +1,201 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Runtime/Managers/AbstractNeodroidManager.cs b/Runtime/Managers/AbstractNeodroidManager.cs new file mode 100644 index 000000000..f332c5d8a --- /dev/null +++ b/Runtime/Managers/AbstractNeodroidManager.cs @@ -0,0 +1,967 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.Enums; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs; +using UnityEngine; +using Object = System.Object; +#if UNITY_EDITOR +using UnityEditor; + +#endif + +namespace droid.Runtime.Managers { + /// + /// + /// + [DisallowMultipleComponent] + public abstract class AbstractNeodroidManager : MonoBehaviour, + IManager { + /// + /// + public static AbstractNeodroidManager Instance { get; private set; } + + /// + /// + public ISimulatorConfiguration Configuration { + get { + if (this._configuration == null) { + this._configuration = ScriptableObject.CreateInstance(); + } + + return this._configuration; + } + set { this._configuration = (SimulatorConfiguration)value; } + } + + /// + /// Can be subscribed to for pre fixed update events (Will be called before any FixedUpdate on any script) + /// + public event Action EarlyFixedUpdateEvent; + + /// + /// + public event Action FixedUpdateEvent; + + /// + /// + public event Action LateFixedUpdateEvent; + + /// + /// Can be subscribed to for pre update events (Will be called before any Update on any script) + /// + public event Action EarlyUpdateEvent; + + /// + /// + public event Action UpdateEvent; + + /// + /// + public event Action LateUpdateEvent; + + /// + /// + public event Action OnPostRenderEvent; + + /// + /// + public event Action OnRenderImageEvent; + + /// + /// + public event Action OnEndOfFrameEvent; + + /// + /// + // ReSharper disable once EventNeverSubscribedTo.Global + public event Action OnReceiveEvent; + + /// + /// + void FetchCommandLineArguments() { + var arguments = Environment.GetCommandLineArgs(); + + for (var i = 0; i < arguments.Length; i++) { + if (arguments[i] == "-ip") { + this.Configuration.IpAddress = arguments[i + 1]; + } + + if (arguments[i] == "-port") { + this.Configuration.Port = int.Parse(arguments[i + 1]); + } + } + } + + /// + /// + void CreateMessagingServer() { + try { + if (this.Configuration.IpAddress != "" || this.Configuration.Port != 0) { + this._Message_Server = new MessageServer(this.Configuration.IpAddress, + this.Configuration.Port, + false, + #if NEODROID_DEBUG + this.Debugging + #else + false + #endif + ); + } else { + this._Message_Server = new MessageServer( + #if NEODROID_DEBUG + this.Debugging + #else + false + #endif + ); + } + } catch (Exception exception) { + Debug.Log(exception); + throw; + + //TODO: close application is port is already in use. + } + } + + /// + /// + /// + void StartMessagingServer(bool threaded = false) { + /*if (threaded) { + this._Message_Server.ListenForClientToConnect(this.OnConnectCallback, this.OnDebugCallback); + #if NEODROID_DEBUG + + if (this.Debugging) { + Debug.Log("Started Messaging Server in a new thread"); + } + #endif + } else {*/ + + this._Message_Server.ListenForClientToConnect(this.OnDebugCallback); + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log(" Messaging Server is listening for clients"); + } + #endif + + if (threaded) { + this.OnListeningCallback(); + } + + //} + } + + /// + /// + /// + /// + public void StatusString(DataPoller recipient) { recipient.PollData(this.GetStatus()); } + + #region PrivateFields + + /// + /// + [Header("Development", order = 110)] + [SerializeField] + bool _debugging; + + /// + /// + Object _send_lock = new Object(); + + #if UNITY_EDITOR + /// + /// + const int _script_execution_order = -1000; + #endif + + /// + /// + [Header("Simulation", order = 80)] + [SerializeField] + SimulatorConfiguration _configuration; + + /// + /// + [SerializeField] + bool _awaiting_reply; + + WaitForEndOfFrame _wait_for_end_of_frame = new WaitForEndOfFrame(); + WaitForFixedUpdate _wait_for_fixed_update = new WaitForFixedUpdate(); + List _sample_reactions = new List(); + + #endregion + + #region Getter And Setters + + /// + /// + public Reaction[] CurrentReactions { + get { + lock (this._send_lock) { + return this._Current_Reactions; + } + } + set { + lock (this._send_lock) { + this._Current_Reactions = value; + } + } + } + + /// + /// + public float SimulationTimeScale { + get { return Time.timeScale; } + set { + #if UNITY_EDITOR + Time.timeScale = Math.Min(value, 99); + this.LastSimulationTime = Math.Min(value, 99); + #else + Time.timeScale = value; + this._last_simulation_time = value; + #endif + + if (this.Configuration.UpdateFixedTimeScale) { + Time.fixedDeltaTime = 0.02F * Time.timeScale; + } + } + } + + /// + /// + [field : SerializeField] + public bool HasStepped { get; private set; } + + /// + /// + [field : SerializeField] + public bool TestActuators { get; set; } + + #if NEODROID_DEBUG + /// + /// + public bool Debugging { + get { return this._debugging; } + set { + if (this._Message_Server != null) { + this._Message_Server.Debugging = value; + } + + this._debugging = value; + } + } + #endif + + /// + /// + public bool AwaitingReply { + get { + lock (this._send_lock) { + return this._awaiting_reply; + } + } + set { + lock (this._send_lock) { + this._awaiting_reply = value; + } + } + } + + /// + /// + /// + public ISimulatorConfiguration SimulatorConfiguration { get { return this._configuration; } } + + /// + /// + /// + public abstract void Setup(); + + /// + /// + + public bool ShouldResume { + get { return this._shouldResume; } + set { + if (value != this._shouldResume) { + if (value) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Should Resume Now"); + } + #endif + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Should Not Resume"); + } + #endif + } + }else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"ShouldResume did not change: {value}"); + } + #endif + } + + this._shouldResume = value; + } + } + + /// + /// + /// + [field : SerializeField] + public float LastSimulationTime { get; private set; } + + /// + /// + [field : SerializeField] + public int SkipFrameI { get; set; } + + #endregion + + #region PrivateMembers + + /// + /// + protected Dictionary _Environments = new Dictionary(); + + /// + /// + public void Clear() { this._Environments.Clear(); } + + /// + /// + [SerializeField] + protected MessageServer _Message_Server; + + /// + /// + protected Reaction[] _Current_Reactions = { }; + + [SerializeField] Boolean _shouldResume; + + #endregion + + #region UnityCallbacks + + /// + /// + protected void Awake() { + if (Instance == null) { + Instance = this; + } else if (Instance == this) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Using " + Instance); + } + #endif + } else { + Debug.LogWarning("WARNING! There are multiple SimulationManagers in the scene! Only using " + + Instance); + } + + this.Setup(); + + #if UNITY_EDITOR + if (!Application.isPlaying) { + var manager_script = MonoScript.FromMonoBehaviour(this); + if (MonoImporter.GetExecutionOrder(manager_script) != _script_execution_order) { + MonoImporter.SetExecutionOrder(manager_script, + _script_execution_order); // Ensures that PreStep is called first, before all other scripts. + Debug.LogWarning("Execution Order changed, you will need to press play again to make everything function correctly!"); + EditorApplication.isPlaying = false; + //TODO: UnityEngine.Experimental.LowLevel.PlayerLoop.SetPlayerLoop(new UnityEngine.Experimental.LowLevel.PlayerLoopSystem()); + } + } + #endif + } + + /// + /// + protected void Start() { + this.FetchCommandLineArguments(); + + if (this.Configuration == null) { + this.Configuration = ScriptableObject.CreateInstance(); + } + + this.ApplyConfigurationToUnity(this.Configuration); + + if (this.Configuration.SimulationType == SimulationType.Physics_dependent_) { + this.EarlyFixedUpdateEvent += this.OnPreTick; + this.FixedUpdateEvent += this.OnTick; + this.LateFixedUpdateEvent += this.OnPostTick; + this.StartCoroutine(this.LateFixedUpdateEventGenerator()); + } else { + this.EarlyUpdateEvent += this.OnPreTick; + this.UpdateEvent += this.OnTick; + switch (this.Configuration.FrameFinishes) { + case FrameFinishes.Late_update_: + this.LateUpdateEvent += this.OnPostTick; + break; + case FrameFinishes.On_post_render_: + this.OnPostRenderEvent += this.OnPostTick; + break; + case FrameFinishes.On_render_image_: + this.OnRenderImageEvent += this.OnPostTick; + break; + case FrameFinishes.End_of_frame_: + this.StartCoroutine(this.EndOfFrameEventGenerator()); + this.OnEndOfFrameEvent += this.OnPostTick; + break; + default: throw new ArgumentOutOfRangeException(); + } + } + + this.CreateMessagingServer(); + if (this.Configuration.SimulationType == SimulationType.Physics_dependent_) { + this.StartMessagingServer(); // Remember to manually bind receive to an event in a derivation + } else { + this.StartMessagingServer(true); + } + } + + /// + /// + public void ApplyConfigurationToUnity(ISimulatorConfiguration configuration) { + if (configuration.ApplyQualitySettings) { + QualitySettings.SetQualityLevel(configuration.QualityLevel, true); + QualitySettings.vSyncCount = configuration.VSyncCount; + } + + this.SimulationTimeScale = configuration.TimeScale; + Application.targetFrameRate = configuration.TargetFrameRate; + + if (this._configuration.OptimiseWindowForSpeed) { + Screen.SetResolution(2, 2, false); + } + #if !UNITY_EDITOR + else if( configuration.ApplyResolutionSettings ){ + Screen.SetResolution( + width : configuration.Width, + height : configuration.Height, + fullscreen : configuration.FullScreen); + } + #else + + PlayerSettings.resizableWindow = configuration.ResizableWindow; + PlayerSettings.colorSpace = configuration.ColorSpace; + PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Disabled; + //PlayerSettings.use32BitDisplayBuffer + #endif + } + + /// + /// + void OnPostRender() { this.OnPostRenderEvent?.Invoke(); } + + /// + /// + /// + /// + void OnRenderImage(RenderTexture src, RenderTexture dest) { + this.OnRenderImageEvent?.Invoke(); //Will need Camera component! + } + + /// + /// + protected void FixedUpdate() { + this.EarlyFixedUpdateEvent?.Invoke(); + this.FixedUpdateEvent?.Invoke(); + } + + /// + /// + /// + IEnumerator LateFixedUpdateEventGenerator() { + while (true) { + yield return this._wait_for_fixed_update; + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("LateFixedUpdate"); + } + #endif + this.LateFixedUpdateEvent?.Invoke(); + } + + // ReSharper disable once IteratorNeverReturns + } + + /// + /// + /// + protected IEnumerator EndOfFrameEventGenerator() { + while (true) { + yield return this._wait_for_end_of_frame; + //yield return new WaitForEndOfFrame(); + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("EndOfFrameEvent"); + } + #endif + this.OnEndOfFrameEvent?.Invoke(); + } + #pragma warning disable 162 + // ReSharper disable once HeuristicUnreachableCode + yield return null; + #pragma warning restore 162 + // ReSharper disable once IteratorNeverReturns + } + + /// + /// + protected void Update() { + this.EarlyUpdateEvent?.Invoke(); + this.UpdateEvent?.Invoke(); + } + + /// + /// + protected void LateUpdate() { this.LateUpdateEvent?.Invoke(); } + + #endregion + + #region PrivateMethods + + /// + /// + protected void OnPreTick() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("OnPreTick"); + } + #endif + + if (this.Configuration.StepExecutionPhase == ExecutionPhase.Before_) { + this.ExecuteStep(); + } + } + + /// + /// + protected void OnTick() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("OnTick"); + } + #endif + + if (this.Configuration.StepExecutionPhase == ExecutionPhase.Middle_) { + this.ExecuteStep(); + } + + if (this.TestActuators) { + this.SendToEnvironments(this.SampleRandomReactions()); + this.GatherSnapshots(); + } + + foreach (var environment in this._Environments.Values) { + environment.Tick(); + } + } + + /// + /// + protected void OnPostTick() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("OnPostTick"); + } + #endif + + if (this.Configuration.StepExecutionPhase == ExecutionPhase.After_) { + this.ExecuteStep(); + } + + foreach (var environment in this._Environments.Values) { + environment.PostStep(); + } + } + + /// + /// + void ExecuteStep() { + + lock (this._send_lock) { + + + if (!this.HasStepped) { + this.HasStepped = true; + + this.SendToEnvironments(this.CurrentReactions); + + if (this.AwaitingReply) { + var states = this.GatherSnapshots(); + this.PostReact(states); + } + + + this.ShouldResume = false; + this.CurrentReactions = new Reaction[] { }; + } + } + } + + /// + /// + /// + protected void PostReact(EnvironmentSnapshot[] states) { + lock (this._send_lock) { + if (this.SkipFrameI >= this.Configuration.FrameSkips) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Not skipping frame, replying..."); + } + #endif + + this.Reply(states); + this.AwaitingReply = false; + this.SkipFrameI = 0; + } else { + this.SkipFrameI += 1; + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Skipping frame, {this.SkipFrameI}/{this.Configuration.FrameSkips}"); + } + #endif + if (this.Configuration.ReplayReactionInSkips) { } + } + } + } + + /// + /// + /// + protected Reaction[] SampleRandomReactions() { + this._sample_reactions.Clear(); + foreach (var environment in this._Environments.Values) { + this._sample_reactions.Add(environment.SampleReaction()); + } + + return this._sample_reactions.ToArray(); + } + + //TODO: Maybe add EnvironmentState[][] states for aggregation of states in unity side buffer, when using skips? + /// + /// + /// + void Reply(EnvironmentSnapshot[] states) { + lock (this._send_lock) { + var configuration_message = new SimulatorConfigurationMessage(this.Configuration); + var describe = false; + if (this.CurrentReactions != null) { + foreach (var reaction in this.CurrentReactions) { + if (reaction.Parameters.Describe) { + describe = true; + } + } + } + + this._Message_Server.SendStates(states, + simulator_configuration_message : configuration_message, + do_serialise_unobservables : + describe || this.Configuration.AlwaysSerialiseUnobservables, + serialise_individual_observables : + describe || this.Configuration.AlwaysSerialiseIndividualObservables, + do_serialise_observables : describe + || this._configuration + .AlwaysSerialiseAggregatedFloatArray); + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Replying"); + } + + #endif + } + } + + #endregion + + #region PublicMethods + + /// + /// + /// + /// + public void SendToEnvironments(Reaction[] reactions) { + this.SetStepping(reactions); + foreach (var reaction in reactions) { + if (this._Environments.ContainsKey(reaction.RecipientEnvironment)) { + this._Environments[reaction.RecipientEnvironment].React(reaction); + } else if (reaction.RecipientEnvironment == "all") { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying to all environments"); + } + #endif + + foreach (var environment in this._Environments.Values) { + environment.React(reaction); + } + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Could not find an environment with the identifier: {reaction.RecipientEnvironment}"); + } + #endif + } + } + } + + /// + /// + /// + public EnvironmentSnapshot[] GatherSnapshots() { + var environments = this._Environments.Values; + var states = new EnvironmentSnapshot[environments.Count]; + var i = 0; + foreach (var environment in environments) { + states[i++] = environment.Snapshot(); + } + + return states; + } + + void SetStepping(Reaction[] reactions) { + var any = false; + if (reactions.Length == 0) { + #if NEODROID_DEBUG + if (this._debugging) { + Debug.LogWarning($"Received no reaction!"); + } + #endif + } + foreach (var reaction in reactions) { + #if NEODROID_DEBUG + if (this._debugging && false) { + Debug.LogWarning($"Reaction StepResetObserveEnu Parameter: {reaction.Parameters.StepResetObserveEnu}"); + } + #endif + if (reaction.Parameters.StepResetObserveEnu == StepResetObserve.Step_) { + any = true; + break; + } + } + + if (any) { + this.ShouldResume = true; + } else { + this.ShouldResume = false; + } + } + + /// + /// + /// + /// + public void SetTesting(bool v) { this.TestActuators = v; } + + /// + /// + public void ResetAllEnvironments() { + var reactions = new List(); + foreach (var environment in this._Environments) { + var a = environment.Value.Identifier; + + reactions.Add(new Reaction(new ReactionParameters(StepResetObserve.Reset_, false, true), + null, + null, + null, + null, + "", + recipient_environment : a)); + } + + this.SendToEnvironments(reactions.ToArray()); + } + + /// + /// + /// + public string GetStatus() { + if (this._Message_Server != null) { + return this._Message_Server._Listening_For_Clients ? "Connected" : "Not Connected"; + } + + return "No server"; + } + + #endregion + + #region Registration + + /// + /// + /// + /// + public void Register(IEnvironment environment) { this.Register(environment, environment.Identifier); } + + /// + /// + /// + /// + /// + public void Register(IEnvironment environment, string identifier) { + if (!this._Environments.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Manager {this.name} already has an environment with the identifier: {identifier}"); + } + #endif + + this._Environments.Add(identifier, environment); + } else { + Debug.LogWarning($"WARNING! Please check for duplicates, SimulationManager {this.name} " + + $"already has environment {identifier} registered"); + } + } + + /// + /// + /// + /// + public void UnRegister(IEnvironment environment, string identifier) { + if (this._Environments.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"SimulationManager {this.name} unregistered Environment {identifier}"); + } + #endif + + this._Environments.Remove(identifier); + } + } + + /// + /// + /// + public void UnRegister(IEnvironment neodroid_environment) { + this.UnRegister(neodroid_environment, neodroid_environment.Identifier); + } + + #endregion + + #region MessageServerCallbacks + + /// + /// + /// + void OnReceiveCallback(Reaction[] reactions) { + lock (this._send_lock) { + #if NEODROID_DEBUG + if (this.Debugging) { + if (reactions.Length > 0) { + Debug.Log($"Received: {reactions.Select(r => r.ToString()).Aggregate((current, next) => $"{current}, {next}")}"); + } else { + Debug.Log($"Received empty reaction sequence"); + } + } + #endif + + this.SetReactions(reactions); + + this.OnReceiveEvent?.Invoke(); + } + } + + /// + /// + /// + protected void SetReactions(Reaction[] reactions) { + lock (this._send_lock) { + if (reactions != null) { + if (this.AwaitingReply || !this.HasStepped) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Got new reaction while not having stepped({!this.HasStepped}) or replied({this.AwaitingReply})"); + } + #endif + } + + this.CurrentReactions = reactions; + + var phase = this.Configuration.StepExecutionPhase; + foreach (var current_reaction in this.CurrentReactions) { + phase = current_reaction.Parameters.Phase; + } + + this.Configuration.StepExecutionPhase = phase; + this.AwaitingReply = true; + this.HasStepped = false; + } else { + Debug.LogWarning("Reaction was null"); + } + } + } + + /// + /// + void OnDisconnectCallback() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Client disconnected."); + } + #endif + } + + /// + /// + /// + void OnDebugCallback(string error) { + #if NEODROID_DEBUG + if (this.Debugging && false) { + Debug.Log("DebugCallback: " + error); + } + #endif + } + + /// + /// + void OnListeningCallback() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Client connected"); + } + #endif + + this._Message_Server.StartReceiving(this.OnReceiveCallback, + this.OnDisconnectCallback, + this.OnDebugCallback); + } + + #endregion + + #region Deconstruction + + /// + /// + void OnApplicationQuit() { this._Message_Server.CleanUp(); } + + /// + /// + void OnDestroy() { this._Message_Server.Destroy(); } + + #endregion + + /// + /// + /// + /// + public override String ToString() { + var c = this.SimulatorConfiguration.ToString(); + var e = this._Environments.FirstOrDefault().Value.ToString(); + + return $"{c}, {e}"; + } + } +} diff --git a/Runtime/Managers/AbstractNeodroidManager.cs.meta b/Runtime/Managers/AbstractNeodroidManager.cs.meta new file mode 100644 index 000000000..9339ff7fa --- /dev/null +++ b/Runtime/Managers/AbstractNeodroidManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91fa62b1cbf5c483585e212edf2dc8b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: ab457b1b17f134d65a7ac3f30408d1e8, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Managers/Experimental/CurriculumManager.cs b/Runtime/Managers/Experimental/CurriculumManager.cs index 964a55e57..875f754a8 100644 --- a/Runtime/Managers/Experimental/CurriculumManager.cs +++ b/Runtime/Managers/Experimental/CurriculumManager.cs @@ -1,14 +1,18 @@ -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using Neodroid.Runtime.Utilities.ScriptableObjects; +using System; +using droid.Runtime.ScriptableObjects.Deprecated; +using droid.Runtime.Utilities.Drawing; using UnityEngine; -namespace Neodroid.Runtime.Managers.Experimental { +namespace droid.Runtime.Managers.Experimental { [AddComponentMenu("Neodroid/Managers/NotUsed/Curriculum")] - public class CurriculumManager : NeodroidManager { - [SerializeField] Curriculum _curriculum; + public class CurriculumManager : AbstractNeodroidManager { + [SerializeField] Curriculum _curriculum = null; - [SerializeField] bool _draw_levels; + [SerializeField] bool _draw_levels = false; + + public Curriculum Curriculum1 { get { return this._curriculum; } set { this._curriculum = value; } } + + public Boolean DrawLevels { get { return this._draw_levels; } set { this._draw_levels = value; } } #if UNITY_EDITOR void OnDrawGizmosSelected() { @@ -21,28 +25,65 @@ void OnDrawGizmosSelected() { foreach (var entry in level._Configurable_Entries) { var configurable = GameObject.Find(entry._Configurable_Name); if (configurable != null) { - Gizmos.color = new Color(frac, 0, 1 - frac, 0.1F); - Gizmos.DrawSphere(configurable.transform.position, entry._Max_Value); - Gizmos.color = new Color(1, 1, 1, 0.4F); - Gizmos.DrawWireSphere(configurable.transform.position, entry._Max_Value); - var pos_up = configurable.transform.position; + Gizmos.color = new Color(frac, + 0, + 1 - frac, + 0.1F); + var position = configurable.transform.position; + Gizmos.DrawSphere(position, entry._Max_Value); + Gizmos.color = new Color(1, + 1, + 1, + 0.4F); + Gizmos.DrawWireSphere(position, entry._Max_Value); + var pos_up = position; pos_up.y += entry._Max_Value; - NeodroidUtilities.DrawString(i.ToString(), pos_up, new Color(1, 1, 1, 1)); - var pos_left = configurable.transform.position; + NeodroidUtilities.DrawString(i.ToString(), + pos_up, + new Color(1, + 1, + 1, + 1)); + var pos_left = position; pos_left.x += entry._Max_Value; - NeodroidUtilities.DrawString(i.ToString(), pos_left, new Color(1, 1, 1, 1)); - var pos_forward = configurable.transform.position; + NeodroidUtilities.DrawString(i.ToString(), + pos_left, + new Color(1, + 1, + 1, + 1)); + var pos_forward = position; pos_forward.z += entry._Max_Value; - NeodroidUtilities.DrawString(i.ToString(), pos_forward, new Color(1, 1, 1, 1)); - var pos_down = configurable.transform.position; + NeodroidUtilities.DrawString(i.ToString(), + pos_forward, + new Color(1, + 1, + 1, + 1)); + var pos_down = position; pos_down.y -= entry._Max_Value; - NeodroidUtilities.DrawString(i.ToString(), pos_down, new Color(1, 1, 1, 1)); - var pos_right = configurable.transform.position; + NeodroidUtilities.DrawString(i.ToString(), + pos_down, + new Color(1, + 1, + 1, + 1)); + var pos_right = position; pos_right.x -= entry._Max_Value; - NeodroidUtilities.DrawString(i.ToString(), pos_right, new Color(1, 1, 1, 1)); - var pos_backward = configurable.transform.position; + NeodroidUtilities.DrawString(i.ToString(), + pos_right, + new Color(1, + 1, + 1, + 1)); + var pos_backward = position; pos_backward.z -= entry._Max_Value; - NeodroidUtilities.DrawString(i.ToString(), pos_backward, new Color(1, 1, 1, 1)); + NeodroidUtilities.DrawString(i.ToString(), + pos_backward, + new Color(1, + 1, + 1, + 1)); } } } @@ -50,5 +91,6 @@ void OnDrawGizmosSelected() { } } #endif + public override void Setup() { throw new NotImplementedException(); } } -} \ No newline at end of file +} diff --git a/Runtime/Managers/Experimental/SlaveNeodroidManager.cs b/Runtime/Managers/Experimental/SlaveNeodroidManager.cs new file mode 100644 index 000000000..540987791 --- /dev/null +++ b/Runtime/Managers/Experimental/SlaveNeodroidManager.cs @@ -0,0 +1,943 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.Enums; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Experimental; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs; +using UnityEngine; +using Object = System.Object; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace droid.Runtime.Managers.Experimental { + /// + /// + /// + [DisallowMultipleComponent] + [AddComponentMenu("Neodroid/Managers/SlaveNeodroidManager")] + public class SlaveNeodroidManager : MonoBehaviour, + IManager { + /// + /// + public static SlaveNeodroidManager Instance { get; private set; } + + /// + /// + public ISimulatorConfiguration Configuration { + get { + if (this._configuration == null) { + this._configuration = ScriptableObject.CreateInstance(); + } + + return this._configuration; + } + set { this._configuration = (SimulatorConfiguration)value; } + } + + /// + /// Can be subscribed to for pre fixed update events (Will be called before any FixedUpdate on any script) + /// + public event Action EarlyFixedUpdateEvent; + + /// + /// + public event Action FixedUpdateEvent; + + /// + /// + public event Action LateFixedUpdateEvent; + + /// + /// Can be subscribed to for pre update events (Will be called before any Update on any script) + /// + public event Action EarlyUpdateEvent; + + /// + /// + public event Action UpdateEvent; + + /// + /// + public event Action LateUpdateEvent; + + /// + /// + public event Action OnPostRenderEvent; + + /// + /// + public event Action OnRenderImageEvent; + + /// + /// + public event Action OnEndOfFrameEvent; + + /// + /// + public event Action OnReceiveEvent; + + /// + /// + void FetchCommandLineArguments() { + var arguments = Environment.GetCommandLineArgs(); + + for (var i = 0; i < arguments.Length; i++) { + if (arguments[i] == "-ip") { + this.Configuration.IpAddress = arguments[i + 1]; + } + + if (arguments[i] == "-port") { + this.Configuration.Port = int.Parse(arguments[i + 1]); + } + } + } + + /// + /// + void CreateMessagingClient() { + try { + if (this.Configuration.IpAddress != "" || this.Configuration.Port != 0) { + this._Message_Client = new MessageClient(this.Configuration.IpAddress, + this.Configuration.Port, + false, + #if NEODROID_DEBUG + this.Debugging + #else + false + #endif + ); + } else { + this._Message_Client = new MessageClient( + #if NEODROID_DEBUG + this.Debugging + #else + false + #endif + ); + } + } catch (Exception exception) { + Debug.Log(exception); + throw; + + //TODO: close application is port is already in use. + } + } + + /// + /// + /// + void StartMessagingServer(bool threaded = false) { + this._Message_Client.ListenForClientToConnect(this.OnDebugCallback); + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log(" Messaging Server is listening for clients"); + } + #endif + + if (threaded) { + this.OnListeningCallback(); + } + + //} + } + + /// + /// + /// + /// + public void StatusString(DataPoller recipient) { recipient.PollData(this.GetStatus()); } + + #region PrivateFields + + /// + /// + [Header("Development", order = 110)] + [SerializeField] + bool _debugging; + + /// + /// + Object _send_lock = new Object(); + + /// + /// + [SerializeField] + bool _testing_Actuators; + + #if UNITY_EDITOR + /// + /// + const int _script_execution_order = -1000; + #endif + + /// + /// + [Header("Simulation", order = 80)] + [SerializeField] + SimulatorConfiguration _configuration; + + /// + /// + [SerializeField] + int _skip_frame_i; + + /// + /// + [SerializeField] + bool _syncing_environments; + + /// + /// + [SerializeField] + bool _awaiting_reply; + + [SerializeField] bool _step; + + WaitForEndOfFrame _wait_for_end_of_frame = new WaitForEndOfFrame(); + WaitForFixedUpdate _wait_for_fixed_update = new WaitForFixedUpdate(); + + #endregion + + #region Getter And Setters + + /// + /// + public Reaction[] CurrentReactions { + get { + lock (this._send_lock) { + return this._Current_Reactions; + } + } + set { + lock (this._send_lock) { + this._Current_Reactions = value; + } + } + } + + /// + /// + public float SimulationTimeScale { + get { return Time.timeScale; } + set { + #if UNITY_EDITOR + Time.timeScale = Math.Min(value, 99); + this._last_simulation_time = Math.Min(value, 99); + #else + Time.timeScale = value; + this._last_simulation_time = value; + #endif + + if (this.Configuration.UpdateFixedTimeScale) { + Time.fixedDeltaTime = 0.02F * Time.timeScale; + } + } + } + + [SerializeField] float _last_simulation_time; + + /// + /// + public bool HasStepped { get { return this._has_stepped; } set { this._has_stepped = value; } } + + /// + /// + public bool TestActuators { + get { return this._testing_Actuators; } + set { this._testing_Actuators = value; } + } + + #if NEODROID_DEBUG + /// + /// + public bool Debugging { + get { return this._debugging; } + set { + if (this._Message_Client != null) { + this._Message_Client.Debugging = value; + } + + this._debugging = value; + } + } + #endif + + /// + /// + public bool AwaitingReply { + get { + lock (this._send_lock) { + return this._awaiting_reply; + } + } + set { + lock (this._send_lock) { + this._awaiting_reply = value; + } + } + } + + /// + /// + /// + public ISimulatorConfiguration SimulatorConfiguration { get { return this._configuration; } } + + /// + /// + public bool IsSyncingEnvironments { + get { return this._syncing_environments; } + set { this._syncing_environments = value; } + } + + /// + /// + public bool Stepping { get { return this._step; } } + + #endregion + + #region PrivateMembers + + /// + /// + protected Dictionary _Environments = new Dictionary(); + + /// + /// + public void Clear() { this._Environments.Clear(); } + + /// + /// + protected MessageClient _Message_Client; + + /// + /// + protected Reaction[] _Current_Reactions = { }; + + [SerializeField] bool _has_stepped; + + #endregion + + #region UnityCallbacks + + /// + /// + protected void Awake() { + if (Instance == null) { + Instance = this; + } else if (Instance == this) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Using " + Instance); + } + #endif + } else { + Debug.LogWarning("WARNING! There are multiple SimulationManagers in the scene! Only using " + + Instance); + } + + this.Setup(); + + #if UNITY_EDITOR + if (!Application.isPlaying) { + var manager_script = MonoScript.FromMonoBehaviour(this); + if (MonoImporter.GetExecutionOrder(manager_script) != _script_execution_order) { + MonoImporter.SetExecutionOrder(manager_script, + _script_execution_order); // Ensures that PreStep is called first, before all other scripts. + Debug.LogWarning("Execution Order changed, you will need to press play again to make everything function correctly!"); + EditorApplication.isPlaying = false; + //TODO: UnityEngine.Experimental.LowLevel.PlayerLoop.SetPlayerLoop(new UnityEngine.Experimental.LowLevel.PlayerLoopSystem()); + } + } + #endif + } + + public virtual void Setup() { } + + /// + /// + protected void Start() { + this.FetchCommandLineArguments(); + + if (this.Configuration == null) { + this.Configuration = ScriptableObject.CreateInstance(); + } + + this.ApplyConfigurationToUnity(this.Configuration); + + if (this.Configuration.SimulationType == SimulationType.Physics_dependent_) { + this.EarlyFixedUpdateEvent += this.OnPreTick; + this.FixedUpdateEvent += this.OnTick; + this.FixedUpdateEvent += this.Tick; + this.LateFixedUpdateEvent += this.OnPostTick; + this.StartCoroutine(this.LateFixedUpdateEventGenerator()); + } else { + this.EarlyUpdateEvent += this.OnPreTick; + this.UpdateEvent += this.OnTick; + this.UpdateEvent += this.Tick; + switch (this.Configuration.FrameFinishes) { + case FrameFinishes.Late_update_: + this.LateUpdateEvent += this.OnPostTick; + break; + case FrameFinishes.On_post_render_: + this.OnPostRenderEvent += this.OnPostTick; + break; + case FrameFinishes.On_render_image_: + this.OnRenderImageEvent += this.OnPostTick; + break; + case FrameFinishes.End_of_frame_: + this.StartCoroutine(this.EndOfFrameEventGenerator()); + this.OnEndOfFrameEvent += this.OnPostTick; + break; + default: throw new ArgumentOutOfRangeException(); + } + } + + this.CreateMessagingClient(); + if (this.Configuration.SimulationType == SimulationType.Physics_dependent_) { + this.StartMessagingServer(); // Remember to manually bind receive to an event in a derivation + } else { + this.StartMessagingServer(true); + } + } + + /// + /// + public void ApplyConfigurationToUnity(ISimulatorConfiguration configuration) { + if (configuration.ApplyQualitySettings) { + QualitySettings.SetQualityLevel(configuration.QualityLevel, true); + QualitySettings.vSyncCount = configuration.VSyncCount; + } + + this.SimulationTimeScale = configuration.TimeScale; + Application.targetFrameRate = configuration.TargetFrameRate; + + if (this._configuration.OptimiseWindowForSpeed) { + Screen.SetResolution(1, 1, false); + } + #if !UNITY_EDITOR + else if( configuration.ApplyResolutionSettings ){ + Screen.SetResolution( + width : configuration.Width, + height : configuration.Height, + fullscreen : configuration.FullScreen); + } + #else + + PlayerSettings.resizableWindow = configuration.ResizableWindow; + PlayerSettings.colorSpace = configuration.ColorSpace; + PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Disabled; + //PlayerSettings.use32BitDisplayBuffer + #endif + } + + /// + /// + void OnPostRender() { this.OnPostRenderEvent?.Invoke(); } + + /// + /// + /// + /// + void OnRenderImage(RenderTexture src, RenderTexture dest) { + this.OnRenderImageEvent?.Invoke(); //TODO: May not work + } + + /// + /// + protected void FixedUpdate() { + this.EarlyFixedUpdateEvent?.Invoke(); + this.FixedUpdateEvent?.Invoke(); + } + + /// + /// + /// + IEnumerator LateFixedUpdateEventGenerator() { + while (true) { + yield return this._wait_for_fixed_update; + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("LateFixedUpdate"); + } + #endif + this.LateFixedUpdateEvent?.Invoke(); + } + + // ReSharper disable once IteratorNeverReturns + } + + /// + /// + /// + protected IEnumerator EndOfFrameEventGenerator() { + while (true) { + yield return this._wait_for_end_of_frame; + //yield return new WaitForEndOfFrame(); + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("EndOfFrameEvent"); + } + #endif + this.OnEndOfFrameEvent?.Invoke(); + } + #pragma warning disable 162 + // ReSharper disable once HeuristicUnreachableCode + yield return null; + #pragma warning restore 162 + // ReSharper disable once IteratorNeverReturns + } + + /// + /// + protected void Update() { + this.EarlyUpdateEvent?.Invoke(); + this.UpdateEvent?.Invoke(); + } + + /// + /// + protected void LateUpdate() { this.LateUpdateEvent?.Invoke(); } + + #endregion + + #region PrivateMethods + + /// + /// + protected void OnPreTick() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("OnPreTick"); + } + #endif + + if (this.Configuration.StepExecutionPhase == ExecutionPhase.Before_) { + this.ExecuteStep(); + } + } + + /// + /// + protected void OnTick() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("OnTick"); + } + #endif + if (this.Configuration.StepExecutionPhase == ExecutionPhase.Middle_) { + this.ExecuteStep(); + } + } + + /// + /// + protected void OnPostTick() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("OnPostTick"); + } + #endif + + foreach (var environment in this._Environments.Values) { + environment.PostStep(); + } + + if (this.Configuration.StepExecutionPhase == ExecutionPhase.After_) { + this.ExecuteStep(); + } + + this.CurrentReactions = new Reaction[] { }; + } + + /// + /// + void ExecuteStep() { + if (!this.HasStepped) { + if (!this._syncing_environments) { + this.React(this.CurrentReactions); + } + + if (this.AwaitingReply) { + var states = this.CollectStates(); + this.PostReact(states); + } + + this.HasStepped = true; + } + } + + /// + /// + protected void Tick() { + if (this.TestActuators) { + this.React(this.SampleRandomReactions()); + this.CollectStates(); + } + + foreach (var environment in this._Environments.Values) { + environment.Tick(); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Tick"); + } + #endif + } + + /// + /// + /// + protected void PostReact(EnvironmentSnapshot[] states) { + lock (this._send_lock) { + foreach (var env in this._Environments.Values) { + if (env.IsResetting) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Environment {env} is resetting"); + } + #endif + + this._syncing_environments = true; + return; + } + } + + this._syncing_environments = false; + if (this._skip_frame_i >= this.Configuration.FrameSkips) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Not skipping frame, replying..."); + } + #endif + + this.Reply(states); + this.AwaitingReply = false; + this._skip_frame_i = 0; + } else { + this._skip_frame_i += 1; + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Skipping frame, {this._skip_frame_i}/{this.Configuration.FrameSkips}"); + } + #endif + if (this.Configuration.ReplayReactionInSkips) { } + } + } + } + + /// + /// + /// + protected Reaction[] SampleRandomReactions() { + var sample_reactions = new List(); + foreach (var environment in this._Environments.Values) { + sample_reactions.Add(environment.SampleReaction()); + } + + return sample_reactions.ToArray(); + } + + //TODO: Maybe add EnvironmentState[][] states for aggregation of states in unity side buffer, when using skips? + /// + /// + /// + void Reply(EnvironmentSnapshot[] states) { + lock (this._send_lock) { + var configuration_message = new SimulatorConfigurationMessage(this.Configuration); + var describe = false; + if (this.CurrentReactions != null) { + foreach (var reaction in this.CurrentReactions) { + if (reaction.Parameters.Describe) { + describe = true; + } + } + } + + this._Message_Client.SendStates(states, + simulator_configuration_message : configuration_message, + do_serialise_unobservables : + describe || this.Configuration.AlwaysSerialiseUnobservables, + serialise_individual_observables : + describe || this.Configuration.AlwaysSerialiseIndividualObservables, + do_serialise_observables : describe + || this._configuration + .AlwaysSerialiseAggregatedFloatArray); + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Replying"); + } + + #endif + } + } + + #endregion + + #region PublicMethods + + /// + /// + /// + /// + public void React(Reaction reaction) { this.React(new[] {reaction}); } + + /// + /// + /// + /// + public void React(Reaction[] reactions) { + this.SetStepping(reactions); + foreach (var reaction in reactions) { + if (this._Environments.ContainsKey(reaction.RecipientEnvironment)) { + this._Environments[reaction.RecipientEnvironment].React(reaction); + } else if (reaction.RecipientEnvironment == "all") { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying to all environments"); + } + #endif + + foreach (var environment in this._Environments.Values) { + environment.React(reaction); + } + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Could not find an environment with the identifier: {reaction.RecipientEnvironment}"); + } + #endif + } + } + } + + /// + /// + /// + public EnvironmentSnapshot[] CollectStates() { + var environments = this._Environments.Values; + var states = new EnvironmentSnapshot[environments.Count]; + var i = 0; + foreach (var environment in environments) { + states[i++] = environment.Snapshot(); + } + + return states; + } + + void SetStepping(bool step) { + if (step) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Stepping from Reaction"); + } + #endif + + this._step = true; + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Not stepping from Reaction"); + } + #endif + if (this.HasStepped) { + this._step = false; + } + } + } + + void SetStepping(Reaction[] reactions) { + if (reactions.Any(reaction => reaction.Parameters.StepResetObserveEnu == StepResetObserve.Step_)) { + this.SetStepping(true); + } + } + + public void SetTesting(bool arg0) { this.TestActuators = arg0; } + + /// + /// + public void ResetAllEnvironments() { + this.React(new Reaction(new ReactionParameters(StepResetObserve.Reset_, false, true), + null, + null, + null, + null, + "")); + } + + /// + /// + /// + public string GetStatus() { + if (this._Message_Client != null) { + return this._Message_Client._Listening_For_Clients ? "Connected" : "Not Connected"; + } + + return "No server"; + } + + #endregion + + #region Registration + + /// + /// + /// + /// + public void Register(IEnvironment environment) { this.Register(environment, environment.Identifier); } + + /// + /// + /// + /// + /// + public void Register(IEnvironment environment, string identifier) { + if (!this._Environments.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Manager {this.name} already has an environment with the identifier: {identifier}"); + } + #endif + + this._Environments.Add(identifier, environment); + } else { + Debug.LogWarning($"WARNING! Please check for duplicates, SimulationManager {this.name} " + + $"already has environment {identifier} registered"); + } + } + + /// + /// + /// + /// + public void UnRegister(IEnvironment environment, string identifier) { + if (this._Environments.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"SimulationManager {this.name} unregistered Environment {identifier}"); + } + #endif + + this._Environments.Remove(identifier); + } + } + + /// + /// + /// + public void UnRegister(IEnvironment neodroid_environment) { + this.UnRegister(neodroid_environment, neodroid_environment.Identifier); + } + + #endregion + + #region MessageServerCallbacks + + /// + /// + /// + void OnReceiveCallback(Reaction[] reactions) { + lock (this._send_lock) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Received: {reactions.Select(r => r.ToString()).Aggregate((current, next) => $"{current}, {next}")}"); + } + #endif + + this.SetReactionsFromExternalSource(reactions); + + this.OnReceiveEvent?.Invoke(); + } + } + + /// + /// + /// + protected void SetReactionsFromExternalSource(Reaction[] reactions) { + lock (this._send_lock) { + if (reactions != null) { + if (this.AwaitingReply || !this.HasStepped) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Got new reaction while not having stepped({!this.HasStepped}) or replied({this.AwaitingReply})"); + } + #endif + } + + this.CurrentReactions = reactions; + + this.Configuration.StepExecutionPhase = this.CurrentReactions[0].Parameters.Phase; + this.AwaitingReply = true; + this.HasStepped = false; + } else { + Debug.LogWarning("Reaction was null"); + } + } + } + + /// + /// + void OnDisconnectCallback() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Client disconnected."); + } + #endif + } + + /// + /// + /// + void OnDebugCallback(string error) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("DebugCallback: " + error); + } + #endif + } + + /// + /// + void OnListeningCallback() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Client connected"); + } + #endif + + this._Message_Client.StartReceiving(this.OnReceiveCallback, + this.OnDisconnectCallback, + this.OnDebugCallback); + } + + #endregion + + #region Deconstruction + + /// + /// + void OnApplicationQuit() { this._Message_Client.CleanUp(); } + + /// + /// + void OnDestroy() { this._Message_Client.Destroy(); } + + #endregion + + /// + /// + /// + /// + public override String ToString() { + var c = this.SimulatorConfiguration.ToString(); + var e = this._Environments.FirstOrDefault().Value.ToString(); + + return $"{c}, {e}"; + } + } +} diff --git a/Runtime/Managers/Experimental/SlaveNeodroidManager.cs.meta b/Runtime/Managers/Experimental/SlaveNeodroidManager.cs.meta new file mode 100644 index 000000000..cfd7eb883 --- /dev/null +++ b/Runtime/Managers/Experimental/SlaveNeodroidManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5c2aba0b164a4d5dbba07e51914f8c13 +timeCreated: 1566552464 \ No newline at end of file diff --git a/Runtime/Managers/Experimental/ThinManager.cs b/Runtime/Managers/Experimental/ThinManager.cs index c350eb9eb..4aff4e384 100644 --- a/Runtime/Managers/Experimental/ThinManager.cs +++ b/Runtime/Managers/Experimental/ThinManager.cs @@ -1,6 +1,9 @@ -using UnityEngine; +using System; +using UnityEngine; -namespace Neodroid.Runtime.Managers.Experimental { +namespace droid.Runtime.Managers.Experimental { [AddComponentMenu("Neodroid/Managers/NotUsed/Thin")] - public class ThinManager : NeodroidManager { } -} \ No newline at end of file + public class ThinManager : AbstractNeodroidManager { + public override void Setup() { throw new NotImplementedException(); } + } +} diff --git a/Runtime/Managers/NeodroidManager.cs b/Runtime/Managers/NeodroidManager.cs index d0f66bcb0..397bafe65 100644 --- a/Runtime/Managers/NeodroidManager.cs +++ b/Runtime/Managers/NeodroidManager.cs @@ -1,1072 +1,122 @@ using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted; -using Neodroid.Runtime.Utilities.ScriptableObjects; +using droid.Runtime.Enums; using UnityEngine; -using Object = System.Object; -#if UNITY_EDITOR -using UnityEditor; -#endif - -namespace Neodroid.Runtime.Managers { - /// +namespace droid.Runtime.Managers { + /// /// /// - [AddComponentMenu("Neodroid/Managers/VanillaManager")] - public abstract class NeodroidManager : MonoBehaviour, - IManager { - #region PrivateFields - - /// - /// - /// - [Header("Development", order = 110), SerializeField] - bool _debugging; - - /// - /// - /// - Object _send_lock = new Object(); - - /// - /// - /// - [SerializeField] - bool _testing_motors; + [AddComponentMenu("Neodroid/Managers/NeodroidManager")] + public class NeodroidManager : AbstractNeodroidManager { + #region Fields #if UNITY_EDITOR - /// - /// - /// - const int _script_execution_order = -1000; #endif - /// - /// - /// - [Header("Simulation", order = 80), SerializeField] - SimulatorConfiguration _configuration; - - /// - /// - /// - [SerializeField] - int _skip_frame_i; - - /// - /// - /// - [SerializeField] - bool _syncing_environments; - - /// - /// - /// - [SerializeField] - bool _awaiting_reply; - - [SerializeField] bool _step; - - WaitForEndOfFrame _wait_for_end_of_frame = new WaitForEndOfFrame(); - WaitForFixedUpdate _wait_for_fixed_update = new WaitForFixedUpdate(); - List _sample_reactions = new List(); - - #endregion - - /// - /// - /// - public static NeodroidManager Instance { get; private set; } - - /// - /// - /// - public ISimulatorConfiguration Configuration { - get { - if (this._configuration == null) { - this._configuration = ScriptableObject.CreateInstance(); - } - - return this._configuration; - } - set { this._configuration = (SimulatorConfiguration)value; } - } - - /// - /// Can be subscribed to for pre fixed update events (Will be called before any FixedUpdate on any script) - /// - public event Action EarlyFixedUpdateEvent; - - /// - /// - /// - public event Action FixedUpdateEvent; - - /// - /// - /// - public event Action LateFixedUpdateEvent; - - /// - /// Can be subscribed to for pre update events (Will be called before any Update on any script) - /// - public event Action EarlyUpdateEvent; - - /// - /// - /// - public event Action UpdateEvent; - - /// - /// - /// - public event Action LateUpdateEvent; - - /// - /// - /// - public event Action OnPostRenderEvent; - - /// - /// - /// - public event Action OnRenderImageEvent; - - /// - /// - /// - public event Action OnEndOfFrameEvent; - - /// - /// - /// - public event Action OnReceiveEvent; - - /// - /// - /// - void FetchCommandLineArguments() { - var arguments = Environment.GetCommandLineArgs(); - - for (var i = 0; i < arguments.Length; i++) { - if (arguments[i] == "-ip") { - this.Configuration.IpAddress = arguments[i + 1]; - } - - if (arguments[i] == "-port") { - this.Configuration.Port = int.Parse(arguments[i + 1]); - } - } - } - - /// - /// - /// - void CreateMessagingServer() { - try { - if (this.Configuration.IpAddress != "" || this.Configuration.Port != 0) { - this._Message_Server = new MessageServer( - this.Configuration.IpAddress, - this.Configuration.Port, - false, - this.Debugging); - } else { - this._Message_Server = new MessageServer(this.Debugging); - } - } catch (Exception exception) { - Debug.Log(exception); - throw; - - //TODO: close application is port is already in use. - } - } - - /// - /// - /// - /// - void StartMessagingServer(bool threaded = false) { - /*if (threaded) { - this._Message_Server.ListenForClientToConnect(this.OnConnectCallback, this.OnDebugCallback); - #if NEODROID_DEBUG - - if (this.Debugging) { - Debug.Log("Started Messaging Server in a new thread"); - } - #endif - } else {*/ - - this._Message_Server.ListenForClientToConnect(this.OnDebugCallback); - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Started Messaging Server"); - } - #endif - - if (threaded) { - this.OnListeningCallback(); - } - - //} - } - - #region Getter And Setters - - /// - /// - /// - public Reaction[] CurrentReactions { - get { - lock (this._send_lock) { - return this._Current_Reactions; - } - } - set { - lock (this._send_lock) { - this._Current_Reactions = value; - } - } - } - - /// - /// - /// - public float SimulationTimeScale { - get { return Time.timeScale; } - set { - Time.timeScale = value; - this._last_simulation_time = value; - if (this.Configuration.UpdateFixedTimeScale) { - Time.fixedDeltaTime = 0.02F * Time.timeScale; - } - } - } - - [SerializeField] float _last_simulation_time=0; - - /// - /// - /// - public bool HasStepped { - get { return this._has_stepped; } - set { this._has_stepped = value; } - } - - /// - /// - /// - public bool TestMotors { - get { return this._testing_motors; } - set { this._testing_motors = value; } - } - - /// - /// - /// - public bool Debugging { - get { return this._debugging; } - set { - this._Message_Server.Debugging = value; - this._debugging = value; - } - } - - /// - /// - /// - public bool AwaitingReply { - get { - lock (this._send_lock) { - return this._awaiting_reply; - } - } - set { - lock (this._send_lock) { - this._awaiting_reply = value; - } - } - } - - public ISimulatorConfiguration SimulatorConfiguration { - get { return this._configuration; } - } - - /// - /// - /// - public bool IsSyncingEnvironments { - get { return this._syncing_environments; } - set { this._syncing_environments = value; } - } - - /// - /// - /// - public bool Stepping { - get { return this._step; } - } - - #endregion - - #region PrivateMembers - - /// - /// - /// - protected Dictionary _Environments = new Dictionary(); - - /// - /// - /// - public void Clear() { this._Environments.Clear(); } - - /// - /// - /// - protected MessageServer _Message_Server; - - /// - /// - /// - protected Reaction[] _Current_Reactions = { }; - - [SerializeField] bool _has_stepped; - #endregion #region UnityCallbacks /// - /// - /// - protected void Awake() { - if (Instance == null) { - Instance = this; - } else if (Instance == this) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Using " + Instance); - } - #endif - } else { - Debug.LogWarning( - "WARNING! There are multiple SimulationManagers in the scene! Only using " + Instance); - } - - #if UNITY_EDITOR - if (!Application.isPlaying) { - var manager_script = MonoScript.FromMonoBehaviour(this); - if (MonoImporter.GetExecutionOrder(manager_script) != _script_execution_order) { - MonoImporter.SetExecutionOrder( - manager_script, - _script_execution_order); // Ensures that PreStep is called first, before all other scripts. - Debug.LogWarning( - "Execution Order changed, you will need to press play again to make everything function correctly!"); - EditorApplication.isPlaying = false; - //TODO: UnityEngine.Experimental.LowLevel.PlayerLoop.SetPlayerLoop(new UnityEngine.Experimental.LowLevel.PlayerLoopSystem()); - } - } - #endif - } - - /// - /// - /// - protected void Start() { - this.FetchCommandLineArguments(); - - if (this.Configuration == null) { - this.Configuration = ScriptableObject.CreateInstance(); - } - - this.ApplyConfigurationToUnity(this.Configuration); - - if (this.Configuration.SimulationType == SimulationType.Physics_dependent_) { - this.EarlyFixedUpdateEvent += this.OnPreTick; - this.FixedUpdateEvent += this.OnTick; - this.FixedUpdateEvent += this.Tick; - this.LateFixedUpdateEvent += this.OnPostTick; - this.StartCoroutine(this.LateFixedUpdateEventGenerator()); - } else { - this.EarlyUpdateEvent += this.OnPreTick; - this.UpdateEvent += this.OnTick; - this.UpdateEvent += this.Tick; - switch (this.Configuration.FrameFinishes) { - case FrameFinishes.Late_update_: - this.LateUpdateEvent += this.OnPostTick; - break; - case FrameFinishes.On_post_render_: - this.OnPostRenderEvent += this.OnPostTick; - break; - case FrameFinishes.On_render_image_: - this.OnRenderImageEvent += this.OnPostTick; - break; - case FrameFinishes.End_of_frame_: - this.StartCoroutine(this.EndOfFrameEventGenerator()); - this.OnEndOfFrameEvent += this.OnPostTick; - break; - default: throw new ArgumentOutOfRangeException(); - } - } - - this.CreateMessagingServer(); - if (this.Configuration.SimulationType == SimulationType.Physics_dependent_) { - this.StartMessagingServer(); // Remember to manually bind receive to an event in a derivation - } else { - this.StartMessagingServer(threaded : true); - } - } - - /// - /// - /// - public void ApplyConfigurationToUnity(ISimulatorConfiguration configuration) { - QualitySettings.SetQualityLevel(configuration.QualityLevel, true); - this.SimulationTimeScale = configuration.TimeScale; - Application.targetFrameRate = configuration.TargetFrameRate; - QualitySettings.vSyncCount = 0; - - #if !UNITY_EDITOR - if( configuration.ApplyResolutionSettings){ - Screen.SetResolution( - width : configuration.Width, - height : configuration.Height, - fullscreen : configuration.FullScreen); - } - #endif - } - - /// - /// - /// - void OnPostRender() { this.OnPostRenderEvent?.Invoke(); } - - /// - /// - /// - /// - /// - void OnRenderImage(RenderTexture src, RenderTexture dest) { - this.OnRenderImageEvent?.Invoke(); //TODO: May not work - } - - /// - /// - /// - protected void FixedUpdate() { - this.EarlyFixedUpdateEvent?.Invoke(); - this.FixedUpdateEvent?.Invoke(); - } - - /// - /// - /// - /// - IEnumerator LateFixedUpdateEventGenerator() { - while (true) { - yield return this._wait_for_fixed_update; - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("LateFixedUpdate"); - } - #endif - this.LateFixedUpdateEvent?.Invoke(); - } - - // ReSharper disable once IteratorNeverReturns - } - - /// - /// - /// - /// - protected IEnumerator EndOfFrameEventGenerator() { - while (true) { - yield return this._wait_for_end_of_frame; - //yield return new WaitForEndOfFrame(); - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("EndOfFrameEvent"); - } - #endif - this.OnEndOfFrameEvent?.Invoke(); - } - #pragma warning disable 162 - // ReSharper disable once HeuristicUnreachableCode - yield return null; - #pragma warning restore 162 - // ReSharper disable once IteratorNeverReturns - } - - /// - /// - /// - protected void Update() { - this.EarlyUpdateEvent?.Invoke(); - this.UpdateEvent?.Invoke(); - } - - /// - /// - /// - protected void LateUpdate() { this.LateUpdateEvent?.Invoke(); } - - #endregion - - #region PrivateMethods - - /// - /// - /// - protected void OnPreTick() { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"OnPreTick"); - } - #endif - - if (this.Configuration.StepExecutionPhase == ExecutionPhase.Before_) { - this.ExecuteStep(); - } - } - - /// - /// - /// - protected void OnTick() { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"OnTick"); - } - #endif - if (this.Configuration.StepExecutionPhase == ExecutionPhase.Middle_) { - this.ExecuteStep(); - } - } - - /// - /// - /// - protected void OnPostTick() { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"OnPostTick"); - } - #endif - - foreach (var environment in this._Environments.Values) { - environment.PostStep(); - } - - if (this.Configuration.StepExecutionPhase == ExecutionPhase.After_) { - this.ExecuteStep(); - } - - if (this._has_stepped) { - this.ClearCurrentReactions(); - } - } - - /// - /// - /// - void ExecuteStep() { - if (!this._syncing_environments) { - this.React(this.CurrentReactions); - } - - if (this.AwaitingReply) { - var states = this.CollectStates(); - this.PostReact(states); - } - - this.HasStepped = true; - } - - /// - /// /// - protected void Tick() { - if (this.TestMotors) { - this.React(this.SampleRandomReactions()); - this.CollectStates(); - } - - foreach (var environment in this._Environments.Values) { - environment.Tick(); - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Tick"); - } - #endif - } - - /// - /// - /// - /// - protected void PostReact(EnvironmentState[] states) { - lock (this._send_lock) { - foreach (var env in this._Environments.Values) { - if (env.IsResetting) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Environment {env} is resetting"); - } - #endif - - this._syncing_environments = true; - return; - } - } - - this._syncing_environments = false; - if (this._skip_frame_i >= this.Configuration.FrameSkips) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Not skipping frame, replying..."); - } - #endif - - this.Reply(states); - this.AwaitingReply = false; - this._skip_frame_i = 0; + public override void Setup() { + if (this.Configuration.SimulationType == SimulationType.Frame_dependent_) { + this.EarlyUpdateEvent += this.Pause; + this.UpdateEvent += this.Resume; + } else if (this.Configuration.SimulationType == SimulationType.Physics_dependent_) { + #if UNITY_EDITOR + if (this.AllowInEditorBlockage) { + this.EarlyFixedUpdateEvent += + this.Receive; // Receive blocks the main thread and therefore also the unity editor. } else { - this._skip_frame_i += 1; - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Skipping frame, {this._skip_frame_i}/{this.Configuration.FrameSkips}"); - } - #endif - if (this.Configuration.ReplayReactionInSkips) { } + Debug.LogWarning("Physics dependent blocking in editor is not enabled and is therefore not receiving or sending anything."); } - } - } - - /// - /// - /// - /// - protected Reaction[] SampleRandomReactions() { - this._sample_reactions.Clear(); - foreach (var environment in this._Environments.Values) { - this._sample_reactions.Add(environment.SampleReaction()); - } - - return this._sample_reactions.ToArray(); - } - - //TODO: EnvironmentState[][] states for aggregation of states - /// - /// - /// - /// - void Reply(EnvironmentState[] states) { - lock (this._send_lock) { - var configuration_message = new SimulatorConfigurationMessage(this.Configuration); - this._Message_Server.SendStates( - states, - simulator_configuration_message : configuration_message, - do_serialise_unobservables : this.Configuration.AlwaysSerialiseUnobservables, - serialise_indidual_observables : this.Configuration.AlwaysSerialiseIndividualObservables); - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Replying"); - } - + #else + this.EarlyFixedUpdateEvent += this.Receive; #endif } } - /// - /// - /// - void ClearCurrentReactions() { - this._step = false; - this.CurrentReactions = new Reaction[] { }; - } - #endregion - #region PublicMethods - - /// - /// - /// - /// - /// - public EnvironmentState[] ReactAndCollectStates(Reaction reaction) { - this.SetStepping(reaction); - var states = new EnvironmentState[this._Environments.Values.Count]; - var i = 0; - foreach (var environment in this._Environments.Values) { - if (reaction.RecipientEnvironment != "all") { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Applying reaction to {reaction.RecipientEnvironment} environment"); - } - #endif - if (this._Environments.ContainsKey(reaction.RecipientEnvironment)) { - states[i++] = this._Environments[reaction.RecipientEnvironment].ReactAndCollectState(reaction); - } - #if NEODROID_DEBUG - else { - if (this.Debugging) { - Debug.Log($"Could not find environment: {reaction.RecipientEnvironment}"); - } - } - #endif - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying reaction to all environments"); - } - #endif - states[i++] = environment.ReactAndCollectState(reaction); - } - } - - return states; - } + #region PrivateMethods /// - /// /// - /// - /// - public void React(Reaction reaction) { - this.SetStepping(reaction); - if (this._Environments.ContainsKey(reaction.RecipientEnvironment)) { - this._Environments[reaction.RecipientEnvironment].React(reaction); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Could not find an environment with the identifier: {reaction.RecipientEnvironment}"); - } - #endif - + void Resume() { + if (this.ShouldResume) { #if NEODROID_DEBUG if (this.Debugging) { - Debug.Log($"Applying to all environments"); + Debug.Log("Resuming simulation because of stepping"); } #endif - foreach (var environment in this._Environments.Values) { - environment.React(reaction); - } - } - } - - /// - /// - /// - /// - /// - public void React(Reaction[] reactions) { - this.SetStepping(reactions); - foreach (var reaction in reactions) { - if (this._Environments.ContainsKey(reaction.RecipientEnvironment)) { - this._Environments[reaction.RecipientEnvironment].React(reaction); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Could not find an environment with the identifier: {reaction.RecipientEnvironment}"); - } - #endif - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Applying to all environments"); - } - #endif - - foreach (var environment in this._Environments.Values) { - environment.React(reaction); - } - } - } - } - - /// - /// - /// - /// - public EnvironmentState[] CollectStates() { - var environments = this._Environments.Values; - var states = new EnvironmentState[environments.Count]; - var i = 0; - foreach (var environment in environments) { - states[i++] = environment.CollectState(); - } - - return states; - } - - void SetStepping(Reaction reaction) { - if (reaction.Parameters.Step) { - this.SetStepping(true); - } - } - - void SetStepping(bool step) { - if (step) { + this.ResumeSimulation(this.Configuration.TimeScale); + } else if (this.TestActuators) { #if NEODROID_DEBUG if (this.Debugging) { - Debug.Log("Stepping from Reaction"); + Debug.Log("Resuming simulation because of TestActuators"); } #endif - this._step = true; + this.ResumeSimulation(this.Configuration.TimeScale); } else { #if NEODROID_DEBUG if (this.Debugging) { - Debug.Log("Not stepping from Reaction"); + Debug.Log("Not resuming simulation"); } #endif - if (this.HasStepped) { - this._step = false; - } } } - void SetStepping(Reaction[] reactions) { - if (reactions.Any(reac => reac.Parameters.Step)) { - this.SetStepping(true); - } - } - - public void SetTesting(bool arg0) { this.TestMotors = arg0; } - -/* - /// - /// - /// - /// - /// - public EnvironmentState[] ReactAndCollectStates(Reaction[] reactions) { - this.SetStepping(reactions); - var states = new EnvironmentState[reactions.Length * this._Environments.Count]; - var i = 0; - foreach (var reaction in reactions) { - if (this._Environments.ContainsKey(reaction.RecipientEnvironment)) { - states[i++] = this._Environments[reaction.RecipientEnvironment].ReactAndCollectState(reaction); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Could not find an environment with the identifier: {reaction.RecipientEnvironment}"); - } - #endif - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Applying to all environments"); - } - #endif - - foreach (var environment in this._Environments.Values) { - states[i++] = environment.ReactAndCollectState(reaction); - } - } - } - - return states; - } -*/ - - /// - /// - /// - public void ResetAllEnvironments() { - this.React( - new Reaction( - new ReactionParameters(true, false, true, episode_count : true), - null, - null, - null, - null, - "")); - } - - /// - /// - /// - /// - public string GetStatus() { - return this._Message_Server._Listening_For_Clients ? "Connected" : "Not Connected"; - } - - #endregion - - #region Registration - - /// /// /// - /// - public void Register(IEnvironment environment) { this.Register(environment, environment.Identifier); } + public bool IsSimulationPaused { get { return !(this.SimulationTimeScale > 0); } } - /// /// /// - /// - /// - public void Register(IEnvironment environment, string identifier) { - if (!this._Environments.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Manager {this.name} already has an environment with the identifier: {identifier}"); - } - #endif - - this._Environments.Add(identifier, environment); - } else { - Debug.LogWarning( - $"WARNING! Please check for duplicates, SimulationManager {this.name} already has envi" - + $"ronment {identifier} registered"); - } - } - - /// - /// - /// - /// - /// - public void UnRegister(IEnvironment environment, string identifier) { - if (this._Environments.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"SimulationManager {this.name} unregistered Environment {identifier}"); - } - #endif - - this._Environments.Remove(identifier); - } - } - - /// - /// - /// - /// - public void UnRegister(IEnvironment neodroid_environment) { - this.UnRegister(neodroid_environment, neodroid_environment.Identifier); - } - - #endregion - - #region MessageServerCallbacks - - /// - /// - /// - /// - void OnReceiveCallback(Reaction[] reactions) { - lock (this._send_lock) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"Received: {reactions.Select(r => r.ToString()).Aggregate((current, next) => $"{current}, {next}")}"); - } - #endif - - this.SetReactionsFromExternalSource(reactions); - - this.OnReceiveEvent?.Invoke(); - } - } - - /// - /// - /// - /// - protected void SetReactionsFromExternalSource(Reaction[] reactions) { - lock (this._send_lock) { - if (reactions != null) { - if (this.AwaitingReply || !this.HasStepped) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"Got new reaction while not having stepped({!this.HasStepped}) or replied({this.AwaitingReply})"); - } - #endif - } - - this.CurrentReactions = reactions; - foreach (var current_reaction in this.CurrentReactions) { - current_reaction.Parameters.IsExternal = true; - } - - this.Configuration.StepExecutionPhase = this.CurrentReactions[0].Parameters.Phase; - this.AwaitingReply = true; - this.HasStepped = false; - } else { - Debug.LogWarning("Reaction was null"); - } - } - } + [field : Header("Warning! Will block editor requiring a restart, if not terminated while receiving.", + order = 120)] + [field : SerializeField] + public Boolean AllowInEditorBlockage { get; set; } = false; /// - /// /// - void OnDisconnectCallback() { + void Pause() { #if NEODROID_DEBUG if (this.Debugging) { - Debug.Log("Client disconnected."); + Debug.Log("Pausing simulation"); } #endif + this.SimulationTimeScale = 0; } /// - /// /// - /// - void OnDebugCallback(string error) { + /// + void ResumeSimulation(float simulation_time_scale) { #if NEODROID_DEBUG if (this.Debugging) { - //Debug.Log("DebugCallback: " + error); + Debug.Log("Resuming simulation"); } #endif + this.SimulationTimeScale = simulation_time_scale > 0 ? simulation_time_scale : 1; } - /// - /// - /// - void OnListeningCallback() { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Client connected"); + void SetAnimationSpeeds(float speed) { + var animators = FindObjectsOfType(); + foreach (var animator in animators) { + animator.speed = speed; } - #endif - - this._Message_Server.StartReceiving( - this.OnReceiveCallback, - this.OnDisconnectCallback, - this.OnDebugCallback); } - #endregion - - #region Deconstruction - - /// - /// - /// - void OnApplicationQuit() { this._Message_Server.CleanUp(); } - /// - /// /// - void OnDestroy() { this._Message_Server.Destroy(); } + void Receive() { + var reaction = this._Message_Server.Receive(TimeSpan.Zero); + this.SetReactions(reaction); + } #endregion - - public void StatusString(DataPoller recipient) { recipient.PollData(this.GetStatus()); } } -} \ No newline at end of file +} diff --git a/Runtime/Managers/NeodroidManager.cs.meta b/Runtime/Managers/NeodroidManager.cs.meta index 9339ff7fa..e0a1e05ad 100644 --- a/Runtime/Managers/NeodroidManager.cs.meta +++ b/Runtime/Managers/NeodroidManager.cs.meta @@ -1,10 +1,10 @@ fileFormatVersion: 2 -guid: 91fa62b1cbf5c483585e212edf2dc8b5 +guid: 74a1dc8369fb4a558f780b51d8d95442 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] - executionOrder: 0 + executionOrder: -9999 icon: {fileID: 2800000, guid: ab457b1b17f134d65a7ac3f30408d1e8, type: 3} userData: assetBundleName: diff --git a/Runtime/Managers/PausableManager.cs b/Runtime/Managers/PausableManager.cs deleted file mode 100644 index b53949e46..000000000 --- a/Runtime/Managers/PausableManager.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEngine; - -namespace Neodroid.Runtime.Managers { - /// - /// - /// - [AddComponentMenu("Neodroid/Managers/PausableManager")] - public class PausableManager : NeodroidManager { - #region Fields - - //[SerializeField] bool _blocked; - #if UNITY_EDITOR - /// - /// - /// - [Header( - "Warning! Will block editor requiring a restart, if not terminated while receiving.", - order = 120), SerializeField] - bool _allow_in_editor_blockage; - #endif - - #endregion - - #region UnityCallbacks - - /// - /// - /// - protected new void Awake() { - base.Awake(); - if (this.Configuration.SimulationType == SimulationType.Frame_dependent_) { - this.EarlyUpdateEvent += this.PauseSimulation; - this.UpdateEvent += this.MaybeResume; - } else if (this.Configuration.SimulationType == SimulationType.Physics_dependent_) { - #if UNITY_EDITOR - if (this._allow_in_editor_blockage) { - this.EarlyFixedUpdateEvent += - this.Receive; // Receive blocks the main thread and therefore also the unity editor. - } else { - Debug.LogWarning( - "Physics dependent blocking in editor is not enabled and is therefore not receiving or sending anything."); - } - #else - this.EarlyFixedUpdateEvent += this.Receive; - #endif - } - } - - #endregion - - #region PrivateMethods - - /// - /// - /// - void MaybeResume() { - if (this.Stepping) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Resuming simulation because of stepping"); - } - #endif - - this.ResumeSimulation(this.Configuration.TimeScale); - } else if (this.TestMotors) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Resuming simulation because of TestMotors"); - } - #endif - - this.ResumeSimulation(this.Configuration.TimeScale); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Not resuming simulation because of stepping"); - } - #endif - } - } - - /// - /// - /// - public bool IsSimulationPaused { get { return !(this.SimulationTimeScale > 0); } } - - /// - /// - /// - void PauseSimulation() { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Pausing simulation"); - } - #endif - this.SimulationTimeScale = 0; - } - - /// - /// - /// - /// - void ResumeSimulation(float simulation_time_scale) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Resuming simulation"); - } - #endif - this.SimulationTimeScale = simulation_time_scale > 0 ? simulation_time_scale : 1; - } - - void SetAnimationSpeeds(float speed) { - var animators = FindObjectsOfType(); - foreach (var animator in animators) { - animator.speed = speed; - } - } - - /// - /// - /// - void Receive() { - var reaction = this._Message_Server.Receive(TimeSpan.Zero); - this.SetReactionsFromExternalSource(reaction); - } - - #endregion - } -} diff --git a/Runtime/Managers/PausableManager.cs.meta b/Runtime/Managers/PausableManager.cs.meta deleted file mode 100644 index e0a1e05ad..000000000 --- a/Runtime/Managers/PausableManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 74a1dc8369fb4a558f780b51d8d95442 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: -9999 - icon: {fileID: 2800000, guid: ab457b1b17f134d65a7ac3f30408d1e8, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Messaging/Experimental.meta b/Runtime/Messaging/Experimental.meta new file mode 100644 index 000000000..fa760338b --- /dev/null +++ b/Runtime/Messaging/Experimental.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 31f0c1530d2147b3b1fa758759e49281 +timeCreated: 1560506227 \ No newline at end of file diff --git a/Runtime/Messaging/Experimental/MessageClient.cs b/Runtime/Messaging/Experimental/MessageClient.cs new file mode 100644 index 000000000..8b77ef0ea --- /dev/null +++ b/Runtime/Messaging/Experimental/MessageClient.cs @@ -0,0 +1,506 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using AsyncIO; +using droid.Runtime.Messaging.FBS; +using droid.Runtime.Messaging.Messages; +using FlatBuffers; +using NetMQ; +using NetMQ.Sockets; +using Newtonsoft.Json; +using UnityEngine; +using UnityEngine.UI; + +namespace droid.Runtime.Messaging.Experimental { + /// + /// + [Serializable] + public class MessageClient { + #region PublicMembers + + /// + /// + public bool _Listening_For_Clients; + + #endregion + + #region PrivateMembers + + /// + /// + Thread _polling_thread; + #if NEODROID_DEBUG + int _last_send_frame_number; + + float _last_send_time; + #endif + + /// + /// + Thread _wait_for_client_thread; + + /// + /// + object _stop_lock = new object(); + + object _thread_lock = new object(); + + /// + /// + bool _stop_thread; + + /// + /// + bool _waiting_for_main_loop_to_send; + + /// + /// + bool _use_inter_process_communication; + + /// + /// + bool _debugging; + + /// + /// + ResponseSocket _socket; + + //PairSocket _socket; + /// + /// + string _ip_address; + + /// + /// + int _port; + + /// + /// + byte[] _byte_buffer; + + /// + /// + Double _wait_time_seconds; + + #endregion + + #region PrivateMethods + + #region Threads + + /// + /// + /// + /// + void BindSocket(Action callback, Action debug_callback) { + if (this._debugging) { + debug_callback?.Invoke("Start listening for clients"); + } + + try { + if (this._use_inter_process_communication) { + this._socket.Bind("ipc:///tmp/neodroid/messages"); + } else { + this._socket.Bind("tcp://" + this._ip_address + ":" + this._port); + } + + callback?.Invoke(); + if (this._debugging) { + debug_callback?.Invoke("Now listening for clients"); + } + + this._Listening_For_Clients = true; + } catch (Exception exception) { + if (this._debugging) { + debug_callback?.Invoke($"BindSocket threw exception: {exception}"); + } + } + } + + /// + /// + /// + /// + public Reaction[] Receive(TimeSpan wait_time) { + //this._socket.Poll(); // TODO: MAYBE WAIT FOR CLIENT TO SEND + + Reaction[] reactions = null; + lock (this._thread_lock) { + try { + byte[] msg; + + if (wait_time > TimeSpan.Zero) { + #if NEODROID_DEBUG + var received = this._socket.TryReceiveFrameBytes(wait_time, out msg); + if (this.Debugging) { + if (received) { + Debug.Log("Received frame bytes"); + } else { + Debug.Log($"Received nothing in {wait_time} seconds"); + } + } + #else + this._socket.TryReceiveFrameBytes(wait_time, out msg); + #endif + } else { + try { + msg = this._socket.ReceiveFrameBytes(); + } catch (ArgumentNullException e) { + msg = null; + Debug.Log(e); + } + } + + if (msg != null) { //&& msg.Length >= 4) { + var flat_reaction = FReactions.GetRootAsFReactions(new ByteBuffer(msg)); + var tuple = FbsReactionUtilities.deserialise_reactions(flat_reaction); + reactions = tuple.Item1; //TODO: Change tuple to the Reactions class + var close = tuple.Item2; + var api_version = tuple.Item3; + var simulator_configuration = tuple.Item4; + } + } catch (Exception exception) { + if (exception is TerminatingException) { + return reactions; + } + + Debug.Log(exception); + } + } + + return reactions; + } + + /// + /// + /// + /// + /// + void PollingThread(Action receive_callback, + Action disconnect_callback, + Action debug_callback) { + while (this._stop_thread == false) { + lock (this._thread_lock) { + if (!this._waiting_for_main_loop_to_send) { + var reactions = this.Receive(TimeSpan.FromSeconds(this._wait_time_seconds)); + if (reactions != null) { + receive_callback(reactions); + this._waiting_for_main_loop_to_send = true; + } + } else { + if (this._debugging) { + debug_callback("Waiting for main loop to send reply"); + } + } + } + } + + disconnect_callback(); + if (!this._socket.IsDisposed) { + if (this._use_inter_process_communication) { + this._socket.Disconnect("inproc://neodroid"); + } else { + this._socket.Disconnect("tcp://" + this._ip_address + ":" + this._port); + } + } + + try { + this._socket.Dispose(); + this._socket.Close(); + } finally { + NetMQConfig.Cleanup(false); + } + } + + #endregion + + #endregion + + #region PublicMethods + + /// + /// + /// + /// + /// + /// + /// + /// + public void SendStates(EnvironmentSnapshot[] environment_states, + bool do_serialise_unobservables = false, + bool serialise_individual_observables = false, + bool do_serialise_observables = false, + SimulatorConfigurationMessage simulator_configuration_message = null, + string api_version = NeodroidRuntimeInfo._Version) { + lock (this._thread_lock) { + #if NEODROID_DEBUG + if (this.Debugging) { + var environment_state = environment_states.ToArray(); + if (environment_state.Length > 0) { + if (environment_state[0] != null) { + var frame_number = environment_state[0].FrameNumber; + var time = environment_state[0].Time; + var frame_number_duplicate = this._last_send_frame_number == frame_number; + if (frame_number_duplicate && frame_number > 0) { + Debug.LogWarning($"Sending duplicate frame! Frame number: {frame_number}"); + } + + if (frame_number <= this._last_send_frame_number) { + Debug.LogWarning($"The current frame number {frame_number} is less or equal the last {this._last_send_frame_number}, SINCE AWAKE ({Time.frameCount})"); + } + + if (time <= this._last_send_time) { + Debug.LogWarning($"The current time {time} is less or equal the last {this._last_send_time}"); + } + + if (environment_state[0].Description != null) { + Debug.Log($"State has description: {environment_state[0].Description}"); + } + + this._last_send_frame_number = frame_number; + this._last_send_time = time; + } + } else { + Debug.LogWarning("No environment states where send."); + } + } + #endif + + this._byte_buffer = FbsStateUtilities.Serialise(environment_states, + do_serialise_unobservables : + do_serialise_unobservables, + simulator_configuration : + simulator_configuration_message, + do_serialise_observables : do_serialise_observables, + api_version : api_version); + this._socket.SendFrame(this._byte_buffer); + this._waiting_for_main_loop_to_send = false; + } + } + + /// + /// + /// + public void ListenForClientToConnect(Action debug_callback) { + this.BindSocket(null, debug_callback); + } + + /// + /// + /// + /// + public void ListenForClientToConnect(Action callback, Action debug_callback) { + this._wait_for_client_thread = + new Thread(unused_param => this.BindSocket(callback, debug_callback)) {IsBackground = true}; + // Is terminated with foreground threads, when they terminate + this._wait_for_client_thread.Start(); + } + + /// + /// + /// + /// + /// + public void StartReceiving(Action cmd_callback, + Action disconnect_callback, + Action debug_callback) { + this._polling_thread = + new Thread(unused_param => this.PollingThread(cmd_callback, disconnect_callback, debug_callback)) { + IsBackground + = true + }; + // Is terminated with foreground threads, when they terminate + this._polling_thread.Start(); + } + + #region Contstruction + + public MessageClient(string ip_address = "127.0.0.1", + int port = 6969, + bool use_inter_process_communication = false, + bool debug = false, + Double wait_time_seconds = 2) { + this._wait_time_seconds = wait_time_seconds; + this.Debugging = debug; + this._ip_address = ip_address; + this._port = port; + this._use_inter_process_communication = use_inter_process_communication; + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Starting a message server at address:port {ip_address}:{port}"); + } + #endif + + if (!this._use_inter_process_communication) { + ForceDotNet.Force(); + } + + this._socket = new ResponseSocket(); + } + + public MessageClient(bool debug = false) : this("127.0.0.1", + 6969, + false, + debug) { } + + #endregion + + #region Getters + + /// + /// + public bool Debugging { get { return this._debugging; } set { this._debugging = value; } } + + #endregion + + #endregion + + #region Deconstruction + + /// + /// + public void Destroy() { this.CleanUp(); } + + /// + /// + public void CleanUp() { + try { + lock (this._stop_lock) { + this._stop_thread = true; + } + + if (this._use_inter_process_communication) { + this._socket.Disconnect("ipc:///tmp/neodroid/messages"); + } else { + this._socket.Disconnect("tcp://" + this._ip_address + ":" + this._port); + } + + try { + this._socket.Dispose(); + this._socket.Close(); + } finally { + NetMQConfig.Cleanup(false); + } + + this._wait_for_client_thread?.Join(); + this._polling_thread?.Join(); + } catch { + Console.WriteLine("Exception thrown while killing threads"); + } + } + + #endregion + } + + /// + /// + /// + public class DepthPrediction : MonoBehaviour { + RequestSocket _client = new RequestSocket(); + + List _feature_points; + + bool _server_working = false; + + /// + /// + /// + public bool recording; + + [SerializeField] Text textBox; + [SerializeField] Texture2D _tex; + + void Start() { + this._client.Connect("tcp://10.24.11.87:8989"); + Debug.Log("connected"); + } + + void FixedUpdate() { + if (!this._server_working && this.recording) { + this.GrabFrame(); + } + } + + void GrabFrame() { + try { + var bytes = this._tex.EncodeToJPG(); + + this.StartCoroutine(this.SendZmqRequest(bytes)); + } catch (Exception e) { + var text = $"{this.textBox.text}{e}\n{e.Message}\n"; + this.textBox.text = text; + } + } + + IEnumerator SendZmqRequest(byte[] bytes) { + var task = new Task(() => this._client.SendFrame(bytes)); + task.Start(); + + while (!task.IsCompleted && !task.IsCanceled) { + Debug.Log("sending a frame"); + yield return new WaitForEndOfFrame(); + } + + var response = ""; + var task2 = new Task(() => response = this._client.ReceiveFrameString()); + task2.Start(); + + while (!task2.IsCompleted) { + Debug.Log("waiting for response"); + yield return new WaitForEndOfFrame(); + } + + this.textBox.text += response + "\n"; + + try { + var l = JsonConvert.DeserializeObject>>(response); + + this.textBox.text += l.Count + " in list\n"; + + var num = 0; + + foreach (var dict in l) { + var prefix = "person_" + num; + + this.textBox.text += dict.Count + " in dict\n"; + + var point_dict = new Dictionary(); + + foreach (var kvp in dict) { + var text = this.textBox.text; + text += kvp.Key + " added\n"; + + //hardcoded 240x426px + var val = kvp.Value; + + text += "after val\n"; + + var scale_x = Screen.width / 240f; + var scale_y = Screen.height / 426f; + + text += "after scale\n"; + + var scaled_vec = new Vector3(val[0] * scale_x, val[1] * scale_y, val[2]); + + text += "after applying scale\n"; + this.textBox.text = text; + + point_dict.Add(kvp.Key, scaled_vec); + + this.textBox.text += "after dict add\n"; + } + } + } catch (Exception e) { + this.textBox.text += e.ToString(); + } + + yield return new WaitForEndOfFrame(); + + this._server_working = false; + } + } +} diff --git a/Runtime/Messaging/Experimental/MessageClient.cs.meta b/Runtime/Messaging/Experimental/MessageClient.cs.meta new file mode 100644 index 000000000..8c8488b06 --- /dev/null +++ b/Runtime/Messaging/Experimental/MessageClient.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 01963a5a8399accc89b68ddc4716b6a1 +timeCreated: 1513774796 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 520a54f95fd5d4b588f9ea7e4cb9463f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Messaging/Experimental/PB.meta b/Runtime/Messaging/Experimental/PB.meta new file mode 100644 index 000000000..b091fa79d --- /dev/null +++ b/Runtime/Messaging/Experimental/PB.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cafd49919eb74beb9068a1c5bf6227e9 +timeCreated: 1560506241 \ No newline at end of file diff --git a/Runtime/Messaging/Experimental/PB/PBStateUtilities.cs b/Runtime/Messaging/Experimental/PB/PBStateUtilities.cs new file mode 100644 index 000000000..5211b4587 --- /dev/null +++ b/Runtime/Messaging/Experimental/PB/PBStateUtilities.cs @@ -0,0 +1,6 @@ +namespace droid.Runtime.Messaging.Experimental.PB { + /// + /// + /// + public class PbStateUtilities { } +} diff --git a/Runtime/Messaging/Experimental/PB/PBStateUtilities.cs.meta b/Runtime/Messaging/Experimental/PB/PBStateUtilities.cs.meta new file mode 100644 index 000000000..691607daf --- /dev/null +++ b/Runtime/Messaging/Experimental/PB/PBStateUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db2ca9e575d75ccd5912ca854561854d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Messaging/FBS/CustomFlatBufferImplementation.cs b/Runtime/Messaging/FBS/CustomFlatBufferImplementation.cs deleted file mode 100644 index 860c07e2f..000000000 --- a/Runtime/Messaging/FBS/CustomFlatBufferImplementation.cs +++ /dev/null @@ -1,45 +0,0 @@ -using FlatBuffers; - -namespace Neodroid.Runtime.Messaging.FBS { - /// - /// - /// - public static class CustomFlatBufferImplementation { - //Custom implementation of copying bytearray, faster than generated code - /// - /// - /// - /// - /// - /// - public static VectorOffset CreateByteVector(FlatBufferBuilder builder, byte[] data) { - //builder.StartVector(1, data.Length, 1); - //var additional_bytes = data.Length - 2; - //builder.Prep(sizeof(byte), additional_bytes * sizeof(byte)); - - // for (var i = data.Length - 1; i >= 0; i--) - // builder.PutByte(data[i]); - //return builder.EndVector(); - - return builder.CreateByteVector(data); - } - - /// - /// - /// - /// - /// - /// - public static VectorOffset CreateFloatVector(FlatBufferBuilder builder, float[] data) { - //builder.StartVector(1, data.Length, 1); - //var additional_bytes = data.Length - 2; - //builder.Prep(sizeof(byte), additional_bytes * sizeof(byte)); - - // for (var i = data.Length - 1; i >= 0; i--) - // builder.PutByte(data[i]); - //return builder.EndVector(); - - return builder.CreateFloatVector(data); - } - } -} \ No newline at end of file diff --git a/Runtime/Messaging/FBS/Deprecated.meta b/Runtime/Messaging/FBS/Deprecated.meta new file mode 100644 index 000000000..c9f59984a --- /dev/null +++ b/Runtime/Messaging/FBS/Deprecated.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bbeb8e2af5dd461c989a31c8ce65a70a +timeCreated: 1560506258 \ No newline at end of file diff --git a/Runtime/Messaging/FBS/Deprecated/CustomFlatBufferImplementation.cs b/Runtime/Messaging/FBS/Deprecated/CustomFlatBufferImplementation.cs new file mode 100644 index 000000000..8d41153e2 --- /dev/null +++ b/Runtime/Messaging/FBS/Deprecated/CustomFlatBufferImplementation.cs @@ -0,0 +1,47 @@ +using FlatBuffers; + +namespace droid.Runtime.Messaging.FBS.Deprecated { + /// + /// + public static class CustomFlatBufferImplementation { + //Custom implementation of copying bytearray, faster than generated code + /// + /// + /// + /// + /// + public static VectorOffset CreateByteVector(FlatBufferBuilder builder, byte[] data) { + //builder.StartVector(1, data.Length, 1); + //var additional_bytes = data.Length - 2; + //builder.Prep(sizeof(byte), additional_bytes * sizeof(byte)); + + // for (var i = data.Length - 1; i >= 0; i--) + // builder.PutByte(data[i]); + //return builder.EndVector(); + + //TODO: return builder.CreateByteVector(data); + + return new VectorOffset(); + } + + /// + /// + /// + /// + /// + public static VectorOffset CreateFloatVector(FlatBufferBuilder builder, float[] data) { +/* + builder.StartVector(4, data.Length, 4); + for (var i = data.Length - 1; i >= 0; i--) + { + builder.AddFloat(data[i]); + } + + return builder.EndVector(); +*/ + + //TODO: return builder.CreateFloatVector(data); //TODO: Calculate proper lenght of vector! lenght*4 + return new VectorOffset(); + } + } +} diff --git a/Runtime/Messaging/FBS/CustomFlatBufferImplementation.cs.meta b/Runtime/Messaging/FBS/Deprecated/CustomFlatBufferImplementation.cs.meta similarity index 100% rename from Runtime/Messaging/FBS/CustomFlatBufferImplementation.cs.meta rename to Runtime/Messaging/FBS/Deprecated/CustomFlatBufferImplementation.cs.meta diff --git a/Runtime/Messaging/FBS/FBSReactionUtilities.cs.meta b/Runtime/Messaging/FBS/FBSReactionUtilities.cs.meta deleted file mode 100644 index 74588f974..000000000 --- a/Runtime/Messaging/FBS/FBSReactionUtilities.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ec7113f8b565648a18c57e84c05352ea -timeCreated: 1514370614 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 520a54f95fd5d4b588f9ea7e4cb9463f, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Messaging/FBS/FBSStateUtilities.cs b/Runtime/Messaging/FBS/FBSStateUtilities.cs deleted file mode 100644 index 25806990b..000000000 --- a/Runtime/Messaging/FBS/FBSStateUtilities.cs +++ /dev/null @@ -1,482 +0,0 @@ -using FlatBuffers; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Prototyping.Configurables; -using UnityEngine; - -namespace Neodroid.Runtime.Messaging.FBS { - /// - /// - /// - public static class FbsStateUtilities { - static VectorOffset _null_vector_offset = new VectorOffset(); - static Offset _null_unobservables_offset = new Offset(); - - #region PublicMethods - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public static byte[] serialise_states( - EnvironmentState[] states, - SimulatorConfigurationMessage simulator_configuration = null, - bool serialise_indidual_observables = false, - bool do_serialise_unobservables = false, - string api_version = "") { - var b = new FlatBufferBuilder(1); - var state_offsets = new Offset[states.Length]; - var i = 0; - foreach (var state in states) { - state_offsets[i++] = serialise_state( - b, - state, - serialise_indidual_observables, - do_serialise_unobservables); - } - - var states_vector_offset = FStates.CreateStatesVector(b, state_offsets); - - var api_version_offset = b.CreateString(api_version); - - FStates.StartFStates(b); - FStates.AddStates(b, states_vector_offset); - FStates.AddApiVersion(b, api_version_offset); - FStates.AddSimulatorConfiguration(b, serialise_simulator_configuration(b, simulator_configuration)); - var states_offset = FStates.EndFStates(b); - - FStates.FinishFStatesBuffer(b, states_offset); - - return b.SizedByteArray(); - } - - /// - /// - /// - /// - /// - /// - public static Offset - serialise_simulator_configuration(FlatBufferBuilder b, SimulatorConfigurationMessage configuration) { - return FSimulatorConfiguration.CreateFSimulatorConfiguration( - b, - configuration.Width, - configuration.Height, - configuration.FullScreen, - configuration.QualityLevel, - configuration.TimeScale, - configuration.TargetFrameRate, - configuration.SimulationType, - configuration.FrameSkips, - configuration.ResetIterations, - configuration.NumOfEnvironments, - configuration.DoSerialiseIndividualObservables, - configuration.DoSerialiseUnobservables); - } - - /// - /// - /// - /// - /// - /// - /// - /// - public static Offset serialise_state( - FlatBufferBuilder b, - EnvironmentState state, - bool serialise_indidual_observables = false, - bool do_serialise_unobservables = false) { - var n = b.CreateString(state.EnvironmentName); - - var observables_vector = FState.CreateObservablesVector(b, state.Observables); - - var observers_vector = _null_vector_offset; - if (serialise_indidual_observables) { - var observations = state.Observers; - - var observers = new Offset[observations.Length]; - var k = 0; - foreach (var observer in observations) { - observers[k++] = serialise_observer(b, observer); - } - - observers_vector = FState.CreateObservationsVector(b, observers); - } - - var unobservables = _null_unobservables_offset; - if (do_serialise_unobservables) { - var state_eunobservables = state.Unobservables; - var bodies = state_eunobservables.Bodies; - - FUnobservables.StartBodiesVector(b, bodies.Length); - foreach (var rig in bodies) { - var vel = rig.Velocity; - var ang = rig.AngularVelocity; - FBody.CreateFBody(b, vel.x, vel.y, vel.z, ang.x, ang.y, ang.z); - } - - var bodies_vector = b.EndVector(); - - var poses = state_eunobservables.Poses; - - FUnobservables.StartPosesVector(b, poses.Length); - foreach (var tra in poses) { - var pos = tra.position; - var rot = tra.rotation; - FQuaternionTransform.CreateFQuaternionTransform(b, pos.x, pos.y, pos.z, rot.x, rot.y, rot.z, rot.w); - } - - var poses_vector = b.EndVector(); - - FUnobservables.StartFUnobservables(b); - FUnobservables.AddPoses(b, poses_vector); - FUnobservables.AddBodies(b, bodies_vector); - unobservables = FUnobservables.EndFUnobservables(b); - } - - var description_offset = new Offset(); - if (state.Description != null) { - description_offset = serialise_description(b, state); - } - - var d = new StringOffset(); - if (state.DebugMessage != "") { - d = b.CreateString(state.DebugMessage); - } - - var t = b.CreateString(state.TerminationReason); - - FState.StartFState(b); - FState.AddEnvironmentName(b, n); - - FState.AddFrameNumber(b, state.FrameNumber); - FState.AddObservables(b, observables_vector); - - if (do_serialise_unobservables) { - FState.AddUnobservables(b, unobservables); - } - - FState.AddTotalEnergySpent(b, state.TotalEnergySpentSinceReset); - FState.AddSignal(b, state.Signal); - - FState.AddTerminated(b, state.Terminated); - FState.AddTerminationReason(b, t); - - if (serialise_indidual_observables) { - FState.AddObservations(b, observers_vector); - } - - if (state.Description != null) { - FState.AddEnvironmentDescription(b, description_offset); - } - - if (state.DebugMessage != "") { - FState.AddSerialisedMessage(b, d); - } - - return FState.EndFState(b); - } - - #endregion - - #region PrivateMethods - - static Offset serialise_motor(FlatBufferBuilder b, IMotor motor, string identifier) { - var n = b.CreateString(identifier); - FMotor.StartFMotor(b); - FMotor.AddMotorName(b, n); - FMotor.AddValidInput( - b, - FRange.CreateFRange( - b, - motor.MotionValueSpace._Decimal_Granularity, - motor.MotionValueSpace._Max_Value, - motor.MotionValueSpace._Min_Value)); - FMotor.AddEnergySpentSinceReset(b, motor.GetEnergySpend()); - return FMotor.EndFMotor(b); - } - - /// - /// - /// - /// - /// - /// - static Offset serialise_euler_transform( - FlatBufferBuilder b, - IHasEulerTransform observer) { - Vector3 pos = observer.Position, rot = observer.Rotation, dir = observer.Direction; - return FEulerTransform.CreateFEulerTransform( - b, - pos.x, - pos.y, - pos.z, - rot.x, - rot.y, - rot.z, - dir.x, - dir.y, - dir.z); - } - - /// - /// - /// - /// - /// - /// - static Offset serialise_quaternion_transform(FlatBufferBuilder b, IHasQuaternionTransform observer) { - var pos = observer.Position; - var rot = observer.Rotation; - FQT.StartFQT(b); - FQT.AddTransform( - b, - FQuaternionTransform.CreateFQuaternionTransform( - b, - pos.x, - pos.y, - pos.z, - rot.x, - rot.y, - rot.z, - rot.w)); - return FQT.EndFQT(b); - } - - static Offset serialise_byte_array(FlatBufferBuilder b, IHasByteArray camera) { - //var v_offset = FByteArray.CreateBytesVector(b, camera.Bytes); - var v_offset = CustomFlatBufferImplementation.CreateByteVector(b, camera.Bytes); - FByteArray.StartFByteArray(b); - FByteArray.AddType(b, FByteDataType.PNG); - FByteArray.AddBytes(b, v_offset); - return FByteArray.EndFByteArray(b); - } - - static Offset serialise_array(FlatBufferBuilder b, IHasArray float_a) { - //var v_offset = FArray.CreateArrayVector(b, camera.ObservationArray); - var v_offset = CustomFlatBufferImplementation.CreateFloatVector(b, float_a.ObservationArray); - //FArray.StartRangesVector(b,); - FArray.StartFArray(b); - FArray.AddArray(b, v_offset); - //FArray.AddRanges(b,); - return FArray.EndFArray(b); - } - - /// - /// - /// - /// - /// - /// - /// - static Offset serialise_body_observation(FlatBufferBuilder b, Vector3 vel, Vector3 ang) { - FRB.StartFRB(b); - FRB.AddBody(b, FBody.CreateFBody(b, vel.x, vel.y, vel.z, ang.x, ang.y, ang.z)); - return FRB.EndFRB(b); - } - - static Offset serialise_single(FlatBufferBuilder b, IHasSingle numeral) { - FSingle.StartFSingle(b); - FSingle.AddValue(b, numeral.ObservationValue); - - var range_offset = FRange.CreateFRange( - b, - numeral.SingleSpace._Decimal_Granularity, - numeral.SingleSpace._Max_Value, - numeral.SingleSpace._Min_Value); - FSingle.AddRange(b, range_offset); - return FSingle.EndFSingle(b); - } - - static Offset serialise_double(FlatBufferBuilder b, IHasDouble numeral) { - FDouble.StartFDouble(b); - var vec2 = numeral.ObservationValue; - FDouble.AddVec2(b, FVector2.CreateFVector2(b, vec2.x, vec2.y)); - //FSingle.AddRange(b, numeral.ObservationValue); - return FDouble.EndFDouble(b); - } - - static Offset serialise_triple(FlatBufferBuilder b, IHasTriple numeral) { - FTriple.StartFTriple(b); - var vec3 = numeral.ObservationValue; - FTriple.AddVec3(b, FVector3.CreateFVector3(b, vec3.x, vec3.y, vec3.z)); - //FSingle.AddRange(b, numeral.ObservationValue); - return FTriple.EndFTriple(b); - } - - static Offset serialise_quadruple(FlatBufferBuilder b, IHasQuadruple numeral) { - FQuadruple.StartFQuadruple(b); - var quad = numeral.ObservationValue; - FQuadruple.AddQuat(b, FQuaternion.CreateFQuaternion(b, quad.x, quad.y, quad.z, quad.z)); - //FSingle.AddRange(b, numeral.ObservationValue); - return FQuadruple.EndFQuadruple(b); - } - - static Offset serialise_actor( - FlatBufferBuilder b, - Offset[] motors, - IActor actor, - string identifier) { - var n = b.CreateString(identifier); - var motor_vector = FActor.CreateMotorsVector(b, motors); - FActor.StartFActor(b); - if (actor is KillableActor) { - FActor.AddAlive(b, ((KillableActor)actor).IsAlive); - } else { - FActor.AddAlive(b, true); - } - - FActor.AddActorName(b, n); - FActor.AddMotors(b, motor_vector); - return FActor.EndFActor(b); - } - - static Offset serialise_observer(FlatBufferBuilder b, IObserver observer) { - var n = b.CreateString(observer.Identifier); - - int observation_offset; - FObservation observation_type; - - if (observer is IHasArray) { - observation_offset = serialise_array(b, (IHasArray)observer).Value; - observation_type = FObservation.FArray; - } else if (observer is IHasSingle) { - observation_offset = serialise_single(b, (IHasSingle)observer).Value; - observation_type = FObservation.FSingle; - } else if (observer is IHasDouble) { - observation_offset = serialise_double(b, (IHasDouble)observer).Value; - observation_type = FObservation.FDouble; - } else if (observer is IHasTriple) { - observation_offset = serialise_triple(b, (IHasTriple)observer).Value; - observation_type = FObservation.FTriple; - } else if (observer is IHasQuadruple) { - observation_offset = serialise_quadruple(b, (IHasQuadruple)observer).Value; - observation_type = FObservation.FQuadruple; - } else if (observer is IHasEulerTransform) { - observation_offset = serialise_euler_transform(b, (IHasEulerTransform)observer).Value; - observation_type = FObservation.FET; - } else if (observer is IHasQuaternionTransform) { - observation_offset = serialise_quaternion_transform(b, (IHasQuaternionTransform)observer).Value; - observation_type = FObservation.FQT; - } else if (observer is IHasRigidbody) { - observation_offset = serialise_body_observation( - b, - ((IHasRigidbody)observer).Velocity, - ((IHasRigidbody)observer).AngularVelocity).Value; - observation_type = FObservation.FRB; - } else if (observer is IHasByteArray) { - observation_offset = serialise_byte_array(b, (IHasByteArray)observer).Value; - observation_type = FObservation.FByteArray; - } else { - return FOBS.CreateFOBS(b, n); - } - - FOBS.StartFOBS(b); - FOBS.AddObservationName(b, n); - FOBS.AddObservationType(b, observation_type); - FOBS.AddObservation(b, observation_offset); - return FOBS.EndFOBS(b); - } - - static Offset serialise_description( - FlatBufferBuilder b, - EnvironmentState state) { - var actors_offsets = new Offset[state.Description.Actors.Values.Count]; - var j = 0; - foreach (var actor in state.Description.Actors) { - var motors_offsets = new Offset[actor.Value.Motors.Values.Count]; - var i = 0; - foreach (var motor in actor.Value.Motors) { - motors_offsets[i++] = serialise_motor(b, motor.Value, motor.Key); - } - - actors_offsets[j++] = serialise_actor(b, motors_offsets, actor.Value, actor.Key); - } - - var actors_vector_offset = FEnvironmentDescription.CreateActorsVector(b, actors_offsets); - - var configurables_offsets = new Offset[state.Description.Configurables.Values.Count]; - var k = 0; - foreach (var configurable in state.Description.Configurables) { - configurables_offsets[k++] = serialise_configurable(b, configurable.Value, configurable.Key); - } - - var configurables_vector_offset = - FEnvironmentDescription.CreateConfigurablesVector(b, configurables_offsets); - - var objective_offset = serialise_objective(b, state.Description); - - FEnvironmentDescription.StartFEnvironmentDescription(b); - FEnvironmentDescription.AddObjective(b, objective_offset); - - FEnvironmentDescription.AddActors(b, actors_vector_offset); - FEnvironmentDescription.AddConfigurables(b, configurables_vector_offset); - - return FEnvironmentDescription.EndFEnvironmentDescription(b); - } - - static Offset serialise_objective(FlatBufferBuilder b, EnvironmentDescription description) { - var objective_name_offset = b.CreateString("Default objective"); - FObjective.StartFObjective(b); - FObjective.AddMaxEpisodeLength(b, description.MaxSteps); - FObjective.AddSolvedThreshold(b, description.SolvedThreshold); - FObjective.AddObjectiveName(b, objective_name_offset); - return FObjective.EndFObjective(b); - } - - static Offset serialise_position(FlatBufferBuilder b, PositionConfigurable observer) { - var pos = observer.ObservationValue; - FTriple.StartFTriple(b); - FTriple.AddVec3(b, FVector3.CreateFVector3(b, pos.x, pos.y, pos.z)); - return FTriple.EndFTriple(b); - } - - static Offset serialise_configurable( - FlatBufferBuilder b, - IConfigurable configurable, - string identifier) { - var n = b.CreateString(identifier); - - int observation_offset; - FObservation observation_type; - - if (configurable is IHasQuaternionTransform) { - observation_offset = serialise_quaternion_transform(b, (IHasQuaternionTransform)configurable).Value; - observation_type = FObservation.FQT; - } else if (configurable is PositionConfigurable) { - observation_offset = serialise_position(b, (PositionConfigurable)configurable).Value; - observation_type = FObservation.FTriple; - } else if (configurable is IHasSingle) { - observation_offset = serialise_single(b, (IHasSingle)configurable).Value; - observation_type = FObservation.FSingle; - // ReSharper disable once SuspiciousTypeConversion.Global - } else if (configurable is IHasDouble) { - // ReSharper disable once SuspiciousTypeConversion.Global - observation_offset = serialise_double(b, (IHasDouble)configurable).Value; - observation_type = FObservation.FDouble; - } else if (configurable is EulerTransformConfigurable) { - observation_offset = serialise_euler_transform(b, (IHasEulerTransform)configurable).Value; - observation_type = FObservation.FET; - } else { - FConfigurable.StartFConfigurable(b); - FConfigurable.AddConfigurableName(b, n); - return FConfigurable.EndFConfigurable(b); - } - - FConfigurable.StartFConfigurable(b); - FConfigurable.AddConfigurableName(b, n); - FConfigurable.AddObservation(b, observation_offset); - FConfigurable.AddObservationType(b, observation_type); - return FConfigurable.EndFConfigurable(b); - } - - #endregion - } -} \ No newline at end of file diff --git a/Runtime/Messaging/FBS/FBSStateUtilities.cs.meta b/Runtime/Messaging/FBS/FBSStateUtilities.cs.meta deleted file mode 100644 index 7a8ed764c..000000000 --- a/Runtime/Messaging/FBS/FBSStateUtilities.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: e742bf53ab91a4d0dbc3ffa1cdf8951f -timeCreated: 1514370596 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 520a54f95fd5d4b588f9ea7e4cb9463f, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Messaging/FBS/NeodroidFBSObservation.cs b/Runtime/Messaging/FBS/NeodroidFBSObservation.cs index 89b5f9c5b..0b6965212 100644 --- a/Runtime/Messaging/FBS/NeodroidFBSObservation.cs +++ b/Runtime/Messaging/FBS/NeodroidFBSObservation.cs @@ -2,7 +2,7 @@ // automatically generated by the FlatBuffers compiler, do not modify // -namespace Neodroid.Runtime.Messaging.FBS +namespace droid.Runtime.Messaging.FBS { public enum FObservation : byte { @@ -12,9 +12,9 @@ public enum FObservation : byte FTriple = 3, FQuadruple = 4, FArray = 5, - FRB = 6, - FET = 7, - FQT = 8, + FRBObs = 6, + FETObs = 7, + FQTObs = 8, FString = 9, FByteArray = 10, }; diff --git a/Runtime/Messaging/FBS/NeodroidFBSReaction.cs b/Runtime/Messaging/FBS/NeodroidFBSReaction.cs index 72bd66d2d..03b4f25db 100644 --- a/Runtime/Messaging/FBS/NeodroidFBSReaction.cs +++ b/Runtime/Messaging/FBS/NeodroidFBSReaction.cs @@ -3,10 +3,9 @@ // using System; -using System.Text; using FlatBuffers; -namespace Neodroid.Runtime.Messaging.FBS +namespace droid.Runtime.Messaging.FBS { public enum FDisplayableValue : byte { @@ -30,7 +29,12 @@ public struct FReaction : IFlatbufferObject public FReaction __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public string EnvironmentName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetEnvironmentNameBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetEnvironmentNameBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetEnvironmentNameArray() { return this.__p.__vector_as_array(4); } public FReactionParameters? Parameters { get { int o = this.__p.__offset(6); return o != 0 ? (FReactionParameters?)(new FReactionParameters()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } public FMotion? Motions(int j) { int o = this.__p.__offset(8); return o != 0 ? (FMotion?)(new FMotion()).__assign(this.__p.__indirect(this.__p.__vector(o) + j * 4), this.__p.bb) : null; } public int MotionsLength { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.__vector_len(o) : 0; } } @@ -43,20 +47,28 @@ public struct FReaction : IFlatbufferObject public int ConfigurationsLength { get { int o = this.__p.__offset(14); return o != 0 ? this.__p.__vector_len(o) : 0; } } public FConfiguration? ConfigurationsByKey(string key) { int o = this.__p.__offset(14); return o != 0 ? FConfiguration.__lookup_by_key(this.__p.__vector(o), key, this.__p.bb) : null; } public string SerialisedMessage { get { int o = this.__p.__offset(16); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetSerialisedMessageBytes() { return __p.__vector_as_span(16); } +#else public ArraySegment? GetSerialisedMessageBytes() { return this.__p.__vector_as_arraysegment(16); } +#endif + public byte[] GetSerialisedMessageArray() { return this.__p.__vector_as_array(16); } public static void StartFReaction(FlatBufferBuilder builder) { builder.StartObject(7); } public static void AddEnvironmentName(FlatBufferBuilder builder, StringOffset environmentNameOffset) { builder.AddOffset(0, environmentNameOffset.Value, 0); } public static void AddParameters(FlatBufferBuilder builder, Offset parametersOffset) { builder.AddStruct(1, parametersOffset.Value, 0); } public static void AddMotions(FlatBufferBuilder builder, VectorOffset motionsOffset) { builder.AddOffset(2, motionsOffset.Value, 0); } public static VectorOffset CreateMotionsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateMotionsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartMotionsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddDisplayables(FlatBufferBuilder builder, VectorOffset displayablesOffset) { builder.AddOffset(3, displayablesOffset.Value, 0); } public static VectorOffset CreateDisplayablesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateDisplayablesVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartDisplayablesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddUnobservables(FlatBufferBuilder builder, Offset unobservablesOffset) { builder.AddOffset(4, unobservablesOffset.Value, 0); } public static void AddConfigurations(FlatBufferBuilder builder, VectorOffset configurationsOffset) { builder.AddOffset(5, configurationsOffset.Value, 0); } public static VectorOffset CreateConfigurationsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateConfigurationsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartConfigurationsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddSerialisedMessage(FlatBufferBuilder builder, StringOffset serialisedMessageOffset) { builder.AddOffset(6, serialisedMessageOffset.Value, 0); } public static Offset EndFReaction(FlatBufferBuilder builder) { @@ -66,6 +78,7 @@ public static Offset EndFReaction(FlatBufferBuilder builder) { return new Offset(o); } public static void FinishFReactionBuffer(FlatBufferBuilder builder, Offset offset) { builder.Finish(offset.Value, "REAC"); } + public static void FinishSizePrefixedFReactionBuffer(FlatBufferBuilder builder, Offset offset) { builder.FinishSizePrefixed(offset.Value, "REAC"); } public static VectorOffset CreateSortedVectorOfFReaction(FlatBufferBuilder builder, Offset[] offsets) { Array.Sort(offsets, (Offset o1, Offset o2) => Table.CompareStrings(Table.__offset(4, o1.Value, builder.DataBuffer), Table.__offset(4, o2.Value, builder.DataBuffer), builder.DataBuffer)); @@ -73,7 +86,7 @@ public static VectorOffset CreateSortedVectorOfFReaction(FlatBufferBuilder build } public static FReaction? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { @@ -130,30 +143,40 @@ public struct FMotion : IFlatbufferObject public FMotion __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public string ActorName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetActorNameBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetActorNameBytes() { return this.__p.__vector_as_arraysegment(4); } - public string MotorName { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } - public ArraySegment? GetMotorNameBytes() { return this.__p.__vector_as_arraysegment(6); } +#endif + public byte[] GetActorNameArray() { return this.__p.__vector_as_array(4); } + public string ActuatorName { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetActuatorNameBytes() { return __p.__vector_as_span(6); } +#else + public ArraySegment? GetActuatorNameBytes() { return this.__p.__vector_as_arraysegment(6); } +#endif + public byte[] GetActuatorNameArray() { return this.__p.__vector_as_array(6); } public double Strength { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.bb.GetDouble(o + this.__p.bb_pos) : (double)0.0; } } public static Offset CreateFMotion(FlatBufferBuilder builder, StringOffset actor_nameOffset = default(StringOffset), - StringOffset motor_nameOffset = default(StringOffset), + StringOffset actuator_nameOffset = default(StringOffset), double strength = 0.0) { builder.StartObject(3); - AddStrength(builder, strength); - AddMotorName(builder, motor_nameOffset); - AddActorName(builder, actor_nameOffset); - return EndFMotion(builder); + FMotion.AddStrength(builder, strength); + FMotion.AddActuatorName(builder, actuator_nameOffset); + FMotion.AddActorName(builder, actor_nameOffset); + return FMotion.EndFMotion(builder); } public static void StartFMotion(FlatBufferBuilder builder) { builder.StartObject(3); } public static void AddActorName(FlatBufferBuilder builder, StringOffset actorNameOffset) { builder.AddOffset(0, actorNameOffset.Value, 0); } - public static void AddMotorName(FlatBufferBuilder builder, StringOffset motorNameOffset) { builder.AddOffset(1, motorNameOffset.Value, 0); } + public static void AddActuatorName(FlatBufferBuilder builder, StringOffset actuatorNameOffset) { builder.AddOffset(1, actuatorNameOffset.Value, 0); } public static void AddStrength(FlatBufferBuilder builder, double strength) { builder.AddDouble(2, strength, 0.0); } public static Offset EndFMotion(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // actor_name - builder.Required(o, 6); // motor_name + builder.Required(o, 6); // actuator_name return new Offset(o); } @@ -163,7 +186,7 @@ public static VectorOffset CreateSortedVectorOfFMotion(FlatBufferBuilder builder } public static FMotion? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { @@ -194,16 +217,21 @@ public struct FConfiguration : IFlatbufferObject public FConfiguration __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public string ConfigurableName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetConfigurableNameBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetConfigurableNameBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetConfigurableNameArray() { return this.__p.__vector_as_array(4); } public double ConfigurableValue { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.bb.GetDouble(o + this.__p.bb_pos) : (double)0.0; } } public static Offset CreateFConfiguration(FlatBufferBuilder builder, StringOffset configurable_nameOffset = default(StringOffset), double configurable_value = 0.0) { builder.StartObject(2); - AddConfigurableValue(builder, configurable_value); - AddConfigurableName(builder, configurable_nameOffset); - return EndFConfiguration(builder); + FConfiguration.AddConfigurableValue(builder, configurable_value); + FConfiguration.AddConfigurableName(builder, configurable_nameOffset); + return FConfiguration.EndFConfiguration(builder); } public static void StartFConfiguration(FlatBufferBuilder builder) { builder.StartObject(2); } @@ -221,7 +249,7 @@ public static VectorOffset CreateSortedVectorOfFConfiguration(FlatBufferBuilder } public static FConfiguration? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { @@ -252,7 +280,12 @@ public struct FDisplayable : IFlatbufferObject public FDisplayable __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public string DisplayableName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetDisplayableNameBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetDisplayableNameBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetDisplayableNameArray() { return this.__p.__vector_as_array(4); } public FDisplayableValue DisplayableValueType { get { int o = this.__p.__offset(6); return o != 0 ? (FDisplayableValue)this.__p.bb.Get(o + this.__p.bb_pos) : FDisplayableValue.NONE; } } public TTable? DisplayableValue() where TTable : struct, IFlatbufferObject { int o = this.__p.__offset(8); return o != 0 ? (TTable?)this.__p.__union(o) : null; } @@ -261,10 +294,10 @@ public static Offset CreateFDisplayable(FlatBufferBuilder builder, FDisplayableValue displayable_value_type = FDisplayableValue.NONE, int displayable_valueOffset = 0) { builder.StartObject(3); - AddDisplayableValue(builder, displayable_valueOffset); - AddDisplayableName(builder, displayable_nameOffset); - AddDisplayableValueType(builder, displayable_value_type); - return EndFDisplayable(builder); + FDisplayable.AddDisplayableValue(builder, displayable_valueOffset); + FDisplayable.AddDisplayableName(builder, displayable_nameOffset); + FDisplayable.AddDisplayableValueType(builder, displayable_value_type); + return FDisplayable.EndFDisplayable(builder); } public static void StartFDisplayable(FlatBufferBuilder builder) { builder.StartObject(3); } @@ -283,7 +316,7 @@ public static VectorOffset CreateSortedVectorOfFDisplayable(FlatBufferBuilder bu } public static FDisplayable? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { diff --git a/Runtime/Messaging/FBS/NeodroidFBSReactions.cs b/Runtime/Messaging/FBS/NeodroidFBSReactions.cs index a7a8f2e28..228db3017 100644 --- a/Runtime/Messaging/FBS/NeodroidFBSReactions.cs +++ b/Runtime/Messaging/FBS/NeodroidFBSReactions.cs @@ -5,7 +5,7 @@ using System; using FlatBuffers; -namespace Neodroid.Runtime.Messaging.FBS +namespace droid.Runtime.Messaging.FBS { public struct FReactions : IFlatbufferObject { @@ -21,13 +21,19 @@ public struct FReactions : IFlatbufferObject public int ReactionsLength { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__vector_len(o) : 0; } } public FReaction? ReactionsByKey(string key) { int o = this.__p.__offset(4); return o != 0 ? FReaction.__lookup_by_key(this.__p.__vector(o), key, this.__p.bb) : null; } public string ApiVersion { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetApiVersionBytes() { return __p.__vector_as_span(6); } +#else public ArraySegment? GetApiVersionBytes() { return this.__p.__vector_as_arraysegment(6); } +#endif + public byte[] GetApiVersionArray() { return this.__p.__vector_as_array(6); } public FSimulatorConfiguration? SimulatorConfiguration { get { int o = this.__p.__offset(8); return o != 0 ? (FSimulatorConfiguration?)(new FSimulatorConfiguration()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } public bool Close { get { int o = this.__p.__offset(10); return o != 0 ? 0!=this.__p.bb.Get(o + this.__p.bb_pos) : (bool)false; } } public static void StartFReactions(FlatBufferBuilder builder) { builder.StartObject(4); } public static void AddReactions(FlatBufferBuilder builder, VectorOffset reactionsOffset) { builder.AddOffset(0, reactionsOffset.Value, 0); } public static VectorOffset CreateReactionsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateReactionsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartReactionsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddApiVersion(FlatBufferBuilder builder, StringOffset apiVersionOffset) { builder.AddOffset(1, apiVersionOffset.Value, 0); } public static void AddSimulatorConfiguration(FlatBufferBuilder builder, Offset simulatorConfigurationOffset) { builder.AddStruct(2, simulatorConfigurationOffset.Value, 0); } @@ -37,6 +43,7 @@ public static Offset EndFReactions(FlatBufferBuilder builder) { return new Offset(o); } public static void FinishFReactionsBuffer(FlatBufferBuilder builder, Offset offset) { builder.Finish(offset.Value, "XREA"); } + public static void FinishSizePrefixedFReactionsBuffer(FlatBufferBuilder builder, Offset offset) { builder.FinishSizePrefixed(offset.Value, "XREA"); } }; diff --git a/Runtime/Messaging/FBS/NeodroidFBSShared.cs b/Runtime/Messaging/FBS/NeodroidFBSShared.cs index 5c0867eae..0e30d3896 100644 --- a/Runtime/Messaging/FBS/NeodroidFBSShared.cs +++ b/Runtime/Messaging/FBS/NeodroidFBSShared.cs @@ -4,9 +4,17 @@ using FlatBuffers; -namespace Neodroid.Runtime.Messaging.FBS +namespace droid.Runtime.Messaging.FBS { - public struct FUnobservables : IFlatbufferObject + public enum FSimulationType : byte +{ + Independent = 0, + FrameDependent = 1, + PhysicsDependent = 2, + EventDependent = 3, +}; + +public struct FUnobservables : IFlatbufferObject { private Table __p; public ByteBuffer ByteBuffer { get { return this.__p.bb; } } @@ -24,9 +32,9 @@ public static Offset CreateFUnobservables(FlatBufferBuilder buil VectorOffset posesOffset = default(VectorOffset), VectorOffset bodiesOffset = default(VectorOffset)) { builder.StartObject(2); - AddBodies(builder, bodiesOffset); - AddPoses(builder, posesOffset); - return EndFUnobservables(builder); + FUnobservables.AddBodies(builder, bodiesOffset); + FUnobservables.AddPoses(builder, posesOffset); + return FUnobservables.EndFUnobservables(builder); } public static void StartFUnobservables(FlatBufferBuilder builder) { builder.StartObject(2); } @@ -188,9 +196,12 @@ public struct FRange : IFlatbufferObject public int DecimalGranularity { get { return this.__p.bb.GetInt(this.__p.bb_pos + 0); } } public float MaxValue { get { return this.__p.bb.GetFloat(this.__p.bb_pos + 4); } } public float MinValue { get { return this.__p.bb.GetFloat(this.__p.bb_pos + 8); } } + public bool Normalised { get { return 0!=this.__p.bb.Get(this.__p.bb_pos + 12); } } - public static Offset CreateFRange(FlatBufferBuilder builder, int DecimalGranularity, float MaxValue, float MinValue) { - builder.Prep(4, 12); + public static Offset CreateFRange(FlatBufferBuilder builder, int DecimalGranularity, float MaxValue, float MinValue, bool Normalised) { + builder.Prep(4, 16); + builder.Pad(3); + builder.PutBool(Normalised); builder.PutFloat(MinValue); builder.PutFloat(MaxValue); builder.PutInt(DecimalGranularity); @@ -211,22 +222,23 @@ public struct FSimulatorConfiguration : IFlatbufferObject public int QualityLevel { get { return this.__p.bb.GetInt(this.__p.bb_pos + 12); } } public float TimeScale { get { return this.__p.bb.GetFloat(this.__p.bb_pos + 16); } } public float TargetFrameRate { get { return this.__p.bb.GetFloat(this.__p.bb_pos + 20); } } - public int WaitEvery { get { return this.__p.bb.GetInt(this.__p.bb_pos + 24); } } + public FSimulationType SimulationType { get { return (FSimulationType)this.__p.bb.Get(this.__p.bb_pos + 24); } } public int FrameSkips { get { return this.__p.bb.GetInt(this.__p.bb_pos + 28); } } public int ResetIterations { get { return this.__p.bb.GetInt(this.__p.bb_pos + 32); } } public int NumOfEnvironments { get { return this.__p.bb.GetInt(this.__p.bb_pos + 36); } } - public bool DoSerialiseIndidualObservables { get { return 0!=this.__p.bb.Get(this.__p.bb_pos + 40); } } + public bool DoSerialiseIndividualSensors { get { return 0!=this.__p.bb.Get(this.__p.bb_pos + 40); } } public bool DoSerialiseUnobservables { get { return 0!=this.__p.bb.Get(this.__p.bb_pos + 41); } } - public static Offset CreateFSimulatorConfiguration(FlatBufferBuilder builder, int Width, int Height, bool FullScreen, int QualityLevel, float TimeScale, float TargetFrameRate, int WaitEvery, int FrameSkips, int ResetIterations, int NumOfEnvironments, bool DoSerialiseIndidualObservables, bool DoSerialiseUnobservables) { + public static Offset CreateFSimulatorConfiguration(FlatBufferBuilder builder, int Width, int Height, bool FullScreen, int QualityLevel, float TimeScale, float TargetFrameRate, FSimulationType SimulationType, int FrameSkips, int ResetIterations, int NumOfEnvironments, bool DoSerialiseIndividualSensors, bool DoSerialiseUnobservables) { builder.Prep(4, 44); builder.Pad(2); builder.PutBool(DoSerialiseUnobservables); - builder.PutBool(DoSerialiseIndidualObservables); + builder.PutBool(DoSerialiseIndividualSensors); builder.PutInt(NumOfEnvironments); builder.PutInt(ResetIterations); builder.PutInt(FrameSkips); - builder.PutInt(WaitEvery); + builder.Pad(3); + builder.PutByte((byte)SimulationType); builder.PutFloat(TargetFrameRate); builder.PutFloat(TimeScale); builder.PutInt(QualityLevel); diff --git a/Runtime/Messaging/FBS/NeodroidFBSState.cs b/Runtime/Messaging/FBS/NeodroidFBSState.cs index 95557a61a..9a3738d17 100644 --- a/Runtime/Messaging/FBS/NeodroidFBSState.cs +++ b/Runtime/Messaging/FBS/NeodroidFBSState.cs @@ -3,10 +3,9 @@ // using System; -using System.Text; using FlatBuffers; -namespace Neodroid.Runtime.Messaging.FBS +namespace droid.Runtime.Messaging.FBS { public struct FState : IFlatbufferObject { @@ -19,73 +18,87 @@ public struct FState : IFlatbufferObject public FState __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public string EnvironmentName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetEnvironmentNameBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetEnvironmentNameBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetEnvironmentNameArray() { return this.__p.__vector_as_array(4); } public int FrameNumber { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.bb.GetInt(o + this.__p.bb_pos) : (int)0; } } - public float Signal { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.bb.GetFloat(o + this.__p.bb_pos) : (float)0.0f; } } - public bool Terminated { get { int o = this.__p.__offset(10); return o != 0 ? 0!=this.__p.bb.Get(o + this.__p.bb_pos) : (bool)false; } } - public string TerminationReason { get { int o = this.__p.__offset(12); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } - public ArraySegment? GetTerminationReasonBytes() { return this.__p.__vector_as_arraysegment(12); } - public float TotalEnergySpent { get { int o = this.__p.__offset(14); return o != 0 ? this.__p.bb.GetFloat(o + this.__p.bb_pos) : (float)0.0f; } } - public FOBS? Observations(int j) { int o = this.__p.__offset(16); return o != 0 ? (FOBS?)(new FOBS()).__assign(this.__p.__indirect(this.__p.__vector(o) + j * 4), this.__p.bb) : null; } - public int ObservationsLength { get { int o = this.__p.__offset(16); return o != 0 ? this.__p.__vector_len(o) : 0; } } - public FOBS? ObservationsByKey(string key) { int o = this.__p.__offset(16); return o != 0 ? FOBS.__lookup_by_key(this.__p.__vector(o), key, this.__p.bb) : null; } - public float Observables(int j) { int o = this.__p.__offset(18); return o != 0 ? this.__p.bb.GetFloat(this.__p.__vector(o) + j * 4) : (float)0; } - public int ObservablesLength { get { int o = this.__p.__offset(18); return o != 0 ? this.__p.__vector_len(o) : 0; } } - public ArraySegment? GetObservablesBytes() { return this.__p.__vector_as_arraysegment(18); } - public FUnobservables? Unobservables { get { int o = this.__p.__offset(20); return o != 0 ? (FUnobservables?)(new FUnobservables()).__assign(this.__p.__indirect(o + this.__p.bb_pos), this.__p.bb) : null; } } - public FEnvironmentDescription? EnvironmentDescription { get { int o = this.__p.__offset(22); return o != 0 ? (FEnvironmentDescription?)(new FEnvironmentDescription()).__assign(this.__p.__indirect(o + this.__p.bb_pos), this.__p.bb) : null; } } - public string SerialisedMessage { get { int o = this.__p.__offset(24); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } - public ArraySegment? GetSerialisedMessageBytes() { return this.__p.__vector_as_arraysegment(24); } + public float Observables(int j) { int o = this.__p.__offset(8); return o != 0 ? this.__p.bb.GetFloat(this.__p.__vector(o) + j * 4) : (float)0; } + public int ObservablesLength { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.__vector_len(o) : 0; } } +#if ENABLE_SPAN_T + public Span GetObservablesBytes() { return __p.__vector_as_span(8); } +#else + public ArraySegment? GetObservablesBytes() { return this.__p.__vector_as_arraysegment(8); } +#endif + public float[] GetObservablesArray() { return this.__p.__vector_as_array(8); } + public FUnobservables? Unobservables { get { int o = this.__p.__offset(10); return o != 0 ? (FUnobservables?)(new FUnobservables()).__assign(this.__p.__indirect(o + this.__p.bb_pos), this.__p.bb) : null; } } + public float Signal { get { int o = this.__p.__offset(12); return o != 0 ? this.__p.bb.GetFloat(o + this.__p.bb_pos) : (float)0.0f; } } + public bool Terminated { get { int o = this.__p.__offset(14); return o != 0 ? 0!=this.__p.bb.Get(o + this.__p.bb_pos) : (bool)false; } } + public string TerminationReason { get { int o = this.__p.__offset(16); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetTerminationReasonBytes() { return __p.__vector_as_span(16); } +#else + public ArraySegment? GetTerminationReasonBytes() { return this.__p.__vector_as_arraysegment(16); } +#endif + public byte[] GetTerminationReasonArray() { return this.__p.__vector_as_array(16); } + public FEnvironmentDescription? EnvironmentDescription { get { int o = this.__p.__offset(18); return o != 0 ? (FEnvironmentDescription?)(new FEnvironmentDescription()).__assign(this.__p.__indirect(o + this.__p.bb_pos), this.__p.bb) : null; } } + public FReaction? LastReaction { get { int o = this.__p.__offset(20); return o != 0 ? (FReaction?)(new FReaction()).__assign(this.__p.__indirect(o + this.__p.bb_pos), this.__p.bb) : null; } } + public string ExtraSerialisedMessage { get { int o = this.__p.__offset(22); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetExtraSerialisedMessageBytes() { return __p.__vector_as_span(22); } +#else + public ArraySegment? GetExtraSerialisedMessageBytes() { return this.__p.__vector_as_arraysegment(22); } +#endif + public byte[] GetExtraSerialisedMessageArray() { return this.__p.__vector_as_array(22); } public static Offset CreateFState(FlatBufferBuilder builder, StringOffset environment_nameOffset = default(StringOffset), int frame_number = 0, + VectorOffset observablesOffset = default(VectorOffset), + Offset unobservablesOffset = default(Offset), float signal = 0.0f, bool terminated = false, StringOffset termination_reasonOffset = default(StringOffset), - float total_energy_spent = 0.0f, - VectorOffset observationsOffset = default(VectorOffset), - VectorOffset observablesOffset = default(VectorOffset), - Offset unobservablesOffset = default(Offset), Offset environment_descriptionOffset = default(Offset), - StringOffset serialised_messageOffset = default(StringOffset)) { - builder.StartObject(11); - AddSerialisedMessage(builder, serialised_messageOffset); - AddEnvironmentDescription(builder, environment_descriptionOffset); - AddUnobservables(builder, unobservablesOffset); - AddObservables(builder, observablesOffset); - AddObservations(builder, observationsOffset); - AddTotalEnergySpent(builder, total_energy_spent); - AddTerminationReason(builder, termination_reasonOffset); - AddSignal(builder, signal); - AddFrameNumber(builder, frame_number); - AddEnvironmentName(builder, environment_nameOffset); - AddTerminated(builder, terminated); - return EndFState(builder); + Offset last_reactionOffset = default(Offset), + StringOffset extra_serialised_messageOffset = default(StringOffset)) { + builder.StartObject(10); + FState.AddExtraSerialisedMessage(builder, extra_serialised_messageOffset); + FState.AddLastReaction(builder, last_reactionOffset); + FState.AddEnvironmentDescription(builder, environment_descriptionOffset); + FState.AddTerminationReason(builder, termination_reasonOffset); + FState.AddSignal(builder, signal); + FState.AddUnobservables(builder, unobservablesOffset); + FState.AddObservables(builder, observablesOffset); + FState.AddFrameNumber(builder, frame_number); + FState.AddEnvironmentName(builder, environment_nameOffset); + FState.AddTerminated(builder, terminated); + return FState.EndFState(builder); } - public static void StartFState(FlatBufferBuilder builder) { builder.StartObject(11); } + public static void StartFState(FlatBufferBuilder builder) { builder.StartObject(10); } public static void AddEnvironmentName(FlatBufferBuilder builder, StringOffset environmentNameOffset) { builder.AddOffset(0, environmentNameOffset.Value, 0); } public static void AddFrameNumber(FlatBufferBuilder builder, int frameNumber) { builder.AddInt(1, frameNumber, 0); } - public static void AddSignal(FlatBufferBuilder builder, float signal) { builder.AddFloat(2, signal, 0.0f); } - public static void AddTerminated(FlatBufferBuilder builder, bool terminated) { builder.AddBool(3, terminated, false); } - public static void AddTerminationReason(FlatBufferBuilder builder, StringOffset terminationReasonOffset) { builder.AddOffset(4, terminationReasonOffset.Value, 0); } - public static void AddTotalEnergySpent(FlatBufferBuilder builder, float totalEnergySpent) { builder.AddFloat(5, totalEnergySpent, 0.0f); } - public static void AddObservations(FlatBufferBuilder builder, VectorOffset observationsOffset) { builder.AddOffset(6, observationsOffset.Value, 0); } - public static VectorOffset CreateObservationsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } - public static void StartObservationsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } - public static void AddObservables(FlatBufferBuilder builder, VectorOffset observablesOffset) { builder.AddOffset(7, observablesOffset.Value, 0); } + public static void AddObservables(FlatBufferBuilder builder, VectorOffset observablesOffset) { builder.AddOffset(2, observablesOffset.Value, 0); } public static VectorOffset CreateObservablesVector(FlatBufferBuilder builder, float[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddFloat(data[i]); return builder.EndVector(); } + public static VectorOffset CreateObservablesVectorBlock(FlatBufferBuilder builder, float[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartObservablesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } - public static void AddUnobservables(FlatBufferBuilder builder, Offset unobservablesOffset) { builder.AddOffset(8, unobservablesOffset.Value, 0); } - public static void AddEnvironmentDescription(FlatBufferBuilder builder, Offset environmentDescriptionOffset) { builder.AddOffset(9, environmentDescriptionOffset.Value, 0); } - public static void AddSerialisedMessage(FlatBufferBuilder builder, StringOffset serialisedMessageOffset) { builder.AddOffset(10, serialisedMessageOffset.Value, 0); } + public static void AddUnobservables(FlatBufferBuilder builder, Offset unobservablesOffset) { builder.AddOffset(3, unobservablesOffset.Value, 0); } + public static void AddSignal(FlatBufferBuilder builder, float signal) { builder.AddFloat(4, signal, 0.0f); } + public static void AddTerminated(FlatBufferBuilder builder, bool terminated) { builder.AddBool(5, terminated, false); } + public static void AddTerminationReason(FlatBufferBuilder builder, StringOffset terminationReasonOffset) { builder.AddOffset(6, terminationReasonOffset.Value, 0); } + public static void AddEnvironmentDescription(FlatBufferBuilder builder, Offset environmentDescriptionOffset) { builder.AddOffset(7, environmentDescriptionOffset.Value, 0); } + public static void AddLastReaction(FlatBufferBuilder builder, Offset lastReactionOffset) { builder.AddOffset(8, lastReactionOffset.Value, 0); } + public static void AddExtraSerialisedMessage(FlatBufferBuilder builder, StringOffset extraSerialisedMessageOffset) { builder.AddOffset(9, extraSerialisedMessageOffset.Value, 0); } public static Offset EndFState(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // environment_name return new Offset(o); } public static void FinishFStateBuffer(FlatBufferBuilder builder, Offset offset) { builder.Finish(offset.Value, "STAT"); } + public static void FinishSizePrefixedFStateBuffer(FlatBufferBuilder builder, Offset offset) { builder.FinishSizePrefixed(offset.Value, "STAT"); } public static VectorOffset CreateSortedVectorOfFState(FlatBufferBuilder builder, Offset[] offsets) { Array.Sort(offsets, (Offset o1, Offset o2) => Table.CompareStrings(Table.__offset(4, o1.Value, builder.DataBuffer), Table.__offset(4, o2.Value, builder.DataBuffer), builder.DataBuffer)); @@ -93,7 +106,7 @@ public static VectorOffset CreateSortedVectorOfFState(FlatBufferBuilder builder, } public static FState? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { @@ -114,41 +127,6 @@ public static VectorOffset CreateSortedVectorOfFState(FlatBufferBuilder builder, } }; -public struct FObjective : IFlatbufferObject -{ - private Table __p; - public ByteBuffer ByteBuffer { get { return this.__p.bb; } } - public static FObjective GetRootAsFObjective(ByteBuffer _bb) { return GetRootAsFObjective(_bb, new FObjective()); } - public static FObjective GetRootAsFObjective(ByteBuffer _bb, FObjective obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } - public void __init(int _i, ByteBuffer _bb) { this.__p.bb_pos = _i; this.__p.bb = _bb; } - public FObjective __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } - - public string ObjectiveName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } - public ArraySegment? GetObjectiveNameBytes() { return this.__p.__vector_as_arraysegment(4); } - public int MaxEpisodeLength { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.bb.GetInt(o + this.__p.bb_pos) : (int)0; } } - public float SolvedThreshold { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.bb.GetFloat(o + this.__p.bb_pos) : (float)0.0f; } } - - public static Offset CreateFObjective(FlatBufferBuilder builder, - StringOffset objective_nameOffset = default(StringOffset), - int max_episode_length = 0, - float solved_threshold = 0.0f) { - builder.StartObject(3); - AddSolvedThreshold(builder, solved_threshold); - AddMaxEpisodeLength(builder, max_episode_length); - AddObjectiveName(builder, objective_nameOffset); - return EndFObjective(builder); - } - - public static void StartFObjective(FlatBufferBuilder builder) { builder.StartObject(3); } - public static void AddObjectiveName(FlatBufferBuilder builder, StringOffset objectiveNameOffset) { builder.AddOffset(0, objectiveNameOffset.Value, 0); } - public static void AddMaxEpisodeLength(FlatBufferBuilder builder, int maxEpisodeLength) { builder.AddInt(1, maxEpisodeLength, 0); } - public static void AddSolvedThreshold(FlatBufferBuilder builder, float solvedThreshold) { builder.AddFloat(2, solvedThreshold, 0.0f); } - public static Offset EndFObjective(FlatBufferBuilder builder) { - int o = builder.EndObject(); - return new Offset(o); - } -}; - public struct FEnvironmentDescription : IFlatbufferObject { private Table __p; @@ -167,37 +145,78 @@ public struct FEnvironmentDescription : IFlatbufferObject public FConfigurable? Configurables(int j) { int o = this.__p.__offset(10); return o != 0 ? (FConfigurable?)(new FConfigurable()).__assign(this.__p.__indirect(this.__p.__vector(o) + j * 4), this.__p.bb) : null; } public int ConfigurablesLength { get { int o = this.__p.__offset(10); return o != 0 ? this.__p.__vector_len(o) : 0; } } public FConfigurable? ConfigurablesByKey(string key) { int o = this.__p.__offset(10); return o != 0 ? FConfigurable.__lookup_by_key(this.__p.__vector(o), key, this.__p.bb) : null; } + public FSensor? Sensors(int j) { int o = this.__p.__offset(12); return o != 0 ? (FSensor?)(new FSensor()).__assign(this.__p.__indirect(this.__p.__vector(o) + j * 4), this.__p.bb) : null; } + public int SensorsLength { get { int o = this.__p.__offset(12); return o != 0 ? this.__p.__vector_len(o) : 0; } } + public FSensor? SensorsByKey(string key) { int o = this.__p.__offset(12); return o != 0 ? FSensor.__lookup_by_key(this.__p.__vector(o), key, this.__p.bb) : null; } public static Offset CreateFEnvironmentDescription(FlatBufferBuilder builder, Offset objectiveOffset = default(Offset), VectorOffset available_objectivesOffset = default(VectorOffset), VectorOffset actorsOffset = default(VectorOffset), - VectorOffset configurablesOffset = default(VectorOffset)) { - builder.StartObject(4); - AddConfigurables(builder, configurablesOffset); - AddActors(builder, actorsOffset); - AddAvailableObjectives(builder, available_objectivesOffset); - AddObjective(builder, objectiveOffset); - return EndFEnvironmentDescription(builder); + VectorOffset configurablesOffset = default(VectorOffset), + VectorOffset sensorsOffset = default(VectorOffset)) { + builder.StartObject(5); + FEnvironmentDescription.AddSensors(builder, sensorsOffset); + FEnvironmentDescription.AddConfigurables(builder, configurablesOffset); + FEnvironmentDescription.AddActors(builder, actorsOffset); + FEnvironmentDescription.AddAvailableObjectives(builder, available_objectivesOffset); + FEnvironmentDescription.AddObjective(builder, objectiveOffset); + return FEnvironmentDescription.EndFEnvironmentDescription(builder); } - public static void StartFEnvironmentDescription(FlatBufferBuilder builder) { builder.StartObject(4); } + public static void StartFEnvironmentDescription(FlatBufferBuilder builder) { builder.StartObject(5); } public static void AddObjective(FlatBufferBuilder builder, Offset objectiveOffset) { builder.AddOffset(0, objectiveOffset.Value, 0); } public static void AddAvailableObjectives(FlatBufferBuilder builder, VectorOffset availableObjectivesOffset) { builder.AddOffset(1, availableObjectivesOffset.Value, 0); } public static VectorOffset CreateAvailableObjectivesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateAvailableObjectivesVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartAvailableObjectivesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddActors(FlatBufferBuilder builder, VectorOffset actorsOffset) { builder.AddOffset(2, actorsOffset.Value, 0); } public static VectorOffset CreateActorsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateActorsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartActorsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddConfigurables(FlatBufferBuilder builder, VectorOffset configurablesOffset) { builder.AddOffset(3, configurablesOffset.Value, 0); } public static VectorOffset CreateConfigurablesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateConfigurablesVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartConfigurablesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } + public static void AddSensors(FlatBufferBuilder builder, VectorOffset sensorsOffset) { builder.AddOffset(4, sensorsOffset.Value, 0); } + public static VectorOffset CreateSensorsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateSensorsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } + public static void StartSensorsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static Offset EndFEnvironmentDescription(FlatBufferBuilder builder) { int o = builder.EndObject(); return new Offset(o); } }; +public struct FObjective : IFlatbufferObject +{ + private Table __p; + public ByteBuffer ByteBuffer { get { return this.__p.bb; } } + public static FObjective GetRootAsFObjective(ByteBuffer _bb) { return GetRootAsFObjective(_bb, new FObjective()); } + public static FObjective GetRootAsFObjective(ByteBuffer _bb, FObjective obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } + public void __init(int _i, ByteBuffer _bb) { this.__p.bb_pos = _i; this.__p.bb = _bb; } + public FObjective __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } + + public string ObjectiveName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetObjectiveNameBytes() { return __p.__vector_as_span(4); } +#else + public ArraySegment? GetObjectiveNameBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetObjectiveNameArray() { return this.__p.__vector_as_array(4); } + public int MaxEpisodeLength { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.bb.GetInt(o + this.__p.bb_pos) : (int)0; } } + public FRange? SignalSpace { get { int o = this.__p.__offset(8); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + + public static void StartFObjective(FlatBufferBuilder builder) { builder.StartObject(3); } + public static void AddObjectiveName(FlatBufferBuilder builder, StringOffset objectiveNameOffset) { builder.AddOffset(0, objectiveNameOffset.Value, 0); } + public static void AddMaxEpisodeLength(FlatBufferBuilder builder, int maxEpisodeLength) { builder.AddInt(1, maxEpisodeLength, 0); } + public static void AddSignalSpace(FlatBufferBuilder builder, Offset signalSpaceOffset) { builder.AddStruct(2, signalSpaceOffset.Value, 0); } + public static Offset EndFObjective(FlatBufferBuilder builder) { + int o = builder.EndObject(); + return new Offset(o); + } +}; + public struct FConfigurable : IFlatbufferObject { private Table __p; @@ -208,28 +227,25 @@ public struct FConfigurable : IFlatbufferObject public FConfigurable __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public string ConfigurableName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetConfigurableNameBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetConfigurableNameBytes() { return this.__p.__vector_as_arraysegment(4); } - public FObservation ObservationType { get { int o = this.__p.__offset(6); return o != 0 ? (FObservation)this.__p.bb.Get(o + this.__p.bb_pos) : FObservation.NONE; } } - public TTable? Observation() where TTable : struct, IFlatbufferObject { int o = this.__p.__offset(8); return o != 0 ? (TTable?)this.__p.__union(o) : null; } +#endif + public byte[] GetConfigurableNameArray() { return this.__p.__vector_as_array(4); } + public FObservation ConfigurableValueType { get { int o = this.__p.__offset(6); return o != 0 ? (FObservation)this.__p.bb.Get(o + this.__p.bb_pos) : FObservation.NONE; } } + public TTable? ConfigurableValue() where TTable : struct, IFlatbufferObject { int o = this.__p.__offset(8); return o != 0 ? (TTable?)this.__p.__union(o) : null; } + public FRange? ConfigurableRange { get { int o = this.__p.__offset(10); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } - public static Offset CreateFConfigurable(FlatBufferBuilder builder, - StringOffset configurable_nameOffset = default(StringOffset), - FObservation observation_type = FObservation.NONE, - int observationOffset = 0) { - builder.StartObject(3); - AddObservation(builder, observationOffset); - AddConfigurableName(builder, configurable_nameOffset); - AddObservationType(builder, observation_type); - return EndFConfigurable(builder); - } - - public static void StartFConfigurable(FlatBufferBuilder builder) { builder.StartObject(3); } + public static void StartFConfigurable(FlatBufferBuilder builder) { builder.StartObject(4); } public static void AddConfigurableName(FlatBufferBuilder builder, StringOffset configurableNameOffset) { builder.AddOffset(0, configurableNameOffset.Value, 0); } - public static void AddObservationType(FlatBufferBuilder builder, FObservation observationType) { builder.AddByte(1, (byte)observationType, 0); } - public static void AddObservation(FlatBufferBuilder builder, int observationOffset) { builder.AddOffset(2, observationOffset, 0); } + public static void AddConfigurableValueType(FlatBufferBuilder builder, FObservation configurableValueType) { builder.AddByte(1, (byte)configurableValueType, 0); } + public static void AddConfigurableValue(FlatBufferBuilder builder, int configurableValueOffset) { builder.AddOffset(2, configurableValueOffset, 0); } + public static void AddConfigurableRange(FlatBufferBuilder builder, Offset configurableRangeOffset) { builder.AddStruct(3, configurableRangeOffset.Value, 0); } public static Offset EndFConfigurable(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // configurable_name + builder.Required(o, 10); // configurable_range return new Offset(o); } @@ -239,7 +255,7 @@ public static VectorOffset CreateSortedVectorOfFConfigurable(FlatBufferBuilder b } public static FConfigurable? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { @@ -270,29 +286,35 @@ public struct FActor : IFlatbufferObject public FActor __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public string ActorName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetActorNameBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetActorNameBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetActorNameArray() { return this.__p.__vector_as_array(4); } public bool Alive { get { int o = this.__p.__offset(6); return o != 0 ? 0!=this.__p.bb.Get(o + this.__p.bb_pos) : (bool)false; } } - public FMotor? Motors(int j) { int o = this.__p.__offset(8); return o != 0 ? (FMotor?)(new FMotor()).__assign(this.__p.__indirect(this.__p.__vector(o) + j * 4), this.__p.bb) : null; } - public int MotorsLength { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.__vector_len(o) : 0; } } - public FMotor? MotorsByKey(string key) { int o = this.__p.__offset(8); return o != 0 ? FMotor.__lookup_by_key(this.__p.__vector(o), key, this.__p.bb) : null; } + public FActuator? Actuators(int j) { int o = this.__p.__offset(8); return o != 0 ? (FActuator?)(new FActuator()).__assign(this.__p.__indirect(this.__p.__vector(o) + j * 4), this.__p.bb) : null; } + public int ActuatorsLength { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.__vector_len(o) : 0; } } + public FActuator? ActuatorsByKey(string key) { int o = this.__p.__offset(8); return o != 0 ? FActuator.__lookup_by_key(this.__p.__vector(o), key, this.__p.bb) : null; } public static Offset CreateFActor(FlatBufferBuilder builder, StringOffset actor_nameOffset = default(StringOffset), bool alive = false, - VectorOffset motorsOffset = default(VectorOffset)) { + VectorOffset actuatorsOffset = default(VectorOffset)) { builder.StartObject(3); - AddMotors(builder, motorsOffset); - AddActorName(builder, actor_nameOffset); - AddAlive(builder, alive); - return EndFActor(builder); + FActor.AddActuators(builder, actuatorsOffset); + FActor.AddActorName(builder, actor_nameOffset); + FActor.AddAlive(builder, alive); + return FActor.EndFActor(builder); } public static void StartFActor(FlatBufferBuilder builder) { builder.StartObject(3); } public static void AddActorName(FlatBufferBuilder builder, StringOffset actorNameOffset) { builder.AddOffset(0, actorNameOffset.Value, 0); } public static void AddAlive(FlatBufferBuilder builder, bool alive) { builder.AddBool(1, alive, false); } - public static void AddMotors(FlatBufferBuilder builder, VectorOffset motorsOffset) { builder.AddOffset(2, motorsOffset.Value, 0); } - public static VectorOffset CreateMotorsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } - public static void StartMotorsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } + public static void AddActuators(FlatBufferBuilder builder, VectorOffset actuatorsOffset) { builder.AddOffset(2, actuatorsOffset.Value, 0); } + public static VectorOffset CreateActuatorsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateActuatorsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } + public static void StartActuatorsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static Offset EndFActor(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // actor_name @@ -305,7 +327,7 @@ public static VectorOffset CreateSortedVectorOfFActor(FlatBufferBuilder builder, } public static FActor? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { @@ -326,38 +348,41 @@ public static VectorOffset CreateSortedVectorOfFActor(FlatBufferBuilder builder, } }; -public struct FMotor : IFlatbufferObject +public struct FActuator : IFlatbufferObject { private Table __p; public ByteBuffer ByteBuffer { get { return this.__p.bb; } } - public static FMotor GetRootAsFMotor(ByteBuffer _bb) { return GetRootAsFMotor(_bb, new FMotor()); } - public static FMotor GetRootAsFMotor(ByteBuffer _bb, FMotor obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } + public static FActuator GetRootAsFActuator(ByteBuffer _bb) { return GetRootAsFActuator(_bb, new FActuator()); } + public static FActuator GetRootAsFActuator(ByteBuffer _bb, FActuator obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } public void __init(int _i, ByteBuffer _bb) { this.__p.bb_pos = _i; this.__p.bb = _bb; } - public FMotor __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } - - public string MotorName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } - public ArraySegment? GetMotorNameBytes() { return this.__p.__vector_as_arraysegment(4); } - public FRange? ValidInput { get { int o = this.__p.__offset(6); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } - public float EnergySpentSinceReset { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.bb.GetFloat(o + this.__p.bb_pos) : (float)0.0f; } } - - public static void StartFMotor(FlatBufferBuilder builder) { builder.StartObject(3); } - public static void AddMotorName(FlatBufferBuilder builder, StringOffset motorNameOffset) { builder.AddOffset(0, motorNameOffset.Value, 0); } - public static void AddValidInput(FlatBufferBuilder builder, Offset validInputOffset) { builder.AddStruct(1, validInputOffset.Value, 0); } - public static void AddEnergySpentSinceReset(FlatBufferBuilder builder, float energySpentSinceReset) { builder.AddFloat(2, energySpentSinceReset, 0.0f); } - public static Offset EndFMotor(FlatBufferBuilder builder) { + public FActuator __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } + + public string ActuatorName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetActuatorNameBytes() { return __p.__vector_as_span(4); } +#else + public ArraySegment? GetActuatorNameBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetActuatorNameArray() { return this.__p.__vector_as_array(4); } + public FRange? ActuatorRange { get { int o = this.__p.__offset(6); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + + public static void StartFActuator(FlatBufferBuilder builder) { builder.StartObject(2); } + public static void AddActuatorName(FlatBufferBuilder builder, StringOffset actuatorNameOffset) { builder.AddOffset(0, actuatorNameOffset.Value, 0); } + public static void AddActuatorRange(FlatBufferBuilder builder, Offset actuatorRangeOffset) { builder.AddStruct(1, actuatorRangeOffset.Value, 0); } + public static Offset EndFActuator(FlatBufferBuilder builder) { int o = builder.EndObject(); - builder.Required(o, 4); // motor_name - builder.Required(o, 6); // valid_input - return new Offset(o); + builder.Required(o, 4); // actuator_name + builder.Required(o, 6); // actuator_range + return new Offset(o); } - public static VectorOffset CreateSortedVectorOfFMotor(FlatBufferBuilder builder, Offset[] offsets) { - Array.Sort(offsets, (Offset o1, Offset o2) => Table.CompareStrings(Table.__offset(4, o1.Value, builder.DataBuffer), Table.__offset(4, o2.Value, builder.DataBuffer), builder.DataBuffer)); + public static VectorOffset CreateSortedVectorOfFActuator(FlatBufferBuilder builder, Offset[] offsets) { + Array.Sort(offsets, (Offset o1, Offset o2) => Table.CompareStrings(Table.__offset(4, o1.Value, builder.DataBuffer), Table.__offset(4, o2.Value, builder.DataBuffer), builder.DataBuffer)); return builder.CreateVectorOfTables(offsets); } - public static FMotor? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + public static FActuator? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { @@ -371,55 +396,60 @@ public static VectorOffset CreateSortedVectorOfFMotor(FlatBufferBuilder builder, start += middle; span -= middle; } else { - return new FMotor().__assign(tableOffset, bb); + return new FActuator().__assign(tableOffset, bb); } } return null; } }; -public struct FOBS : IFlatbufferObject +public struct FSensor : IFlatbufferObject { private Table __p; public ByteBuffer ByteBuffer { get { return this.__p.bb; } } - public static FOBS GetRootAsFOBS(ByteBuffer _bb) { return GetRootAsFOBS(_bb, new FOBS()); } - public static FOBS GetRootAsFOBS(ByteBuffer _bb, FOBS obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } + public static FSensor GetRootAsFSensor(ByteBuffer _bb) { return GetRootAsFSensor(_bb, new FSensor()); } + public static FSensor GetRootAsFSensor(ByteBuffer _bb, FSensor obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } public void __init(int _i, ByteBuffer _bb) { this.__p.bb_pos = _i; this.__p.bb = _bb; } - public FOBS __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } - - public string ObservationName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } - public ArraySegment? GetObservationNameBytes() { return this.__p.__vector_as_arraysegment(4); } - public FObservation ObservationType { get { int o = this.__p.__offset(6); return o != 0 ? (FObservation)this.__p.bb.Get(o + this.__p.bb_pos) : FObservation.NONE; } } - public TTable? Observation() where TTable : struct, IFlatbufferObject { int o = this.__p.__offset(8); return o != 0 ? (TTable?)this.__p.__union(o) : null; } - - public static Offset CreateFOBS(FlatBufferBuilder builder, - StringOffset observation_nameOffset = default(StringOffset), - FObservation observation_type = FObservation.NONE, - int observationOffset = 0) { + public FSensor __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } + + public string SensorName { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetSensorNameBytes() { return __p.__vector_as_span(4); } +#else + public ArraySegment? GetSensorNameBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetSensorNameArray() { return this.__p.__vector_as_array(4); } + public FObservation SensorValueType { get { int o = this.__p.__offset(6); return o != 0 ? (FObservation)this.__p.bb.Get(o + this.__p.bb_pos) : FObservation.NONE; } } + public TTable? SensorValue() where TTable : struct, IFlatbufferObject { int o = this.__p.__offset(8); return o != 0 ? (TTable?)this.__p.__union(o) : null; } + + public static Offset CreateFSensor(FlatBufferBuilder builder, + StringOffset sensor_nameOffset = default(StringOffset), + FObservation sensor_value_type = FObservation.NONE, + int sensor_valueOffset = 0) { builder.StartObject(3); - AddObservation(builder, observationOffset); - AddObservationName(builder, observation_nameOffset); - AddObservationType(builder, observation_type); - return EndFOBS(builder); + FSensor.AddSensorValue(builder, sensor_valueOffset); + FSensor.AddSensorName(builder, sensor_nameOffset); + FSensor.AddSensorValueType(builder, sensor_value_type); + return FSensor.EndFSensor(builder); } - public static void StartFOBS(FlatBufferBuilder builder) { builder.StartObject(3); } - public static void AddObservationName(FlatBufferBuilder builder, StringOffset observationNameOffset) { builder.AddOffset(0, observationNameOffset.Value, 0); } - public static void AddObservationType(FlatBufferBuilder builder, FObservation observationType) { builder.AddByte(1, (byte)observationType, 0); } - public static void AddObservation(FlatBufferBuilder builder, int observationOffset) { builder.AddOffset(2, observationOffset, 0); } - public static Offset EndFOBS(FlatBufferBuilder builder) { + public static void StartFSensor(FlatBufferBuilder builder) { builder.StartObject(3); } + public static void AddSensorName(FlatBufferBuilder builder, StringOffset sensorNameOffset) { builder.AddOffset(0, sensorNameOffset.Value, 0); } + public static void AddSensorValueType(FlatBufferBuilder builder, FObservation sensorValueType) { builder.AddByte(1, (byte)sensorValueType, 0); } + public static void AddSensorValue(FlatBufferBuilder builder, int sensorValueOffset) { builder.AddOffset(2, sensorValueOffset, 0); } + public static Offset EndFSensor(FlatBufferBuilder builder) { int o = builder.EndObject(); - builder.Required(o, 4); // observation_name - return new Offset(o); + builder.Required(o, 4); // sensor_name + return new Offset(o); } - public static VectorOffset CreateSortedVectorOfFOBS(FlatBufferBuilder builder, Offset[] offsets) { - Array.Sort(offsets, (Offset o1, Offset o2) => Table.CompareStrings(Table.__offset(4, o1.Value, builder.DataBuffer), Table.__offset(4, o2.Value, builder.DataBuffer), builder.DataBuffer)); + public static VectorOffset CreateSortedVectorOfFSensor(FlatBufferBuilder builder, Offset[] offsets) { + Array.Sort(offsets, (Offset o1, Offset o2) => Table.CompareStrings(Table.__offset(4, o1.Value, builder.DataBuffer), Table.__offset(4, o2.Value, builder.DataBuffer), builder.DataBuffer)); return builder.CreateVectorOfTables(offsets); } - public static FOBS? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { - byte[] byteKey = Encoding.UTF8.GetBytes(key); + public static FSensor? __lookup_by_key(int vectorLocation, string key, ByteBuffer bb) { + byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key); int span = bb.GetInt(vectorLocation - 4); int start = 0; while (span != 0) { @@ -433,7 +463,7 @@ public static VectorOffset CreateSortedVectorOfFOBS(FlatBufferBuilder builder, O start += middle; span -= middle; } else { - return new FOBS().__assign(tableOffset, bb); + return new FSensor().__assign(tableOffset, bb); } } return null; diff --git a/Runtime/Messaging/FBS/NeodroidFBSStates.cs b/Runtime/Messaging/FBS/NeodroidFBSStates.cs index b51a50d43..5968b30a2 100644 --- a/Runtime/Messaging/FBS/NeodroidFBSStates.cs +++ b/Runtime/Messaging/FBS/NeodroidFBSStates.cs @@ -5,7 +5,7 @@ using System; using FlatBuffers; -namespace Neodroid.Runtime.Messaging.FBS +namespace droid.Runtime.Messaging.FBS { public struct FStates : IFlatbufferObject { @@ -21,12 +21,18 @@ public struct FStates : IFlatbufferObject public int StatesLength { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__vector_len(o) : 0; } } public FState? StatesByKey(string key) { int o = this.__p.__offset(4); return o != 0 ? FState.__lookup_by_key(this.__p.__vector(o), key, this.__p.bb) : null; } public string ApiVersion { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetApiVersionBytes() { return __p.__vector_as_span(6); } +#else public ArraySegment? GetApiVersionBytes() { return this.__p.__vector_as_arraysegment(6); } +#endif + public byte[] GetApiVersionArray() { return this.__p.__vector_as_array(6); } public FSimulatorConfiguration? SimulatorConfiguration { get { int o = this.__p.__offset(8); return o != 0 ? (FSimulatorConfiguration?)(new FSimulatorConfiguration()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } public static void StartFStates(FlatBufferBuilder builder) { builder.StartObject(3); } public static void AddStates(FlatBufferBuilder builder, VectorOffset statesOffset) { builder.AddOffset(0, statesOffset.Value, 0); } public static VectorOffset CreateStatesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateStatesVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartStatesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddApiVersion(FlatBufferBuilder builder, StringOffset apiVersionOffset) { builder.AddOffset(1, apiVersionOffset.Value, 0); } public static void AddSimulatorConfiguration(FlatBufferBuilder builder, Offset simulatorConfigurationOffset) { builder.AddStruct(2, simulatorConfigurationOffset.Value, 0); } @@ -35,6 +41,7 @@ public static Offset EndFStates(FlatBufferBuilder builder) { return new Offset(o); } public static void FinishFStatesBuffer(FlatBufferBuilder builder, Offset offset) { builder.Finish(offset.Value, "XSTA"); } + public static void FinishSizePrefixedFStatesBuffer(FlatBufferBuilder builder, Offset offset) { builder.FinishSizePrefixed(offset.Value, "XSTA"); } }; diff --git a/Runtime/Messaging/FBS/NeodroidFBSTypes.cs b/Runtime/Messaging/FBS/NeodroidFBSTypes.cs index 97a123ebf..da035d8f1 100644 --- a/Runtime/Messaging/FBS/NeodroidFBSTypes.cs +++ b/Runtime/Messaging/FBS/NeodroidFBSTypes.cs @@ -5,13 +5,16 @@ using System; using FlatBuffers; -namespace Neodroid.Runtime.Messaging.FBS +namespace droid.Runtime.Messaging.FBS { public enum FByteDataType : byte { - PNG = 0, - JPEG = 1, - Other = 2, + UINT8 = 0, + FLOAT16 = 1, + FLOAT32 = 2, + PNG = 3, + JPEG = 4, + Other = 5, }; public struct FSingle : IFlatbufferObject @@ -123,25 +126,31 @@ public struct FArray : IFlatbufferObject public float Array(int j) { int o = this.__p.__offset(4); return o != 0 ? this.__p.bb.GetFloat(this.__p.__vector(o) + j * 4) : (float)0; } public int ArrayLength { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__vector_len(o) : 0; } } +#if ENABLE_SPAN_T + public Span GetArrayBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetArrayBytes() { return this.__p.__vector_as_arraysegment(4); } - public FRange? Ranges(int j) { int o = this.__p.__offset(6); return o != 0 ? (FRange?)(new FRange()).__assign(this.__p.__vector(o) + j * 12, this.__p.bb) : null; } +#endif + public float[] GetArrayArray() { return this.__p.__vector_as_array(4); } + public FRange? Ranges(int j) { int o = this.__p.__offset(6); return o != 0 ? (FRange?)(new FRange()).__assign(this.__p.__vector(o) + j * 16, this.__p.bb) : null; } public int RangesLength { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.__vector_len(o) : 0; } } public static Offset CreateFArray(FlatBufferBuilder builder, VectorOffset arrayOffset = default(VectorOffset), VectorOffset rangesOffset = default(VectorOffset)) { builder.StartObject(2); - AddRanges(builder, rangesOffset); - AddArray(builder, arrayOffset); - return EndFArray(builder); + FArray.AddRanges(builder, rangesOffset); + FArray.AddArray(builder, arrayOffset); + return FArray.EndFArray(builder); } public static void StartFArray(FlatBufferBuilder builder) { builder.StartObject(2); } public static void AddArray(FlatBufferBuilder builder, VectorOffset arrayOffset) { builder.AddOffset(0, arrayOffset.Value, 0); } public static VectorOffset CreateArrayVector(FlatBufferBuilder builder, float[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddFloat(data[i]); return builder.EndVector(); } + public static VectorOffset CreateArrayVectorBlock(FlatBufferBuilder builder, float[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartArrayVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddRanges(FlatBufferBuilder builder, VectorOffset rangesOffset) { builder.AddOffset(1, rangesOffset.Value, 0); } - public static void StartRangesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(12, numElems, 4); } + public static void StartRangesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(16, numElems, 4); } public static Offset EndFArray(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // array @@ -149,63 +158,77 @@ public static Offset EndFArray(FlatBufferBuilder builder) { } }; -public struct FRB : IFlatbufferObject +public struct FRBObs : IFlatbufferObject { private Table __p; public ByteBuffer ByteBuffer { get { return this.__p.bb; } } - public static FRB GetRootAsFRB(ByteBuffer _bb) { return GetRootAsFRB(_bb, new FRB()); } - public static FRB GetRootAsFRB(ByteBuffer _bb, FRB obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } + public static FRBObs GetRootAsFRBObs(ByteBuffer _bb) { return GetRootAsFRBObs(_bb, new FRBObs()); } + public static FRBObs GetRootAsFRBObs(ByteBuffer _bb, FRBObs obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } public void __init(int _i, ByteBuffer _bb) { this.__p.bb_pos = _i; this.__p.bb = _bb; } - public FRB __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } + public FRBObs __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public FBody? Body { get { int o = this.__p.__offset(4); return o != 0 ? (FBody?)(new FBody()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + public FRange? VelRange { get { int o = this.__p.__offset(6); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + public FRange? AngRange { get { int o = this.__p.__offset(8); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } - public static void StartFRB(FlatBufferBuilder builder) { builder.StartObject(1); } + public static void StartFRBObs(FlatBufferBuilder builder) { builder.StartObject(3); } public static void AddBody(FlatBufferBuilder builder, Offset bodyOffset) { builder.AddStruct(0, bodyOffset.Value, 0); } - public static Offset EndFRB(FlatBufferBuilder builder) { + public static void AddVelRange(FlatBufferBuilder builder, Offset velRangeOffset) { builder.AddStruct(1, velRangeOffset.Value, 0); } + public static void AddAngRange(FlatBufferBuilder builder, Offset angRangeOffset) { builder.AddStruct(2, angRangeOffset.Value, 0); } + public static Offset EndFRBObs(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // body - return new Offset(o); + return new Offset(o); } }; -public struct FET : IFlatbufferObject +public struct FETObs : IFlatbufferObject { private Table __p; public ByteBuffer ByteBuffer { get { return this.__p.bb; } } - public static FET GetRootAsFET(ByteBuffer _bb) { return GetRootAsFET(_bb, new FET()); } - public static FET GetRootAsFET(ByteBuffer _bb, FET obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } + public static FETObs GetRootAsFETObs(ByteBuffer _bb) { return GetRootAsFETObs(_bb, new FETObs()); } + public static FETObs GetRootAsFETObs(ByteBuffer _bb, FETObs obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } public void __init(int _i, ByteBuffer _bb) { this.__p.bb_pos = _i; this.__p.bb = _bb; } - public FET __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } + public FETObs __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public FEulerTransform? Transform { get { int o = this.__p.__offset(4); return o != 0 ? (FEulerTransform?)(new FEulerTransform()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + public FRange? PosRange { get { int o = this.__p.__offset(6); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + public FRange? RotRange { get { int o = this.__p.__offset(8); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + public FRange? DirRange { get { int o = this.__p.__offset(10); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } - public static void StartFET(FlatBufferBuilder builder) { builder.StartObject(1); } + public static void StartFETObs(FlatBufferBuilder builder) { builder.StartObject(4); } public static void AddTransform(FlatBufferBuilder builder, Offset transformOffset) { builder.AddStruct(0, transformOffset.Value, 0); } - public static Offset EndFET(FlatBufferBuilder builder) { + public static void AddPosRange(FlatBufferBuilder builder, Offset posRangeOffset) { builder.AddStruct(1, posRangeOffset.Value, 0); } + public static void AddRotRange(FlatBufferBuilder builder, Offset rotRangeOffset) { builder.AddStruct(2, rotRangeOffset.Value, 0); } + public static void AddDirRange(FlatBufferBuilder builder, Offset dirRangeOffset) { builder.AddStruct(3, dirRangeOffset.Value, 0); } + public static Offset EndFETObs(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // transform - return new Offset(o); + return new Offset(o); } }; -public struct FQT : IFlatbufferObject +public struct FQTObs : IFlatbufferObject { private Table __p; public ByteBuffer ByteBuffer { get { return this.__p.bb; } } - public static FQT GetRootAsFQT(ByteBuffer _bb) { return GetRootAsFQT(_bb, new FQT()); } - public static FQT GetRootAsFQT(ByteBuffer _bb, FQT obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } + public static FQTObs GetRootAsFQTObs(ByteBuffer _bb) { return GetRootAsFQTObs(_bb, new FQTObs()); } + public static FQTObs GetRootAsFQTObs(ByteBuffer _bb, FQTObs obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } public void __init(int _i, ByteBuffer _bb) { this.__p.bb_pos = _i; this.__p.bb = _bb; } - public FQT __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } + public FQTObs __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public FQuaternionTransform? Transform { get { int o = this.__p.__offset(4); return o != 0 ? (FQuaternionTransform?)(new FQuaternionTransform()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + public FRange? PosRange { get { int o = this.__p.__offset(6); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } + public FRange? RotRange { get { int o = this.__p.__offset(8); return o != 0 ? (FRange?)(new FRange()).__assign(o + this.__p.bb_pos, this.__p.bb) : null; } } - public static void StartFQT(FlatBufferBuilder builder) { builder.StartObject(1); } + public static void StartFQTObs(FlatBufferBuilder builder) { builder.StartObject(3); } public static void AddTransform(FlatBufferBuilder builder, Offset transformOffset) { builder.AddStruct(0, transformOffset.Value, 0); } - public static Offset EndFQT(FlatBufferBuilder builder) { + public static void AddPosRange(FlatBufferBuilder builder, Offset posRangeOffset) { builder.AddStruct(1, posRangeOffset.Value, 0); } + public static void AddRotRange(FlatBufferBuilder builder, Offset rotRangeOffset) { builder.AddStruct(2, rotRangeOffset.Value, 0); } + public static Offset EndFQTObs(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // transform - return new Offset(o); + return new Offset(o); } }; @@ -219,13 +242,18 @@ public struct FString : IFlatbufferObject public FString __assign(int _i, ByteBuffer _bb) { this.__init(_i, _bb); return this; } public string Str { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__string(o + this.__p.bb_pos) : null; } } +#if ENABLE_SPAN_T + public Span GetStrBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetStrBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public byte[] GetStrArray() { return this.__p.__vector_as_array(4); } public static Offset CreateFString(FlatBufferBuilder builder, StringOffset strOffset = default(StringOffset)) { builder.StartObject(1); - AddStr(builder, strOffset); - return EndFString(builder); + FString.AddStr(builder, strOffset); + return FString.EndFString(builder); } public static void StartFString(FlatBufferBuilder builder) { builder.StartObject(1); } @@ -248,23 +276,43 @@ public struct FByteArray : IFlatbufferObject public byte Bytes(int j) { int o = this.__p.__offset(4); return o != 0 ? this.__p.bb.Get(this.__p.__vector(o) + j * 1) : (byte)0; } public int BytesLength { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__vector_len(o) : 0; } } +#if ENABLE_SPAN_T + public Span GetBytesBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetBytesBytes() { return this.__p.__vector_as_arraysegment(4); } - public FByteDataType Type { get { int o = this.__p.__offset(6); return o != 0 ? (FByteDataType)this.__p.bb.Get(o + this.__p.bb_pos) : FByteDataType.PNG; } } +#endif + public byte[] GetBytesArray() { return this.__p.__vector_as_array(4); } + public FByteDataType Type { get { int o = this.__p.__offset(6); return o != 0 ? (FByteDataType)this.__p.bb.Get(o + this.__p.bb_pos) : FByteDataType.UINT8; } } + public int Shape(int j) { int o = this.__p.__offset(8); return o != 0 ? this.__p.bb.GetInt(this.__p.__vector(o) + j * 4) : (int)0; } + public int ShapeLength { get { int o = this.__p.__offset(8); return o != 0 ? this.__p.__vector_len(o) : 0; } } +#if ENABLE_SPAN_T + public Span GetShapeBytes() { return __p.__vector_as_span(8); } +#else + public ArraySegment? GetShapeBytes() { return this.__p.__vector_as_arraysegment(8); } +#endif + public int[] GetShapeArray() { return this.__p.__vector_as_array(8); } public static Offset CreateFByteArray(FlatBufferBuilder builder, VectorOffset bytesOffset = default(VectorOffset), - FByteDataType type = FByteDataType.PNG) { - builder.StartObject(2); - AddBytes(builder, bytesOffset); - AddType(builder, type); - return EndFByteArray(builder); + FByteDataType type = FByteDataType.UINT8, + VectorOffset shapeOffset = default(VectorOffset)) { + builder.StartObject(3); + FByteArray.AddShape(builder, shapeOffset); + FByteArray.AddBytes(builder, bytesOffset); + FByteArray.AddType(builder, type); + return FByteArray.EndFByteArray(builder); } - public static void StartFByteArray(FlatBufferBuilder builder) { builder.StartObject(2); } + public static void StartFByteArray(FlatBufferBuilder builder) { builder.StartObject(3); } public static void AddBytes(FlatBufferBuilder builder, VectorOffset bytesOffset) { builder.AddOffset(0, bytesOffset.Value, 0); } public static VectorOffset CreateBytesVector(FlatBufferBuilder builder, byte[] data) { builder.StartVector(1, data.Length, 1); for (int i = data.Length - 1; i >= 0; i--) builder.AddByte(data[i]); return builder.EndVector(); } + public static VectorOffset CreateBytesVectorBlock(FlatBufferBuilder builder, byte[] data) { builder.StartVector(1, data.Length, 1); builder.Add(data); return builder.EndVector(); } public static void StartBytesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(1, numElems, 1); } public static void AddType(FlatBufferBuilder builder, FByteDataType type) { builder.AddByte(1, (byte)type, 0); } + public static void AddShape(FlatBufferBuilder builder, VectorOffset shapeOffset) { builder.AddOffset(2, shapeOffset.Value, 0); } + public static VectorOffset CreateShapeVector(FlatBufferBuilder builder, int[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddInt(data[i]); return builder.EndVector(); } + public static VectorOffset CreateShapeVectorBlock(FlatBufferBuilder builder, int[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } + public static void StartShapeVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static Offset EndFByteArray(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 4); // bytes @@ -286,8 +334,8 @@ public struct FValue : IFlatbufferObject public static Offset CreateFValue(FlatBufferBuilder builder, double val = 0.0) { builder.StartObject(1); - AddVal(builder, val); - return EndFValue(builder); + FValue.AddVal(builder, val); + return FValue.EndFValue(builder); } public static void StartFValue(FlatBufferBuilder builder) { builder.StartObject(1); } @@ -309,18 +357,24 @@ public struct FValues : IFlatbufferObject public double Vals(int j) { int o = this.__p.__offset(4); return o != 0 ? this.__p.bb.GetDouble(this.__p.__vector(o) + j * 8) : (double)0; } public int ValsLength { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__vector_len(o) : 0; } } +#if ENABLE_SPAN_T + public Span GetValsBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetValsBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public double[] GetValsArray() { return this.__p.__vector_as_array(4); } public static Offset CreateFValues(FlatBufferBuilder builder, VectorOffset valsOffset = default(VectorOffset)) { builder.StartObject(1); - AddVals(builder, valsOffset); - return EndFValues(builder); + FValues.AddVals(builder, valsOffset); + return FValues.EndFValues(builder); } public static void StartFValues(FlatBufferBuilder builder) { builder.StartObject(1); } public static void AddVals(FlatBufferBuilder builder, VectorOffset valsOffset) { builder.AddOffset(0, valsOffset.Value, 0); } public static VectorOffset CreateValsVector(FlatBufferBuilder builder, double[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddDouble(data[i]); return builder.EndVector(); } + public static VectorOffset CreateValsVectorBlock(FlatBufferBuilder builder, double[] data) { builder.StartVector(8, data.Length, 8); builder.Add(data); return builder.EndVector(); } public static void StartValsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); } public static Offset EndFValues(FlatBufferBuilder builder) { int o = builder.EndObject(); @@ -365,8 +419,8 @@ public struct FVector3s : IFlatbufferObject public static Offset CreateFVector3s(FlatBufferBuilder builder, VectorOffset pointsOffset = default(VectorOffset)) { builder.StartObject(1); - AddPoints(builder, pointsOffset); - return EndFVector3s(builder); + FVector3s.AddPoints(builder, pointsOffset); + return FVector3s.EndFVector3s(builder); } public static void StartFVector3s(FlatBufferBuilder builder) { builder.StartObject(1); } @@ -390,7 +444,12 @@ public struct FValuedVector3s : IFlatbufferObject public double Vals(int j) { int o = this.__p.__offset(4); return o != 0 ? this.__p.bb.GetDouble(this.__p.__vector(o) + j * 8) : (double)0; } public int ValsLength { get { int o = this.__p.__offset(4); return o != 0 ? this.__p.__vector_len(o) : 0; } } +#if ENABLE_SPAN_T + public Span GetValsBytes() { return __p.__vector_as_span(4); } +#else public ArraySegment? GetValsBytes() { return this.__p.__vector_as_arraysegment(4); } +#endif + public double[] GetValsArray() { return this.__p.__vector_as_array(4); } public FVector3? Points(int j) { int o = this.__p.__offset(6); return o != 0 ? (FVector3?)(new FVector3()).__assign(this.__p.__vector(o) + j * 24, this.__p.bb) : null; } public int PointsLength { get { int o = this.__p.__offset(6); return o != 0 ? this.__p.__vector_len(o) : 0; } } @@ -398,14 +457,15 @@ public static Offset CreateFValuedVector3s(FlatBufferBuilder bu VectorOffset valsOffset = default(VectorOffset), VectorOffset pointsOffset = default(VectorOffset)) { builder.StartObject(2); - AddPoints(builder, pointsOffset); - AddVals(builder, valsOffset); - return EndFValuedVector3s(builder); + FValuedVector3s.AddPoints(builder, pointsOffset); + FValuedVector3s.AddVals(builder, valsOffset); + return FValuedVector3s.EndFValuedVector3s(builder); } public static void StartFValuedVector3s(FlatBufferBuilder builder) { builder.StartObject(2); } public static void AddVals(FlatBufferBuilder builder, VectorOffset valsOffset) { builder.AddOffset(0, valsOffset.Value, 0); } public static VectorOffset CreateValsVector(FlatBufferBuilder builder, double[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddDouble(data[i]); return builder.EndVector(); } + public static VectorOffset CreateValsVectorBlock(FlatBufferBuilder builder, double[] data) { builder.StartVector(8, data.Length, 8); builder.Add(data); return builder.EndVector(); } public static void StartValsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); } public static void AddPoints(FlatBufferBuilder builder, VectorOffset pointsOffset) { builder.AddOffset(1, pointsOffset.Value, 0); } public static void StartPointsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(24, numElems, 8); } diff --git a/Runtime/Messaging/FBS/FBSReactionUtilities.cs b/Runtime/Messaging/FBSReactionUtilities.cs similarity index 75% rename from Runtime/Messaging/FBS/FBSReactionUtilities.cs rename to Runtime/Messaging/FBSReactionUtilities.cs index 747a185f2..7fa00d835 100644 --- a/Runtime/Messaging/FBS/FBSReactionUtilities.cs +++ b/Runtime/Messaging/FBSReactionUtilities.cs @@ -1,23 +1,33 @@ using System; using System.Collections.Generic; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Messaging.Messages.Displayables; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.FBS; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Messaging.Messages.Displayables; +using droid.Runtime.Structs; using UnityEngine; -namespace Neodroid.Runtime.Messaging.FBS { +namespace droid.Runtime.Messaging { /// - /// /// public static class FbsReactionUtilities { + static List _vector_out = new List(); + static List _float_out = new List(); + static List _output = new List(); + #region PublicMethods - static Reaction _null_reaction = new Reaction(null, null, null, null, null, ""); + static Reaction _null_reaction = new Reaction(null, + null, + null, + null, + null, + ""); + static ReactionParameters _null_reaction_parameters = new ReactionParameters(); static List _out_reactions = new List(); /// - /// /// /// /// @@ -46,15 +56,13 @@ public static Tuple des Debug.LogWarning("Empty reactions received"); } - return new Tuple( - _out_reactions.ToArray(), - close, - api_version, - simulator_configuration); + return new Tuple(_out_reactions.ToArray(), + close, + api_version, + simulator_configuration); } /// - /// /// /// /// @@ -68,14 +76,13 @@ public static Reaction deserialise_reaction(FReaction? reaction) { var parameters = deserialise_parameters(r); var serialised_message = deserialise_serialised_message(r); - return new Reaction( - parameters, - motions, - configurations, - unobservables, - displayables, - serialised_message, - recipient_environment : r.EnvironmentName); + return new Reaction(parameters, + motions, + configurations, + unobservables, + displayables, + serialised_message, + r.EnvironmentName); } Debug.LogWarning("Empty reaction received"); @@ -84,10 +91,6 @@ public static Reaction deserialise_reaction(FReaction? reaction) { #endregion - static List _vector_out = new List(); - static List _float_out = new List(); - static List _output = new List(); - #region PrivateMethods static String deserialise_simulator_configuration(FReaction reaction_value) { @@ -112,15 +115,22 @@ static Unobservables deserialise_unobservables(FReaction reaction) { static ReactionParameters deserialise_parameters(FReaction reaction) { if (reaction.Parameters.HasValue) { - return new ReactionParameters( - reaction.Parameters.Value.Terminable, - reaction.Parameters.Value.Step, - reaction.Parameters.Value.Reset, - reaction.Parameters.Value.Configure, - reaction.Parameters.Value.Describe, - reaction.Parameters.Value.EpisodeCount); + var s = StepResetObserve.Observe_; + if (reaction.Parameters.Value.Reset) { + s = StepResetObserve.Reset_; + }else if (reaction.Parameters.Value.Step) { + s = StepResetObserve.Step_; + } + + return new ReactionParameters(s, + reaction.Parameters.Value.Terminable, + reaction.Parameters.Value.Configure, + reaction.Parameters.Value.Describe, + reaction.Parameters.Value.EpisodeCount); } + + Debug.LogWarning("NULL PARAMETERS"); return _null_reaction_parameters; } @@ -198,9 +208,9 @@ static Displayable deserialise_displayable(FDisplayable? displayable) { return null; } - static MotorMotion[] deserialise_motions(FReaction reaction) { + static IMotion[] deserialise_motions(FReaction reaction) { var l = reaction.MotionsLength; - var motions = new MotorMotion[l]; + var motions = new IMotion[l]; for (var i = 0; i < l; i++) { motions[i] = deserialise_motion(reaction.Motions(i)); } @@ -211,15 +221,18 @@ static MotorMotion[] deserialise_motions(FReaction reaction) { static Configuration deserialise_configuration(FConfiguration? configuration) { if (configuration.HasValue) { var c = configuration.Value; - return new Configuration(c.ConfigurableName, (float)c.ConfigurableValue); + var sample_random = false; //TODO: c.SampleRandom; + return new Configuration(c.ConfigurableName, (float)c.ConfigurableValue, sample_random); } return null; } - static MotorMotion deserialise_motion(FMotion? motion) { + static ActuatorMotion deserialise_motion(FMotion? motion) { if (motion.HasValue) { - return new MotorMotion(motion.Value.ActorName, motion.Value.MotorName, (float)motion.Value.Strength); + return new ActuatorMotion(motion.Value.ActorName, + motion.Value.ActuatorName, + (float)motion.Value.Strength); } return null; @@ -250,11 +263,10 @@ static Pose deserialise_pose(FQuaternionTransform? trans) { var position = trans.Value.Position; var rotation = trans.Value.Rotation; var vec3_pos = new Vector3((float)position.X, (float)position.Y, (float)position.Z); - var quat_rot = new Quaternion( - (float)rotation.X, - (float)rotation.Y, - (float)rotation.Z, - (float)rotation.W); + var quat_rot = new Quaternion((float)rotation.X, + (float)rotation.Y, + (float)rotation.Z, + (float)rotation.W); return new Pose(vec3_pos, quat_rot); } @@ -275,4 +287,4 @@ static Body deserialise_body(FBody? body) { #endregion } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/FBSReactionUtilities.cs.meta b/Runtime/Messaging/FBSReactionUtilities.cs.meta new file mode 100644 index 000000000..8683fa403 --- /dev/null +++ b/Runtime/Messaging/FBSReactionUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6defa5aa1afa4fd2bdeb29bffc738995 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Messaging/FBSStateUtilities.cs b/Runtime/Messaging/FBSStateUtilities.cs new file mode 100644 index 000000000..c0b4c18c0 --- /dev/null +++ b/Runtime/Messaging/FBSStateUtilities.cs @@ -0,0 +1,678 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.FBS; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Prototyping.Actors; +using droid.Runtime.Prototyping.Configurables.Transforms; +using FlatBuffers; +using UnityEngine; + +namespace droid.Runtime.Messaging { + /// + /// + public static class FbsStateUtilities { + static VectorOffset _null_vector_offset = new VectorOffset(); + static Offset _null_unobservables_offset = new Offset(); + + #region PublicMethods + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static byte[] Serialise(EnvironmentSnapshot[] states, + SimulatorConfigurationMessage simulator_configuration = null, + bool do_serialise_unobservables = false, + bool serialise_individual_observables = false, + bool do_serialise_observables = false, + string api_version = "N/A") { + var b = new FlatBufferBuilder(1); + var state_offsets = new Offset[states.Length]; + var i = 0; + foreach (var state in states) { + state_offsets[i++] = SerialiseState(b, + state, + do_serialise_unobservables, + do_serialise_observables, + serialise_individual_observables : + serialise_individual_observables); + } + + var states_vector_offset = FStates.CreateStatesVector(b, state_offsets); + + var api_version_offset = b.CreateString(api_version); + + FStates.StartFStates(b); + FStates.AddStates(b, states_vector_offset); + FStates.AddApiVersion(b, api_version_offset); + FStates.AddSimulatorConfiguration(b, Serialise(b, simulator_configuration)); + var states_offset = FStates.EndFStates(b); + + FStates.FinishFStatesBuffer(b, states_offset); + + return b.SizedByteArray(); + } + + #endregion + + #region PrivateMethods + + /// + /// + /// + /// + /// + static Offset + Serialise(FlatBufferBuilder b, SimulatorConfigurationMessage configuration) { + return FSimulatorConfiguration.CreateFSimulatorConfiguration(b, + configuration.Width, + configuration.Height, + configuration.FullScreen, + configuration.QualityLevel, + configuration.TimeScale, + configuration.TargetFrameRate, + (FSimulationType)configuration + .SimulationType, + configuration.FrameSkips, + 0, //TODO: Remove + configuration.NumOfEnvironments, + configuration.DoSerialiseIndividualSensors, + configuration.DoSerialiseUnobservables + //TODO: ,configuration.DoSerialiseAggregatedFloatArray + ); + } + + /// + /// + /// + /// + /// + /// + /// + /// + static Offset SerialiseState(FlatBufferBuilder b, + EnvironmentSnapshot snapshot, + bool do_serialise_unobservables = false, + bool do_serialise_aggregated_float_array = false, + bool serialise_individual_observables = false) { + var n = b.CreateString(snapshot.EnvironmentName); + + var observables_vector = _null_vector_offset; + if (do_serialise_aggregated_float_array) { + observables_vector = FState.CreateObservablesVector(b, snapshot.Observables); + } + + var unobservables = _null_unobservables_offset; + if (do_serialise_unobservables) { + var state_unobservables = snapshot.Unobservables; + if (state_unobservables != null) { + var bodies = state_unobservables.Bodies; + + FUnobservables.StartBodiesVector(b, bodies.Length); + foreach (var rig in bodies) { + var vel = rig.Velocity; + var ang = rig.AngularVelocity; + FBody.CreateFBody(b, + vel.x, + vel.y, + vel.z, + ang.x, + ang.y, + ang.z); + } + + var bodies_vector = b.EndVector(); + + var poses = state_unobservables.Poses; + + FUnobservables.StartPosesVector(b, poses.Length); + foreach (var tra in poses) { + var pos = tra.position; + var rot = tra.rotation; + FQuaternionTransform.CreateFQuaternionTransform(b, + pos.x, + pos.y, + pos.z, + rot.x, + rot.y, + rot.z, + rot.w); + } + + var poses_vector = b.EndVector(); + + FUnobservables.StartFUnobservables(b); + FUnobservables.AddPoses(b, poses_vector); + FUnobservables.AddBodies(b, bodies_vector); + unobservables = FUnobservables.EndFUnobservables(b); + } + } + + var description_offset = new Offset(); + if (snapshot.Description != null) { + description_offset = Serialise(b, snapshot); + } + + var d = new StringOffset(); + if (snapshot.DebugMessage != "") { + d = b.CreateString(snapshot.DebugMessage); + } + + var t = b.CreateString(snapshot.TerminationReason); + + FState.StartFState(b); + FState.AddEnvironmentName(b, n); + + FState.AddFrameNumber(b, snapshot.FrameNumber); + if (do_serialise_aggregated_float_array) { + FState.AddObservables(b, observables_vector); + } + + if (do_serialise_unobservables) { + FState.AddUnobservables(b, unobservables); + } + + FState.AddSignal(b, snapshot.Signal); + + FState.AddTerminated(b, snapshot.Terminated); + FState.AddTerminationReason(b, t); + + if (snapshot.Description != null) { + FState.AddEnvironmentDescription(b, description_offset); + } + + if (snapshot.DebugMessage != "") { + FState.AddExtraSerialisedMessage(b, d); + } + + return FState.EndFState(b); + } + + static Offset Serialise(FlatBufferBuilder b, IActuator actuator, string identifier) { + var n = b.CreateString(identifier); + FActuator.StartFActuator(b); + FActuator.AddActuatorName(b, n); + FActuator.AddActuatorRange(b, + FRange.CreateFRange(b, + actuator.MotionSpace.DecimalGranularity, + actuator.MotionSpace.Max, + actuator.MotionSpace.Min, + actuator.MotionSpace.NormalisedBool)); + return FActuator.EndFActuator(b); + } + + /// + /// + /// + /// + /// + static Offset Serialise(FlatBufferBuilder b, IHasEulerTransform sensor) { + FETObs.StartFETObs(b); + Vector3 pos = sensor.Position, rot = sensor.Rotation, dir = sensor.Direction; + FETObs.AddTransform(b, + FEulerTransform.CreateFEulerTransform(b, + pos.x, + pos.y, + pos.z, + rot.x, + rot.y, + rot.z, + dir.x, + dir.y, + dir.z)); + + return FETObs.EndFETObs(b); + } + + /// + /// + /// + /// + /// + static Offset Serialise(FlatBufferBuilder b, IHasQuaternionTransform sensor) { + var pos = sensor.Position; + var rot = sensor.Rotation; + var pos_range = sensor.PositionSpace; + var rot_range = sensor.RotationSpace; + FQTObs.StartFQTObs(b); + FQTObs.AddPosRange(b, + FRange.CreateFRange(b, + pos_range.DecimalGranularity, + pos_range.Max, + pos_range.Min, + pos_range.NormalisedBool)); + FQTObs.AddRotRange(b, + FRange.CreateFRange(b, + rot_range.DecimalGranularity, + rot_range.Max, + rot_range.Min, + rot_range.NormalisedBool)); + FQTObs.AddTransform(b, + FQuaternionTransform.CreateFQuaternionTransform(b, + pos.x, + pos.y, + pos.z, + rot.x, + rot.y, + rot.z, + rot.w)); + + return FQTObs.EndFQTObs(b); + } + + static Offset Serialise(FlatBufferBuilder b, IHasByteArray sensor) { + var v_offset = FByteArray.CreateBytesVectorBlock(b, sensor.Bytes); + //var v_offset = CustomFlatBufferImplementation.CreateByteVector(b, camera.Bytes); + FByteDataType a; + switch (sensor.ArrayEncoding) { + case "UINT8": + a = FByteDataType.UINT8; + break; + case "FLOAT16": + a = FByteDataType.FLOAT16; + break; + case "FLOAT32": + a = FByteDataType.FLOAT32; + break; + case "JPEG": + a = FByteDataType.JPEG; + break; + case "PNG": + a = FByteDataType.PNG; + break; + default: + a = FByteDataType.Other; + break; + } + + var c = FByteArray.CreateShapeVector(b, sensor.Shape); + + FByteArray.StartFByteArray(b); + FByteArray.AddType(b, a); + FByteArray.AddShape(b, c); + FByteArray.AddBytes(b, v_offset); + return FByteArray.EndFByteArray(b); + } + + static Offset Serialise(FlatBufferBuilder b, IHasFloatArray float_a) { + var v_offset = FArray.CreateArrayVectorBlock(b, float_a.ObservationArray); + //var v_offset = CustomFlatBufferImplementation.CreateFloatVector(b, float_a.ObservationArray); + + var ranges_vector = new VectorOffset(); + + FArray.StartRangesVector(b, float_a.ObservationSpace.Length); + foreach (var tra in float_a.ObservationSpace) { + FRange.CreateFRange(b, + tra.DecimalGranularity, + tra.Max, + tra.Min, + tra.NormalisedBool); + } + + ranges_vector = b.EndVector(); + + FArray.StartFArray(b); + FArray.AddArray(b, v_offset); + + FArray.AddRanges(b, ranges_vector); + + return FArray.EndFArray(b); + } + + /// + /// + /// + /// + /// + /// + static Offset Serialise(FlatBufferBuilder b, IHasRigidbody rigidbody) { + FRBObs.StartFRBObs(b); + var a = rigidbody.Velocity; + var c = rigidbody.AngularVelocity; + + FRBObs.AddBody(b, + FBody.CreateFBody(b, + a.x, + a.y, + a.z, + c.x, + c.y, + c.z)); + return FRBObs.EndFRBObs(b); + } + + static Offset Serialise(FlatBufferBuilder b, IHasSingle numeral) { + FSingle.StartFSingle(b); + FSingle.AddValue(b, numeral.ObservationValue); + + var range_offset = FRange.CreateFRange(b, + numeral.SingleSpace.DecimalGranularity, + numeral.SingleSpace.Max, + numeral.SingleSpace.Min, + numeral.SingleSpace.NormalisedBool); + FSingle.AddRange(b, range_offset); + return FSingle.EndFSingle(b); + } + + static Offset Serialise(FlatBufferBuilder b, IHasDouble numeral) { + FDouble.StartFDouble(b); + var vec2 = numeral.ObservationValue; + + var granularity = numeral.DoubleSpace.DecimalGranularity; + var xs = numeral.DoubleSpace.Xspace; + var ys = numeral.DoubleSpace.Yspace; + + FDouble.AddXRange(b, + FRange.CreateFRange(b, + granularity, + xs.Max, + xs.Min, + xs.NormalisedBool)); + FDouble.AddYRange(b, + FRange.CreateFRange(b, + granularity, + ys.Max, + ys.Min, + ys.NormalisedBool)); + FDouble.AddVec2(b, FVector2.CreateFVector2(b, vec2.x, vec2.y)); + + return FDouble.EndFDouble(b); + } + + static Offset Serialise(FlatBufferBuilder b, IHasTriple numeral) { + FTriple.StartFTriple(b); + var vec3 = numeral.ObservationValue; + + FTriple.AddVec3(b, + FVector3.CreateFVector3(b, + vec3.x, + vec3.y, + vec3.z)); + var granularity = numeral.TripleSpace.DecimalGranularity; + var xs = numeral.TripleSpace.Xspace; + var ys = numeral.TripleSpace.Yspace; + var zs = numeral.TripleSpace.Zspace; + FTriple.AddXRange(b, + FRange.CreateFRange(b, + granularity, + xs.Max, + xs.Min, + xs.NormalisedBool)); + FTriple.AddYRange(b, + FRange.CreateFRange(b, + granularity, + ys.Max, + ys.Min, + ys.NormalisedBool)); + FTriple.AddZRange(b, + FRange.CreateFRange(b, + granularity, + zs.Max, + zs.Min, + zs.NormalisedBool)); + return FTriple.EndFTriple(b); + } + + static Offset Serialise(FlatBufferBuilder b, IHasQuadruple numeral) { + FQuadruple.StartFQuadruple(b); + var quad = numeral.ObservationValue; + FQuadruple.AddQuat(b, + FQuaternion.CreateFQuaternion(b, + quad.x, + quad.y, + quad.z, + quad.z)); + var granularity = numeral.QuadSpace.DecimalGranularity; + var xs = numeral.QuadSpace.Xspace; + var ys = numeral.QuadSpace.Yspace; + var zs = numeral.QuadSpace.Zspace; + var ws = numeral.QuadSpace.Wspace; + FQuadruple.AddXRange(b, + FRange.CreateFRange(b, + granularity, + xs.Max, + xs.Min, + xs.NormalisedBool)); + FQuadruple.AddYRange(b, + FRange.CreateFRange(b, + granularity, + ys.Max, + ys.Min, + ys.NormalisedBool)); + FQuadruple.AddZRange(b, + FRange.CreateFRange(b, + granularity, + zs.Max, + zs.Min, + zs.NormalisedBool)); + FQuadruple.AddWRange(b, + FRange.CreateFRange(b, + granularity, + ws.Max, + ws.Min, + ws.NormalisedBool)); + return FQuadruple.EndFQuadruple(b); + } + + static Offset Serialise(FlatBufferBuilder b, IHasString numeral) { + var string_offset = b.CreateString(numeral.ObservationValue); + FString.StartFString(b); + FString.AddStr(b, string_offset); + + return FString.EndFString(b); + } + + static Offset Serialise(FlatBufferBuilder b, + Offset[] actuators, + IActor actor, + string identifier) { + var n = b.CreateString(identifier); + var actuator_vector = FActor.CreateActuatorsVector(b, actuators); + FActor.StartFActor(b); + if (actor is KillableActor) { + FActor.AddAlive(b, ((KillableActor)actor).IsAlive); + } else { + FActor.AddAlive(b, true); + } + + FActor.AddActorName(b, n); + FActor.AddActuators(b, actuator_vector); + return FActor.EndFActor(b); + } + + static Offset Serialise(FlatBufferBuilder b, string identifier, ISensor sensor) { + var n = b.CreateString(identifier); + + int observation_offset; + FObservation observation_type; + switch (sensor) { + case IHasString numeral: + observation_offset = Serialise(b, numeral).Value; + observation_type = FObservation.FString; + break; + case IHasFloatArray a: + observation_offset = Serialise(b, a).Value; + observation_type = FObservation.FArray; + break; + case IHasSingle single: + observation_offset = Serialise(b, single).Value; + observation_type = FObservation.FSingle; + break; + case IHasDouble has_double: + observation_offset = Serialise(b, has_double).Value; + observation_type = FObservation.FDouble; + break; + case IHasTriple triple: + observation_offset = Serialise(b, triple).Value; + observation_type = FObservation.FTriple; + break; + case IHasQuadruple quadruple: + observation_offset = Serialise(b, quadruple).Value; + observation_type = FObservation.FQuadruple; + break; + case IHasEulerTransform transform: + observation_offset = Serialise(b, transform).Value; + observation_type = FObservation.FETObs; + break; + case IHasQuaternionTransform quaternion_transform: + observation_offset = Serialise(b, quaternion_transform).Value; + observation_type = FObservation.FQTObs; + break; + case IHasRigidbody rigidbody: + observation_offset = Serialise(b, rigidbody).Value; + observation_type = FObservation.FRBObs; + break; + case IHasByteArray array: + observation_offset = Serialise(b, array).Value; + observation_type = FObservation.FByteArray; + break; + default: + return FSensor.CreateFSensor(b, n); + } + + FSensor.StartFSensor(b); + FSensor.AddSensorName(b, n); + FSensor.AddSensorValueType(b, observation_type); + FSensor.AddSensorValue(b, observation_offset); + return FSensor.EndFSensor(b); + } + + static Offset Serialise(FlatBufferBuilder b, EnvironmentSnapshot snapshot) { + var actors_offsets = new Offset[snapshot.Description.Actors.Values.Count]; + var j = 0; + foreach (var actor in snapshot.Description.Actors) { + var actuators_offsets = new Offset[actor.Value.Actuators.Values.Count]; + var i = 0; + foreach (var actuator in actor.Value.Actuators) { + actuators_offsets[i++] = Serialise(b, actuator.Value, actuator.Key); + } + + actors_offsets[j++] = Serialise(b, + actuators_offsets, + actor.Value, + actor.Key); + } + + var actors_vector_offset = FEnvironmentDescription.CreateActorsVector(b, actors_offsets); + + var configurables_offsets = new Offset[snapshot.Description.Configurables.Values.Count]; + var k = 0; + foreach (var configurable in snapshot.Description.Configurables) { + configurables_offsets[k++] = Serialise(b, configurable.Value, configurable.Key); + } + + var configurables_vector_offset = + FEnvironmentDescription.CreateConfigurablesVector(b, configurables_offsets); + + var objective_offset = Serialise(b, snapshot.Description); + + var sensors = new Offset[snapshot.Description.Sensors.Values.Count]; + var js = 0; + foreach (var sensor in snapshot.Description.Sensors) { + sensors[js++] = Serialise(b, sensor.Key, sensor.Value); + } + + var sensors_vector = FEnvironmentDescription.CreateSensorsVector(b, sensors); + + FEnvironmentDescription.StartFEnvironmentDescription(b); + + FEnvironmentDescription.AddObjective(b, objective_offset); + FEnvironmentDescription.AddActors(b, actors_vector_offset); + FEnvironmentDescription.AddConfigurables(b, configurables_vector_offset); + FEnvironmentDescription.AddSensors(b, sensors_vector); + + return FEnvironmentDescription.EndFEnvironmentDescription(b); + } + + static Offset Serialise(FlatBufferBuilder b, EnvironmentDescription description) { + var ob_name = "None"; + var ep_len = -1; + var a = 0; + var f = 0f; + var c = 0f; + var d = false; + if (description.ObjectiveFunction != null) { + ob_name = description.ObjectiveFunction.Identifier; + ep_len = description.ObjectiveFunction.EpisodeLength; + f = description.ObjectiveFunction.SignalSpace.Min; + c = description.ObjectiveFunction.SignalSpace.Max; + a = description.ObjectiveFunction.SignalSpace.DecimalGranularity; + d = description.ObjectiveFunction.SignalSpace.NormalisedBool; + } + + var objective_name_offset = b.CreateString(ob_name); + FObjective.StartFObjective(b); + FObjective.AddMaxEpisodeLength(b, ep_len); + FObjective.AddSignalSpace(b, + FRange.CreateFRange(b, + a, + f, + c, + d)); + FObjective.AddObjectiveName(b, objective_name_offset); + return FObjective.EndFObjective(b); + } + + static Offset Serialise(FlatBufferBuilder b, PositionConfigurable sensor) { + var pos = sensor.ObservationValue; + FTriple.StartFTriple(b); + FTriple.AddVec3(b, + FVector3.CreateFVector3(b, + pos.x, + pos.y, + pos.z)); + return FTriple.EndFTriple(b); + } + + static Offset Serialise( + FlatBufferBuilder b, + IConfigurable configurable, + string identifier) { + var n = b.CreateString(identifier); + + int observation_offset; + FObservation observation_type; + + if (configurable is IHasQuaternionTransform) { + observation_offset = Serialise(b, (IHasQuaternionTransform)configurable).Value; + observation_type = FObservation.FQTObs; + } else if (configurable is PositionConfigurable) { + observation_offset = Serialise(b, (PositionConfigurable)configurable).Value; + observation_type = FObservation.FTriple; + } else if (configurable is IHasSingle) { + observation_offset = Serialise(b, (IHasSingle)configurable).Value; + observation_type = FObservation.FSingle; + // ReSharper disable once SuspiciousTypeConversion.Global + } else if (configurable is IHasDouble) { + // ReSharper disable once SuspiciousTypeConversion.Global + observation_offset = Serialise(b, (IHasDouble)configurable).Value; + observation_type = FObservation.FDouble; + } else if (configurable is EulerTransformConfigurable) { + observation_offset = Serialise(b, (IHasEulerTransform)configurable).Value; + observation_type = FObservation.FETObs; + } else { + FConfigurable.StartFConfigurable(b); + FConfigurable.AddConfigurableName(b, n); + return FConfigurable.EndFConfigurable(b); + } + + FConfigurable.StartFConfigurable(b); + FConfigurable.AddConfigurableName(b, n); + FConfigurable.AddConfigurableValue(b, observation_offset); + FConfigurable.AddConfigurableValueType(b, observation_type); + FConfigurable.AddConfigurableRange(b, + FRange.CreateFRange(b, + 0, + 0, + 0, + false)); + return FConfigurable.EndFConfigurable(b); + } + + #endregion + } +} diff --git a/Runtime/Messaging/FBSStateUtilities.cs.meta b/Runtime/Messaging/FBSStateUtilities.cs.meta new file mode 100644 index 000000000..a2962c99f --- /dev/null +++ b/Runtime/Messaging/FBSStateUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48c637c7dc774ea5904109ac54608e05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c054480a4624efca12c428fbb700bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Messaging/MessageServer.cs b/Runtime/Messaging/MessageServer.cs index 6c812af53..4b1a43e49 100644 --- a/Runtime/Messaging/MessageServer.cs +++ b/Runtime/Messaging/MessageServer.cs @@ -2,23 +2,21 @@ using System.Linq; using System.Threading; using AsyncIO; +using droid.Runtime.Messaging.FBS; +using droid.Runtime.Messaging.Messages; using FlatBuffers; -using Neodroid.Runtime.Messaging.FBS; -using Neodroid.Runtime.Messaging.Messages; using NetMQ; using NetMQ.Sockets; using UnityEngine; -namespace Neodroid.Runtime.Messaging { +namespace droid.Runtime.Messaging { /// - /// /// [Serializable] public class MessageServer { #region PublicMembers /// - /// /// public bool _Listening_For_Clients; @@ -27,74 +25,63 @@ public class MessageServer { #region PrivateMembers /// - /// /// Thread _polling_thread; #if NEODROID_DEBUG + [SerializeField] int _last_send_frame_number; - + [SerializeField] float _last_send_time; #endif /// - /// /// Thread _wait_for_client_thread; /// - /// /// object _stop_lock = new object(); object _thread_lock = new object(); /// - /// /// bool _stop_thread; /// - /// /// bool _waiting_for_main_loop_to_send; /// - /// /// bool _use_inter_process_communication; /// - /// /// bool _debugging; /// - /// /// ResponseSocket _socket; //PairSocket _socket; /// - /// /// string _ip_address; /// - /// /// int _port; /// - /// /// byte[] _byte_buffer; /// - /// /// Double _wait_time_seconds; - const string _api_version = "0.0.1"; + Reaction[] _last_received_reactions; #endregion @@ -103,7 +90,6 @@ public class MessageServer { #region Threads /// - /// /// /// /// @@ -133,7 +119,6 @@ void BindSocket(Action callback, Action debug_callback) { } /// - /// /// /// /// @@ -150,7 +135,7 @@ public Reaction[] Receive(TimeSpan wait_time) { var received = this._socket.TryReceiveFrameBytes(wait_time, out msg); if (this.Debugging) { if (received) { - Debug.Log($"Received frame bytes"); + Debug.Log("Received frame bytes"); } else { Debug.Log($"Received nothing in {wait_time} seconds"); } @@ -159,8 +144,12 @@ public Reaction[] Receive(TimeSpan wait_time) { this._socket.TryReceiveFrameBytes(wait_time, out msg); #endif } else { - msg = this._socket - .ReceiveFrameBytes(); //TODO: Occasionally receives non-valid reactions framebytes either before or after a valid reaction. + try { + msg = this._socket.ReceiveFrameBytes(); + } catch (ArgumentNullException e) { + msg = null; + Debug.Log(e); + } } if (msg != null) { //&& msg.Length >= 4) { @@ -184,21 +173,20 @@ public Reaction[] Receive(TimeSpan wait_time) { } /// - /// /// /// /// /// - void PollingThread( - Action receive_callback, - Action disconnect_callback, - Action debug_callback) { + void PollingThread(Action receive_callback, + Action disconnect_callback, + Action debug_callback) { while (this._stop_thread == false) { lock (this._thread_lock) { if (!this._waiting_for_main_loop_to_send) { var reactions = this.Receive(TimeSpan.FromSeconds(this._wait_time_seconds)); if (reactions != null) { - receive_callback(reactions); + this._last_received_reactions = reactions; + receive_callback(this._last_received_reactions); this._waiting_for_main_loop_to_send = true; } } else { @@ -214,9 +202,6 @@ void PollingThread( if (this._use_inter_process_communication) { this._socket.Disconnect("inproc://neodroid"); } else { - - - this._socket.Disconnect("tcp://" + this._ip_address + ":" + this._port); } } @@ -235,20 +220,20 @@ void PollingThread( #region PublicMethods - /// - /// - /// - /// + /// + /// + /// /// - /// + /// + /// /// - /// - public void SendStates( - EnvironmentState[] environment_states, - bool do_serialise_unobservables = false, - bool serialise_indidual_observables = false, - SimulatorConfigurationMessage simulator_configuration_message = null, - string api_vesion = _api_version) { + /// + public void SendStates(EnvironmentSnapshot[] environment_states, + bool do_serialise_unobservables = false, + bool serialise_individual_observables = false, + bool do_serialise_observables = false, + SimulatorConfigurationMessage simulator_configuration_message = null, + string api_version = NeodroidRuntimeInfo._Version) { lock (this._thread_lock) { #if NEODROID_DEBUG if (this.Debugging) { @@ -257,17 +242,18 @@ public void SendStates( if (environment_state[0] != null) { var frame_number = environment_state[0].FrameNumber; var time = environment_state[0].Time; - var frame_number_duplicate = this._last_send_frame_number == frame_number; - if (frame_number_duplicate && frame_number > 0) { - Debug.LogWarning($"Sending duplicate frame! Frame number: {frame_number}"); - } + var episode_count = this._last_received_reactions[0].Parameters.EpisodeCount; + var stepped = this._last_received_reactions[0].Parameters.StepResetObserveEnu == StepResetObserve + .Step_; if (frame_number <= this._last_send_frame_number) { - Debug.LogWarning( - $"The current frame number {frame_number} is less or equal the last {this._last_send_frame_number}, SINCE AWAKE ({Time.frameCount})"); + Debug.LogWarning($"The current frame number {frame_number} is less or equal the last {this._last_send_frame_number}, SINCE AWAKE ({Time.frameCount})"); + if (this._last_send_frame_number == frame_number && frame_number > 0 && episode_count) { + Debug.LogWarning($"Sending duplicate frame! Frame number: {frame_number}"); + } } - if (time <= this._last_send_time) { + if (time <= this._last_send_time && stepped) { Debug.LogWarning($"The current time {time} is less or equal the last {this._last_send_time}"); } @@ -279,24 +265,26 @@ public void SendStates( this._last_send_time = time; } } else { - Debug.LogWarning($"No environment states where send."); + Debug.LogWarning("No environment states where send."); } } #endif - this._byte_buffer = FbsStateUtilities.serialise_states( - environment_states, - do_serialise_unobservables : do_serialise_unobservables, - serialise_indidual_observables : serialise_indidual_observables, - simulator_configuration : simulator_configuration_message, - api_version : api_vesion); + this._byte_buffer = FbsStateUtilities.Serialise(environment_states, + do_serialise_unobservables : + do_serialise_unobservables, + serialise_individual_observables : + serialise_individual_observables, + simulator_configuration : + simulator_configuration_message, + do_serialise_observables : do_serialise_observables, + api_version : api_version); this._socket.SendFrame(this._byte_buffer); this._waiting_for_main_loop_to_send = false; } } /// - /// /// /// public void ListenForClientToConnect(Action debug_callback) { @@ -304,7 +292,6 @@ public void ListenForClientToConnect(Action debug_callback) { } /// - /// /// /// /// @@ -316,37 +303,41 @@ public void ListenForClientToConnect(Action callback, Action debug_callb } /// - /// /// /// /// /// - public void StartReceiving( - Action cmd_callback, - Action disconnect_callback, - Action debug_callback) { + public void StartReceiving(Action cmd_callback, + Action disconnect_callback, + Action debug_callback) { this._polling_thread = new Thread(unused_param => this.PollingThread(cmd_callback, disconnect_callback, debug_callback)) { - IsBackground = true - }; + IsBackground + = true + }; // Is terminated with foreground threads, when they terminate this._polling_thread.Start(); } #region Contstruction - public MessageServer( - string ip_address = "127.0.0.1", - int port = 6969, - bool use_inter_process_communication = false, - bool debug = false, - Double wait_time_seconds = 2) { + public MessageServer(string ip_address = "127.0.0.1", + int port = 6969, + bool use_inter_process_communication = false, + bool debug = false, + Double wait_time_seconds = 2) { this._wait_time_seconds = wait_time_seconds; this.Debugging = debug; this._ip_address = ip_address; this._port = port; this._use_inter_process_communication = use_inter_process_communication; + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Starting a message server at address:port {ip_address}:{port}"); + } + #endif + if (!this._use_inter_process_communication) { ForceDotNet.Force(); } @@ -354,19 +345,18 @@ public MessageServer( this._socket = new ResponseSocket(); } - public MessageServer(bool debug = false) : this("127.0.0.1", 6969, false, debug) { } + public MessageServer(bool debug = false) : this("127.0.0.1", + 6969, + false, + debug) { } #endregion #region Getters /// - /// /// - public bool Debugging { - get { return this._debugging; } - set { this._debugging = value; } - } + public bool Debugging { get { return this._debugging; } set { this._debugging = value; } } #endregion @@ -375,12 +365,10 @@ public bool Debugging { #region Deconstruction /// - /// /// public void Destroy() { this.CleanUp(); } /// - /// /// public void CleanUp() { try { @@ -410,4 +398,4 @@ public void CleanUp() { #endregion } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Body.cs b/Runtime/Messaging/Messages/Body.cs index 162b58b7b..f38c79182 100644 --- a/Runtime/Messaging/Messages/Body.cs +++ b/Runtime/Messaging/Messages/Body.cs @@ -1,8 +1,7 @@ using UnityEngine; -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { /// - /// /// public class Body { public Body(Vector3 vel, Vector3 ang) { @@ -11,13 +10,11 @@ public Body(Vector3 vel, Vector3 ang) { } /// - /// /// public Vector3 Velocity { get; } /// - /// /// public Vector3 AngularVelocity { get; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Configuration.cs b/Runtime/Messaging/Messages/Configuration.cs index b924bb4bf..6b59d6608 100644 --- a/Runtime/Messaging/Messages/Configuration.cs +++ b/Runtime/Messaging/Messages/Configuration.cs @@ -1,31 +1,34 @@ -using Neodroid.Runtime.Interfaces; +using System; +using droid.Runtime.Interfaces; -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { /// - /// /// public class Configuration : IConfigurableConfiguration { - public Configuration(string configurable_name, float configurable_value) { + public Configuration(string configurable_name, float configurable_value, bool sample_random = false) { this.ConfigurableName = configurable_name; this.ConfigurableValue = configurable_value; + this.SampleRandom = sample_random; } /// - /// /// public string ConfigurableName { get; set; } /// /// /// + public Boolean SampleRandom { get; set; } + + /// + /// public float ConfigurableValue { get; set; } /// - /// /// /// public override string ToString() { return " " + this.ConfigurableName + ", " + this.ConfigurableValue + " "; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Displayables/Displayable.cs b/Runtime/Messaging/Messages/Displayables/Displayable.cs index 48b342ce1..340ee7479 100644 --- a/Runtime/Messaging/Messages/Displayables/Displayable.cs +++ b/Runtime/Messaging/Messages/Displayables/Displayable.cs @@ -1,35 +1,20 @@ -using System; - -namespace Neodroid.Runtime.Messaging.Messages.Displayables { +namespace droid.Runtime.Messaging.Messages.Displayables { /// - /// /// public abstract class Displayable { - String _displayable_name; - dynamic _displayable_value; - /// - /// /// - public virtual string DisplayableName { - get { return this._displayable_name; } - set { this._displayable_name = value; } - } + public virtual string DisplayableName { get; set; } /// - /// /// - public virtual dynamic DisplayableValue { - get { return this._displayable_value; } - set { this._displayable_value = value; } - } + public virtual dynamic DisplayableValue { get; set; } /// - /// /// /// public override string ToString() { return $" {this.DisplayableName}, {this.DisplayableValue} "; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Displayables/DisplayableFloat.cs b/Runtime/Messaging/Messages/Displayables/DisplayableFloat.cs index 0784e3556..4d985ea07 100644 --- a/Runtime/Messaging/Messages/Displayables/DisplayableFloat.cs +++ b/Runtime/Messaging/Messages/Displayables/DisplayableFloat.cs @@ -1,8 +1,7 @@ using System; -namespace Neodroid.Runtime.Messaging.Messages.Displayables { +namespace droid.Runtime.Messaging.Messages.Displayables { /// - /// /// public class DisplayableFloat : Displayable { public DisplayableFloat(String displayable_name, double displayable_value) { @@ -20,4 +19,4 @@ public DisplayableFloat(String displayable_name, float displayable_value) { this.DisplayableValue = displayable_value; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Displayables/DisplayableString.cs b/Runtime/Messaging/Messages/Displayables/DisplayableString.cs index aa97ddbca..179cf6715 100644 --- a/Runtime/Messaging/Messages/Displayables/DisplayableString.cs +++ b/Runtime/Messaging/Messages/Displayables/DisplayableString.cs @@ -1,6 +1,6 @@ using System; -namespace Neodroid.Runtime.Messaging.Messages.Displayables { +namespace droid.Runtime.Messaging.Messages.Displayables { /// /// /// @@ -10,4 +10,4 @@ public DisplayableString(String displayable_name, String displayable_value) { this.DisplayableValue = displayable_value; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Displayables/DisplayableValuedVector3s.cs b/Runtime/Messaging/Messages/Displayables/DisplayableValuedVector3s.cs index 8057c92eb..4f56e04a8 100644 --- a/Runtime/Messaging/Messages/Displayables/DisplayableValuedVector3s.cs +++ b/Runtime/Messaging/Messages/Displayables/DisplayableValuedVector3s.cs @@ -1,7 +1,7 @@ using System; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; -namespace Neodroid.Runtime.Messaging.Messages.Displayables { +namespace droid.Runtime.Messaging.Messages.Displayables { /// /// /// @@ -11,4 +11,4 @@ public DisplayableValuedVector3S(String displayable_name, Points.ValuePoint[] di this.DisplayableValue = displayable_value; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Displayables/DisplayableValues.cs b/Runtime/Messaging/Messages/Displayables/DisplayableValues.cs index 2bc7089cc..8dd4b7b59 100644 --- a/Runtime/Messaging/Messages/Displayables/DisplayableValues.cs +++ b/Runtime/Messaging/Messages/Displayables/DisplayableValues.cs @@ -1,6 +1,6 @@ using System; -namespace Neodroid.Runtime.Messaging.Messages.Displayables { +namespace droid.Runtime.Messaging.Messages.Displayables { /// /// /// @@ -15,4 +15,4 @@ public DisplayableValues(String displayable_name, float[] displayable_value) { this.DisplayableValue = displayable_value; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Displayables/DisplayableVector3s.cs b/Runtime/Messaging/Messages/Displayables/DisplayableVector3s.cs index ede1e7a75..2839364fc 100644 --- a/Runtime/Messaging/Messages/Displayables/DisplayableVector3s.cs +++ b/Runtime/Messaging/Messages/Displayables/DisplayableVector3s.cs @@ -1,7 +1,7 @@ using System; using UnityEngine; -namespace Neodroid.Runtime.Messaging.Messages.Displayables { +namespace droid.Runtime.Messaging.Messages.Displayables { /// /// /// @@ -11,4 +11,4 @@ public DisplayableVector3S(String displayable_name, Vector3[] displayable_value) this.DisplayableValue = displayable_value; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/EnvironmentDescription.cs b/Runtime/Messaging/Messages/EnvironmentDescription.cs index eb8152566..411ae120d 100644 --- a/Runtime/Messaging/Messages/EnvironmentDescription.cs +++ b/Runtime/Messaging/Messages/EnvironmentDescription.cs @@ -1,43 +1,46 @@ -using System.Collections.Generic; -using Neodroid.Runtime.Interfaces; +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { /// - /// /// public class EnvironmentDescription { - public EnvironmentDescription( - int max_steps, - Dictionary actors, - Dictionary configurables, - float solved_threshold) { + public EnvironmentDescription(IEpisodicObjectiveFunction objective_function_function, + SortedDictionary actors, + SortedDictionary configurables, + SortedDictionary sensors, + SortedDictionary displayers) { this.Configurables = configurables; this.Actors = actors; - this.MaxSteps = max_steps; + ; + this.Sensors = sensors; - this.SolvedThreshold = solved_threshold; + this.Displayers = displayers; + + this.ObjectiveFunction = objective_function_function; } /// /// /// - public Dictionary Actors { get; } + public SortedDictionary Displayers { get; } /// /// /// - public Dictionary Configurables { get; } + public IEpisodicObjectiveFunction ObjectiveFunction { get; } /// - /// /// - public int MaxSteps { get; } + public SortedDictionary Actors { get; } /// - /// /// - public float SolvedThreshold { get; } - } + public SortedDictionary Configurables { get; } - public interface IActors { } -} \ No newline at end of file + /// + /// + public SortedDictionary Sensors { get; } + } +} diff --git a/Runtime/Messaging/Messages/EnvironmentSnapshot.cs b/Runtime/Messaging/Messages/EnvironmentSnapshot.cs new file mode 100644 index 000000000..df3f03cad --- /dev/null +++ b/Runtime/Messaging/Messages/EnvironmentSnapshot.cs @@ -0,0 +1,60 @@ +using System; + +namespace droid.Runtime.Messaging.Messages { + [Serializable] + public class EnvironmentSnapshot { + public EnvironmentSnapshot(string environment_name, + int frame_number, + float time, + float signal, + bool terminated, + ref float[] observables, + string termination_reason = "", + EnvironmentDescription description = null, + string debug_message = "") { + this.Observables = observables; + this.DebugMessage = debug_message; + this.TerminationReason = termination_reason; + this.EnvironmentName = environment_name; + this.Signal = signal; + this.FrameNumber = frame_number; + this.Time = time; + this.Terminated = terminated; + this.Description = description; + } + + public float[] Observables { get; } + + public String TerminationReason { get; } + + public string EnvironmentName { get; } + + /// + /// + public int FrameNumber { get; } + + /// + /// + public float Time { get; } + + /// + /// + public bool Terminated { get; } + + /// + /// + public string DebugMessage { get; } + + /// + /// + public EnvironmentDescription Description { get; } + + /// + /// + public float Signal { get; } + + /// + /// + public Unobservables Unobservables { get; set; } + } +} diff --git a/Runtime/Messaging/Messages/EnvironmentState.cs.meta b/Runtime/Messaging/Messages/EnvironmentSnapshot.cs.meta similarity index 100% rename from Runtime/Messaging/Messages/EnvironmentState.cs.meta rename to Runtime/Messaging/Messages/EnvironmentSnapshot.cs.meta diff --git a/Runtime/Messaging/Messages/EnvironmentState.cs b/Runtime/Messaging/Messages/EnvironmentState.cs deleted file mode 100644 index 338119d35..000000000 --- a/Runtime/Messaging/Messages/EnvironmentState.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; - -namespace Neodroid.Runtime.Messaging.Messages { - [Serializable] - public class EnvironmentState { - public EnvironmentState( - string environment_name, - float total_energy_spent_since_reset, - int frame_number, - float time, - float signal, - bool terminated, - ref float[] observables, - string termination_reason = "", - EnvironmentDescription description = null, - string debug_message = "") { - this.Observables = observables; - this.DebugMessage = debug_message; - this.TerminationReason = termination_reason; - this.EnvironmentName = environment_name; - this.TotalEnergySpentSinceReset = total_energy_spent_since_reset; - this.Signal = signal; - this.FrameNumber = frame_number; - this.Time = time; - this.Terminated = terminated; - this.Description = description; - } - - public float[] Observables { get; } - - public String TerminationReason { get; } - - public string EnvironmentName { get; } - - public float TotalEnergySpentSinceReset { get; } - - /// - /// - /// - public int FrameNumber { get; } - - /// - /// - /// - public float Time { get; } - - /// - /// - /// - public bool Terminated { get; } - - /// - /// - /// - public string DebugMessage { get; } - - /// - /// - /// - public IObserver[] Observers { get; set; } - - /// - /// - /// - public EnvironmentDescription Description { get; } - - /// - /// - /// - public float Signal { get; } - - /// - /// - /// - public Unobservables Unobservables { get; set; } - } -} \ No newline at end of file diff --git a/Runtime/Messaging/Messages/MotorMotion.cs b/Runtime/Messaging/Messages/MotorMotion.cs index ea450093f..44566f760 100644 --- a/Runtime/Messaging/Messages/MotorMotion.cs +++ b/Runtime/Messaging/Messages/MotorMotion.cs @@ -1,31 +1,41 @@ using System; -using Neodroid.Runtime.Interfaces; +using droid.Runtime.Interfaces; -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { + /// + /// Has a possible direction given by the sign of the float in strength + /// [Serializable] - public class MotorMotion : IMotorMotion { - // Has a possible direction given by the sign of the float - - public MotorMotion(string actor_name, string motor_name, float strength) { + public class ActuatorMotion : IMotion { + public ActuatorMotion(string actor_name, string actuator_name, float strength) { this.ActorName = actor_name; - this.MotorName = motor_name; + this.ActuatorName = actuator_name; this.Strength = strength; } + /// + /// public float Strength { get; set; } + /// + /// public string ActorName { get; } - public string MotorName { get; } + /// + /// + public string ActuatorName { get; } + /// + /// + /// public override string ToString() { - return " " + return " " + this.ActorName + ", " - + this.MotorName + + this.ActuatorName + ", " + this.Strength - + " "; + + " "; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Reaction.cs b/Runtime/Messaging/Messages/Reaction.cs index 0117b2b65..1bfe5a165 100644 --- a/Runtime/Messaging/Messages/Reaction.cs +++ b/Runtime/Messaging/Messages/Reaction.cs @@ -1,16 +1,14 @@ using System; using System.Linq; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages.Displayables; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages.Displayables; -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { /// - /// /// [Serializable] public class Reaction { /// - /// /// /// public override string ToString() { @@ -21,16 +19,16 @@ public override string ToString() { var configurations_str = ""; if (this.Configurations != null) { - configurations_str = this.Configurations.Aggregate( - configurations_str, - (current, configuration) => current + (configuration + "\n")); + configurations_str = + this.Configurations.Aggregate(configurations_str, + (current, configuration) => current + (configuration + "\n")); } var displayables_str = ""; if (this.Displayables != null) { - displayables_str = this.Displayables.Aggregate( - displayables_str, - (current, displayable) => current + (displayable + "\n")); + displayables_str = + this.Displayables.Aggregate(displayables_str, + (current, displayable) => current + (displayable + "\n")); } return "\n " @@ -40,14 +38,14 @@ public override string ToString() { #region Constructors - public Reaction( - ReactionParameters parameters, - IMotorMotion[] motions, - Configuration[] configurations, - Unobservables unobservables, - Displayable[] displayables, - String serialised_message, - string recipient_environment = "all") { + public Reaction(ReactionParameters parameters, + IMotion[] motions, + Configuration[] configurations, + Unobservables unobservables, + Displayable[] displayables, + String serialised_message, + string recipient_environment = "all", + string reaction_source = "somewhere") { this.Parameters = parameters; this.Motions = motions; this.Configurations = configurations; @@ -55,15 +53,19 @@ public Reaction( this.Displayables = displayables; this.RecipientEnvironment = recipient_environment; this.SerialisedMessage = serialised_message; + this.ReactionSource = reaction_source; } /// /// /// + public String ReactionSource { get; set; } + + /// + /// public String RecipientEnvironment { get; } = "all"; /// - /// /// public string SerialisedMessage { get; } @@ -79,30 +81,25 @@ public Reaction(ReactionParameters reaction_parameters, String recipient_environ #region Getters /// - /// /// public Displayable[] Displayables { get; } /// - /// /// - public IMotorMotion[] Motions { get; } + public IMotion[] Motions { get; } /// - /// /// public Configuration[] Configurations { get; } /// - /// /// public ReactionParameters Parameters { get; } = new ReactionParameters(); /// - /// /// public Unobservables Unobservables { get; } = new Unobservables(); #endregion } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/ReactionParameters.cs b/Runtime/Messaging/Messages/ReactionParameters.cs index 262375696..be2a2084f 100644 --- a/Runtime/Messaging/Messages/ReactionParameters.cs +++ b/Runtime/Messaging/Messages/ReactionParameters.cs @@ -1,97 +1,82 @@ -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { /// - /// /// public enum ExecutionPhase { /// - /// /// Before_, /// - /// /// Middle_, /// - /// /// After_ } + public enum StepResetObserve { + /// + /// + Step_, + + /// + /// + Reset_, + + /// + /// + Observe_ + } + /// - /// /// public class ReactionParameters { - public ReactionParameters( - bool terminable = false, - bool step = false, - bool reset = false, - bool configure = false, - bool describe = false, - bool episode_count = false) { - this.IsExternal = false; + public ReactionParameters(StepResetObserve sro = StepResetObserve.Observe_, + bool terminable = false, + bool configure = false, + bool describe = false, + bool episode_count = true) { this.Terminable = terminable; - this.Reset = reset; - this.Step = step; + this.StepResetObserveEnu = sro; this.Configure = configure; this.Describe = describe; this.EpisodeCount = episode_count; } /// - /// /// public bool EpisodeCount { get; } /// - /// /// public ExecutionPhase Phase { get; set; } = ExecutionPhase.Middle_; /// - /// - /// - public bool IsExternal { get; set; } - - /// - /// /// public bool Terminable { get; } /// - /// /// public bool Describe { get; } - /// - /// - /// - public bool Reset { get; } - - /// - /// - /// - public bool Step { get; } + public StepResetObserve StepResetObserveEnu { get; } /// - /// /// public bool Configure { get; } /// - /// /// /// public override string ToString() { return "\n " + $"Terminable:{this.Terminable},\n" - + $"Step:{this.Step},\n" - + $"Reset:{this.Reset},\n" + + $"StepResetObserveEnu:{this.StepResetObserveEnu},\n" + $"Configure:{this.Configure},\n" + $"Describe:{this.Describe}\n" + $"EpisodeCount:{this.EpisodeCount}" + "\n\n"; } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Reactions.cs b/Runtime/Messaging/Messages/Reactions.cs index f3f684a75..cdae24583 100644 --- a/Runtime/Messaging/Messages/Reactions.cs +++ b/Runtime/Messaging/Messages/Reactions.cs @@ -1,3 +1,3 @@ -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { public class Reactions { } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/SimulatorConfigurationMessage.cs b/Runtime/Messaging/Messages/SimulatorConfigurationMessage.cs index 913f9f5b0..132ee5f46 100644 --- a/Runtime/Messaging/Messages/SimulatorConfigurationMessage.cs +++ b/Runtime/Messaging/Messages/SimulatorConfigurationMessage.cs @@ -1,153 +1,106 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.FBS; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.FBS; -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { /// - /// /// public partial class SimulatorConfigurationMessage { - int _frame_skips; - bool _full_screen; - int _height; - int _width; - int _frame_finishes; - int _num_of_environments; - int _reset_iterations; - /// - /// /// - public int FrameSkips { - get { return this._frame_skips; } - set { this._frame_skips = value; } - } + public int FrameSkips { get; set; } /// - /// /// public float TimeScale { get; set; } /// - /// /// - public bool FullScreen { - get { return this._full_screen; } - set { this._full_screen = value; } - } + public bool FullScreen { get; set; } /// - /// /// - public int Height { - get { return this._height; } - set { this._height = value; } - } + public int Height { get; set; } /// - /// /// - public int Width { - get { return this._width; } - set { this._width = value; } - } + public int Width { get; set; } /// - /// /// - public int Finishes { - get { return this._frame_finishes; } - set { this._frame_finishes = value; } - } + public int Finishes { get; set; } /// - /// /// - public int NumOfEnvironments { - get { return this._num_of_environments; } - set { this._num_of_environments = value; } - } + public int NumOfEnvironments { get; set; } /// - /// /// - public int ResetIterations { - get { return this._reset_iterations; } - set { this._reset_iterations = value; } - } + public int ResetIterations { get; set; } /// - /// /// public int QualityLevel { get; set; } /// - /// /// public float TargetFrameRate { get; set; } /// - /// /// public int SimulationType { get; set; } /// - /// /// public bool DoSerialiseUnobservables { get; set; } /// - /// /// - public bool DoSerialiseIndividualObservables { get; set; } + public bool DoSerialiseIndividualSensors { get; set; } } /// - /// /// public partial class SimulatorConfigurationMessage { /// - /// /// /// public SimulatorConfigurationMessage(ISimulatorConfiguration simulator_configuration) { - this._frame_skips = simulator_configuration.FrameSkips; - this._full_screen = simulator_configuration.FullScreen; - this._height = simulator_configuration.Height; - this._width = simulator_configuration.Width; - this._frame_finishes = (int)simulator_configuration.FrameFinishes; - this._num_of_environments = simulator_configuration.NumOfEnvironments; + this.FrameSkips = simulator_configuration.FrameSkips; + this.FullScreen = simulator_configuration.FullScreen; + this.Height = simulator_configuration.Height; + this.Width = simulator_configuration.Width; + this.Finishes = (int)simulator_configuration.FrameFinishes; + this.NumOfEnvironments = simulator_configuration.NumOfEnvironments; this.TimeScale = simulator_configuration.TimeScale; - this._reset_iterations = simulator_configuration.ResetIterations; this.QualityLevel = simulator_configuration.QualityLevel; this.TargetFrameRate = simulator_configuration.TargetFrameRate; this.SimulationType = (int)simulator_configuration.SimulationType; this.Finishes = (int)simulator_configuration.FrameFinishes; - this.DoSerialiseIndividualObservables = simulator_configuration.AlwaysSerialiseIndividualObservables; + this.DoSerialiseIndividualSensors = simulator_configuration.AlwaysSerialiseIndividualObservables; this.DoSerialiseUnobservables = simulator_configuration.AlwaysSerialiseUnobservables; - //TODO: CANT BE CHANGE while running + //TODO: CANNOT BE CHANGE while running //TODO: Exhaust list! } public SimulatorConfigurationMessage() { } /// - /// /// /// public void FbsParse(FSimulatorConfiguration flat_simulator_configuration) { - this._frame_skips = flat_simulator_configuration.FrameSkips; - this._full_screen = flat_simulator_configuration.FullScreen; - this._height = flat_simulator_configuration.Height; - this._width = flat_simulator_configuration.Width; - this._frame_finishes = flat_simulator_configuration.WaitEvery; - this._num_of_environments = flat_simulator_configuration.NumOfEnvironments; + this.FrameSkips = flat_simulator_configuration.FrameSkips; + this.FullScreen = flat_simulator_configuration.FullScreen; + this.Height = flat_simulator_configuration.Height; + this.Width = flat_simulator_configuration.Width; + this.Finishes = (int)flat_simulator_configuration.SimulationType; + this.NumOfEnvironments = flat_simulator_configuration.NumOfEnvironments; this.TimeScale = flat_simulator_configuration.TimeScale; - this._reset_iterations = flat_simulator_configuration.ResetIterations; + this.ResetIterations = flat_simulator_configuration.ResetIterations; this.QualityLevel = flat_simulator_configuration.QualityLevel; this.TargetFrameRate = flat_simulator_configuration.TargetFrameRate; - this.DoSerialiseIndividualObservables = flat_simulator_configuration.DoSerialiseIndidualObservables; + this.DoSerialiseIndividualSensors = flat_simulator_configuration.DoSerialiseIndividualSensors; this.DoSerialiseUnobservables = flat_simulator_configuration.DoSerialiseUnobservables; //TODO: Exhaust list! } } -} \ No newline at end of file +} diff --git a/Runtime/Messaging/Messages/Unobservables.cs b/Runtime/Messaging/Messages/Unobservables.cs index 8b275bc7c..c001e58a4 100644 --- a/Runtime/Messaging/Messages/Unobservables.cs +++ b/Runtime/Messaging/Messages/Unobservables.cs @@ -1,9 +1,8 @@ using System.Collections.Generic; using UnityEngine; -namespace Neodroid.Runtime.Messaging.Messages { +namespace droid.Runtime.Messaging.Messages { /// - /// /// public class Unobservables { public Unobservables(ref IList rigidbodies, ref IList transforms) { @@ -55,17 +54,14 @@ public Unobservables(ref Rigidbody[] rigidbodies, ref Transform[] transforms) { } /// - /// /// public Body[] Bodies { get; } = { }; /// - /// /// public Pose[] Poses { get; } = { }; /// - /// /// /// public override string ToString() { @@ -86,4 +82,4 @@ public override string ToString() { return $"\n {poses_str},{bodies_str}\n\n"; } } -} \ No newline at end of file +} diff --git a/Runtime/Neodroid.Runtime.asmdef b/Runtime/Neodroid.Runtime.asmdef new file mode 100644 index 000000000..c1f968866 --- /dev/null +++ b/Runtime/Neodroid.Runtime.asmdef @@ -0,0 +1,15 @@ +{ + "name": "Neodroid.Runtime", + "references": [ + "Unity.Postprocessing.Runtime" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Runtime/Neodroid.Runtime.asmdef.meta b/Runtime/Neodroid.Runtime.asmdef.meta new file mode 100644 index 000000000..da3802ec0 --- /dev/null +++ b/Runtime/Neodroid.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 68af22e97abf36b1f9e89f9483bd37f1 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Neodroid.csproj b/Runtime/Neodroid.csproj index 5c8dae13e..a51323259 100644 --- a/Runtime/Neodroid.csproj +++ b/Runtime/Neodroid.csproj @@ -1,969 +1,969 @@ - - - - - Debug - AnyCPU - {4CE1787A-E1EC-4BCA-B7F6-206DA3498F3F} - Library - Properties - Neodroid - Neodroid - v4.7.1 - 512 - - - AnyCPU - true - full - false - bin\Debug\ - UNITY_EDITOR;DEBUG;TRACE;NEODROID;NEODROID_EXISTS;TEXT_MESH_PRO_EXISTS - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - UNITY_EDITOR;TRACE;NEODROID;NEODROID_EXISTS;TEXT_MESH_PRO_EXISTS - prompt - 4 - - - - Libaries\AsyncIO.0.1.40\lib\net40\AsyncIO.dll - - - - Libaries\Neodroid-FlatBuffers.1.0.0\lib\net45\Neodroid-FlatBuffers.dll - - - Libaries\NetMQ.4.0.0.156-pre\lib\net40\NetMQ.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\nunit.framework.dll - - - - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Cecil.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Cecil.Mdb.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Cecil.Pdb.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Cecil.Rocks.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.CecilTools.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.DataContract.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.IvyParser.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Legacy.NRefactory.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Locator.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.SerializationLogic.dll - - - ..\Examples\Library\ScriptAssemblies\Unity.TextMeshPro.dll - - - ..\Examples\Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.UNetWeaver.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEditor.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEditor.Graphs.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.BaselibModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.CloudWebServicesModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.FacebookModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ParticlesLegacyModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SpatialTrackingModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.StyleSheetsModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TimelineModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\UnityExtensions\Unity\GUISystem\UnityEngine.UI.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.WebModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll - - - ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {4CE1787A-E1EC-4BCA-B7F6-206DA3498F3F} + Library + Properties + Neodroid + Neodroid + v4.7.1 + 512 + + + AnyCPU + true + full + false + bin\Debug\ + UNITY_EDITOR;DEBUG;TRACE;NEODROID;NEODROID_EXISTS;TEXT_MESH_PRO_EXISTS + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + UNITY_EDITOR;TRACE;NEODROID;NEODROID_EXISTS;TEXT_MESH_PRO_EXISTS + prompt + 4 + + + + Libaries\AsyncIO.0.1.40\lib\net40\AsyncIO.dll + + + + Libaries\Neodroid-FlatBuffers.1.0.0\lib\net45\Neodroid-FlatBuffers.dll + + + Libaries\NetMQ.4.0.0.156-pre\lib\net40\NetMQ.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\nunit.framework.dll + + + + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Cecil.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Cecil.Mdb.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Cecil.Pdb.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Cecil.Rocks.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.CecilTools.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.DataContract.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.IvyParser.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Legacy.NRefactory.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.Locator.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.SerializationLogic.dll + + + ..\Examples\Library\ScriptAssemblies\Unity.TextMeshPro.dll + + + ..\Examples\Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\Unity.UNetWeaver.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEditor.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEditor.Graphs.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.BaselibModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.CloudWebServicesModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.FacebookModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ParticlesLegacyModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SpatialTrackingModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.StyleSheetsModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TimelineModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\UnityExtensions\Unity\GUISystem\UnityEngine.UI.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.WebModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + + + ..\..\..\..\..\..\opt\Unity-2018.1.0b8\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Runtime/NeodroidInfo.cs b/Runtime/NeodroidInfo.cs deleted file mode 100644 index dce3609d3..000000000 --- a/Runtime/NeodroidInfo.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UnityEditor; - -namespace Neodroid.Runtime { - /// - /// - /// - public static class NeodroidInfo { - /// - /// - /// - public const string _Version = "0.1.7"; - - /// - /// - /// - public static string _ImportLocation = "Assets/Neodroid/"; - } -} \ No newline at end of file diff --git a/Runtime/NeodroidInfo.cs.meta b/Runtime/NeodroidInfo.cs.meta deleted file mode 100644 index dd44ce16a..000000000 --- a/Runtime/NeodroidInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e61361b4ad7b4052b2f763d11830bb24 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 6bda13f59e43e406cae4afe9aad66823, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/NeodroidRuntimeInfo.cs b/Runtime/NeodroidRuntimeInfo.cs new file mode 100644 index 000000000..18edb9e9a --- /dev/null +++ b/Runtime/NeodroidRuntimeInfo.cs @@ -0,0 +1,10 @@ +namespace droid.Runtime { + /// + /// + /// + public class NeodroidRuntimeInfo { + /// + /// + public const string _Version = "0.2.0"; + } +} diff --git a/Runtime/NeodroidRuntimeInfo.cs.meta b/Runtime/NeodroidRuntimeInfo.cs.meta new file mode 100644 index 000000000..6ac85cd3b --- /dev/null +++ b/Runtime/NeodroidRuntimeInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72191d789b9e40a6abffe1488df6522e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6bda13f59e43e406cae4afe9aad66823, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/NeodroidTests.csproj b/Runtime/NeodroidTests.csproj index 22cd6cea9..24b834e8f 100644 --- a/Runtime/NeodroidTests.csproj +++ b/Runtime/NeodroidTests.csproj @@ -1,690 +1,691 @@ - - - - 6 - {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - Debug - AnyCPU - 10.0.20506 - 2.0 - - {99AF0FBA-A168-9E54-0A0F-AF78918C339D} - Library - Properties - NeodroidTests - v4.7.1 - 512 - . - - - true - full - false - Temp\bin\Debug\ - DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_2_0;UNITY_2018_2;UNITY_2018;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_TEXTURE_STREAMING;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_VIDEO;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_LINUX;PLATFORM_STANDALONE;UNITY_STANDALONE_LINUX;UNITY_STANDALONE;UNITY_STANDALONE_LINUX_API;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_SPATIALTRACKING;ENABLE_MODULAR_UNITYENGINE_ASSEMBLIES;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_LINUX;ENABLE_UNITY_COLLECTIONS_CHECKS;UNITY_TEAM_LICENSE;UNITY_PRO_LICENSE;UNITY_POST_PROCESSING_STACK_V2;NEODROID;NEODROID_EXISTS;NEODROID_DEBUG_NOT;TEXT_MESH_PRO_EXISTS_NOT;ECS_EXISTS_NOT;NEODROID_DEBUG;UNITY_EDITOR_NOT - prompt - 4 - 0169 - False - - - pdbonly - true - Temp\bin\Release\ - prompt - 4 - 0169 - False - - - true - true - false - - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEditor.dll - - - - - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.BaselibModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.CloudWebServicesModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.FacebookModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.FileSystemHttpModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.HotReloadModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.LocalizationModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ParticlesLegacyModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ProfilerModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SpatialTrackingModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.StreamingModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SubstanceModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TLSModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TimelineModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UmbraModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAssetBundleModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.XRModule.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/Unity.Locator.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/TestRunner/Editor/UnityEditor.TestRunner.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/Timeline/Editor/UnityEditor.Timeline.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/Editor/UnityEditor.GoogleAudioSpatializer.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityHoloLens/Editor/UnityEditor.HoloLens.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/Editor/UnityEditor.SpatialTracking.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityVR/Editor/UnityEditor.VR.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEditor.Graphs.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/PlaybackEngines/LinuxStandaloneSupport/UnityEditor.LinuxStandalone.Extensions.dll - - - /home/heider/Github/Neodroid/droid/Examples/Assets/AssetStoreTools/Editor/AssetStoreToolsExtra.dll - - - /home/heider/Github/Neodroid/droid/Examples/Assets/AssetStoreTools/Editor/AssetStoreTools.dll - - - /home/heider/Github/Neodroid/droid/Examples/Assets/Plugins/Editor/JetBrains/JetBrains.Rider.Unity.Editor.Plugin.Repacked.dll - - - /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/NetMQ.4.0.0.156-pre/lib/net40/NetMQ.dll - - - /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/Neodroid-FlatBuffers.1.0.0/lib/net45/Neodroid-FlatBuffers.dll - - - /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/AsyncIO.0.1.40/lib/net40/AsyncIO.dll - - - /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll - - - /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll - - - /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Editor/ProBuilderEditor.dll - - - /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/AssetIdRemapUtility/Editor/AssetIdRemapUtility.dll - - - /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ProBuilderCore.dll - - - /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ProBuilderMeshOps.dll - - - /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ClassesLib/pb_Stl.dll - - - /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ClassesLib/KdTreeLib.dll - - - /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ClassesLib/Poly2Tri.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/mscorlib.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Core.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Runtime.Serialization.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Xml.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Xml.Linq.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/Microsoft.Win32.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.AppContext.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.Concurrent.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.NonGeneric.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.Specialized.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.Annotations.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.EventBasedAsync.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.TypeConverter.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Console.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Data.Common.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Contracts.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Debug.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.FileVersionInfo.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Process.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.StackTrace.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.TextWriterTraceListener.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Tools.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.TraceSource.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Drawing.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Dynamic.Runtime.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.Calendars.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.Extensions.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.Compression.ZipFile.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.DriveInfo.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.Watcher.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.IsolatedStorage.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.MemoryMappedFiles.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.Pipes.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.UnmanagedMemoryStream.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Expressions.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Parallel.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Queryable.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Http.Rtc.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.NameResolution.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.NetworkInformation.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Ping.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Requests.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Security.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Sockets.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebHeaderCollection.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebSockets.Client.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebSockets.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ObjectModel.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.ILGeneration.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.Lightweight.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Extensions.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.Reader.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.ResourceManager.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.Writer.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.CompilerServices.VisualC.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Extensions.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Handles.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.RuntimeInformation.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.WindowsRuntime.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Numerics.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Formatters.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Json.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Xml.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Claims.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Algorithms.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Csp.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Encoding.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.X509Certificates.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Principal.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.SecureString.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Duplex.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Http.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.NetTcp.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Primitives.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Security.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.Encoding.Extensions.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.Encoding.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.RegularExpressions.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Overlapped.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Tasks.Parallel.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Tasks.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Thread.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.ThreadPool.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Timer.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ValueTuple.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.ReaderWriter.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XDocument.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XPath.XDocument.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XPath.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XmlDocument.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XmlSerializer.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/netstandard.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/UnityScript.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/UnityScript.Lang.dll - - - /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/Boo.Lang.dll - - - - + + + + 6 + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {99AF0FBA-A168-9E54-0A0F-AF78918C339D} + Library + Properties + NeodroidTests + v4.7.1 + 512 + . + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_2_0;UNITY_2018_2;UNITY_2018;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_TEXTURE_STREAMING;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_VIDEO;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_LINUX;PLATFORM_STANDALONE;UNITY_STANDALONE_LINUX;UNITY_STANDALONE;UNITY_STANDALONE_LINUX_API;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_SPATIALTRACKING;ENABLE_MODULAR_UNITYENGINE_ASSEMBLIES;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_LINUX;ENABLE_UNITY_COLLECTIONS_CHECKS;UNITY_TEAM_LICENSE;UNITY_PRO_LICENSE;UNITY_POST_PROCESSING_STACK_V2;NEODROID;NEODROID_EXISTS;NEODROID_DEBUG_NOT;TEXT_MESH_PRO_EXISTS_NOT;ECS_EXISTS_NOT;NEODROID_DEBUG;UNITY_EDITOR_NOT + + prompt + 4 + 0169 + False + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + False + + + true + true + false + + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEditor.dll + + + + + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.BaselibModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.CloudWebServicesModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.FacebookModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.FileSystemHttpModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.HotReloadModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.LocalizationModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ParticlesLegacyModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ProfilerModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SpatialTrackingModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.StreamingModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.SubstanceModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TLSModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.TimelineModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UmbraModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAssetBundleModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEngine/UnityEngine.XRModule.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/Unity.Locator.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/TestRunner/Editor/UnityEditor.TestRunner.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/Timeline/Editor/UnityEditor.Timeline.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/Editor/UnityEditor.GoogleAudioSpatializer.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityHoloLens/Editor/UnityEditor.HoloLens.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/Editor/UnityEditor.SpatialTracking.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/UnityExtensions/Unity/UnityVR/Editor/UnityEditor.VR.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/Managed/UnityEditor.Graphs.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/PlaybackEngines/LinuxStandaloneSupport/UnityEditor.LinuxStandalone.Extensions.dll + + + /home/heider/Github/Neodroid/droid/Examples/Assets/AssetStoreTools/Editor/AssetStoreToolsExtra.dll + + + /home/heider/Github/Neodroid/droid/Examples/Assets/AssetStoreTools/Editor/AssetStoreTools.dll + + + /home/heider/Github/Neodroid/droid/Examples/Assets/Plugins/Editor/JetBrains/JetBrains.Rider.Unity.Editor.Plugin.Repacked.dll + + + /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/NetMQ.4.0.0.156-pre/lib/net40/NetMQ.dll + + + /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/Neodroid-FlatBuffers.1.0.0/lib/net45/Neodroid-FlatBuffers.dll + + + /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/AsyncIO.0.1.40/lib/net40/AsyncIO.dll + + + /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/OptimizedPriorityQueue.4.1.1/lib/net45/Priority Queue.dll + + + /home/heider/Github/Neodroid/droid/Examples/Assets/Neodroid/Libaries/Newtonsoft.Json.11.0.2/lib/net45/Newtonsoft.Json.dll + + + /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Editor/ProBuilderEditor.dll + + + /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/AssetIdRemapUtility/Editor/AssetIdRemapUtility.dll + + + /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ProBuilderCore.dll + + + /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ProBuilderMeshOps.dll + + + /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ClassesLib/pb_Stl.dll + + + /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ClassesLib/KdTreeLib.dll + + + /home/heider/.config/unity3d/cache/packages/packages.unity.com/com.unity.probuilder@3.0.8/ProBuilder/Classes/ClassesLib/Poly2Tri.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/mscorlib.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Core.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Runtime.Serialization.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Xml.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Xml.Linq.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/Microsoft.Win32.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.AppContext.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.Concurrent.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.NonGeneric.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.Specialized.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.Annotations.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.EventBasedAsync.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.TypeConverter.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Console.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Data.Common.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Contracts.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Debug.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.FileVersionInfo.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Process.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.StackTrace.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.TextWriterTraceListener.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Tools.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.TraceSource.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Drawing.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Dynamic.Runtime.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.Calendars.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.Extensions.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.Compression.ZipFile.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.DriveInfo.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.Watcher.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.IsolatedStorage.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.MemoryMappedFiles.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.Pipes.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.UnmanagedMemoryStream.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Expressions.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Parallel.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Queryable.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Http.Rtc.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.NameResolution.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.NetworkInformation.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Ping.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Requests.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Security.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Sockets.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebHeaderCollection.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebSockets.Client.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebSockets.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ObjectModel.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.ILGeneration.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.Lightweight.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Extensions.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.Reader.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.ResourceManager.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.Writer.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.CompilerServices.VisualC.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Extensions.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Handles.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.RuntimeInformation.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.WindowsRuntime.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Numerics.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Formatters.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Json.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Xml.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Claims.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Algorithms.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Csp.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Encoding.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.X509Certificates.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Principal.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.SecureString.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Duplex.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Http.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.NetTcp.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Primitives.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Security.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.Encoding.Extensions.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.Encoding.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.RegularExpressions.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Overlapped.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Tasks.Parallel.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Tasks.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Thread.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.ThreadPool.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Timer.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ValueTuple.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.ReaderWriter.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XDocument.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XPath.XDocument.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XPath.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XmlDocument.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XmlSerializer.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/netstandard.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/UnityScript.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/UnityScript.Lang.dll + + + /opt/Unity-2018.2.0b2/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/Boo.Lang.dll + + + + \ No newline at end of file diff --git a/Runtime/Prefabs/Cameras.meta b/Runtime/Prefabs/Cameras.meta new file mode 100644 index 000000000..0378a8b2c --- /dev/null +++ b/Runtime/Prefabs/Cameras.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e76ca01908651096a1171c2cca69769 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Cameras/DMRCam.prefab b/Runtime/Prefabs/Cameras/DMRCam.prefab new file mode 100644 index 000000000..6adfde6e1 --- /dev/null +++ b/Runtime/Prefabs/Cameras/DMRCam.prefab @@ -0,0 +1,863 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &240588885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 240588886} + - component: {fileID: 240588891} + - component: {fileID: 240588890} + - component: {fileID: 240588889} + - component: {fileID: 240588888} + - component: {fileID: 240588887} + m_Layer: 2 + m_Name: Tag + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &240588886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240588885} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7467086715454429673} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &240588891 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240588885} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7355ca23a1b57891dafa75b44c2c5cc8, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &240588890 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240588885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 240588890} + - {fileID: 1070427821062455335} + - {fileID: 5377819839005793890} + - {fileID: 7365900125772322223} + - {fileID: 7366439016244459735} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 240588891} +--- !u!114 &240588889 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240588885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 0} +--- !u!114 &240588888 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240588885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 240588891} + linear_space: 0 +--- !u!114 &240588887 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240588885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f0377162d14313d39cbce87f94ca1e6, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: d34875293dcb4a329bbbacec570f78f6, type: 3} + _camera: {fileID: 240588891} + _colors_by_category: + - _Category_Name: a + _Color: {r: 1, g: 0, b: 0, a: 1} + _segmentation_mode: 0 + _segmentation_preset: {fileID: 0} + _Replace_Untagged_Color: 1 + _Untagged_Color: {r: 0, g: 0, b: 0, a: 0} +--- !u!1 &938157070789517065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3265252618802199562} + - component: {fileID: 2856917610817516628} + - component: {fileID: 5377819839005793890} + - component: {fileID: 8130347211086212505} + - component: {fileID: 6639310192642118975} + - component: {fileID: 573829559} + m_Layer: 2 + m_Name: ObjectSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3265252618802199562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938157070789517065} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7467086715454429673} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &2856917610817516628 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938157070789517065} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 512 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &5377819839005793890 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938157070789517065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 240588890} + - {fileID: 1070427821062455335} + - {fileID: 5377819839005793890} + - {fileID: 7365900125772322223} + - {fileID: 7366439016244459735} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 2856917610817516628} +--- !u!114 &8130347211086212505 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938157070789517065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 0} +--- !u!114 &6639310192642118975 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938157070789517065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: e0709f4aa78e4226abc13a3c2116a306, type: 3} +--- !u!114 &573829559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938157070789517065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 2856917610817516628} + linear_space: 0 +--- !u!1 &1070427821062455324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1070427821062455331} + - component: {fileID: 1070427821062455334} + - component: {fileID: 1070427821062455335} + - component: {fileID: 1070427821062455328} + - component: {fileID: 1070427821062455329} + - component: {fileID: 1389657471} + m_Layer: 2 + m_Name: OcclusionMask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1070427821062455331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070427821062455324} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7467086715454429673} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1070427821062455334 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070427821062455324} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1024 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 741d32efcc5cb8896b9ea9bce98ba404, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1070427821062455335 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070427821062455324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 240588890} + - {fileID: 1070427821062455335} + - {fileID: 5377819839005793890} + - {fileID: 7365900125772322223} + - {fileID: 7366439016244459735} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 1070427821062455334} +--- !u!114 &1070427821062455328 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070427821062455324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 0} +--- !u!114 &1070427821062455329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070427821062455324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: b770c7b1542a812fcb2332b249713b12, type: 3} +--- !u!114 &1389657471 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070427821062455324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 1070427821062455334} + linear_space: 0 +--- !u!1 &7469716374670357323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7467476839244533621} + - component: {fileID: 7487440297018253665} + - component: {fileID: 7365900125772322223} + - component: {fileID: 7365982613330156329} + - component: {fileID: 7355529294831629811} + - component: {fileID: 1810679419653421340} + - component: {fileID: 1612140346} + m_Layer: 2 + m_Name: DMRCam + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7467476839244533621 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7469716374670357323} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7467086715454429673} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &7487440297018253665 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7469716374670357323} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 1, g: 1, b: 1, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7365900125772322223 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7469716374670357323} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 240588890} + - {fileID: 1070427821062455335} + - {fileID: 5377819839005793890} + - {fileID: 7365900125772322223} + - {fileID: 7366439016244459735} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 7487440297018253665} +--- !u!114 &7365982613330156329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7469716374670357323} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 0} +--- !u!124 &7355529294831629811 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7469716374670357323} + m_Enabled: 1 +--- !u!114 &1810679419653421340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7469716374670357323} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b3dd815fb29337f73b480c9dd61a4ae2, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 7486398571560204271} + - {fileID: 240588891} + - {fileID: 2856917610817516628} + - {fileID: 1070427821062455334} + - {fileID: 7487440297018253665} + _filter_mode: 0 + _size: {x: 128, y: 128} + _textures: + - {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + - {fileID: 8400000, guid: 7355ca23a1b57891dafa75b44c2c5cc8, type: 2} + - {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + - {fileID: 8400000, guid: 741d32efcc5cb8896b9ea9bce98ba404, type: 2} + _wrap_mode: 1 +--- !u!114 &1612140346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7469716374670357323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de5dce082825ab3dbaf5920d17bf6f8b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 2 + _relative_to_existing_value: 0 + _use_environments_space: 1 + _spherical_space: + _space: + _min_: {x: 0, y: 0.03141593, z: 4} + _max_: {x: 6.2831855, y: 1.5, z: 6} + _decimal_granularity: 4 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + sc: + _LoopPolar: 0 + _LoopElevation: 0 + _radius: 5 + _polar: -1.5707964 + _elevation: 0 + _min_radius: 4 + _max_radius: 6 + _min_polar: 0 + _max_polar: 6.2831855 + _min_elevation: 0.03141593 + _max_elevation: 1.5 +--- !u!1 &7470118216980910009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7475663027655423177} + - component: {fileID: 7486398571560204271} + - component: {fileID: 7366439016244459735} + - component: {fileID: 7365429206725827251} + - component: {fileID: 1061109946} + m_Layer: 2 + m_Name: RGB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7475663027655423177 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470118216980910009} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7467086715454429673} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &7486398571560204271 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470118216980910009} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7366439016244459735 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470118216980910009} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 240588890} + - {fileID: 1070427821062455335} + - {fileID: 5377819839005793890} + - {fileID: 7365900125772322223} + - {fileID: 7366439016244459735} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 7486398571560204271} +--- !u!114 &7365429206725827251 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470118216980910009} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 0} +--- !u!114 &1061109946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470118216980910009} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 7486398571560204271} + linear_space: 0 +--- !u!1 &7470610950945892323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7467086715454429673} + m_Layer: 2 + m_Name: DataCollectionCameras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7467086715454429673 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470610950945892323} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7475663027655423177} + - {fileID: 3265252618802199562} + - {fileID: 1070427821062455331} + - {fileID: 240588886} + m_Father: {fileID: 7467476839244533621} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Runtime/Prefabs/Cameras/DMRCam.prefab.meta b/Runtime/Prefabs/Cameras/DMRCam.prefab.meta new file mode 100644 index 000000000..5a42ffbca --- /dev/null +++ b/Runtime/Prefabs/Cameras/DMRCam.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e858fd902c181685ebbbe70e38645cc1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Cameras/Deprecated.meta b/Runtime/Prefabs/Cameras/Deprecated.meta new file mode 100644 index 000000000..885460f6f --- /dev/null +++ b/Runtime/Prefabs/Cameras/Deprecated.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da795bc9afdf585b0b0dc827e0e25de8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraEncoded.prefab b/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraEncoded.prefab new file mode 100644 index 000000000..e477d9d80 --- /dev/null +++ b/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraEncoded.prefab @@ -0,0 +1,5401 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &165064346 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 165064347} + - component: {fileID: 165064351} + - component: {fileID: 165064350} + - component: {fileID: 165064349} + - component: {fileID: 165064348} + m_Layer: 2 + m_Name: 180 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &165064347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165064346} + m_LocalRotation: {x: -0, y: -0.81915206, z: 0.57357633, w: 0.000000029802319} + m_LocalPosition: {x: 0, y: 1.1471528, z: 1.6383044} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 733305552682277418} + m_Father: {fileID: 4232321861901436} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 35, y: -90, z: 0} +--- !u!20 &165064351 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165064346} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 58bcb9cbeccb20f4a987d9790194cdb3, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &165064350 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165064346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 165064351} +--- !u!114 &165064349 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165064346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 165064351} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &165064348 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165064346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!1 &727610260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 727610261} + - component: {fileID: 727610266} + - component: {fileID: 727610265} + - component: {fileID: 727610264} + - component: {fileID: 727610263} + - component: {fileID: 727610262} + m_Layer: 2 + m_Name: Vs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &727610261 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727610260} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &727610266 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727610260} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 142c9eceec4ee3060b3550e1b2a64cbf, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &727610265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727610260} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 727610266} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &727610264 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727610260} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 727610266} +--- !u!114 &727610263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727610260} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &727610262 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727610260} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 043c4327de3a39ce7b6086de2593d097, type: 3} +--- !u!1 &790114233 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 790114234} + - component: {fileID: 790114239} + - component: {fileID: 790114237} + - component: {fileID: 790114236} + - component: {fileID: 790114235} + - component: {fileID: 790114238} + m_Layer: 2 + m_Name: MaterialId + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &790114234 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 790114233} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &790114239 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 790114233} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: e52a2f56c9ffa187abf5021f3338228e, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &790114237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 790114233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 790114239} +--- !u!114 &790114236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 790114233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 790114239} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &790114235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 790114233} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1003e9e65c5a4495a80b404ca321593b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _observation_value: 'BluePlastic: RGBA(0.188, 0.251, 0.820, 1.000), Default-Material: + RGBA(0.502, 0.255, 0.286, 1.000), material1: RGBA(0.204, 0.004, 0.063, 1.000)' + _segmenter: {fileID: 790114238} +--- !u!114 &790114238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 790114233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7bdd700ad374c83b86a813127e132de, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: cf1860839d9116438895181a0b52e813, type: 3} + _camera: {fileID: 790114239} +--- !u!1 &870147243 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 870147244} + - component: {fileID: 870147248} + - component: {fileID: 870147247} + - component: {fileID: 870147246} + - component: {fileID: 870147245} + m_Layer: 2 + m_Name: CompressedDepth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &870147244 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870147243} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &870147248 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870147243} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 65d4c1ba790a0b02b827d1bca779fd3d, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &870147247 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870147243} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 870147248} +--- !u!114 &870147246 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870147243} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 870147248} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &870147245 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870147243} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: ecaae557ba4c4fc1a80e878b62be711d, type: 3} +--- !u!1 &1403684211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1403684212} + - component: {fileID: 1403684218} + - component: {fileID: 1403684217} + - component: {fileID: 1403684216} + - component: {fileID: 1403684214} + - component: {fileID: 1403684213} + m_Layer: 2 + m_Name: ObjectIdInstance + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1403684212 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403684211} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1403684218 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403684211} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 280476064a32df4848434f9b38c2d744, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1403684217 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403684211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 08d8186d4ab68d634912ff814b6d0f62, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: 8fd7ede99a3748d686ce9bf8cd8dd2d7, type: 3} + _camera: {fileID: 1403684218} +--- !u!114 &1403684216 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403684211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 1403684218} +--- !u!114 &1403684214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403684211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 1403684218} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &1403684213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403684211} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1003e9e65c5a4495a80b404ca321593b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _observation_value: '-2386: RGBA(0.518, 0.157, 0.255, 1.000), -2332: RGBA(0.086, + 0.157, 0.251, 1.000), 14594: RGBA(0.518, 0.031, 0.565, 1.000)' + _segmenter: {fileID: 1403684217} +--- !u!1 &1458531844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1458531850} + - component: {fileID: 1458531849} + - component: {fileID: 1458531848} + - component: {fileID: 1458531845} + - component: {fileID: 1458531847} + - component: {fileID: 1458531846} + m_Layer: 2 + m_Name: Us + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1458531850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458531844} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1458531849 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458531844} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: a2ed3a19ee4cfe303b28c87fca44a286, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1458531848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458531844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 1458531849} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &1458531845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458531844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 1458531849} +--- !u!114 &1458531847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458531844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &1458531846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458531844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: f0f776e767c948816bfdca7bda1ebc72, type: 3} +--- !u!1 &1623028170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1623028171} + - component: {fileID: 1623028176} + - component: {fileID: 1623028175} + - component: {fileID: 1623028174} + - component: {fileID: 1623028173} + - component: {fileID: 1623028172} + m_Layer: 2 + m_Name: WorldSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1623028171 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623028170} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1623028176 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623028170} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 0a204b96270826992a5c81c531ea5dcf, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1623028175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623028170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 1623028176} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &1623028174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623028170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 1623028176} +--- !u!114 &1623028173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623028170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &1623028172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623028170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: a1fe4d82f3c0be1aa917ece055794af2, type: 3} +--- !u!1 &2031637000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2031637005} + - component: {fileID: 2031637004} + - component: {fileID: 2031637001} + - component: {fileID: 2031637003} + - component: {fileID: 2031637002} + m_Layer: 2 + m_Name: 90 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2031637005 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2031637000} + m_LocalRotation: {x: 0.000000014901161, y: 0.57922804, z: -0.40557975, w: 0.7071068} + m_LocalPosition: {x: -1, y: 0.5735764, z: 0.819152} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3183072780752237457} + m_Father: {fileID: 4232321861901436} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 35, y: 180, z: 0} +--- !u!20 &2031637004 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2031637000} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 8eff871290da4fd0e8a9ac76009bec92, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &2031637001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2031637000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 2031637004} +--- !u!114 &2031637003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2031637000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 2031637004} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &2031637002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2031637000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!1 &1006723805586038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4232321861901436} + m_Layer: 2 + m_Name: DataCollectionCameras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4232321861901436 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1006723805586038} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4927334179696988} + - {fileID: 1931405973741409654} + - {fileID: 2031637005} + - {fileID: 165064347} + - {fileID: 1276665476074544665} + - {fileID: 4453025719616826} + - {fileID: 4725180884745084} + - {fileID: 4949770021763212} + - {fileID: 3204711235020128306} + - {fileID: 4337138128144672} + - {fileID: 5404288203761531295} + - {fileID: 1623028171} + - {fileID: 1403684212} + - {fileID: 790114234} + - {fileID: 5176236950124164324} + - {fileID: 7064590381258298542} + - {fileID: 4782114267277853685} + - {fileID: 1458531850} + - {fileID: 727610261} + - {fileID: 870147244} + - {fileID: 4218908600063310} + - {fileID: 4990876669653025970} + m_Father: {fileID: 4129864042203872} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1037625987720610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4419360240986842} + - component: {fileID: 108322580981299036} + m_Layer: 2 + m_Name: OrthographicNaturalLightSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4419360240986842 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1037625987720610} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4889865574120588} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &108322580981299036 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1037625987720610} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294959103 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &1138998545480074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4949770021763212} + - component: {fileID: 20367486579053346} + - component: {fileID: 114307586759802868} + - component: {fileID: 114622768315461166} + - component: {fileID: 114032525281749288} + m_Layer: 2 + m_Name: Normal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4949770021763212 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138998545480074} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20367486579053346 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138998545480074} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 63f7bf9c3a80b4d169b394696cbbd9ab, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &114307586759802868 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138998545480074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 114307586759802868} + - {fileID: 114203839715900738} + - {fileID: 114594705335718820} + - {fileID: 114203530777878686} + - {fileID: 114798311224295254} + - {fileID: 0} + - {fileID: 114608562479145288} + - {fileID: 0} + - {fileID: 114716082362535994} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 20367486579053346} +--- !u!114 &114622768315461166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138998545480074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: Normal + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 20367486579053346} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &114032525281749288 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138998545480074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: aa118ec7ab6c04e139900fecf923c766, type: 3} +--- !u!1 &1176750420014840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4602590134894934} + - component: {fileID: 108133865239658186} + m_Layer: 2 + m_Name: PerspectiveNaturalLightSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4602590134894934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1176750420014840} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4889865574120588} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &108133865239658186 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1176750420014840} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 100 + m_SpotAngle: 90 + m_InnerSpotAngle: 71.41338 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294959103 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &1216578306050604 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4927334179696988} + - component: {fileID: 20940602749366906} + - component: {fileID: 114203839715900738} + - component: {fileID: 114789472510660598} + - component: {fileID: 114877382518267686} + m_Layer: 2 + m_Name: RGB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4927334179696988 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216578306050604} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4331612275810624} + m_Father: {fileID: 4232321861901436} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20940602749366906 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216578306050604} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 512 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &114203839715900738 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216578306050604} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 20940602749366906} +--- !u!114 &114789472510660598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216578306050604} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 20940602749366906} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &114877382518267686 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216578306050604} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!1 &1238596673498848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4331612275810624} + - component: {fileID: 33198744561240566} + - component: {fileID: 65428771364152348} + - component: {fileID: 23598461857027390} + - component: {fileID: 242776474} + - component: {fileID: 288200420} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4331612275810624 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238596673498848} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.050000116} + m_LocalScale: {x: 0.3, y: 0.050000004, z: 0.050000004} + m_Children: [] + m_Father: {fileID: 4927334179696988} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &33198744561240566 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238596673498848} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65428771364152348 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238596673498848} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &23598461857027390 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238596673498848} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!120 &242776474 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238596673498848} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 359e9981d02f34d5abe9791e757f58c1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -32, y: 5, z: -4.05} + - {x: -32, y: -6.622984, z: -4.05} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.059776306 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!114 &288200420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238596673498848} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c228034271aa09ca09a437dce55e37a4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} + _length: 30 +--- !u!1 &1531565962497132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4762047315780166} + - component: {fileID: 108906297679887750} + - component: {fileID: 114704739639699848} + m_Layer: 2 + m_Name: PerspectiveInfraredLightSource + m_TagString: Infrared + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4762047315780166 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1531565962497132} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4889865574120588} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &108906297679887750 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1531565962497132} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 0 + m_Color: {r: 1, g: 0, b: 0, a: 1} + m_Intensity: 1 + m_Range: 100 + m_SpotAngle: 90 + m_InnerSpotAngle: 71.41338 + m_CookieSize: 0 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 20 + m_ShadowAngle: 0 +--- !u!114 &114704739639699848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1531565962497132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb842d57fd4d0474497a6d1b0c477f96, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1568745427337830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4725180884745084} + - component: {fileID: 20793825365236440} + - component: {fileID: 114594705335718820} + - component: {fileID: 114844159235485554} + - component: {fileID: 114931974240182444} + - component: {fileID: 114764329013616076} + - component: {fileID: 114907179650593844} + m_Layer: 2 + m_Name: Satellite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4725180884745084 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1568745427337830} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 8.027861, z: -4.400393} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 55.000004, y: 0, z: 0} +--- !u!20 &20793825365236440 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1568745427337830} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 30 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: bc593ac7628a042ac93b20ca1c0101b6, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &114594705335718820 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1568745427337830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 114307586759802868} + - {fileID: 114203839715900738} + - {fileID: 114594705335718820} + - {fileID: 114203530777878686} + - {fileID: 114798311224295254} + - {fileID: 0} + - {fileID: 114608562479145288} + - {fileID: 0} + - {fileID: 114716082362535994} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 0 + _sync_fov: 0 + _sync_near_clip_plane: 0 + _sync_orthographic_projection: 0 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 20793825365236440} +--- !u!114 &114844159235485554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1568745427337830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 20793825365236440} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &114931974240182444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1568745427337830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 246cc59c7a84ea44f87f6b70acfe30c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Offset: {x: 0, y: 10, z: 0} + target: {fileID: 0} +--- !u!114 &114764329013616076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1568745427337830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &114907179650593844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1568745427337830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85ccef30fe10a486389326bacc3bdfd4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} +--- !u!1 &1634100351029940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4218908600063310} + - component: {fileID: 20145353716750142} + - component: {fileID: 114203530777878686} + - component: {fileID: 114155819769717986} + - component: {fileID: 114633070162146770} + m_Layer: 2 + m_Name: MultiChannelDepth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4218908600063310 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634100351029940} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20145353716750142 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634100351029940} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 5d9eca522a1944267b89beea11ffc58c, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &114203530777878686 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634100351029940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 114307586759802868} + - {fileID: 114203839715900738} + - {fileID: 114594705335718820} + - {fileID: 114203530777878686} + - {fileID: 114798311224295254} + - {fileID: 0} + - {fileID: 114608562479145288} + - {fileID: 0} + - {fileID: 114716082362535994} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 20145353716750142} +--- !u!114 &114155819769717986 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634100351029940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: MultiChannelDepth + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 20145353716750142} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &114633070162146770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634100351029940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 0f2361423bff3490d8f046e398478528, type: 3} +--- !u!1 &1714345857349140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4889865574120588} + m_Layer: 2 + m_Name: LightSources + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4889865574120588 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714345857349140} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.050000075, y: 0, z: -0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4419360240986842} + - {fileID: 4762047315780166} + - {fileID: 4602590134894934} + m_Father: {fileID: 4129864042203872} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1858830691588984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4337138128144672} + - component: {fileID: 20768847776266208} + - component: {fileID: 114798311224295254} + - component: {fileID: 114216501179093510} + - component: {fileID: 114831488807547016} + - component: {fileID: 114442928199698278} + - component: {fileID: 114889075139374148} + m_Layer: 2 + m_Name: Flow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4337138128144672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858830691588984} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20768847776266208 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858830691588984} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: afc5604d79d0849129803e463fc07bca, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &114798311224295254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858830691588984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 114307586759802868} + - {fileID: 114203839715900738} + - {fileID: 114594705335718820} + - {fileID: 114203530777878686} + - {fileID: 114798311224295254} + - {fileID: 0} + - {fileID: 114608562479145288} + - {fileID: 0} + - {fileID: 114716082362535994} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 20768847776266208} +--- !u!114 &114216501179093510 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858830691588984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: Flow + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 20768847776266208} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &114831488807547016 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858830691588984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &114442928199698278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858830691588984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 3863f59f4842f4d90bc3966b1f9502af, type: 3} +--- !u!114 &114889075139374148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858830691588984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b2e54ebded2e5489fa2596cf3ab24e37, type: 3} + m_Name: + m_EditorClassIdentifier: + _background_color: {r: 0, g: 0, b: 0, a: 1} + _blending: 0.5 + _overlay_amplitude: 60 + _shader: {fileID: 4800000, guid: 3863f59f4842f4d90bc3966b1f9502af, type: 3} +--- !u!1 &1866968490669790 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4129864042203872} + - component: {fileID: 20224209517257972} + - component: {fileID: 114716082362535994} + - component: {fileID: 114376289421041340} + - component: {fileID: 124821388434305126} + - component: {fileID: 9119703340410289289} + - component: {fileID: 1625775002} + - component: {fileID: 1625775003} + - component: {fileID: 1780244598} + - component: {fileID: 1165118373} + - component: {fileID: 1165118374} + m_Layer: 2 + m_Name: NeodroidCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4129864042203872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_LocalRotation: {x: 0.21263106, y: 0.67437977, z: -0.21263108, w: 0.6743797} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4232321861901436} + - {fileID: 4889865574120588} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 35, y: 90.00001, z: 0} +--- !u!20 &20224209517257972 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 1, g: 1, b: 1, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &114716082362535994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 20224209517257972} +--- !u!114 &114376289421041340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!124 &124821388434305126 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 1 +--- !u!114 &9119703340410289289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b3dd815fb29337f73b480c9dd61a4ae2, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _filter_mode: 0 + _size: {x: 512, y: 512} + _textures: + - {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + - {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + _wrap_mode: 1 +--- !u!114 &1625775002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b5262a22bdff171d9c6615614469b95, type: 3} + m_Name: + m_EditorClassIdentifier: + _line_material: {fileID: 0} + _draw_label: 1 + _cacheBoundingBoxes: 1 +--- !u!114 &1625775003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a69c9a240ee53baafadb71c70054e1ee, type: 3} + m_Name: + m_EditorClassIdentifier: + _draw_label: 1 + bounding_boxes: + - {fileID: 0} + _cache_bounding_boxes: 1 + gui_style: {fileID: 11400000, guid: 45b8b02736ca4fc5b88b554edf8576ad, type: 2} + _draw_coords: 1 +--- !u!114 &1780244598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 24436b5ac49af0dcaa5d2b405c48819d, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: CameraRandom + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _relative_to_existing_value: 0 + _sampleRandom: 0 + on_tick: 0 + _camera: {fileID: 20224209517257972} + _syncer: {fileID: 114716082362535994} + _fov_space: + _Decimal_Granularity: 0 + _Min_Value: 80 + _Max_Value: 28.3 + normalised: 0 + _focal_space: + _Decimal_Granularity: 3 + _Min_Value: 7 + _Max_Value: 8 + normalised: 0 + _sensor_size_space: + _Min_Values: {x: 4.79, y: 3.49} + _Max_Values: {x: 4.91, y: 3.61} + _decimal_granularity: 2 + normalised: 0 + _lens_shift_space: + _Min_Values: {x: 0, y: 0} + _Max_Values: {x: 0, y: 0} + _decimal_granularity: 3 + normalised: 0 + _gate_fit_space: + _Decimal_Granularity: 0 + _Min_Value: 0 + _Max_Value: 4 + normalised: 0 +--- !u!114 &1165118373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 246cc59c7a84ea44f87f6b70acfe30c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Offset: {x: 0, y: 0, z: -10} + target: {fileID: 0} +--- !u!114 &1165118374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866968490669790} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83679d70048bdfce4a7d7f6f8d583a5f, type: 3} + m_Name: + m_EditorClassIdentifier: + bb: {fileID: 0} + margin: 2.5 +--- !u!1 &1975208461797724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4453025719616826} + - component: {fileID: 20598539646069560} + - component: {fileID: 114271565463949058} + - component: {fileID: 114608562479145288} + - component: {fileID: 114100763809553962} + m_Layer: 2 + m_Name: Infrared + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4453025719616826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975208461797724} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20598539646069560 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975208461797724} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 30 + field of view: 80 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: b22ce111b5af44afe8b8f2f085799a5f, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &114271565463949058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975208461797724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: Infrared + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 20598539646069560} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &114608562479145288 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975208461797724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 114307586759802868} + - {fileID: 114203839715900738} + - {fileID: 114594705335718820} + - {fileID: 114203530777878686} + - {fileID: 114798311224295254} + - {fileID: 0} + - {fileID: 114608562479145288} + - {fileID: 0} + - {fileID: 114716082362535994} + - {fileID: 114594705335718820} + - {fileID: 114307586759802868} + - {fileID: 1623028174} + - {fileID: 1458531845} + - {fileID: 1403684216} + - {fileID: 870147247} + - {fileID: 727610264} + - {fileID: 114203839715900738} + - {fileID: 790114237} + - {fileID: 2031637001} + - {fileID: 165064350} + - {fileID: 114716082362535994} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 20598539646069560} +--- !u!114 &114100763809553962 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975208461797724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 1 + _ignore_infrared_if_empty: 0 + _lights_to_ignore: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} +--- !u!1 &1579474471743624001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7064590381258298542} + - component: {fileID: 5796786885426895393} + - component: {fileID: 1802749280476413633} + - component: {fileID: 1388282906230925801} + - component: {fileID: 2102038394316443802} + - component: {fileID: 8934520332220601364} + m_Layer: 2 + m_Name: Layer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7064590381258298542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579474471743624001} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &5796786885426895393 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579474471743624001} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 29bfbe75d2faa72cdbf597b2763205ab, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1802749280476413633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579474471743624001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 5796786885426895393} +--- !u!114 &1388282906230925801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579474471743624001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 5796786885426895393} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &2102038394316443802 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579474471743624001} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1003e9e65c5a4495a80b404ca321593b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _observation_value: 'a: RGBA(1.000, 0.000, 0.000, 1.000), b: RGBA(0.000, 1.000, + 0.000, 1.000), c: RGBA(0.000, 0.001, 1.000, 1.000), Ignore Raycast: RGBA(1.000, + 1.000, 0.700, 1.000), Default: RGBA(1.000, 1.000, 1.000, 1.000)' + _segmenter: {fileID: 8934520332220601364} +--- !u!114 &8934520332220601364 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579474471743624001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f0377162d14313d39cbce87f94ca1e6, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: d700b8effb9a06de89e30a220972fe80, type: 3} + _camera: {fileID: 5796786885426895393} + _colors_by_category: [] + _segmentation_mode: 1 + _segmentation_preset: {fileID: 11400000, guid: 1387513cbea10420eaa5a7ac8f932b80, + type: 2} + _Replace_Untagged_Color: 1 + _Untagged_Color: {r: 0, g: 0, b: 0, a: 1} +--- !u!1 &3025541464077872456 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4782114267277853685} + - component: {fileID: 3337727558481276136} + - component: {fileID: 7018507887329798990} + - component: {fileID: 4939762416714711659} + - component: {fileID: 3446619221498633412} + - component: {fileID: 7902985753637307439} + m_Layer: 2 + m_Name: UVs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4782114267277853685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3025541464077872456} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &3337727558481276136 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3025541464077872456} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 43f8b57e2bee2bd6eb1df24b6c88ba79, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7018507887329798990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3025541464077872456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 3337727558481276136} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &4939762416714711659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3025541464077872456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 3337727558481276136} +--- !u!114 &3446619221498633412 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3025541464077872456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &7902985753637307439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3025541464077872456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 333867bbd39e226998d1bfd376f7ea56, type: 3} +--- !u!1 &4372182565618092540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9115302173877506098} + - component: {fileID: 7696301038599088328} + - component: {fileID: 7831071227245904237} + - component: {fileID: 5376291146047320227} + - component: {fileID: 106237647714818808} + - component: {fileID: 394995030896283756} + m_Layer: 2 + m_Name: RGB360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &9115302173877506098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4372182565618092540} + m_LocalRotation: {x: 0.000000029802322, y: -0.8191521, z: 0.57357633, w: -0.000000029802322} + m_LocalPosition: {x: 0, y: 1.1471528, z: 1.6383045} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4990876669653025970} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 35, y: -90, z: 0} +--- !u!20 &7696301038599088328 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4372182565618092540} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 179 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7831071227245904237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4372182565618092540} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 0 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 7696301038599088328} +--- !u!114 &5376291146047320227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4372182565618092540} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 7696301038599088328} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &106237647714818808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4372182565618092540} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &394995030896283756 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4372182565618092540} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 219450474d12d1835a0a1701a632e99d, type: 3} + m_Name: + m_EditorClassIdentifier: + cubemapLeftEye: {fileID: 0} + cubemapRightEye: {fileID: 0} + cubemapEquirect: {fileID: 0} + _texture: {fileID: 0} + renderStereo: 1 + stereoSeparation: 0.064 +--- !u!1 &6184846525513548927 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1931405973741409654} + - component: {fileID: 8584843010322102044} + - component: {fileID: 3844039368205312392} + - component: {fileID: 4060211227789312537} + - component: {fileID: 1855446813} + m_Layer: 2 + m_Name: Offset + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1931405973741409654 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6184846525513548927} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8584843010322102044 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6184846525513548927} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 8.654184 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 22.863745 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: cc4e727fd2f685deea5ec6e4b44b5cc3, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &3844039368205312392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6184846525513548927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 114203839715900738} + - {fileID: 3844039368205312392} + - {fileID: 3246734891326987255} + - {fileID: 114716082362535994} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8584843010322102044} +--- !u!114 &4060211227789312537 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6184846525513548927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: Offset + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 8584843010322102044} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &1855446813 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6184846525513548927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!1 &6288642335044004275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3183072780752237457} + - component: {fileID: 3223351390627515222} + - component: {fileID: 5199144884954685204} + - component: {fileID: 8241993976736662331} + - component: {fileID: 211183543} + - component: {fileID: 1492671755} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3183072780752237457 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6288642335044004275} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.05000012} + m_LocalScale: {x: 0.30000007, y: 0.05, z: 0.050000004} + m_Children: [] + m_Father: {fileID: 2031637005} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3223351390627515222 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6288642335044004275} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &5199144884954685204 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6288642335044004275} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8241993976736662331 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6288642335044004275} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!120 &211183543 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6288642335044004275} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100002, guid: a09837bc152a9b9459581f48bee12074, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -20, y: 2.028679, z: -18.959042} + - {x: -20, y: 1.05, z: -18.959042} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.059776306 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!114 &1492671755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6288642335044004275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c228034271aa09ca09a437dce55e37a4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} + _length: 30 +--- !u!1 &6495121336611594841 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7093915696889983724} + - component: {fileID: 8872499379245289402} + - component: {fileID: 4537956548422974673} + - component: {fileID: 8800067457764981147} + - component: {fileID: 1000215925642776652} + - component: {fileID: 4039539116920907607} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7093915696889983724 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6495121336611594841} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.05000012} + m_LocalScale: {x: 0.29999992, y: 0.049999997, z: 0.049999993} + m_Children: [] + m_Father: {fileID: 1276665476074544665} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8872499379245289402 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6495121336611594841} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &4537956548422974673 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6495121336611594841} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8800067457764981147 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6495121336611594841} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!120 &1000215925642776652 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6495121336611594841} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100002, guid: a09837bc152a9b9459581f48bee12074, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -18.959042, y: 2.028679, z: -20} + - {x: -18.959042, y: 0, z: -20} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.059776306 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!114 &4039539116920907607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6495121336611594841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c228034271aa09ca09a437dce55e37a4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} + _length: 30 +--- !u!1 &7298267196774415698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1276665476074544665} + - component: {fileID: 2792121728196577027} + - component: {fileID: 1033144448325893603} + - component: {fileID: 4511201991816080384} + - component: {fileID: 6155236680812772045} + m_Layer: 2 + m_Name: 270 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1276665476074544665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7298267196774415698} + m_LocalRotation: {x: -0.40557975, y: -0.579228, z: 0.40557975, w: -0.579228} + m_LocalPosition: {x: 0, y: 1.1471528, z: 1.6383045} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7093915696889983724} + m_Father: {fileID: 4232321861901436} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 70, y: -270, z: 0} +--- !u!20 &2792121728196577027 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7298267196774415698} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 58bcb9cbeccb20f4a987d9790194cdb3, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1033144448325893603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7298267196774415698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 2792121728196577027} +--- !u!114 &4511201991816080384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7298267196774415698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 2792121728196577027} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &6155236680812772045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7298267196774415698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!1 &7686063924545477276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5404288203761531295} + - component: {fileID: 4614691972182028737} + - component: {fileID: 1157515293052786522} + - component: {fileID: 3246734891326987255} + - component: {fileID: 1692132170337216524} + - component: {fileID: 4291072798006448298} + m_Layer: 2 + m_Name: ObjectSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5404288203761531295 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7686063924545477276} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &4614691972182028737 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7686063924545477276} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 512 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1157515293052786522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7686063924545477276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 4614691972182028737} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &3246734891326987255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7686063924545477276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4614691972182028737} +--- !u!114 &1692132170337216524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7686063924545477276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &4291072798006448298 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7686063924545477276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: e0709f4aa78e4226abc13a3c2116a306, type: 3} +--- !u!1 &8285923040088187816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 733305552682277418} + - component: {fileID: 5587126611187728183} + - component: {fileID: 7924996459657497173} + - component: {fileID: 3360310144991984353} + - component: {fileID: 211183542} + - component: {fileID: 504536506} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &733305552682277418 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8285923040088187816} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.05000012} + m_LocalScale: {x: 0.29999992, y: 0.049999997, z: 0.049999993} + m_Children: [] + m_Father: {fileID: 165064347} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5587126611187728183 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8285923040088187816} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &7924996459657497173 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8285923040088187816} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3360310144991984353 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8285923040088187816} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!120 &211183542 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8285923040088187816} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100002, guid: a09837bc152a9b9459581f48bee12074, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -18.959042, y: 2.028679, z: -20} + - {x: -18.959042, y: 0, z: -20} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.059776306 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!114 &504536506 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8285923040088187816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c228034271aa09ca09a437dce55e37a4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} + _length: 30 +--- !u!1 &8301459128882461246 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4990876669653025970} + m_Layer: 2 + m_Name: 360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4990876669653025970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8301459128882461246} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 9115302173877506098} + - {fileID: 7006891629233013254} + m_Father: {fileID: 4232321861901436} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8561399113173384605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5176236950124164324} + - component: {fileID: 4204259003963777610} + - component: {fileID: 1171208658948452137} + - component: {fileID: 1470249221512581844} + - component: {fileID: 295743084378785225} + - component: {fileID: 3883913920282434489} + m_Layer: 2 + m_Name: Tag + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &5176236950124164324 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561399113173384605} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &4204259003963777610 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561399113173384605} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7355ca23a1b57891dafa75b44c2c5cc8, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1171208658948452137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561399113173384605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4204259003963777610} +--- !u!114 &1470249221512581844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561399113173384605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 4204259003963777610} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &295743084378785225 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561399113173384605} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1003e9e65c5a4495a80b404ca321593b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _observation_value: 'a: RGBA(1.000, 0.000, 0.000, 1.000), b: RGBA(0.000, 1.000, + 0.000, 1.000), c: RGBA(0.000, 0.001, 1.000, 1.000), CameraBody: RGBA(0.314, 0.322, + 0.929, 1.000), Untagged: RGBA(0.333, 0.867, 0.576, 1.000)' + _segmenter: {fileID: 3883913920282434489} +--- !u!114 &3883913920282434489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8561399113173384605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f0377162d14313d39cbce87f94ca1e6, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: d34875293dcb4a329bbbacec570f78f6, type: 3} + _camera: {fileID: 4204259003963777610} + _colors_by_category: [] + _segmentation_mode: 0 + _segmentation_preset: {fileID: 11400000, guid: 1387513cbea10420eaa5a7ac8f932b80, + type: 2} + _Replace_Untagged_Color: 1 + _Untagged_Color: {r: 0, g: 0, b: 0, a: 1} +--- !u!1 &8900663163298106724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3204711235020128306} + - component: {fileID: 4956758692426196692} + - component: {fileID: 3217234966874384926} + - component: {fileID: 1463669859483367840} + - component: {fileID: 8720350399880736472} + - component: {fileID: 1623607857239925622} + m_Layer: 2 + m_Name: Tangents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3204711235020128306 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8900663163298106724} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232321861901436} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &4956758692426196692 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8900663163298106724} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7ce5712ecfb6c0929a81d56be34c2333, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &3217234966874384926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8900663163298106724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 4956758692426196692} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &1463669859483367840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8900663163298106724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4956758692426196692} +--- !u!114 &8720350399880736472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8900663163298106724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &1623607857239925622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8900663163298106724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: f7ec6ef2b94336a8f8c74e04ffd808a5, type: 3} +--- !u!1 &8932447973622363015 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7006891629233013254} + - component: {fileID: 4925164658461857582} + - component: {fileID: 940222050696164076} + - component: {fileID: 3779310128777116430} + - component: {fileID: 3936011181551074813} + - component: {fileID: 8571941603674059107} + - component: {fileID: 1256391074988278956} + m_Layer: 2 + m_Name: Depth360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7006891629233013254 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8932447973622363015} + m_LocalRotation: {x: 0.000000044703484, y: -0.8191521, z: 0.57357633, w: -0.000000029802322} + m_LocalPosition: {x: -0, y: 1.1471528, z: 1.6383045} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4990876669653025970} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 35, y: -90, z: 0} +--- !u!20 &4925164658461857582 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8932447973622363015} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 179 + orthographic: 0 + orthographic size: 1.9 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &940222050696164076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8932447973622363015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 940222050696164076} + - {fileID: 114716082362535994} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 0 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4925164658461857582} +--- !u!114 &3779310128777116430 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8932447973622363015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _normalise_observation: 0 + _Camera: {fileID: 4925164658461857582} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &3936011181551074813 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8932447973622363015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 108906297679887750} +--- !u!114 &8571941603674059107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8932447973622363015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 219450474d12d1835a0a1701a632e99d, type: 3} + m_Name: + m_EditorClassIdentifier: + cubemapLeftEye: {fileID: 0} + cubemapRightEye: {fileID: 0} + cubemapEquirect: {fileID: 0} + _texture: {fileID: 0} + renderStereo: 1 + stereoSeparation: 0.064 +--- !u!114 &1256391074988278956 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8932447973622363015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: ecaae557ba4c4fc1a80e878b62be711d, type: 3} diff --git a/Runtime/Prefabs/NeodroidCamera.prefab.meta b/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraEncoded.prefab.meta similarity index 100% rename from Runtime/Prefabs/NeodroidCamera.prefab.meta rename to Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraEncoded.prefab.meta diff --git a/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraFloatArray.prefab b/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraFloatArray.prefab new file mode 100644 index 000000000..5103b9d72 --- /dev/null +++ b/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraFloatArray.prefab @@ -0,0 +1,5620 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &555281772644808486 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2125651880926414503} + - component: {fileID: 4042856865019220879} + - component: {fileID: 8164737187736122957} + - component: {fileID: 5201764524148834223} + - component: {fileID: 5394514792230959452} + - component: {fileID: 772095444812002754} + - component: {fileID: 7867004361966141453} + m_Layer: 2 + m_Name: Depth360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2125651880926414503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_LocalRotation: {x: 0.000000044703484, y: -0.8191521, z: 0.57357633, w: -0.000000029802322} + m_LocalPosition: {x: -0, y: 1.1471528, z: 1.6383045} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4107714061836288019} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 35, y: -90, z: 0} +--- !u!20 &4042856865019220879 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 179 + orthographic: 0 + orthographic size: 1.9 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8164737187736122957 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 8164737187736122957} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 0 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4042856865019220879} +--- !u!114 &5201764524148834223 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _Camera: {fileID: 4042856865019220879} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &5394514792230959452 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &772095444812002754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 219450474d12d1835a0a1701a632e99d, type: 3} + m_Name: + m_EditorClassIdentifier: + cubemapLeftEye: {fileID: 0} + cubemapRightEye: {fileID: 0} + cubemapEquirect: {fileID: 0} + _texture: {fileID: 0} + renderStereo: 1 + stereoSeparation: 0.064 +--- !u!114 &7867004361966141453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: ecaae557ba4c4fc1a80e878b62be711d, type: 3} +--- !u!1 &560467474456037829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5781430239947195539} + - component: {fileID: 4074453690729210485} + - component: {fileID: 7497737142805118209} + - component: {fileID: 380070056694295161} + - component: {fileID: 7695131627743389655} + - component: {fileID: 1970134112} + m_Layer: 2 + m_Name: Tangents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &5781430239947195539 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &4074453690729210485 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7ce5712ecfb6c0929a81d56be34c2333, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7497737142805118209 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4074453690729210485} +--- !u!114 &380070056694295161 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &7695131627743389655 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: f7ec6ef2b94336a8f8c74e04ffd808a5, type: 3} +--- !u!114 &1970134112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &761843831046814012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4293935796784984133} + - component: {fileID: 5051394489787786987} + - component: {fileID: 7782879719068724104} + - component: {fileID: 8671715215210447208} + - component: {fileID: 5306578391102922520} + - component: {fileID: 880311590} + m_Layer: 2 + m_Name: Tag + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4293935796784984133 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &5051394489787786987 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7355ca23a1b57891dafa75b44c2c5cc8, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7782879719068724104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 5051394489787786987} +--- !u!114 &8671715215210447208 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1003e9e65c5a4495a80b404ca321593b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _observation_value: 'a: RGBA(1.000, 0.000, 0.000, 1.000), b: RGBA(0.000, 1.000, + 0.000, 1.000), c: RGBA(0.000, 0.001, 1.000, 1.000), CameraBody: RGBA(0.314, 0.322, + 0.929, 1.000), Untagged: RGBA(0.333, 0.867, 0.576, 1.000)' + _segmenter: {fileID: 5306578391102922520} +--- !u!114 &5306578391102922520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f0377162d14313d39cbce87f94ca1e6, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: d34875293dcb4a329bbbacec570f78f6, type: 3} + _camera: {fileID: 5051394489787786987} + _colors_by_category: [] + _segmentation_mode: 0 + _segmentation_preset: {fileID: 11400000, guid: 1387513cbea10420eaa5a7ac8f932b80, + type: 2} + _Replace_Untagged_Color: 1 + _Untagged_Color: {r: 0, g: 0, b: 0, a: 1} +--- !u!114 &880311590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &1062617331000895241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8534205073153580683} + - component: {fileID: 3588200957997808534} + - component: {fileID: 1277211970739113716} + - component: {fileID: 5971939726963670592} + - component: {fileID: 8953912315414274839} + - component: {fileID: 8953912315120949531} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8534205073153580683 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062617331000895241} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.05000012} + m_LocalScale: {x: 0.29999992, y: 0.049999997, z: 0.049999993} + m_Children: [] + m_Father: {fileID: 8953912315359767098} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3588200957997808534 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062617331000895241} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1277211970739113716 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062617331000895241} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &5971939726963670592 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062617331000895241} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!120 &8953912315414274839 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062617331000895241} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100002, guid: a09837bc152a9b9459581f48bee12074, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -18.959042, y: 2.028679, z: -20} + - {x: -18.959042, y: 0, z: -20} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.059776306 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!114 &8953912315120949531 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062617331000895241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c228034271aa09ca09a437dce55e37a4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} + _length: 30 +--- !u!1 &1114107471437463199 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4107714061836288019} + m_Layer: 2 + m_Name: 360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4107714061836288019 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114107471437463199} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 198898113011094675} + - {fileID: 2125651880926414503} + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1528727058868257064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1528727058868257047} + - component: {fileID: 1528727058868257042} + - component: {fileID: 1528727058868257043} + - component: {fileID: 1528727058868257044} + - component: {fileID: 1528727058868257045} + - component: {fileID: 1734544737} + m_Layer: 2 + m_Name: OcclusionMask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1528727058868257047 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1528727058868257042 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1024 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 741d32efcc5cb8896b9ea9bce98ba404, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1528727058868257043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 5858083470835474262} + - {fileID: 9067738391014373859} + - {fileID: 1528727058868257043} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 1528727058868257042} +--- !u!114 &1528727058868257044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &1528727058868257045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: b770c7b1542a812fcb2332b249713b12, type: 3} +--- !u!114 &1734544737 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 1528727058868257042} + _texture: {fileID: 0} +--- !u!1 &1650795372616834621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3944393182139071806} + - component: {fileID: 4343724218787345760} + - component: {fileID: 5858083470835474262} + - component: {fileID: 7726214271362722989} + - component: {fileID: 5174174409234125835} + - component: {fileID: 1528727060416185079} + m_Layer: 2 + m_Name: ObjectSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3944393182139071806 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &4343724218787345760 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 512 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &5858083470835474262 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 5858083470835474262} + - {fileID: 9067738391014373859} + - {fileID: 1528727058868257043} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4343724218787345760} +--- !u!114 &7726214271362722989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &5174174409234125835 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: e0709f4aa78e4226abc13a3c2116a306, type: 3} +--- !u!114 &1528727060416185079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e2a9ad1dd275438d95094ed0f6b885c6, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _camera: {fileID: 4343724218787345760} + _texture: {fileID: 0} +--- !u!1 &1804264047114910195 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7923256381249460920} + - component: {fileID: 6556453964699370402} + - component: {fileID: 8220433442214820162} + - component: {fileID: 2966012784419651180} + - component: {fileID: 191672938} + m_Layer: 2 + m_Name: 270 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7923256381249460920 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804264047114910195} + m_LocalRotation: {x: -0.40557975, y: -0.579228, z: 0.40557975, w: -0.579228} + m_LocalPosition: {x: 0, y: 1.1471528, z: 1.6383045} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2175249005945353805} + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 70, y: -270, z: 0} +--- !u!20 &6556453964699370402 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804264047114910195} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 58bcb9cbeccb20f4a987d9790194cdb3, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8220433442214820162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804264047114910195} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 6556453964699370402} +--- !u!114 &2966012784419651180 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804264047114910195} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &191672938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804264047114910195} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &2765739856555304696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2175249005945353805} + - component: {fileID: 532512047856814875} + - component: {fileID: 4807769346971383920} + - component: {fileID: 460125232063806778} + - component: {fileID: 8188622581607519469} + - component: {fileID: 4921867745777722358} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2175249005945353805 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2765739856555304696} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.05000012} + m_LocalScale: {x: 0.29999992, y: 0.049999997, z: 0.049999993} + m_Children: [] + m_Father: {fileID: 7923256381249460920} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &532512047856814875 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2765739856555304696} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &4807769346971383920 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2765739856555304696} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &460125232063806778 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2765739856555304696} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!120 &8188622581607519469 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2765739856555304696} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100002, guid: a09837bc152a9b9459581f48bee12074, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -18.959042, y: 2.028679, z: -20} + - {x: -18.959042, y: 0, z: -20} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.059776306 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!114 &4921867745777722358 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2765739856555304696} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c228034271aa09ca09a437dce55e37a4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} + _length: 30 +--- !u!1 &2996673771288281310 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7390147845610377687} + - component: {fileID: 820168553921213373} + - component: {fileID: 5267640086067651881} + - component: {fileID: 8953912316991298492} + - component: {fileID: 107426186} + m_Layer: 2 + m_Name: Offset + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7390147845610377687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &820168553921213373 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 8.654184 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 22.863745 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: cc4e727fd2f685deea5ec6e4b44b5cc3, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &5267640086067651881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5267640086067651881} + - {fileID: 5858083470835474262} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 820168553921213373} +--- !u!114 &8953912316991298492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &107426186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &3100465753457093906 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5795609472145995568} + - component: {fileID: 5834706665979006967} + - component: {fileID: 3775632175267208117} + - component: {fileID: 1018902122669361050} + - component: {fileID: 8953912315414274838} + - component: {fileID: 8953912316151028138} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5795609472145995568 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100465753457093906} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.05000012} + m_LocalScale: {x: 0.30000007, y: 0.05, z: 0.050000004} + m_Children: [] + m_Father: {fileID: 8953912316715161260} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5834706665979006967 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100465753457093906} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &3775632175267208117 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100465753457093906} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1018902122669361050 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100465753457093906} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!120 &8953912315414274838 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100465753457093906} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100002, guid: a09837bc152a9b9459581f48bee12074, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -20, y: 2.028679, z: -18.959042} + - {x: -20, y: 1.05, z: -18.959042} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.059776306 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!114 &8953912316151028138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100465753457093906} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c228034271aa09ca09a437dce55e37a4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} + _length: 30 +--- !u!1 &4679155554420493661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 198898113011094675} + - component: {fileID: 1624795383747980393} + - component: {fileID: 1220231432200472012} + - component: {fileID: 3953812613027034114} + - component: {fileID: 9024018881244929625} + - component: {fileID: 8735261634530579661} + m_Layer: 2 + m_Name: RGB360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &198898113011094675 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_LocalRotation: {x: 0.000000029802322, y: -0.8191521, z: 0.57357633, w: -0.000000029802322} + m_LocalPosition: {x: 0, y: 1.1471528, z: 1.6383045} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4107714061836288019} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 35, y: -90, z: 0} +--- !u!20 &1624795383747980393 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 179 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1220231432200472012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 0 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 1624795383747980393} +--- !u!114 &3953812613027034114 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _Camera: {fileID: 1624795383747980393} + imageFormat: 1 + jpegQuality: 75 + disable_encoding: 0 +--- !u!114 &9024018881244929625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &8735261634530579661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 219450474d12d1835a0a1701a632e99d, type: 3} + m_Name: + m_EditorClassIdentifier: + cubemapLeftEye: {fileID: 0} + cubemapRightEye: {fileID: 0} + cubemapEquirect: {fileID: 0} + _texture: {fileID: 0} + renderStereo: 1 + stereoSeparation: 0.064 +--- !u!1 &6178461646353508841 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4476530035271501652} + - component: {fileID: 5914161206378883145} + - component: {fileID: 4093526257781573322} + - component: {fileID: 6023131450115659877} + - component: {fileID: 1292432369031266446} + - component: {fileID: 1061376915} + m_Layer: 2 + m_Name: UVs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4476530035271501652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &5914161206378883145 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 43f8b57e2bee2bd6eb1df24b6c88ba79, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &4093526257781573322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 5914161206378883145} +--- !u!114 &6023131450115659877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &1292432369031266446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 333867bbd39e226998d1bfd376f7ea56, type: 3} +--- !u!114 &1061376915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &7613832589404968928 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2182231832007790607} + - component: {fileID: 3184323363079609984} + - component: {fileID: 7297530299699051104} + - component: {fileID: 7019245981252441147} + - component: {fileID: 558276101866426549} + - component: {fileID: 267291007} + m_Layer: 2 + m_Name: Layer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2182231832007790607 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &3184323363079609984 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 29bfbe75d2faa72cdbf597b2763205ab, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7297530299699051104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 3184323363079609984} +--- !u!114 &7019245981252441147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1003e9e65c5a4495a80b404ca321593b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _observation_value: 'a: RGBA(1.000, 0.000, 0.000, 1.000), b: RGBA(0.000, 1.000, + 0.000, 1.000), c: RGBA(0.000, 0.001, 1.000, 1.000), Ignore Raycast: RGBA(1.000, + 1.000, 0.700, 1.000), Default: RGBA(1.000, 1.000, 1.000, 1.000)' + _segmenter: {fileID: 558276101866426549} +--- !u!114 &558276101866426549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f0377162d14313d39cbce87f94ca1e6, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: d700b8effb9a06de89e30a220972fe80, type: 3} + _camera: {fileID: 3184323363079609984} + _colors_by_category: [] + _segmentation_mode: 1 + _segmentation_preset: {fileID: 11400000, guid: 1387513cbea10420eaa5a7ac8f932b80, + type: 2} + _Replace_Untagged_Color: 1 + _Untagged_Color: {r: 0, g: 0, b: 0, a: 1} +--- !u!114 &267291007 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8953438052584087811 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956846767284514427} + - component: {fileID: 9061938577803195389} + m_Layer: 2 + m_Name: OrthographicNaturalLightSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8956846767284514427 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953438052584087811} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8958768521121003565} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &9061938577803195389 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953438052584087811} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294959103 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &8953503864389412567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956998344135301341} + m_Layer: 2 + m_Name: DataCollectionCameras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8956998344135301341 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953503864389412567} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8958555408388945405} + - {fileID: 7390147845610377687} + - {fileID: 8953912316715161260} + - {fileID: 8953912315359767098} + - {fileID: 7923256381249460920} + - {fileID: 8956953563177976219} + - {fileID: 8958335074575024093} + - {fileID: 8958567879889452077} + - {fileID: 5781430239947195539} + - {fileID: 8957034402797145473} + - {fileID: 3944393182139071806} + - {fileID: 8953912316825990506} + - {fileID: 8953912316005417429} + - {fileID: 8953912315943398171} + - {fileID: 4293935796784984133} + - {fileID: 2182231832007790607} + - {fileID: 4476530035271501652} + - {fileID: 8953912316051221163} + - {fileID: 8953912315871983412} + - {fileID: 8953912315460739085} + - {fileID: 8956624866575340015} + - {fileID: 4107714061836288019} + - {fileID: 1528727058868257047} + m_Father: {fileID: 8956537991453593153} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8953912315359767099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912315359767098} + - component: {fileID: 8953912315359767102} + - component: {fileID: 8953912315359767103} + - component: {fileID: 8953912315359767101} + - component: {fileID: 1171658901} + m_Layer: 2 + m_Name: 180 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8953912315359767098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315359767099} + m_LocalRotation: {x: -0, y: -0.81915206, z: 0.57357633, w: 0.000000029802319} + m_LocalPosition: {x: 0, y: 1.1471528, z: 1.6383044} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8534205073153580683} + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 35, y: -90, z: 0} +--- !u!20 &8953912315359767102 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315359767099} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 58bcb9cbeccb20f4a987d9790194cdb3, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912315359767103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315359767099} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912315359767102} +--- !u!114 &8953912315359767101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315359767099} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &1171658901 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315359767099} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8953912315460739082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912315460739085} + - component: {fileID: 8953912315460739089} + - component: {fileID: 8953912315460739086} + - component: {fileID: 8953912315460739084} + - component: {fileID: 432536191} + m_Layer: 2 + m_Name: CompressedDepth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8953912315460739085 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912315460739089 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 65d4c1ba790a0b02b827d1bca779fd3d, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912315460739086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912315460739089} +--- !u!114 &8953912315460739084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: ecaae557ba4c4fc1a80e878b62be711d, type: 3} +--- !u!114 &432536191 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8953912315871983413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912315871983412} + - component: {fileID: 8953912315871983419} + - component: {fileID: 8953912315871983417} + - component: {fileID: 8953912315871983414} + - component: {fileID: 8953912315871983415} + - component: {fileID: 1344690944} + m_Layer: 2 + m_Name: Vs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8953912315871983412 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912315871983419 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 142c9eceec4ee3060b3550e1b2a64cbf, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912315871983417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912315871983419} +--- !u!114 &8953912315871983414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &8953912315871983415 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 043c4327de3a39ce7b6086de2593d097, type: 3} +--- !u!114 &1344690944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8953912315943398168 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912315943398171} + - component: {fileID: 8953912315943398174} + - component: {fileID: 8953912315943398172} + - component: {fileID: 8953912315943398170} + - component: {fileID: 8953912315943398175} + - component: {fileID: 720736450} + m_Layer: 2 + m_Name: MaterialId + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8953912315943398171 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912315943398174 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: e52a2f56c9ffa187abf5021f3338228e, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912315943398172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912315943398174} +--- !u!114 &8953912315943398170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1003e9e65c5a4495a80b404ca321593b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _observation_value: 'BluePlastic: RGBA(0.188, 0.251, 0.820, 1.000), Default-Material: + RGBA(0.502, 0.255, 0.286, 1.000), material1: RGBA(0.204, 0.004, 0.063, 1.000)' + _segmenter: {fileID: 8953912315943398175} +--- !u!114 &8953912315943398175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7bdd700ad374c83b86a813127e132de, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: cf1860839d9116438895181a0b52e813, type: 3} + _camera: {fileID: 8953912315943398174} +--- !u!114 &720736450 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8953912316005417426 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912316005417429} + - component: {fileID: 8953912316005417435} + - component: {fileID: 8953912316005417432} + - component: {fileID: 8953912316005417433} + - component: {fileID: 8953912316005417428} + - component: {fileID: 593021519} + m_Layer: 2 + m_Name: ObjectIdInstance + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8953912316005417429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912316005417435 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 280476064a32df4848434f9b38c2d744, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912316005417432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 08d8186d4ab68d634912ff814b6d0f62, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: 8fd7ede99a3748d686ce9bf8cd8dd2d7, type: 3} + _camera: {fileID: 8953912316005417435} +--- !u!114 &8953912316005417433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912316005417435} +--- !u!114 &8953912316005417428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1003e9e65c5a4495a80b404ca321593b, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _observation_value: '-2386: RGBA(0.518, 0.157, 0.255, 1.000), -2332: RGBA(0.086, + 0.157, 0.251, 1.000), 14594: RGBA(0.518, 0.031, 0.565, 1.000)' + _segmenter: {fileID: 8953912316005417432} +--- !u!114 &593021519 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8953912316051221157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912316051221163} + - component: {fileID: 8953912316051221160} + - component: {fileID: 8953912316051221156} + - component: {fileID: 8953912316051221158} + - component: {fileID: 8953912316051221159} + - component: {fileID: 356639859} + m_Layer: 2 + m_Name: Us + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8953912316051221163 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912316051221160 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: a2ed3a19ee4cfe303b28c87fca44a286, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912316051221156 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912316051221160} +--- !u!114 &8953912316051221158 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &8953912316051221159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: f0f776e767c948816bfdca7bda1ebc72, type: 3} +--- !u!114 &356639859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8953912316715161257 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912316715161260} + - component: {fileID: 8953912316715161261} + - component: {fileID: 8953912316715161256} + - component: {fileID: 8953912316715161259} + - component: {fileID: 1232768627} + m_Layer: 2 + m_Name: 90 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8953912316715161260 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316715161257} + m_LocalRotation: {x: 0.000000014901161, y: 0.57922804, z: -0.40557975, w: 0.7071068} + m_LocalPosition: {x: -1, y: 0.5735764, z: 0.819152} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5795609472145995568} + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 35, y: 180, z: 0} +--- !u!20 &8953912316715161261 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316715161257} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 8eff871290da4fd0e8a9ac76009bec92, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912316715161256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316715161257} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912316715161261} +--- !u!114 &8953912316715161259 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316715161257} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &1232768627 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316715161257} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8953912316825990507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912316825990506} + - component: {fileID: 8953912316825990513} + - component: {fileID: 8953912316825990511} + - component: {fileID: 8953912316825990508} + - component: {fileID: 8953912316825990509} + - component: {fileID: 1827788131} + m_Layer: 2 + m_Name: WorldSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8953912316825990506 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912316825990513 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 512 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 0a204b96270826992a5c81c531ea5dcf, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912316825990511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912316825990513} +--- !u!114 &8953912316825990508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &8953912316825990509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: a1fe4d82f3c0be1aa917ece055794af2, type: 3} +--- !u!114 &1827788131 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8954297562389836415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956537991453593153} + - component: {fileID: 8936678778679500885} + - component: {fileID: 9067191241328514203} + - component: {fileID: 9067144003895302685} + - component: {fileID: 9077528054232413383} + - component: {fileID: 201850617684834344} + - component: {fileID: 8953912316822445883} + - component: {fileID: 8953912316822445882} + - component: {fileID: 8953912316933006551} + - component: {fileID: 8953912316377124612} + - component: {fileID: 8953912316377124615} + m_Layer: 2 + m_Name: NeodroidCameraFloatArray + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8956537991453593153 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8956998344135301341} + - {fileID: 8958768521121003565} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8936678778679500885 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 1, g: 1, b: 1, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067191241328514203 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 5858083470835474262} + - {fileID: 9067738391014373859} + - {fileID: 1528727058868257043} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8936678778679500885} +--- !u!114 &9067144003895302685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!124 &9077528054232413383 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 +--- !u!114 &201850617684834344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b3dd815fb29337f73b480c9dd61a4ae2, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 4343724218787345760} + - {fileID: 8937616187162310363} + - {fileID: 1528727058868257042} + - {fileID: 8936678778679500885} + _filter_mode: 0 + _size: {x: 128, y: 128} + _textures: + - {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + - {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + - {fileID: 8400000, guid: 741d32efcc5cb8896b9ea9bce98ba404, type: 2} + _wrap_mode: 1 +--- !u!114 &8953912316822445883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b5262a22bdff171d9c6615614469b95, type: 3} + m_Name: + m_EditorClassIdentifier: + _line_material: {fileID: 0} + _draw_label: 1 + _cacheBoundingBoxes: 1 +--- !u!114 &8953912316822445882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a69c9a240ee53baafadb71c70054e1ee, type: 3} + m_Name: + m_EditorClassIdentifier: + _draw_label: 1 + bounding_boxes: [] + _cache_bounding_boxes: 1 + gui_style: {fileID: 11400000, guid: 45b8b02736ca4fc5b88b554edf8576ad, type: 2} + _draw_coords: 1 +--- !u!114 &8953912316933006551 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 24436b5ac49af0dcaa5d2b405c48819d, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: CameraRandom + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _relative_to_existing_value: 0 + _sampleRandom: 0 + on_tick: 0 + _camera: {fileID: 8936678778679500885} + _syncer: {fileID: 9067191241328514203} + _fov_space: + _Decimal_Granularity: 0 + _Min_Value: 80 + _Max_Value: 28.3 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _focal_space: + _Decimal_Granularity: 3 + _Min_Value: 7 + _Max_Value: 8 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _sensor_size_space: + _Min_Values: {x: 4.79, y: 3.49} + _Max_Values: {x: 4.91, y: 3.61} + _decimal_granularity: 2 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _lens_shift_space: + _Min_Values: {x: 0, y: 0} + _Max_Values: {x: 0, y: 0} + _decimal_granularity: 3 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _gate_fit_space: + _Decimal_Granularity: 0 + _Min_Value: 0 + _Max_Value: 4 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 +--- !u!114 &8953912316377124612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 246cc59c7a84ea44f87f6b70acfe30c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Offset: {x: 0, y: 0, z: -10} + target: {fileID: 0} +--- !u!114 &8953912316377124615 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83679d70048bdfce4a7d7f6f8d583a5f, type: 3} + m_Name: + m_EditorClassIdentifier: + bb: {fileID: 0} + margin: 2.5 +--- !u!1 &8954340607665692633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8957034402797145473} + - component: {fileID: 8938351030468096833} + - component: {fileID: 9067285070418787319} + - component: {fileID: 9067251757548188713} + - component: {fileID: 9066936765972153287} + - component: {fileID: 9068706823226550501} + - component: {fileID: 1112313107} + m_Layer: 2 + m_Name: Flow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8957034402797145473 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8938351030468096833 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: afc5604d79d0849129803e463fc07bca, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067285070418787319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067071972556815189} + - {fileID: 9067738391014373859} + - {fileID: 9067347525399746309} + - {fileID: 9067738700087649343} + - {fileID: 9067285070418787319} + - {fileID: 0} + - {fileID: 9067298761308153321} + - {fileID: 0} + - {fileID: 9067191241328514203} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8938351030468096833} +--- !u!114 &9067251757548188713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &9066936765972153287 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 3863f59f4842f4d90bc3966b1f9502af, type: 3} +--- !u!114 &9068706823226550501 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b2e54ebded2e5489fa2596cf3ab24e37, type: 3} + m_Name: + m_EditorClassIdentifier: + _background_color: {r: 0, g: 0, b: 0, a: 1} + _blending: 0.5 + _overlay_amplitude: 60 + _shader: {fileID: 4800000, guid: 3863f59f4842f4d90bc3966b1f9502af, type: 3} +--- !u!114 &1112313107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8954485367378834101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958768521121003565} + m_Layer: 2 + m_Name: LightSources + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8958768521121003565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954485367378834101} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.050000075, y: 0, z: -0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8956846767284514427} + - {fileID: 8958298204923504359} + - {fileID: 8958492846338115063} + m_Father: {fileID: 8956537991453593153} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8954752269252562429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956953563177976219} + - component: {fileID: 8938380326639234969} + - component: {fileID: 9067298761308153321} + - component: {fileID: 9067982206729525899} + - component: {fileID: 1534425954} + m_Layer: 2 + m_Name: Infrared + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8956953563177976219 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8938380326639234969 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 30 + field of view: 80 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: b22ce111b5af44afe8b8f2f085799a5f, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067298761308153321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067071972556815189} + - {fileID: 9067738391014373859} + - {fileID: 9067347525399746309} + - {fileID: 9067738700087649343} + - {fileID: 9067285070418787319} + - {fileID: 0} + - {fileID: 9067298761308153321} + - {fileID: 0} + - {fileID: 9067191241328514203} + - {fileID: 9067347525399746309} + - {fileID: 9067071972556815189} + - {fileID: 8953912316825990511} + - {fileID: 8953912316051221156} + - {fileID: 8953912316005417433} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 9067738391014373859} + - {fileID: 8953912315943398172} + - {fileID: 8953912316715161256} + - {fileID: 8953912315359767103} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8938380326639234969} +--- !u!114 &9067982206729525899 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 1 + _ignore_infrared_if_empty: 0 + _lights_to_ignore: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} +--- !u!114 &1534425954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8954987777335964249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958492846338115063} + - component: {fileID: 9061951510230448747} + m_Layer: 2 + m_Name: PerspectiveNaturalLightSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8958492846338115063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954987777335964249} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8958768521121003565} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &9061951510230448747 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954987777335964249} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 100 + m_SpotAngle: 90 + m_InnerSpotAngle: 71.41338 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294959103 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &8955025393554226475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958567879889452077} + - component: {fileID: 8938224487570478979} + - component: {fileID: 9067071972556815189} + - component: {fileID: 9067910119913123209} + - component: {fileID: 920422802} + m_Layer: 2 + m_Name: Normal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8958567879889452077 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8938224487570478979 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 63f7bf9c3a80b4d169b394696cbbd9ab, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067071972556815189 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067071972556815189} + - {fileID: 9067738391014373859} + - {fileID: 9067347525399746309} + - {fileID: 9067738700087649343} + - {fileID: 9067285070418787319} + - {fileID: 0} + - {fileID: 9067298761308153321} + - {fileID: 0} + - {fileID: 9067191241328514203} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8938224487570478979} +--- !u!114 &9067910119913123209 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: aa118ec7ab6c04e139900fecf923c766, type: 3} +--- !u!114 &920422802 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8955066670320937537 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8957039927302039009} + - component: {fileID: 8950725977493392727} + - component: {fileID: 8983235198587314365} + - component: {fileID: 8940060199317590431} + - component: {fileID: 8953912315387673915} + - component: {fileID: 8953912314973164101} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8957039927302039009 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.050000116} + m_LocalScale: {x: 0.3, y: 0.050000004, z: 0.050000004} + m_Children: [] + m_Father: {fileID: 8958555408388945405} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8950725977493392727 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &8983235198587314365 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8940060199317590431 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!120 &8953912315387673915 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 359e9981d02f34d5abe9791e757f58c1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -32, y: 5, z: -2.5500002} + - {x: -32, y: -6.622984, z: -2.5500002} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.059776306 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!114 &8953912314973164101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c228034271aa09ca09a437dce55e37a4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} + _length: 30 +--- !u!1 &8955123872149212813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958555408388945405} + - component: {fileID: 8937616187162310363} + - component: {fileID: 9067738391014373859} + - component: {fileID: 9068718654667840391} + - component: {fileID: 2825377953976489514} + m_Layer: 2 + m_Name: RGB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8958555408388945405 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8957039927302039009} + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8937616187162310363 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067738391014373859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 5858083470835474262} + - {fileID: 9067738391014373859} + - {fileID: 1528727058868257043} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8937616187162310363} +--- !u!114 &9068718654667840391 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &2825377953976489514 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 8937616187162310363} + _texture: {fileID: 0} +--- !u!1 &8955193503972165319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958335074575024093} + - component: {fileID: 8938361100219424377} + - component: {fileID: 9067347525399746309} + - component: {fileID: 9068839844146226189} + - component: {fileID: 9067177901889886573} + - component: {fileID: 9068724313563213973} + - component: {fileID: 530555079} + m_Layer: 2 + m_Name: Satellite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8958335074575024093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 8.027861, z: -4.400393} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 55.000004, y: 0, z: 0} +--- !u!20 &8938361100219424377 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 30 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: bc593ac7628a042ac93b20ca1c0101b6, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067347525399746309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067071972556815189} + - {fileID: 9067738391014373859} + - {fileID: 9067347525399746309} + - {fileID: 9067738700087649343} + - {fileID: 9067285070418787319} + - {fileID: 0} + - {fileID: 9067298761308153321} + - {fileID: 0} + - {fileID: 9067191241328514203} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 0 + _sync_fov: 0 + _sync_near_clip_plane: 0 + _sync_orthographic_projection: 0 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8938361100219424377} +--- !u!114 &9068839844146226189 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 246cc59c7a84ea44f87f6b70acfe30c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Offset: {x: 0, y: 10, z: 0} + target: {fileID: 0} +--- !u!114 &9067177901889886573 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &9068724313563213973 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85ccef30fe10a486389326bacc3bdfd4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} +--- !u!114 &530555079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8955234115522024981 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956624866575340015} + - component: {fileID: 8936617034565571487} + - component: {fileID: 9067738700087649343} + - component: {fileID: 9067414988562624883} + - component: {fileID: 1733317835} + m_Layer: 2 + m_Name: MultiChannelDepth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8956624866575340015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8936617034565571487 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 5d9eca522a1944267b89beea11ffc58c, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067738700087649343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067071972556815189} + - {fileID: 9067738391014373859} + - {fileID: 9067347525399746309} + - {fileID: 9067738700087649343} + - {fileID: 9067285070418787319} + - {fileID: 0} + - {fileID: 9067298761308153321} + - {fileID: 0} + - {fileID: 9067191241328514203} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8936617034565571487} +--- !u!114 &9067414988562624883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 0f2361423bff3490d8f046e398478528, type: 3} +--- !u!114 &1733317835 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9bf5add133b4f4c399e63afce43179bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _normalise_observation: 0 + _black_white: 0 + _camera: {fileID: 0} + _texture: {fileID: 0} +--- !u!1 &8955371836866037965 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958298204923504359} + - component: {fileID: 9061319952716675367} + - component: {fileID: 9067202446707797289} + m_Layer: 2 + m_Name: PerspectiveInfraredLightSource + m_TagString: Infrared + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8958298204923504359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955371836866037965} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8958768521121003565} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &9061319952716675367 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955371836866037965} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 0 + m_Color: {r: 1, g: 0, b: 0, a: 1} + m_Intensity: 1 + m_Range: 100 + m_SpotAngle: 90 + m_InnerSpotAngle: 71.41338 + m_CookieSize: 0 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 20 + m_ShadowAngle: 0 +--- !u!114 &9067202446707797289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955371836866037965} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb842d57fd4d0474497a6d1b0c477f96, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraFloatArray.prefab.meta b/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraFloatArray.prefab.meta new file mode 100644 index 000000000..5287f0a80 --- /dev/null +++ b/Runtime/Prefabs/Cameras/Deprecated/NeodroidCameraFloatArray.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d1b0c099ffbede5d283dde414443830c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Cameras/NeodroidCamera.prefab b/Runtime/Prefabs/Cameras/NeodroidCamera.prefab new file mode 100644 index 000000000..a6e716e27 --- /dev/null +++ b/Runtime/Prefabs/Cameras/NeodroidCamera.prefab @@ -0,0 +1,4453 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &174572608 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 174572609} + - component: {fileID: 174572612} + - component: {fileID: 174572611} + - component: {fileID: 174572610} + m_Layer: 0 + m_Name: ViewSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &174572609 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 174572608} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &174572612 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 174572608} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: affb45a7139438dc0a18c7848e9c59d0, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &174572611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 174572608} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: ViewSpace + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 174572612} + linear_space: 0 +--- !u!114 &174572610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 174572608} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 501f6fba7e4e464caa1fc0a8491a2ddd, type: 3} +--- !u!1 &555281772644808486 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2125651880926414503} + - component: {fileID: 4042856865019220879} + - component: {fileID: 8164737187736122957} + - component: {fileID: 5394514792230959452} + - component: {fileID: 772095444812002754} + - component: {fileID: 7867004361966141453} + - component: {fileID: 6766741649957696238} + m_Layer: 2 + m_Name: Depth360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2125651880926414503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4107714061836288019} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &4042856865019220879 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 179 + orthographic: 0 + orthographic size: 1.9 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8164737187736122957 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 0 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4042856865019220879} +--- !u!114 &5394514792230959452 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &772095444812002754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 219450474d12d1835a0a1701a632e99d, type: 3} + m_Name: + m_EditorClassIdentifier: + cubemapLeftEye: {fileID: 0} + cubemapRightEye: {fileID: 0} + cubemapEquirect: {fileID: 0} + renderStereo: 1 + stereoSeparation: 0.064 + _cam: {fileID: 0} +--- !u!114 &7867004361966141453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: ecaae557ba4c4fc1a80e878b62be711d, type: 3} +--- !u!114 &6766741649957696238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555281772644808486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 4042856865019220879} + linear_space: 0 +--- !u!1 &560467474456037829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5781430239947195539} + - component: {fileID: 4074453690729210485} + - component: {fileID: 7497737142805118209} + - component: {fileID: 380070056694295161} + - component: {fileID: 7695131627743389655} + - component: {fileID: 1742432960864185740} + m_Layer: 2 + m_Name: Tangents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5781430239947195539 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &4074453690729210485 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7ce5712ecfb6c0929a81d56be34c2333, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7497737142805118209 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4074453690729210485} +--- !u!114 &380070056694295161 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &7695131627743389655 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: f7ec6ef2b94336a8f8c74e04ffd808a5, type: 3} +--- !u!114 &1742432960864185740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560467474456037829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 4074453690729210485} + linear_space: 0 +--- !u!1 &761843831046814012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4293935796784984133} + - component: {fileID: 5051394489787786987} + - component: {fileID: 7782879719068724104} + - component: {fileID: 5306578391102922520} + - component: {fileID: 3581204139143637784} + m_Layer: 2 + m_Name: Tag + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4293935796784984133 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &5051394489787786987 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7355ca23a1b57891dafa75b44c2c5cc8, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7782879719068724104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 5051394489787786987} +--- !u!114 &5306578391102922520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f0377162d14313d39cbce87f94ca1e6, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: d34875293dcb4a329bbbacec570f78f6, type: 3} + _camera: {fileID: 5051394489787786987} + _colors_by_category: [] + _segmentation_mode: 0 + _segmentation_preset: {fileID: 11400000, guid: 1387513cbea10420eaa5a7ac8f932b80, + type: 2} + _Replace_Untagged_Color: 1 + _Untagged_Color: {r: 0, g: 0, b: 0, a: 1} +--- !u!114 &3581204139143637784 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761843831046814012} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 5051394489787786987} + linear_space: 0 +--- !u!1 &1114107471437463199 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4107714061836288019} + m_Layer: 2 + m_Name: 360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4107714061836288019 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114107471437463199} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 198898113011094675} + - {fileID: 2125651880926414503} + m_Father: {fileID: 8956537991453593153} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1528727058868257064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1528727058868257047} + - component: {fileID: 1528727058868257042} + - component: {fileID: 1528727058868257043} + - component: {fileID: 1528727058868257044} + - component: {fileID: 1528727058868257045} + - component: {fileID: 8043224994231153991} + m_Layer: 2 + m_Name: OcclusionMask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1528727058868257047 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1528727058868257042 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 256 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 741d32efcc5cb8896b9ea9bce98ba404, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1528727058868257043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 1528727058868257042} +--- !u!114 &1528727058868257044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &1528727058868257045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: b770c7b1542a812fcb2332b249713b12, type: 3} +--- !u!114 &8043224994231153991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1528727058868257064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 1528727058868257042} + linear_space: 0 +--- !u!1 &1650795372616834621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3944393182139071806} + - component: {fileID: 4343724218787345760} + - component: {fileID: 5858083470835474262} + - component: {fileID: 7726214271362722989} + - component: {fileID: 5174174409234125835} + - component: {fileID: 8533207482965459922} + m_Layer: 2 + m_Name: ObjectSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3944393182139071806 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &4343724218787345760 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &5858083470835474262 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 4343724218787345760} +--- !u!114 &7726214271362722989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &5174174409234125835 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: e0709f4aa78e4226abc13a3c2116a306, type: 3} +--- !u!114 &8533207482965459922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1650795372616834621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 4343724218787345760} + linear_space: 0 +--- !u!1 &2996673771288281310 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7390147845610377687} + - component: {fileID: 820168553921213373} + - component: {fileID: 5267640086067651881} + - component: {fileID: 8953912316991298492} + - component: {fileID: 9185480558025689933} + m_Layer: 2 + m_Name: Offset + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7390147845610377687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.05, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956537991453593153} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &820168553921213373 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 52.34 + field of view: 60.000004 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: cc4e727fd2f685deea5ec6e4b44b5cc3, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &5267640086067651881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738700087649343} + - {fileID: 9067347525399746309} + - {fileID: 9067071972556815189} + - {fileID: 9067298761308153321} + - {fileID: 9067285070418787319} + - {fileID: 8953912316825990511} + - {fileID: 8953912316051221156} + - {fileID: 8953912316005417433} + - {fileID: 8953912315943398172} + - {fileID: 8953912315871983417} + - {fileID: 8953912315460739086} + - {fileID: 7297530299699051104} + - {fileID: 4093526257781573322} + - {fileID: 5267640086067651881} + - {fileID: 7782879719068724104} + - {fileID: 7497737142805118209} + - {fileID: 9067738391014373859} + - {fileID: 9067191241328514203} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 820168553921213373} +--- !u!114 &8953912316991298492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &9185480558025689933 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2996673771288281310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 820168553921213373} + linear_space: 0 +--- !u!1 &4679155554420493661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 198898113011094675} + - component: {fileID: 1624795383747980393} + - component: {fileID: 1220231432200472012} + - component: {fileID: 9024018881244929625} + - component: {fileID: 8735261634530579661} + - component: {fileID: 4475719841817322262} + m_Layer: 2 + m_Name: RGB360 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &198898113011094675 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4107714061836288019} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1624795383747980393 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.4419906 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 206 + field of view: 179 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1220231432200472012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 1220231432200472012} + - {fileID: 8164737187736122957} + - {fileID: 9067738700087649343} + - {fileID: 9067347525399746309} + - {fileID: 9067071972556815189} + - {fileID: 9067298761308153321} + - {fileID: 9067285070418787319} + - {fileID: 8953912316825990511} + - {fileID: 8953912316051221156} + - {fileID: 8953912316005417433} + - {fileID: 8953912315943398172} + - {fileID: 8953912315871983417} + - {fileID: 8953912315460739086} + - {fileID: 7297530299699051104} + - {fileID: 4093526257781573322} + - {fileID: 5267640086067651881} + - {fileID: 7782879719068724104} + - {fileID: 7497737142805118209} + - {fileID: 9067738391014373859} + - {fileID: 9067191241328514203} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 0 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 1624795383747980393} +--- !u!114 &9024018881244929625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &8735261634530579661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 219450474d12d1835a0a1701a632e99d, type: 3} + m_Name: + m_EditorClassIdentifier: + cubemapLeftEye: {fileID: 0} + cubemapRightEye: {fileID: 0} + cubemapEquirect: {fileID: 0} + renderStereo: 1 + stereoSeparation: 0.064 + _cam: {fileID: 0} +--- !u!114 &4475719841817322262 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4679155554420493661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 1624795383747980393} + linear_space: 0 +--- !u!1 &6178461646353508841 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4476530035271501652} + - component: {fileID: 5914161206378883145} + - component: {fileID: 4093526257781573322} + - component: {fileID: 6023131450115659877} + - component: {fileID: 1292432369031266446} + - component: {fileID: 8602397550792222561} + m_Layer: 2 + m_Name: UVs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4476530035271501652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &5914161206378883145 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 43f8b57e2bee2bd6eb1df24b6c88ba79, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &4093526257781573322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 5914161206378883145} +--- !u!114 &6023131450115659877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &1292432369031266446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 333867bbd39e226998d1bfd376f7ea56, type: 3} +--- !u!114 &8602397550792222561 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178461646353508841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 5914161206378883145} + linear_space: 0 +--- !u!1 &7613832589404968928 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2182231832007790607} + - component: {fileID: 3184323363079609984} + - component: {fileID: 7297530299699051104} + - component: {fileID: 558276101866426549} + - component: {fileID: 9154804966245072272} + m_Layer: 2 + m_Name: Layer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2182231832007790607 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &3184323363079609984 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 29bfbe75d2faa72cdbf597b2763205ab, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &7297530299699051104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 3184323363079609984} +--- !u!114 &558276101866426549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f0377162d14313d39cbce87f94ca1e6, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: d700b8effb9a06de89e30a220972fe80, type: 3} + _camera: {fileID: 3184323363079609984} + _colors_by_category: [] + _segmentation_mode: 1 + _segmentation_preset: {fileID: 11400000, guid: 1387513cbea10420eaa5a7ac8f932b80, + type: 2} + _Replace_Untagged_Color: 1 + _Untagged_Color: {r: 0, g: 0, b: 0, a: 1} +--- !u!114 &9154804966245072272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613832589404968928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 3184323363079609984} + linear_space: 0 +--- !u!1 &8953438052584087811 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956846767284514427} + - component: {fileID: 9061938577803195389} + m_Layer: 2 + m_Name: OrthographicNaturalLightSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8956846767284514427 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953438052584087811} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8958768521121003565} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &9061938577803195389 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953438052584087811} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294959103 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &8953503864389412567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956998344135301341} + m_Layer: 2 + m_Name: DataCollectionCameras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8956998344135301341 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953503864389412567} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8958555408388945405} + - {fileID: 8956953563177976219} + - {fileID: 8958567879889452077} + - {fileID: 5781430239947195539} + - {fileID: 8957034402797145473} + - {fileID: 3944393182139071806} + - {fileID: 8953912316825990506} + - {fileID: 8953912316005417429} + - {fileID: 8953912315943398171} + - {fileID: 4293935796784984133} + - {fileID: 2182231832007790607} + - {fileID: 4476530035271501652} + - {fileID: 8953912316051221163} + - {fileID: 8953912315871983412} + - {fileID: 8953912315460739085} + - {fileID: 8956624866575340015} + - {fileID: 1528727058868257047} + - {fileID: 174572609} + m_Father: {fileID: 8956537991453593153} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8953912315460739082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912315460739085} + - component: {fileID: 8953912315460739089} + - component: {fileID: 8953912315460739086} + - component: {fileID: 8953912315460739084} + - component: {fileID: 2127445625596826555} + m_Layer: 2 + m_Name: CompressedDepth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8953912315460739085 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912315460739089 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 65d4c1ba790a0b02b827d1bca779fd3d, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912315460739086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912315460739089} +--- !u!114 &8953912315460739084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: ecaae557ba4c4fc1a80e878b62be711d, type: 3} +--- !u!114 &2127445625596826555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315460739082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8953912315460739089} + linear_space: 0 +--- !u!1 &8953912315871983413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912315871983412} + - component: {fileID: 8953912315871983419} + - component: {fileID: 8953912315871983417} + - component: {fileID: 8953912315871983414} + - component: {fileID: 8953912315871983415} + - component: {fileID: 2656165505746874785} + m_Layer: 2 + m_Name: Vs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8953912315871983412 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912315871983419 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 142c9eceec4ee3060b3550e1b2a64cbf, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912315871983417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912315871983419} +--- !u!114 &8953912315871983414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &8953912315871983415 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 043c4327de3a39ce7b6086de2593d097, type: 3} +--- !u!114 &2656165505746874785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315871983413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8953912315871983419} + linear_space: 0 +--- !u!1 &8953912315943398168 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912315943398171} + - component: {fileID: 8953912315943398174} + - component: {fileID: 8953912315943398172} + - component: {fileID: 8953912315943398175} + - component: {fileID: 7834815901088139999} + m_Layer: 2 + m_Name: MaterialId + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8953912315943398171 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912315943398174 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: e52a2f56c9ffa187abf5021f3338228e, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912315943398172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912315943398174} +--- !u!114 &8953912315943398175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7bdd700ad374c83b86a813127e132de, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: cf1860839d9116438895181a0b52e813, type: 3} + _camera: {fileID: 8953912315943398174} +--- !u!114 &7834815901088139999 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912315943398168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8953912315943398174} + linear_space: 0 +--- !u!1 &8953912316005417426 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912316005417429} + - component: {fileID: 8953912316005417435} + - component: {fileID: 8953912316005417432} + - component: {fileID: 8953912316005417433} + - component: {fileID: 4632851735717350731} + m_Layer: 2 + m_Name: ObjectIdInstance + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8953912316005417429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912316005417435 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 280476064a32df4848434f9b38c2d744, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912316005417432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 08d8186d4ab68d634912ff814b6d0f62, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentation_shader: {fileID: 4800000, guid: 8fd7ede99a3748d686ce9bf8cd8dd2d7, type: 3} + _camera: {fileID: 8953912316005417435} +--- !u!114 &8953912316005417433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912316005417435} +--- !u!114 &4632851735717350731 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316005417426} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8953912316005417435} + linear_space: 0 +--- !u!1 &8953912316051221157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912316051221163} + - component: {fileID: 8953912316051221160} + - component: {fileID: 8953912316051221156} + - component: {fileID: 8953912316051221158} + - component: {fileID: 8953912316051221159} + - component: {fileID: 3138322356965150482} + m_Layer: 2 + m_Name: Us + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8953912316051221163 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912316051221160 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: a2ed3a19ee4cfe303b28c87fca44a286, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912316051221156 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912316051221160} +--- !u!114 &8953912316051221158 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &8953912316051221159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: f0f776e767c948816bfdca7bda1ebc72, type: 3} +--- !u!114 &3138322356965150482 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316051221157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8953912316051221160} + linear_space: 0 +--- !u!1 &8953912316825990507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8953912316825990506} + - component: {fileID: 8953912316825990513} + - component: {fileID: 8953912316825990511} + - component: {fileID: 8953912316825990508} + - component: {fileID: 8953912316825990509} + - component: {fileID: 2534227738434775767} + m_Layer: 2 + m_Name: WorldSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8953912316825990506 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8953912316825990513 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 0a204b96270826992a5c81c531ea5dcf, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &8953912316825990511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8953912316825990513} +--- !u!114 &8953912316825990508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &8953912316825990509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: a1fe4d82f3c0be1aa917ece055794af2, type: 3} +--- !u!114 &2534227738434775767 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8953912316825990507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8953912316825990513} + linear_space: 0 +--- !u!1 &8954297562389836415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956537991453593153} + - component: {fileID: 8936678778679500885} + - component: {fileID: 9067191241328514203} + - component: {fileID: 9067144003895302685} + - component: {fileID: 9077528054232413383} + - component: {fileID: 201850617684834344} + - component: {fileID: 8953912316822445883} + - component: {fileID: 8953912316822445882} + - component: {fileID: 8953912316933006551} + - component: {fileID: 8953912316377124612} + - component: {fileID: 8953912316377124615} + m_Layer: 2 + m_Name: NeodroidCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8956537991453593153 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8957039927302039009} + - {fileID: 8958335074575024093} + - {fileID: 7390147845610377687} + - {fileID: 4107714061836288019} + - {fileID: 8956998344135301341} + - {fileID: 8958768521121003565} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8936678778679500885 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 1, g: 1, b: 1, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067191241328514203 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 0 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8936678778679500885} +--- !u!114 &9067144003895302685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!124 &9077528054232413383 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 +--- !u!114 &201850617684834344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b3dd815fb29337f73b480c9dd61a4ae2, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 8937616187162310363} + - {fileID: 4343724218787345760} + - {fileID: 1528727058868257042} + - {fileID: 4074453690729210485} + - {fileID: 5051394489787786987} + - {fileID: 5914161206378883145} + - {fileID: 3184323363079609984} + - {fileID: 8953912315460739089} + - {fileID: 8953912315871983419} + - {fileID: 8953912315943398174} + - {fileID: 8953912316005417435} + - {fileID: 8953912316051221160} + - {fileID: 8953912316825990513} + - {fileID: 8938351030468096833} + - {fileID: 8938380326639234969} + - {fileID: 8938224487570478979} + - {fileID: 8936617034565571487} + - {fileID: 8936678778679500885} + - {fileID: 174572612} + - {fileID: 0} + - {fileID: 0} + _filter_mode: 0 + _size: {x: 128, y: 128} + _textures: + - {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + - {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + - {fileID: 8400000, guid: 741d32efcc5cb8896b9ea9bce98ba404, type: 2} + - {fileID: 8400000, guid: 7ce5712ecfb6c0929a81d56be34c2333, type: 2} + - {fileID: 8400000, guid: 7355ca23a1b57891dafa75b44c2c5cc8, type: 2} + - {fileID: 8400000, guid: 43f8b57e2bee2bd6eb1df24b6c88ba79, type: 2} + - {fileID: 8400000, guid: 29bfbe75d2faa72cdbf597b2763205ab, type: 2} + - {fileID: 8400000, guid: 65d4c1ba790a0b02b827d1bca779fd3d, type: 2} + - {fileID: 8400000, guid: 142c9eceec4ee3060b3550e1b2a64cbf, type: 2} + - {fileID: 8400000, guid: e52a2f56c9ffa187abf5021f3338228e, type: 2} + - {fileID: 8400000, guid: 280476064a32df4848434f9b38c2d744, type: 2} + - {fileID: 8400000, guid: a2ed3a19ee4cfe303b28c87fca44a286, type: 2} + - {fileID: 8400000, guid: 0a204b96270826992a5c81c531ea5dcf, type: 2} + - {fileID: 8400000, guid: afc5604d79d0849129803e463fc07bca, type: 2} + - {fileID: 8400000, guid: b22ce111b5af44afe8b8f2f085799a5f, type: 2} + - {fileID: 8400000, guid: 63f7bf9c3a80b4d169b394696cbbd9ab, type: 2} + - {fileID: 8400000, guid: 5d9eca522a1944267b89beea11ffc58c, type: 2} + - {fileID: 8400000, guid: affb45a7139438dc0a18c7848e9c59d0, type: 2} + - {fileID: 8400000, guid: 6fc1bf8a49b9c8d3da3821bd57705285, type: 2} + _wrap_mode: 1 +--- !u!114 &8953912316822445883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b5262a22bdff171d9c6615614469b95, type: 3} + m_Name: + m_EditorClassIdentifier: + _line_material: {fileID: 0} + _draw_label: 1 + _cacheBoundingBoxes: 1 +--- !u!114 &8953912316822445882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a69c9a240ee53baafadb71c70054e1ee, type: 3} + m_Name: + m_EditorClassIdentifier: + _draw_label: 1 + bounding_boxes: [] + _cache_bounding_boxes: 1 + gui_style: {fileID: 11400000, guid: 45b8b02736ca4fc5b88b554edf8576ad, type: 2} + _draw_coords: 1 +--- !u!114 &8953912316933006551 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 24436b5ac49af0dcaa5d2b405c48819d, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: CameraRandom + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _camera: {fileID: 8936678778679500885} + _syncer: {fileID: 9067191241328514203} + _fov_space: + _space: + _min_: 60 + _max_: 90 + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _focal_space: + _space: + _min_: 2 + _max_: 3 + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _sensor_size_space: + _space: + _min_: {x: 2.5, y: 2.5} + _max_: {x: 5, y: 5} + _decimal_granularity: 2 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _lens_shift_space: + _space: + _min_: {x: -0.1, y: -0.1} + _max_: {x: 0.1, y: 0.1} + _decimal_granularity: 3 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _gate_fit_space: + _space: + _min_: 0 + _max_: 4 + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 +--- !u!114 &8953912316377124612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 246cc59c7a84ea44f87f6b70acfe30c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Offset: {x: 0, y: 0, z: -10} + target: {fileID: 0} +--- !u!114 &8953912316377124615 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954297562389836415} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83679d70048bdfce4a7d7f6f8d583a5f, type: 3} + m_Name: + m_EditorClassIdentifier: + bb: {fileID: 0} + margin: 2.5 +--- !u!1 &8954340607665692633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8957034402797145473} + - component: {fileID: 8938351030468096833} + - component: {fileID: 9067285070418787319} + - component: {fileID: 9067251757548188713} + - component: {fileID: 9066936765972153287} + - component: {fileID: 9068706823226550501} + - component: {fileID: 6396011134595607581} + m_Layer: 2 + m_Name: Flow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8957034402797145473 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8938351030468096833 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: afc5604d79d0849129803e463fc07bca, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067285070418787319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8938351030468096833} +--- !u!114 &9067251757548188713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &9066936765972153287 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 3863f59f4842f4d90bc3966b1f9502af, type: 3} +--- !u!114 &9068706823226550501 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b2e54ebded2e5489fa2596cf3ab24e37, type: 3} + m_Name: + m_EditorClassIdentifier: + _background_color: {r: 0, g: 0, b: 0, a: 1} + _blending: 0.5 + _overlay_amplitude: 60 + _shader: {fileID: 4800000, guid: 3863f59f4842f4d90bc3966b1f9502af, type: 3} +--- !u!114 &6396011134595607581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954340607665692633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8938351030468096833} + linear_space: 0 +--- !u!1 &8954485367378834101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958768521121003565} + m_Layer: 2 + m_Name: LightSources + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8958768521121003565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954485367378834101} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.050000075, y: 0, z: -0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8956846767284514427} + - {fileID: 8958298204923504359} + - {fileID: 8958492846338115063} + m_Father: {fileID: 8956537991453593153} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8954752269252562429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956953563177976219} + - component: {fileID: 8938380326639234969} + - component: {fileID: 9067298761308153321} + - component: {fileID: 9067982206729525899} + - component: {fileID: 8798055995797976012} + m_Layer: 2 + m_Name: Infrared + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8956953563177976219 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8938380326639234969 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: b22ce111b5af44afe8b8f2f085799a5f, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067298761308153321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8938380326639234969} +--- !u!114 &9067982206729525899 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 1 + _ignore_infrared_if_empty: 0 + _lights_to_ignore: + - {fileID: 0} + - {fileID: 0} +--- !u!114 &8798055995797976012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954752269252562429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8938380326639234969} + linear_space: 0 +--- !u!1 &8954987777335964249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958492846338115063} + - component: {fileID: 9061951510230448747} + m_Layer: 2 + m_Name: PerspectiveNaturalLightSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8958492846338115063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954987777335964249} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8958768521121003565} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &9061951510230448747 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8954987777335964249} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 0 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 100 + m_SpotAngle: 90 + m_InnerSpotAngle: 71.41338 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294959103 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &8955025393554226475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958567879889452077} + - component: {fileID: 8938224487570478979} + - component: {fileID: 9067071972556815189} + - component: {fileID: 9067910119913123209} + - component: {fileID: 2794050067079799932} + m_Layer: 2 + m_Name: Normal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8958567879889452077 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8938224487570478979 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 63f7bf9c3a80b4d169b394696cbbd9ab, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067071972556815189 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8938224487570478979} +--- !u!114 &9067910119913123209 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: aa118ec7ab6c04e139900fecf923c766, type: 3} +--- !u!114 &2794050067079799932 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955025393554226475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8938224487570478979} + linear_space: 0 +--- !u!1 &8955066670320937537 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8957039927302039009} + - component: {fileID: 8950725977493392727} + - component: {fileID: 8983235198587314365} + - component: {fileID: 8940060199317590431} + m_Layer: 2 + m_Name: CameraBody + m_TagString: CameraBody + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8957039927302039009 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.05} + m_LocalScale: {x: 0.3, y: 0.050000004, z: 0.050000004} + m_Children: [] + m_Father: {fileID: 8956537991453593153} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8950725977493392727 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &8983235198587314365 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8940060199317590431 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955066670320937537} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8955123872149212813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958555408388945405} + - component: {fileID: 8937616187162310363} + - component: {fileID: 9067738391014373859} + - component: {fileID: 9068718654667840391} + - component: {fileID: 6653052786517147627} + m_Layer: 2 + m_Name: RGB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8958555408388945405 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8937616187162310363 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 2 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067738391014373859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8937616187162310363} +--- !u!114 &9068718654667840391 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &6653052786517147627 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955123872149212813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: RGB + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8937616187162310363} + linear_space: 0 +--- !u!1 &8955193503972165319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958335074575024093} + - component: {fileID: 8938361100219424377} + - component: {fileID: 9067347525399746309} + - component: {fileID: 9068839844146226189} + - component: {fileID: 9067177901889886573} + - component: {fileID: 9068724313563213973} + - component: {fileID: 5587323643025284583} + m_Layer: 2 + m_Name: Satellite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8958335074575024093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956537991453593153} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8938361100219424377 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 3.0310886 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 30 + field of view: 53.9 + orthographic: 0 + orthographic size: 4 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967263 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: bc593ac7628a042ac93b20ca1c0101b6, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067347525399746309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738700087649343} + - {fileID: 9067347525399746309} + - {fileID: 9067071972556815189} + - {fileID: 9067298761308153321} + - {fileID: 9067285070418787319} + - {fileID: 8953912316825990511} + - {fileID: 8953912316051221156} + - {fileID: 8953912316005417433} + - {fileID: 8953912315943398172} + - {fileID: 8953912315871983417} + - {fileID: 8953912315460739086} + - {fileID: 7297530299699051104} + - {fileID: 4093526257781573322} + - {fileID: 5267640086067651881} + - {fileID: 7782879719068724104} + - {fileID: 7497737142805118209} + - {fileID: 9067738391014373859} + - {fileID: 9067191241328514203} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 0 + _sync_fov: 0 + _sync_near_clip_plane: 0 + _sync_orthographic_projection: 0 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8938361100219424377} +--- !u!114 &9068839844146226189 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 246cc59c7a84ea44f87f6b70acfe30c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Offset: {x: 0, y: 10, z: 0} + target: {fileID: 0} +--- !u!114 &9067177901889886573 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} + m_Name: + m_EditorClassIdentifier: + _automatically_add_lights_without_infrared_component: 0 + _ignore_infrared_if_empty: 1 + _lights_to_ignore: + - {fileID: 9061319952716675367} +--- !u!114 &9068724313563213973 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85ccef30fe10a486389326bacc3bdfd4, type: 3} + m_Name: + m_EditorClassIdentifier: + _direction: {x: 0, y: -1, z: 0} +--- !u!114 &5587323643025284583 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955193503972165319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8938361100219424377} + linear_space: 0 +--- !u!1 &8955234115522024981 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8956624866575340015} + - component: {fileID: 8936617034565571487} + - component: {fileID: 9067738700087649343} + - component: {fileID: 9067414988562624883} + - component: {fileID: 1799047188069840996} + m_Layer: 2 + m_Name: MultiChannelDepth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8956624866575340015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8956998344135301341} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8936617034565571487 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 4.8, y: 3.5} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 0.10472277 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 60 + field of view: 60 + orthographic: 0 + orthographic size: 4 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 5d9eca522a1944267b89beea11ffc58c, type: 2} + m_TargetDisplay: 1 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &9067738700087649343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} + m_Name: + m_EditorClassIdentifier: + _cameras: + - {fileID: 9067738391014373859} + - {fileID: 5858083470835474262} + - {fileID: 1528727058868257043} + - {fileID: 7497737142805118209} + - {fileID: 7782879719068724104} + - {fileID: 4093526257781573322} + - {fileID: 7297530299699051104} + - {fileID: 8953912315460739086} + - {fileID: 8953912315871983417} + - {fileID: 8953912315943398172} + - {fileID: 8953912316005417433} + - {fileID: 8953912316051221156} + - {fileID: 8953912316825990511} + - {fileID: 9067285070418787319} + - {fileID: 9067298761308153321} + - {fileID: 9067071972556815189} + - {fileID: 9067738700087649343} + - {fileID: 9067191241328514203} + _run_only_in_edit_mode: 1 + _only_run_on_awake: 0 + _sync_culling_mask: 1 + _sync_far_clip_plane: 1 + _sync_fov: 1 + _sync_near_clip_plane: 1 + _sync_orthographic_projection: 1 + _sync_orthographic_size: 1 + _sync_physicality: 1 + _sync_sensor_size: 1 + _sync_lens_shift: 1 + _sync_gate_fit: 1 + _sync_focal_length: 1 + _camera: {fileID: 8936617034565571487} +--- !u!114 &9067414988562624883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} + m_Name: + m_EditorClassIdentifier: + _replace_render_type: + _replacement_shader: {fileID: 4800000, guid: 0f2361423bff3490d8f046e398478528, type: 3} +--- !u!114 &1799047188069840996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955234115522024981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fce5be366194edf81ec206b319817d3, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + _camera: {fileID: 8936617034565571487} + linear_space: 0 +--- !u!1 &8955371836866037965 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8958298204923504359} + - component: {fileID: 9061319952716675367} + - component: {fileID: 9067202446707797289} + m_Layer: 2 + m_Name: PerspectiveInfraredLightSource + m_TagString: Infrared + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8958298204923504359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955371836866037965} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8958768521121003565} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &9061319952716675367 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955371836866037965} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 0 + m_Shape: 0 + m_Color: {r: 1, g: 0, b: 0, a: 1} + m_Intensity: 1 + m_Range: 100 + m_SpotAngle: 90 + m_InnerSpotAngle: 71.41338 + m_CookieSize: 0 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.01 + m_NormalBias: 0 + m_NearPlane: 0.1 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 0 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 20 + m_ShadowAngle: 0 +--- !u!114 &9067202446707797289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8955371836866037965} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb842d57fd4d0474497a6d1b0c477f96, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Runtime/Prefabs/Cameras/NeodroidCamera.prefab.meta b/Runtime/Prefabs/Cameras/NeodroidCamera.prefab.meta new file mode 100644 index 000000000..27d9a2458 --- /dev/null +++ b/Runtime/Prefabs/Cameras/NeodroidCamera.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5d513f52f3983a9cea4f8d69899910a0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/CanvasTextDisplayer.prefab b/Runtime/Prefabs/CanvasTextDisplayer.prefab deleted file mode 100644 index 9977bd8b1..000000000 --- a/Runtime/Prefabs/CanvasTextDisplayer.prefab +++ /dev/null @@ -1,199 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 0} - m_RootGameObject: {fileID: 1184177678723708} - m_IsPrefabAsset: 1 ---- !u!1 &1184177678723708 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224706496409117660} - - component: {fileID: 223555168075426656} - - component: {fileID: 114006005799741448} - - component: {fileID: 114677109888224858} - m_Layer: 0 - m_Name: CanvasTextDisplayer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1550835145247940 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224830242734766698} - - component: {fileID: 222712741076590462} - - component: {fileID: 114592628890309656} - - component: {fileID: 114665495699818228} - m_Layer: 0 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &114006005799741448 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1184177678723708} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 1 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1000 ---- !u!114 &114592628890309656 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1550835145247940} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: New Text ---- !u!114 &114665495699818228 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1550835145247940} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 ---- !u!114 &114677109888224858 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1184177678723708} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!222 &222712741076590462 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1550835145247940} - m_CullTransparentMesh: 0 ---- !u!223 &223555168075426656 -Canvas: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1184177678723708} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 2 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &224706496409117660 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1184177678723708} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224830242734766698} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 2, y: 2} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224830242734766698 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1550835145247940} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224706496409117660} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} diff --git a/Runtime/Prefabs/CanvasTextDisplayer.prefab.meta b/Runtime/Prefabs/CanvasTextDisplayer.prefab.meta deleted file mode 100644 index a2593ac3c..000000000 --- a/Runtime/Prefabs/CanvasTextDisplayer.prefab.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1e3913ea36ae645ec9c6004997516905 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 100100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prefabs/IndexedFrontierPlot.prefab b/Runtime/Prefabs/IndexedFrontierPlot.prefab deleted file mode 100644 index 382a25e5a..000000000 --- a/Runtime/Prefabs/IndexedFrontierPlot.prefab +++ /dev/null @@ -1,72 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 0} - m_RootGameObject: {fileID: 1831484460501022} - m_IsPrefabAsset: 1 ---- !u!1 &1831484460501022 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 4945636982274118} - - component: {fileID: 114744579203890672} - m_Layer: 0 - m_Name: IndexedFrontierPlot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &4945636982274118 -Transform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1831484460501022} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114744579203890672 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1831484460501022} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a04560acbd2754376a74c91fd41f00a0, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 1 - _values: - - 3.5398526 - - 3.7326174 - - 3.8690538 - - 3.2089531 - - 4.3139133 - - 1.592572 - - 3.3965623 - - 0.16564548 - - 0.5663967 - _retain_last_plot: 1 - _plot_random_series: 1 - _designs: [] - _instances: [] diff --git a/Runtime/Prefabs/IndexedFrontierPlot.prefab.meta b/Runtime/Prefabs/IndexedFrontierPlot.prefab.meta deleted file mode 100644 index ad35cef4d..000000000 --- a/Runtime/Prefabs/IndexedFrontierPlot.prefab.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a80d3dff67a51409e8d3951ad66a377a -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 100100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prefabs/NeodroidCamera.prefab b/Runtime/Prefabs/NeodroidCamera.prefab deleted file mode 100644 index a57d57936..000000000 --- a/Runtime/Prefabs/NeodroidCamera.prefab +++ /dev/null @@ -1,1791 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &1006723805586038 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4232321861901436} - m_Layer: 0 - m_Name: DataCollectionCameras - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4232321861901436 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1006723805586038} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4453025719616826} - - {fileID: 4218908600063310} - - {fileID: 4927334179696988} - - {fileID: 4990519437420952} - - {fileID: 4398325171140630} - - {fileID: 4949770021763212} - - {fileID: 4337138128144672} - - {fileID: 4725180884745084} - m_Father: {fileID: 4129864042203872} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1037625987720610 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4419360240986842} - - component: {fileID: 108322580981299036} - m_Layer: 15 - m_Name: OrthographicNaturalLightSource - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!4 &4419360240986842 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1037625987720610} - m_LocalRotation: {x: 0.30853766, y: 0.25750902, z: -0.08716187, w: 0.91153514} - m_LocalPosition: {x: -0.050000075, y: 0, z: -0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4889865574120588} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 37.4, y: 31.55, z: 0} ---- !u!108 &108322580981299036 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1037625987720610} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: 3 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.01 - m_NormalBias: 0 - m_NearPlane: 0.1 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294959103 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 0 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!1 &1138998545480074 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4949770021763212} - - component: {fileID: 20367486579053346} - - component: {fileID: 114307586759802868} - - component: {fileID: 114622768315461166} - - component: {fileID: 114032525281749288} - m_Layer: 0 - m_Name: Normal - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4949770021763212 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1138998545480074} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4232321861901436} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &20367486579053346 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1138998545480074} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 20 - field of view: 58.6 - orthographic: 1 - orthographic size: 3 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967263 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: 63f7bf9c3a80b4d169b394696cbbd9ab, type: 2} - m_TargetDisplay: 1 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114307586759802868 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1138998545480074} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114307586759802868} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -33 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.01 - _old_orthographic_size: 3 - _sync_culling_mask: 1 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114622768315461166 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1138998545480074} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _normalise_observation: 0 - _image_format: 1 - _jpeg_quality: 75 - _camera: {fileID: 20367486579053346} ---- !u!114 &114032525281749288 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1138998545480074} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} - m_Name: - m_EditorClassIdentifier: - _replace_render_type: - _color: {r: 0, g: 0, b: 0, a: 0} - _replacement_shader: {fileID: 4800000, guid: aa118ec7ab6c04e139900fecf923c766, type: 3} ---- !u!1 &1176750420014840 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4602590134894934} - - component: {fileID: 108133865239658186} - m_Layer: 15 - m_Name: PerspectiveNaturalLightSource - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!4 &4602590134894934 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1176750420014840} - m_LocalRotation: {x: -0.000000014901159, y: 0.008728116, z: -0.000000014901159, w: 0.999962} - m_LocalPosition: {x: -0.050000075, y: 0, z: -0.000000007450581} - m_LocalScale: {x: 1, y: 1.0000001, z: 1.0000001} - m_Children: [] - m_Father: {fileID: 4889865574120588} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!108 &108133865239658186 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1176750420014840} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 90 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: 3 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.01 - m_NormalBias: 0 - m_NearPlane: 0.1 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294959103 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 0 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!1 &1216578306050604 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4927334179696988} - - component: {fileID: 20940602749366906} - - component: {fileID: 114203839715900738} - - component: {fileID: 114789472510660598} - - component: {fileID: 114877382518267686} - m_Layer: 0 - m_Name: RGB - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4927334179696988 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1216578306050604} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4232321861901436} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &20940602749366906 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1216578306050604} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 20 - field of view: 58.6 - orthographic: 1 - orthographic size: 3 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967263 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} - m_TargetDisplay: 1 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114203839715900738 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1216578306050604} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114203839715900738} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -33 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.01 - _old_orthographic_size: 3 - _sync_culling_mask: 1 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114789472510660598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1216578306050604} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _normalise_observation: 0 - _image_format: 1 - _jpeg_quality: 75 - _camera: {fileID: 20940602749366906} ---- !u!114 &114877382518267686 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1216578306050604} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} - m_Name: - m_EditorClassIdentifier: - _ignore_infrared_if_empty: 1 - _lights_to_ignore: - - {fileID: 108906297679887750} ---- !u!1 &1238596673498848 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4331612275810624} - - component: {fileID: 33198744561240566} - - component: {fileID: 65428771364152348} - - component: {fileID: 23598461857027390} - m_Layer: 13 - m_Name: CameraBody - m_TagString: CameraBody - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4331612275810624 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1238596673498848} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.000000018626455, y: 0.0000000121071935, z: -0.050000116} - m_LocalScale: {x: 0.3, y: 0.05, z: 0.05} - m_Children: [] - m_Father: {fileID: 4129864042203872} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &33198744561240566 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1238596673498848} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!65 &65428771364152348 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1238596673498848} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &23598461857027390 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1238596673498848} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: dfff33fb25bd64a6e8be693cfb8f83f4, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!1 &1531565962497132 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4762047315780166} - - component: {fileID: 108906297679887750} - - component: {fileID: 114704739639699848} - m_Layer: 10 - m_Name: PerspectiveInfraredLightSource - m_TagString: Infrared - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4762047315780166 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1531565962497132} - m_LocalRotation: {x: -0.00000004470348, y: 0.008726536, z: -0.00000004470348, w: 0.999962} - m_LocalPosition: {x: -0.050000075, y: 0, z: -0.000000007450581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4889865574120588} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 1, z: 0} ---- !u!108 &108906297679887750 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1531565962497132} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 0 - m_Color: {r: 1, g: 0, b: 0, a: 1} - m_Intensity: 1 - m_Range: 100 - m_SpotAngle: 90 - m_CookieSize: 0 - m_Shadows: - m_Type: 2 - m_Resolution: 3 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.01 - m_NormalBias: 0 - m_NearPlane: 0.1 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 0 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 20 - m_ShadowAngle: 0 ---- !u!114 &114704739639699848 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1531565962497132} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fb842d57fd4d0474497a6d1b0c477f96, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1568745427337830 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4725180884745084} - - component: {fileID: 20793825365236440} - - component: {fileID: 114594705335718820} - - component: {fileID: 114844159235485554} - - component: {fileID: 114931974240182444} - - component: {fileID: 114764329013616076} - - component: {fileID: 114907179650593844} - m_Layer: 0 - m_Name: Satellite - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4725180884745084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568745427337830} - m_LocalRotation: {x: 0.3265056, y: -0.32650563, z: 0.6272114, w: 0.62721133} - m_LocalPosition: {x: 0, y: -0.81745243, z: 12.780132} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4232321861901436} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 23.84, y: 0, z: 0} ---- !u!20 &20793825365236440 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568745427337830} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 20 - field of view: 60 - orthographic: 1 - orthographic size: 3 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967263 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: bc593ac7628a042ac93b20ca1c0101b6, type: 2} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114594705335718820 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568745427337830} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114594705335718820} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -33 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.3 - _old_orthographic_size: 3 - _sync_culling_mask: 1 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114844159235485554 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568745427337830} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _normalise_observation: 0 - _image_format: 1 - _jpeg_quality: 75 - _camera: {fileID: 20793825365236440} ---- !u!114 &114931974240182444 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568745427337830} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 246cc59c7a84ea44f87f6b70acfe30c5, type: 3} - m_Name: - m_EditorClassIdentifier: - _Offset: {x: 0, y: 2, z: 0} - _Target: {fileID: 0} ---- !u!114 &114764329013616076 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568745427337830} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} - m_Name: - m_EditorClassIdentifier: - _ignore_infrared_if_empty: 1 - _lights_to_ignore: - - {fileID: 108906297679887750} ---- !u!114 &114907179650593844 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568745427337830} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 85ccef30fe10a486389326bacc3bdfd4, type: 3} - m_Name: - m_EditorClassIdentifier: - _direction: {x: 0, y: -1, z: 0} ---- !u!1 &1634100351029940 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4218908600063310} - - component: {fileID: 20145353716750142} - - component: {fileID: 114203530777878686} - - component: {fileID: 114155819769717986} - - component: {fileID: 114633070162146770} - m_Layer: 0 - m_Name: Depth - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4218908600063310 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634100351029940} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4232321861901436} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &20145353716750142 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634100351029940} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 20 - field of view: 30 - orthographic: 1 - orthographic size: 3 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967263 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: 5d9eca522a1944267b89beea11ffc58c, type: 2} - m_TargetDisplay: 1 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114203530777878686 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634100351029940} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114203530777878686} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -33 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.01 - _old_orthographic_size: 3 - _sync_culling_mask: 1 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114155819769717986 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634100351029940} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _normalise_observation: 0 - _image_format: 1 - _jpeg_quality: 75 - _camera: {fileID: 20145353716750142} ---- !u!114 &114633070162146770 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634100351029940} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} - m_Name: - m_EditorClassIdentifier: - _replace_render_type: - _color: {r: 0, g: 0, b: 0, a: 0} - _replacement_shader: {fileID: 4800000, guid: 0f2361423bff3490d8f046e398478528, type: 3} ---- !u!1 &1714345857349140 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4889865574120588} - m_Layer: 0 - m_Name: LightSources - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4889865574120588 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1714345857349140} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4419360240986842} - - {fileID: 4762047315780166} - - {fileID: 4602590134894934} - m_Father: {fileID: 4129864042203872} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1858830691588984 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4337138128144672} - - component: {fileID: 20768847776266208} - - component: {fileID: 114798311224295254} - - component: {fileID: 114216501179093510} - - component: {fileID: 114831488807547016} - - component: {fileID: 114442928199698278} - - component: {fileID: 114889075139374148} - m_Layer: 0 - m_Name: Flow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4337138128144672 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858830691588984} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4232321861901436} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &20768847776266208 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858830691588984} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 20 - field of view: 30 - orthographic: 1 - orthographic size: 3 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967263 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: afc5604d79d0849129803e463fc07bca, type: 2} - m_TargetDisplay: 1 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114798311224295254 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858830691588984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114798311224295254} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -33 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.01 - _old_orthographic_size: 3 - _sync_culling_mask: 1 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114216501179093510 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858830691588984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _normalise_observation: 0 - _image_format: 1 - _jpeg_quality: 75 - _camera: {fileID: 20768847776266208} ---- !u!114 &114831488807547016 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858830691588984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} - m_Name: - m_EditorClassIdentifier: - _ignore_infrared_if_empty: 1 - _lights_to_ignore: - - {fileID: 108906297679887750} ---- !u!114 &114442928199698278 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858830691588984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} - m_Name: - m_EditorClassIdentifier: - _replace_render_type: - _color: {r: 0, g: 0, b: 0, a: 1} - _replacement_shader: {fileID: 4800000, guid: 3863f59f4842f4d90bc3966b1f9502af, type: 3} ---- !u!114 &114889075139374148 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1858830691588984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b2e54ebded2e5489fa2596cf3ab24e37, type: 3} - m_Name: - m_EditorClassIdentifier: - _background_color: {r: 0, g: 0, b: 0, a: 1} - _blending: 0.5 - _overlay_amplitude: 60 - _shader: {fileID: 4800000, guid: 3863f59f4842f4d90bc3966b1f9502af, type: 3} ---- !u!1 &1866968490669790 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4129864042203872} - - component: {fileID: 20224209517257972} - - component: {fileID: 114716082362535994} - - component: {fileID: 114376289421041340} - - component: {fileID: 124821388434305126} - - component: {fileID: 9119703340410289289} - m_Layer: 0 - m_Name: NeodroidCamera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4129864042203872 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1866968490669790} - m_LocalRotation: {x: 0.21263106, y: 0.67437977, z: -0.21263108, w: 0.6743797} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4331612275810624} - - {fileID: 4232321861901436} - - {fileID: 4889865574120588} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 35, y: 90.00001, z: 0} ---- !u!20 &20224209517257972 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1866968490669790} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 1, g: 1, b: 1, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 20 - field of view: 60 - orthographic: 0 - orthographic size: 3 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114716082362535994 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1866968490669790} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114716082362535994} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -1 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.01 - _old_orthographic_size: 3 - _sync_culling_mask: 0 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114376289421041340 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1866968490669790} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} - m_Name: - m_EditorClassIdentifier: - _ignore_infrared_if_empty: 1 - _lights_to_ignore: - - {fileID: 108906297679887750} ---- !u!124 &124821388434305126 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1866968490669790} - m_Enabled: 1 ---- !u!114 &9119703340410289289 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1866968490669790} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b3dd815fb29337f73b480c9dd61a4ae2, type: 3} - m_Name: - m_EditorClassIdentifier: - _cameras: - - {fileID: 20145353716750142} - - {fileID: 20768847776266208} - - {fileID: 20598539646069560} - - {fileID: 20687481563768866} - - {fileID: 20713194616804364} - - {fileID: 20367486579053346} - - {fileID: 20940602749366906} - - {fileID: 20793825365236440} - _textures: - - {fileID: 8400000, guid: b22ce111b5af44afe8b8f2f085799a5f, type: 2} - - {fileID: 8400000, guid: 8fb1467d625b3486199ecd1d9d21ef7d, type: 2} - - {fileID: 8400000, guid: afc5604d79d0849129803e463fc07bca, type: 2} - - {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} - - {fileID: 8400000, guid: c0062e72afb4348d9b9bb702fba6c398, type: 2} - - {fileID: 8400000, guid: bc593ac7628a042ac93b20ca1c0101b6, type: 2} - - {fileID: 8400000, guid: 5d9eca522a1944267b89beea11ffc58c, type: 2} - - {fileID: 8400000, guid: 63f7bf9c3a80b4d169b394696cbbd9ab, type: 2} - _size: {x: 84, y: 84} ---- !u!1 &1870355748897446 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4398325171140630} - - component: {fileID: 20687481563768866} - - component: {fileID: 114480522672753226} - - component: {fileID: 114867302115997544} - - component: {fileID: 114910394560810596} - - component: {fileID: 8108044723890373889} - m_Layer: 0 - m_Name: InstanceSegmentation - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4398325171140630 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870355748897446} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4232321861901436} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &20687481563768866 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870355748897446} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 1, g: 1, b: 1, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 20 - field of view: 58.6 - orthographic: 1 - orthographic size: 3 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967263 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: 8fb1467d625b3486199ecd1d9d21ef7d, type: 2} - m_TargetDisplay: 1 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114480522672753226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870355748897446} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114480522672753226} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -33 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.01 - _old_orthographic_size: 3 - _sync_culling_mask: 1 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114867302115997544 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870355748897446} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} - m_Name: - m_EditorClassIdentifier: - _replace_render_type: - _color: {r: 0, g: 0, b: 0, a: 0} - _replacement_shader: {fileID: 4800000, guid: 41f5b8aa1a0c44af7adc8164267450ec, type: 3} ---- !u!114 &114910394560810596 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870355748897446} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 956749cb3cb1149b1933eb1da9bf66b7, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &8108044723890373889 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870355748897446} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6e799660541044f0ba271413b7431532, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _normalise_observation: 0 - _image_format: 0 - _jpeg_quality: 75 - _camera: {fileID: 20687481563768866} - _Serialised_String: ', 37240: RGBA(0.492, 0.083, 0.070, 1.000), 37540: RGBA(0.819, 0.591, 0.571, 1.000), 37762: RGBA(0.065, 0.065, 0.061, 1.000), 37930: RGBA(0.126, 0.046, 0.014, 1.000), 38088: RGBA(0.102, 0.126, 0.134, 1.000)' - _segmenter: {fileID: 114910394560810596} ---- !u!1 &1975208461797724 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4453025719616826} - - component: {fileID: 20598539646069560} - - component: {fileID: 114271565463949058} - - component: {fileID: 114608562479145288} - - component: {fileID: 114100763809553962} - m_Layer: 0 - m_Name: InfraredShadow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4453025719616826 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975208461797724} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4232321861901436} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &20598539646069560 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975208461797724} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 20 - field of view: 58.6 - orthographic: 1 - orthographic size: 3 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967263 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: b22ce111b5af44afe8b8f2f085799a5f, type: 2} - m_TargetDisplay: 1 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114271565463949058 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975208461797724} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 96d2b2d8cb1664b2c9870ffd997b2f1b, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _normalise_observation: 0 - _image_format: 1 - _jpeg_quality: 75 - _camera: {fileID: 20598539646069560} ---- !u!114 &114608562479145288 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975208461797724} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114608562479145288} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -33 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.01 - _old_orthographic_size: 3 - _sync_culling_mask: 1 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114100763809553962 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975208461797724} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 90d8486c2d1444fb8ac452a5a74cf74b, type: 3} - m_Name: - m_EditorClassIdentifier: - _ignore_infrared_if_empty: 0 - _lights_to_ignore: - - {fileID: 0} - - {fileID: 108322580981299036} - - {fileID: 108133865239658186} - - {fileID: 0} ---- !u!1 &1975303641184726 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4990519437420952} - - component: {fileID: 20713194616804364} - - component: {fileID: 114197453280488484} - - component: {fileID: 114939049052965380} - - component: {fileID: 114319058318530508} - - component: {fileID: 962180073} - m_Layer: 0 - m_Name: Segmentation - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4990519437420952 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975303641184726} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4232321861901436} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &20713194616804364 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975303641184726} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 1, g: 1, b: 1, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 20 - field of view: 58.6 - orthographic: 1 - orthographic size: 3 - m_Depth: 1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967263 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: c0062e72afb4348d9b9bb702fba6c398, type: 2} - m_TargetDisplay: 1 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!114 &114197453280488484 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975303641184726} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c744374d5f2e04a94a851a941320bce1, type: 3} - m_Name: - m_EditorClassIdentifier: - _camera: {fileID: 114197453280488484} - _cameras: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - _old_culling_mask: -33 - _old_far_clip_plane: 20 - _old_near_clip_plane: 0.01 - _old_orthographic_size: 3 - _sync_culling_mask: 1 - _sync_far_clip_plane: 1 - _sync_near_clip_plane: 1 - _sync_orthographic_size: 1 ---- !u!114 &114939049052965380 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975303641184726} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2773a5ee782b3475e9f2cac8306134fa, type: 3} - m_Name: - m_EditorClassIdentifier: - _replace_render_type: - _color: {r: 0, g: 0, b: 0, a: 0} - _replacement_shader: {fileID: 4800000, guid: 41f5b8aa1a0c44af7adc8164267450ec, type: 3} ---- !u!114 &114319058318530508 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975303641184726} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e9cfd7b9502dd4091965822449faedd8, type: 3} - m_Name: - m_EditorClassIdentifier: - _segmentation: {fileID: 11400000, guid: 1387513cbea10420eaa5a7ac8f932b80, type: 2} - _Replace_Untagged_Color: 1 - _Untagged_Color: {r: 0, g: 0, b: 0, a: 1} ---- !u!114 &962180073 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1975303641184726} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6e799660541044f0ba271413b7431532, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _normalise_observation: 0 - _image_format: 1 - _jpeg_quality: 75 - _camera: {fileID: 20713194616804364} - _Serialised_String: ', Actor: RGBA(0.000, 0.000, 1.000, 1.000), Goal: RGBA(0.000, 1.000, 0.000, 1.000), Obstruction: RGBA(1.000, 0.000, 0.000, 1.000), Box: RGBA(1.000, 0.000, 1.000, 1.000), Player: RGBA(0.000, 0.000, 1.000, 1.000)' - _segmenter: {fileID: 114319058318530508} diff --git a/Runtime/Prefabs/Obstructions.meta b/Runtime/Prefabs/Obstructions.meta new file mode 100644 index 000000000..b2ecba8e7 --- /dev/null +++ b/Runtime/Prefabs/Obstructions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 28c113763fc18e7e99fb6eb601cea9c5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Obstructions/ObstructionCapsule.prefab b/Runtime/Prefabs/Obstructions/ObstructionCapsule.prefab new file mode 100644 index 000000000..7e51688a4 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionCapsule.prefab @@ -0,0 +1,655 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2302102554894629341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2302102554894629331} + - component: {fileID: 2302102554894629330} + - component: {fileID: 2302102554894629329} + - component: {fileID: 2302102554894629343} + - component: {fileID: 2302102554894629342} + - component: {fileID: 2302102554894629332} + - component: {fileID: 3674649710580244811} + m_Layer: 10 + m_Name: ObstructionCapsule + m_TagString: b + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2302102554894629331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.1437268, y: 3.4423447, z: -12.843082} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2302102554894629330 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2302102554894629329 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e7bc9ae29014cf4c9aa3e8a67cbb43da, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!114 &2302102554894629343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 429eddc2e17c50341b357a1de655ebf6, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _tiling_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _offset_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _color_space: + _space: + _min_: {x: 0.2, y: 0.2, z: 0.2, w: 0.2} + _max_: {x: 0.8, y: 0.8, z: 0.8, w: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _smoothness_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _reflection_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _use_shared: 0 +--- !u!114 &2302102554894629342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a22c41a371cb5014b955705c804c74aa, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _space: + _space: + _min_: {x: 0, y: 0, z: 0} + _max_: {x: 1, y: 1, z: 1} + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 +--- !u!114 &2302102554894629332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de609666bdf4489dbac2a6e84eaeb992, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _textures: + - {fileID: 2800000, guid: 5f599c75d7d2d3f2397e633a0a2cad10, type: 3} + - {fileID: 2800000, guid: 35997aa1fb9073cd5956b28c2f1733f1, type: 3} + - {fileID: 2800000, guid: 64e18793722966d539352fece171aca4, type: 3} + - {fileID: 2800000, guid: f2ab9b3b5d1f72ad98d471682b8cf7c9, type: 3} + - {fileID: 2800000, guid: 0d17962e11d952709b3e26b3ff68a395, type: 3} + - {fileID: 2800000, guid: 9fb9470f3fd529bd39417c7faa9774a7, type: 3} + - {fileID: 2800000, guid: 84e88be29a33c876782d228a08469e9e, type: 3} + - {fileID: 2800000, guid: b3d79c300971ed5068f42dbb851fdb91, type: 3} + - {fileID: 2800000, guid: 1f775d15cc88244adbf47cd8c28560b7, type: 3} + - {fileID: 2800000, guid: 242c691845e32213aa72d268bf8c3afc, type: 3} + - {fileID: 2800000, guid: f978018f756d0e8d69eab173e1c5e26e, type: 3} + - {fileID: 2800000, guid: b331e7a9d4c32f44b91437ea7a6392a3, type: 3} + - {fileID: 2800000, guid: 21d14a05f13516581b7a821bd7327c2c, type: 3} + - {fileID: 2800000, guid: abafbf2b15ebd8d3eb18e69c5af89423, type: 3} + - {fileID: 2800000, guid: c7d8a0f5affc52f0198dff2bc0d55bcc, type: 3} + - {fileID: 2800000, guid: b884fd7c59514a6e08465daab211eecc, type: 3} + - {fileID: 2800000, guid: d238841fc28268738bdb07634559baa8, type: 3} + - {fileID: 2800000, guid: 7ce3f4f3a46be893eb352aa8bc6757c5, type: 3} + - {fileID: 2800000, guid: 482ca8a197b1af65bbf8f5ec5db7b693, type: 3} + - {fileID: 2800000, guid: e9009b5738cfe13fc859c01cb6bebd3a, type: 3} + - {fileID: 2800000, guid: e72bbde12cfa52a1fbff62fb30bdad3c, type: 3} + - {fileID: 2800000, guid: 449c150033d2d373ca3fa6fb1c52d7aa, type: 3} + - {fileID: 2800000, guid: 322c8e42837226afb8e5f7218a22f615, type: 3} + - {fileID: 2800000, guid: c7b04f33dd1b448d8932320361d31781, type: 3} + - {fileID: 2800000, guid: f8a7d4b8268fa7676982e6f50e7366ec, type: 3} + - {fileID: 2800000, guid: 1a5bf1e28e1e70f86824301a1f8b52e5, type: 3} + - {fileID: 2800000, guid: 92cb44d88c40cfd338264568800a5c5f, type: 3} + - {fileID: 2800000, guid: d6fe8cd585a7fc088b45ea5a56563bd7, type: 3} + - {fileID: 2800000, guid: 93e5a176835fcfc9b8d742b4741aa5da, type: 3} + - {fileID: 2800000, guid: 349c4081e4aaa23658f4e8b0aa786a37, type: 3} + - {fileID: 2800000, guid: c4616dd426db89b73b327120c4f6bc54, type: 3} + - {fileID: 2800000, guid: fc57258ba0cbf96019b082db7f2a783a, type: 3} + - {fileID: 2800000, guid: 547405889a5c4d37188395e8763a7501, type: 3} + - {fileID: 2800000, guid: 744a73a1523db1fc7b167c88357a6252, type: 3} + - {fileID: 2800000, guid: c2a249280a347039ea24e702dc562703, type: 3} + - {fileID: 2800000, guid: 5ace4931437b72abca9fe986f35a16bc, type: 3} + - {fileID: 2800000, guid: 239842f75ff0d38f788d3f76b11cd71a, type: 3} + - {fileID: 2800000, guid: f11ab4af40b591ae0a197d3185ffdec5, type: 3} + - {fileID: 2800000, guid: 38ee90bfd9b48ebd19f991475b9bd374, type: 3} + - {fileID: 2800000, guid: 72a34f3f76339da6abac282de8138d87, type: 3} + - {fileID: 2800000, guid: 0b91faa29855e49808f8b5d44a396b4f, type: 3} + - {fileID: 2800000, guid: b167686af5d9f9d53ac3b2cc13db04c8, type: 3} + - {fileID: 2800000, guid: c0433e91a072738bb8adc6d22234c44a, type: 3} + - {fileID: 2800000, guid: 3f04f04af0c2105a6a202fee90911682, type: 3} + - {fileID: 2800000, guid: e2cc7b6f3a7ea7a58b933e42cb5ca640, type: 3} + - {fileID: 2800000, guid: 3afa4fc416e1e31c787db2cfbdaae3ea, type: 3} + - {fileID: 2800000, guid: 8018e57449252a678a62594d35626af8, type: 3} + - {fileID: 2800000, guid: e60a34c308361185c88aac528d680eb9, type: 3} + - {fileID: 2800000, guid: a15018ab9ac7f59668731a91c64a8e68, type: 3} + - {fileID: 2800000, guid: e78c3f43d704bd6a7ac44d6b5155cd57, type: 3} + - {fileID: 2800000, guid: 8e3d6cfd5c8b263aabf61c7baa0f2202, type: 3} + - {fileID: 2800000, guid: 5de3299c2b3108f778f1083cd300014f, type: 3} + - {fileID: 2800000, guid: cfcec2ca8476e43d18027f01a8bd2946, type: 3} + - {fileID: 2800000, guid: 8e0921fa566d6cf04ba0a96a62bd6245, type: 3} + - {fileID: 2800000, guid: a94988f60f214c656bf7f7024bf62e24, type: 3} + - {fileID: 2800000, guid: 63f05e96863c0cf19ab8f94c1c3c1559, type: 3} + - {fileID: 2800000, guid: 2e2fc84d890be4dcb9ca0b5f76634eee, type: 3} + - {fileID: 2800000, guid: bb2dc4d5af36e35e2bdd8959826900a5, type: 3} + - {fileID: 2800000, guid: 9de42e16ca0d5d779a4e1f429878e1a7, type: 3} + - {fileID: 2800000, guid: 59a99f906bb7070ddbb1d0b7ad9f1a5f, type: 3} + - {fileID: 2800000, guid: 9c8f9403db897b36585b670783df3ea8, type: 3} + - {fileID: 2800000, guid: d13d315f27fceba2dbf83afec85ac3a7, type: 3} + - {fileID: 2800000, guid: dea1cd11bf285cdc9942eee3dc6f161a, type: 3} + - {fileID: 2800000, guid: e7b9b905cc918a1bc8f2b2efad972505, type: 3} + - {fileID: 2800000, guid: 5c85e9cd3ec590d21874ffa8d6360a94, type: 3} + - {fileID: 2800000, guid: ce246d761b4ef5004be6ae07fc0db1a3, type: 3} + - {fileID: 2800000, guid: 2443f0fee7f3a80159c6633341f5f47d, type: 3} + - {fileID: 2800000, guid: b9cc471440a74400d98e2908420b88d2, type: 3} + - {fileID: 2800000, guid: a11bf7acb0668c9efafab0efa992a669, type: 3} + - {fileID: 2800000, guid: c2daaa1ac2f78fb0baddf28ad071ecf6, type: 3} + - {fileID: 2800000, guid: 51419fb9959103351925225870b4b4a9, type: 3} + - {fileID: 2800000, guid: 7edb149c74f886a1182eb4d8cd3989d4, type: 3} + - {fileID: 2800000, guid: d01b2f983c50eb7df9ea73506dbd8bc8, type: 3} + - {fileID: 2800000, guid: 5996ed09056f967b4b7f09f0b7bfcb54, type: 3} + - {fileID: 2800000, guid: 890ad4627790e6ed99c6fc658522a04f, type: 3} + - {fileID: 2800000, guid: 125180fb60693811b89970c31746ab99, type: 3} + - {fileID: 2800000, guid: a7bc4e666025adb67b3571b680b24c12, type: 3} + - {fileID: 2800000, guid: 15b8b31621fa8c8d797d19906412d090, type: 3} + - {fileID: 2800000, guid: 53241d4b28bdcf92588925ea85b953ec, type: 3} + - {fileID: 2800000, guid: 148abc0f11d542f308e7a85023ac7076, type: 3} + - {fileID: 2800000, guid: 33fe32ac3bfe2f7d3b5fad180e9e5d8d, type: 3} + - {fileID: 2800000, guid: ebfda5d01d6259d4db534bb12c5495c6, type: 3} + - {fileID: 2800000, guid: 8d0c527b34bd2635f8511c9e0ea201f4, type: 3} + - {fileID: 2800000, guid: ad00aa6df81675397857dd27656145cb, type: 3} + - {fileID: 2800000, guid: 6dd7e7a3f083d02148407eb88455d179, type: 3} + - {fileID: 2800000, guid: 0ba144e573c92f529ad708694edca4be, type: 3} + - {fileID: 2800000, guid: 7abd5a5900ef7042c94a9f1baea716c0, type: 3} + - {fileID: 2800000, guid: 220e2a7b82ffe4ca9b17de0d4e7fc57d, type: 3} + - {fileID: 2800000, guid: ddebf5771a8b33ca7a07ce719664f372, type: 3} + - {fileID: 2800000, guid: 50dbc1da7beebdc938cd6c8ecb3c7153, type: 3} + - {fileID: 2800000, guid: e84abad7ad3564e3590b8b0ed95893b6, type: 3} + - {fileID: 2800000, guid: 0a3d69b4b8182474ea9af5265dddde5c, type: 3} + - {fileID: 2800000, guid: b1d1b183a4d860b6d9d4d84fca5252f5, type: 3} + - {fileID: 2800000, guid: 698163fb7eeb500ef96ea7e79f4a4080, type: 3} + - {fileID: 2800000, guid: 7cff9f7095b86cac080c32361338d2e4, type: 3} + - {fileID: 2800000, guid: 4fa42e68235808872af68d503a05ec72, type: 3} + - {fileID: 2800000, guid: 44b0fe3be11aa3fc4a66d590464634c5, type: 3} + - {fileID: 2800000, guid: 381fd379b20851d8bafbf9f68b698b82, type: 3} + - {fileID: 2800000, guid: 5cbc170583d04417c9082b3e407c35f0, type: 3} + - {fileID: 2800000, guid: 8ca02a1d900fed08ea63f17fee4a5e66, type: 3} + - {fileID: 2800000, guid: 0b610d7abf4e9f0dc801f5eddbd16d59, type: 3} + - {fileID: 2800000, guid: 12cf492b4b8055da2a0beab8f1f60bea, type: 3} + - {fileID: 2800000, guid: c1bf0dbba7455ceb0acc4104aab91fd6, type: 3} + - {fileID: 2800000, guid: 31585c155dd6735cf9cc4a32a8f2962c, type: 3} + - {fileID: 2800000, guid: 9c7c9ffb62c4ed1c6b0ab14c0c2d58f4, type: 3} + - {fileID: 2800000, guid: 673933e3ae75fbd0bb858b41e7b9ac57, type: 3} + - {fileID: 2800000, guid: 29e10c7d78307302ab8fe96fc3c9ea7d, type: 3} + - {fileID: 2800000, guid: 5dc3d40006c2ef89dae46a999de6a4a3, type: 3} + - {fileID: 2800000, guid: 1d658835cedec7a38af140197779158f, type: 3} + - {fileID: 2800000, guid: 2786e79ec3be0b43d9f4cf58a3a9261f, type: 3} + - {fileID: 2800000, guid: c91454be3cebf185ab09aff353e6caad, type: 3} + - {fileID: 2800000, guid: d5d942b1c51d86ebba9fcf55728e89ce, type: 3} + - {fileID: 2800000, guid: c9e4963dc97837b28b416f991fe0402b, type: 3} + - {fileID: 2800000, guid: 38ba08b2806887c9ba61605bcb5f7e72, type: 3} + - {fileID: 2800000, guid: 07e95190c9115015990e534d6b5a76cc, type: 3} + - {fileID: 2800000, guid: 45444296d1134d016ba2e9b6668752a9, type: 3} + - {fileID: 2800000, guid: 2998861db761580678b44daf33af38b4, type: 3} + - {fileID: 2800000, guid: 8cec23edbbd2c469682ca9ec4cbec9a9, type: 3} + - {fileID: 2800000, guid: 1d23092ddccf645219286dd346c89604, type: 3} + - {fileID: 2800000, guid: 2083c331c3e0e810694c7c8860371c48, type: 3} + - {fileID: 2800000, guid: 4b7bfc67fb8a14705bd3611b29130ce3, type: 3} + - {fileID: 2800000, guid: 9e359b531b107bf37aa6e4f3df08d300, type: 3} + - {fileID: 2800000, guid: 80db4effcc199d872a3da8436a78c58d, type: 3} + - {fileID: 2800000, guid: 85d6a82043bc966b8990c14da05c148e, type: 3} + - {fileID: 2800000, guid: 7f590f9b699d83140a84c5574dab3d39, type: 3} + - {fileID: 2800000, guid: 47ad1bead5252c92d840e4ebacc0540b, type: 3} + - {fileID: 2800000, guid: cc207009b2afc6ba7abeac568c8917df, type: 3} + - {fileID: 2800000, guid: 8c4f8c558f1e9b99bb4be1ba88ec8dad, type: 3} + - {fileID: 2800000, guid: faf04a8c261844e9db743a0cf2d731cd, type: 3} + - {fileID: 2800000, guid: 578c224320017de8a84379452f1ca231, type: 3} + - {fileID: 2800000, guid: 282c9613da3980702a2c0daeb9ba0bfa, type: 3} + - {fileID: 2800000, guid: d3112b0dd75646391a66bcff0b6ed05d, type: 3} + - {fileID: 2800000, guid: 5de36759b8ee98525ba73d18914315b3, type: 3} + - {fileID: 2800000, guid: 03525ff13fd626578b5bc7f6275bf3dd, type: 3} + - {fileID: 2800000, guid: 047d55b6c222e3d068183678d3027d7a, type: 3} + - {fileID: 2800000, guid: 05c0df2616d6e2e9390aad50ddeb21b1, type: 3} + - {fileID: 2800000, guid: 36ea701974c9fac79b571aca662dbc22, type: 3} + - {fileID: 2800000, guid: ae4131e8bccee5e848a43f92e75f7d55, type: 3} + - {fileID: 2800000, guid: a6f05734b7b843a339342298ccb24b36, type: 3} + - {fileID: 2800000, guid: f8671588dab50a611bcb50d861c0d2f4, type: 3} + - {fileID: 2800000, guid: 27eebcc4579a2a854a276e8f2dc9c8fd, type: 3} + - {fileID: 2800000, guid: f21472ccfd0b38189978d3a4048ece1f, type: 3} + - {fileID: 2800000, guid: b61e4370a1cadab99b3f80d30f2b03ba, type: 3} + - {fileID: 2800000, guid: 4412fab0751949df7a229778a07a0f9a, type: 3} + - {fileID: 2800000, guid: 176172bdb6a30628a98564ccf6e72a0e, type: 3} + - {fileID: 2800000, guid: 49865d307e9b5e089a7ad9e73dfff3d8, type: 3} + - {fileID: 2800000, guid: 827b6052ee8118888b044bb1ab5e7096, type: 3} + - {fileID: 2800000, guid: 540a8a976f18e69f3a9a06040aebc161, type: 3} + - {fileID: 2800000, guid: eae9a8a283bc667a6874a02e91c00111, type: 3} + - {fileID: 2800000, guid: b7f911f6aa6afbefc8eff3e46534edfd, type: 3} + - {fileID: 2800000, guid: 195f7dc375e8e5f3eaad22e8f0cfbc3a, type: 3} + - {fileID: 2800000, guid: a9ee3302df0f4dbe386bdb37fb71a6f8, type: 3} + - {fileID: 2800000, guid: 6ff729031023d8c7dbc9c12ee68b41d3, type: 3} + - {fileID: 2800000, guid: 5fd1ade951922db86a3bb2d856db4651, type: 3} + - {fileID: 2800000, guid: 98f3f1b5e7f2f9148a41ff1976c1041a, type: 3} + - {fileID: 2800000, guid: 1bc91030077ad5bb7aebe62d9e32c637, type: 3} + - {fileID: 2800000, guid: 12dd78c76e397ba2199898d82e088ef9, type: 3} + - {fileID: 2800000, guid: be824cdd618ba7b49a77c7a849918415, type: 3} + - {fileID: 2800000, guid: 620e73dae9743133aafbbba50198e2b4, type: 3} + - {fileID: 2800000, guid: 3866a095b85fc80ff944b477fe522184, type: 3} + - {fileID: 2800000, guid: 01c66224279e195d3a427d8fbcb53312, type: 3} + - {fileID: 2800000, guid: 115f4005a1c548a0595913b4bb27760f, type: 3} + - {fileID: 2800000, guid: bddbcb78ab540ffaca4fea86861a793a, type: 3} + - {fileID: 2800000, guid: 4a287a1cfb2d75ced865543fc2537cde, type: 3} + - {fileID: 2800000, guid: 29838801612d81246a7123b99bf388f4, type: 3} + - {fileID: 2800000, guid: 272d59e14db399a96808d119b60166f9, type: 3} + - {fileID: 2800000, guid: 7b740df220e94cc7cac34a10b319eeea, type: 3} + - {fileID: 2800000, guid: ea69ea3075c22cb5f9e37ab795f1a11a, type: 3} + - {fileID: 2800000, guid: 236f676df38dc9c95b85b8eda647a1fa, type: 3} + - {fileID: 2800000, guid: dd0ccbec514ab94b38805503703909c4, type: 3} + - {fileID: 2800000, guid: 068020469f3b0dd0095bf5597140f9d5, type: 3} + - {fileID: 2800000, guid: cc64aa92b777d61a3b1a2f9c6ebb8ec6, type: 3} + - {fileID: 2800000, guid: 19c0f0714a7731ddc8ca6b1871008a8a, type: 3} + - {fileID: 2800000, guid: 71afca7c11b144189b314a5b2a514ed5, type: 3} + - {fileID: 2800000, guid: b40283dfe60350c5c89d9a9ce1c8d94b, type: 3} + - {fileID: 2800000, guid: eb8db98838f086dfb9cca8a78224f222, type: 3} + - {fileID: 2800000, guid: bf037247bed3e89c59ad845e65afe2db, type: 3} + - {fileID: 2800000, guid: 0e5a3c0f67fba18429a572beaa1f1112, type: 3} + - {fileID: 2800000, guid: dccb01cc63b4c61538a7c4081075e7e2, type: 3} + - {fileID: 2800000, guid: 7d071c762e2b7c45b9648b7b2b9c2ab6, type: 3} + - {fileID: 2800000, guid: 9db49870869b0be6bb2ad4b19b71fd66, type: 3} + - {fileID: 2800000, guid: 83f454b21c8c5d0ca96fff6b32d53082, type: 3} + - {fileID: 2800000, guid: 49bee3922bdb3c746b8d1ce0846791c3, type: 3} + - {fileID: 2800000, guid: 41855a2efd741d8bb9e37d8bf34bb8f4, type: 3} + - {fileID: 2800000, guid: 220262786a06bf5b4a5bfd4bc45c7e6a, type: 3} + - {fileID: 2800000, guid: 286c6701a7a66ee77928dd7358ce88fa, type: 3} + - {fileID: 2800000, guid: 02d6c690dc3649442b8968f9343a2877, type: 3} + - {fileID: 2800000, guid: ef5cded1587408affa11a615af830933, type: 3} + - {fileID: 2800000, guid: 349c1204da21568b7af8789b5c7226b0, type: 3} + - {fileID: 2800000, guid: b3c9745444e1725d0bb4a5051721c1a4, type: 3} + - {fileID: 2800000, guid: d49f3c33f441bfedba3ce7c5f8ddb56f, type: 3} + - {fileID: 2800000, guid: 89b5e7ad4f5712cd0849ae677f8857e5, type: 3} + - {fileID: 2800000, guid: a3abff674cfe6a1a4a52ec38ad73e017, type: 3} + - {fileID: 2800000, guid: bad7baaf5f575ec688892fe9becd24e9, type: 3} + - {fileID: 2800000, guid: daca5af317c38a874b9d0927986fdbaf, type: 3} + - {fileID: 2800000, guid: 7bdef68ef7f0d11d19134b5201288a03, type: 3} + - {fileID: 2800000, guid: 7e3dd37a886526e9ca4ceda152d721e6, type: 3} + - {fileID: 2800000, guid: be939f72a8df3aba6b1b2b740b714bab, type: 3} + - {fileID: 2800000, guid: c675c6456cfb790e3a99e723b810d682, type: 3} + - {fileID: 2800000, guid: dd4ec8e154108b340993fc58b311ee5c, type: 3} + - {fileID: 2800000, guid: 75fad3cbcb32c0f34b895f3c83e27267, type: 3} + - {fileID: 2800000, guid: cb071372526ae797681a126149b18395, type: 3} + - {fileID: 2800000, guid: f943025f09be3e97bb855d26ecb08abf, type: 3} + - {fileID: 2800000, guid: 8ec58df08e9810963b419d1ad7d849a1, type: 3} + - {fileID: 2800000, guid: bdda667d6103d42b0a4da5bd3555b156, type: 3} + - {fileID: 2800000, guid: e5421f7863977ec5e9d511152eb2f1ee, type: 3} + - {fileID: 2800000, guid: ba132c0ec4acb878e8c8bac520cfcfb4, type: 3} + - {fileID: 2800000, guid: fb3d24ab117b2436b8e8b8364527b3fc, type: 3} + - {fileID: 2800000, guid: 72f9843606654c5158f760a23010bbe3, type: 3} + - {fileID: 2800000, guid: 4501d2917423d6e28989c8733f439d1d, type: 3} + - {fileID: 2800000, guid: c213700a160dfb7e698d0a4bd1c16cca, type: 3} + - {fileID: 2800000, guid: 8f6d1d53bf434fc2b9f302e96fefa920, type: 3} + - {fileID: 2800000, guid: b4e8749b47629943b9918dba81f206e7, type: 3} + - {fileID: 2800000, guid: 943c0dbf1c0f7860b872afd634ddd921, type: 3} + - {fileID: 2800000, guid: 2de9a2f6e0a621658bddc6ae37277e61, type: 3} + - {fileID: 2800000, guid: 372a00d27cff788e2be7a846a7ce3d94, type: 3} + - {fileID: 2800000, guid: 90cc8e1643e7646b0aff80187036e675, type: 3} + - {fileID: 2800000, guid: 76561c0759203f5f4b016c3309b34971, type: 3} + - {fileID: 2800000, guid: 85e850c67eecf81029d3fc200aec134b, type: 3} + - {fileID: 2800000, guid: 031e604f1a1f18b8eac6bd0fbd8f5aac, type: 3} + - {fileID: 2800000, guid: edf89690bab71ed85a8c476a09f92f34, type: 3} + - {fileID: 2800000, guid: f4ff0a60310ea1085912b208fd022f75, type: 3} + - {fileID: 2800000, guid: 9e7f9a6575f94e107b73c18d3b00e2e1, type: 3} + - {fileID: 2800000, guid: 02aa12704b39a122f89b28b149907c57, type: 3} + - {fileID: 2800000, guid: 6adddbf76d66cc981aafe878d28c84ac, type: 3} + - {fileID: 2800000, guid: f2c698b5e5b4991beb6f03145d755bdc, type: 3} + - {fileID: 2800000, guid: 852bd4dd411d5f6a2b040b06e88bcd70, type: 3} + - {fileID: 2800000, guid: f5513b7bccf06cfb69d719d52a6ab6fb, type: 3} + - {fileID: 2800000, guid: df54d5095508a6f13a537c9cf04cb7b2, type: 3} + - {fileID: 2800000, guid: 03e13715364505a17a41ecaedcee06f1, type: 3} + - {fileID: 2800000, guid: f81fb26d564504e46ae15b4db749bbcc, type: 3} + - {fileID: 2800000, guid: ae3a59541443a390eab560579710e056, type: 3} + - {fileID: 2800000, guid: 1c47c6d8111cc2551b932b21797f2a70, type: 3} + - {fileID: 2800000, guid: ed14689e6b1319ad4a2eb6951d8b5694, type: 3} + - {fileID: 2800000, guid: 298863293e70971caa7a507cb2c22c3a, type: 3} + - {fileID: 2800000, guid: 9d25695879b19dc8191cf066f4a1e14d, type: 3} + - {fileID: 2800000, guid: f8a9923eed02867abac717fb865c99b9, type: 3} + - {fileID: 2800000, guid: 679cbc431e17342d6abd3e6e710f403b, type: 3} + - {fileID: 2800000, guid: 87f1ee9ddd1bbe01d826928e753b93c7, type: 3} + - {fileID: 2800000, guid: 7767585d3405da89190773b3b6fd52a8, type: 3} + - {fileID: 2800000, guid: 6963de4700f50368fa20506034b5f72a, type: 3} + - {fileID: 2800000, guid: c109b3fb4a017fbbf8b6fc5967f923dc, type: 3} + - {fileID: 2800000, guid: cbd4aeea5fa1b9daa9d84e34fb3647a1, type: 3} + - {fileID: 2800000, guid: 0ea4f06e668a633978f69d4f873890d4, type: 3} + - {fileID: 2800000, guid: 3789dc1d4bf6e97f7918608cce9c519c, type: 3} + - {fileID: 2800000, guid: dbed6a4725cf14074b3c5bc8761288be, type: 3} + - {fileID: 2800000, guid: d995999a0938546df825fc4f866d6ee5, type: 3} + - {fileID: 2800000, guid: 89930dd31b46377cabd06a94037cb912, type: 3} + - {fileID: 2800000, guid: 2662b3d989f8131c9938188bef17cd74, type: 3} + - {fileID: 2800000, guid: 157409304f5409e44ba99bafcd75e4e5, type: 3} + - {fileID: 2800000, guid: b89356fd67876131a9e2e45281d62990, type: 3} + - {fileID: 2800000, guid: 0c4adcff786a8bf549b64db0b9d34b19, type: 3} + - {fileID: 2800000, guid: 9c06dc309a27bd99d842df13c4f95910, type: 3} + - {fileID: 2800000, guid: f9c76396a250a3b2c819f33f8df1dfe5, type: 3} + - {fileID: 2800000, guid: c1245f48df41d1f73ad55a070ff8016c, type: 3} + - {fileID: 2800000, guid: c80dbd8e69b86ff7e8b86e52d8febc76, type: 3} + - {fileID: 2800000, guid: 84c02a151d793ca9cb7ca6b8bd6e5e3b, type: 3} + - {fileID: 2800000, guid: 3ac7462f1200f9479ae7519aee68a553, type: 3} + - {fileID: 2800000, guid: 2856a04ea2fe81866b03efa6176a27b8, type: 3} + - {fileID: 2800000, guid: 8e4e3ec31ed3d2392b0d9c8047eb6961, type: 3} + - {fileID: 2800000, guid: aecd175309d294fcb8c37498946518a2, type: 3} + - {fileID: 2800000, guid: f794ca19773df0719b21817ad4b2b078, type: 3} + - {fileID: 2800000, guid: 26d6f147dfc92ed12aaca0a7d27d584a, type: 3} + - {fileID: 2800000, guid: 2aace7b244eb27222b9370e00ebb1b48, type: 3} + - {fileID: 2800000, guid: e0a57495cff407ee9a13d89d34ffae0d, type: 3} + - {fileID: 2800000, guid: a785e13ba4eed7fd5b889cf68a27e58e, type: 3} + - {fileID: 2800000, guid: 15a32c9ad9e9df997b3205ab7adc081a, type: 3} + - {fileID: 2800000, guid: 47b78291ab7045c6c9ad4275a68ce60f, type: 3} + - {fileID: 2800000, guid: 8cef7caadf55266679191e719d62a419, type: 3} + - {fileID: 2800000, guid: 68bbee40b5bc7507fa3832b6cfc1f9ba, type: 3} + - {fileID: 2800000, guid: 280bcdad195bf14168276536c2afd703, type: 3} + - {fileID: 2800000, guid: 1040a1f0e4b8046e28114563ef12729e, type: 3} + - {fileID: 2800000, guid: 7da02c63abdea34debe24724fdfdc829, type: 3} + - {fileID: 2800000, guid: bebee34bbe79a67b6ae58845f010e00a, type: 3} + - {fileID: 2800000, guid: 657cc23e711ca100c94d77614a9a1a6c, type: 3} + - {fileID: 2800000, guid: 150d2334953b6f59f82498d33502ea6f, type: 3} + - {fileID: 2800000, guid: f86dbc324d5c78301906f64773a7443f, type: 3} + - {fileID: 2800000, guid: e75b64e870862d3b48bf0bcb7abb5fc6, type: 3} + - {fileID: 2800000, guid: 20e13a7d1a6c117fc9d644cc0ffddad0, type: 3} + - {fileID: 2800000, guid: 9438132c0617c6bbc95cda456e2cc973, type: 3} + - {fileID: 2800000, guid: 79429f979bdb6c1a8bf0f7b9305652a4, type: 3} + - {fileID: 2800000, guid: c4d284af9cc67fe60aaa09d0c6bdcfc6, type: 3} + - {fileID: 2800000, guid: 2f9b567d3f611220db97c6a8724f1c00, type: 3} + - {fileID: 2800000, guid: 4e7719afbc07d00f6ae55491521fa261, type: 3} + - {fileID: 2800000, guid: 35a85776e55256cfa96e4efca55860e8, type: 3} + - {fileID: 2800000, guid: bd1aae54de330709f81ce487987b8d2c, type: 3} + - {fileID: 2800000, guid: 0723c22d38c92d3cf8f7e9dca0dfdfac, type: 3} + - {fileID: 2800000, guid: 799e1f97ea4509e24b63ec01a0c8ef53, type: 3} + - {fileID: 2800000, guid: 37665b3cf8f6c2f688f863e085cc96fc, type: 3} + - {fileID: 2800000, guid: 83da787a05efbdbaca86d211ddd67a09, type: 3} + - {fileID: 2800000, guid: c9cf3da08eaae8e7d95cc9406598effa, type: 3} + - {fileID: 2800000, guid: 927bc5a30638e8131a81cd3d5ff83388, type: 3} + - {fileID: 2800000, guid: 5248907572899d21d8191f1216ef9a53, type: 3} + - {fileID: 2800000, guid: d5c7a9e2901cc50f6bb5c8d505cfca72, type: 3} + - {fileID: 2800000, guid: c64192ad9a2db6cc9b77303f5fb5d03b, type: 3} + - {fileID: 2800000, guid: c83b5112d93d973b4b4cf2b579ee4228, type: 3} + - {fileID: 2800000, guid: c84a12e0eeb79b3798914965a151163f, type: 3} + - {fileID: 2800000, guid: e3ac760f7d9b9b8489db31eb586a1254, type: 3} + - {fileID: 2800000, guid: 522a9db8885cb2e08a647fd2d18daa56, type: 3} + - {fileID: 2800000, guid: 70694232e6013737eaad624e70c9f77d, type: 3} + - {fileID: 2800000, guid: 14cbce0d25637fb38a866d9e1be4262c, type: 3} + - {fileID: 2800000, guid: 80ce9d777010e15f4a0a3dfa924641f7, type: 3} + - {fileID: 2800000, guid: f6e7517c3b94602c79702e0fec00b0c2, type: 3} + - {fileID: 2800000, guid: 625e18044577a30bbb2060055857f742, type: 3} + - {fileID: 2800000, guid: 9fc089b69065b7807aa9c086e391007b, type: 3} + - {fileID: 2800000, guid: 3e4345c1e72ed4ec2b28a92c67ab4e57, type: 3} + - {fileID: 2800000, guid: 50b6aa8cc7e355966bcaecf733e99af2, type: 3} + - {fileID: 2800000, guid: 08a20c4bab446a4748df70e717cac3d1, type: 3} + - {fileID: 2800000, guid: c711d18a15318dee398327fa86655d75, type: 3} + - {fileID: 2800000, guid: f1b33071530ef693ba3f5e709e38e7af, type: 3} + - {fileID: 2800000, guid: a748ba4f29cb382b28f75da9a76cab49, type: 3} + - {fileID: 2800000, guid: 3c80a9c3ee4425399a41e42accf9580e, type: 3} + - {fileID: 2800000, guid: f0f45bc034f01cd0e8bbaffd2842d431, type: 3} + - {fileID: 2800000, guid: 3dcd625b3266890b5bb92bab551d1a0c, type: 3} + - {fileID: 2800000, guid: 6dd42e347f2983036b8c97e15999c90d, type: 3} + - {fileID: 2800000, guid: da2f14188576a1575bb20f5afee54919, type: 3} + - {fileID: 2800000, guid: ae20ecf1ce68849b3bdb3cd92cbe39ea, type: 3} + - {fileID: 2800000, guid: 8a57521c684f7ac3488f90cbc39d5fd8, type: 3} + - {fileID: 2800000, guid: f1577976faeb79461a7a9a79190b6b4b, type: 3} + - {fileID: 2800000, guid: 594155866fdbee1b58696ab68d1959a6, type: 3} + - {fileID: 2800000, guid: 3a1d4aaac08c16e6bbd682137d125f7f, type: 3} + - {fileID: 2800000, guid: 34fd05b7d89511b11aca0296b43c5873, type: 3} + - {fileID: 2800000, guid: f38a2dac9dd5e9b5fa3b3b73901b53e2, type: 3} + - {fileID: 2800000, guid: 0a779f173dc9028d3b660a2779c2e91f, type: 3} + - {fileID: 2800000, guid: 371006b48caca779aa7ba96ea35c066e, type: 3} + - {fileID: 2800000, guid: c1b204da6f89d2ceeb74b3fd6b0029f3, type: 3} + - {fileID: 2800000, guid: 394d62399240c431981b94616449179b, type: 3} + - {fileID: 2800000, guid: 7bd465c185f684f618e56d439bf20310, type: 3} + - {fileID: 2800000, guid: dd1e5afaed96bb38ebf0d1503c5a0d58, type: 3} + - {fileID: 2800000, guid: da71bf5055b765d5ebbefd0bb5eb120b, type: 3} + - {fileID: 2800000, guid: d819abd6cb3c8d382ae411ccd52ef717, type: 3} + - {fileID: 2800000, guid: 60320f8c78cd07d8595f05bc8ab83b54, type: 3} + - {fileID: 2800000, guid: b08721c0ae90d870398ad3b47d48a029, type: 3} + - {fileID: 2800000, guid: db4674d06aefae26899b734c571bdd20, type: 3} + - {fileID: 2800000, guid: f1f598436e883a103be05287bde4c979, type: 3} + - {fileID: 2800000, guid: 09a8399ecfbca64f4931a64a49b75f1d, type: 3} + - {fileID: 2800000, guid: 03ca744af66a0d60295e4d2f74907888, type: 3} + - {fileID: 2800000, guid: b4218311ddd285291b4b3f7c9305e877, type: 3} + - {fileID: 2800000, guid: 9ceb5f6af095095f0bd2c9fa26fa69aa, type: 3} + - {fileID: 2800000, guid: f0f4e91a21221b6d9906a08958128f78, type: 3} + - {fileID: 2800000, guid: 240ed44db69e3bb8ca850704e6da2c60, type: 3} + - {fileID: 2800000, guid: 402163db87c4ad9a796dfab615fa5187, type: 3} + - {fileID: 2800000, guid: 5643eb5762f0c7e009b727b180038cec, type: 3} + - {fileID: 2800000, guid: 8a8215a4bfb1ab4a78e589c2c636f53a, type: 3} + - {fileID: 2800000, guid: 7cb08806ee1a9941c99ab1af0b1f702a, type: 3} + - {fileID: 2800000, guid: 40001f285675ebb57824ecc7f96b9d1e, type: 3} + - {fileID: 2800000, guid: 08b722beefc1e824296b85c484c99106, type: 3} + - {fileID: 2800000, guid: 0b51f1891a3844aad9855232d2b727f8, type: 3} + - {fileID: 2800000, guid: 6ed40afe83287716bbddd9866586a247, type: 3} + - {fileID: 2800000, guid: 844d8099313e3b44bb89342cd303c05e, type: 3} + - {fileID: 2800000, guid: 042197a3765c901edbd135f32ff4a5bb, type: 3} + - {fileID: 2800000, guid: bc1a34949777ec6e8a225d14fb0d9982, type: 3} + - {fileID: 2800000, guid: e91608c78c4a069eeab1841009f22b7e, type: 3} + - {fileID: 2800000, guid: 96e21489d4f9be4759b6b353d0c03834, type: 3} + - {fileID: 2800000, guid: 2705022dc8ca91af99710941262982f4, type: 3} + - {fileID: 2800000, guid: 538fb5f9e9a5118aa9cb9ac3fa289173, type: 3} + - {fileID: 2800000, guid: 92e43c775ef242557b60a142124fdefd, type: 3} + - {fileID: 2800000, guid: 3fb5232b7511d16cd9a94c2385c28328, type: 3} + - {fileID: 2800000, guid: f2215f2af883c4c89a9484a945ce159d, type: 3} + - {fileID: 2800000, guid: b39ff33d39b2a5e30b82786e83b42e0b, type: 3} + - {fileID: 2800000, guid: e3a883c999c21d37bba4ecca19f67de0, type: 3} + - {fileID: 2800000, guid: f0d76e65ea629aca29a3ce2793872f7c, type: 3} + - {fileID: 2800000, guid: dcb6992a665b0e742ab2fc45232a8a00, type: 3} + - {fileID: 2800000, guid: 9e666096a25af0b229d04b6048688434, type: 3} + - {fileID: 2800000, guid: a21932911d1435f44bb0b29e3fcc05ee, type: 3} + - {fileID: 2800000, guid: 2dabffbe5b3377e34abe2bf85799de7e, type: 3} + - {fileID: 2800000, guid: 07682d1f469efb67c97cc4e61ddd1e5e, type: 3} + - {fileID: 2800000, guid: b1625608abb081902ab56610a41028ae, type: 3} + - {fileID: 2800000, guid: ff7be7341f122fa8682c879b23c0a034, type: 3} + - {fileID: 2800000, guid: 3ea8d75f410cb9ee3b74c819ca2a4f28, type: 3} + - {fileID: 2800000, guid: 38a07cb9f82ec6bae8d9a285565bcef7, type: 3} + - {fileID: 2800000, guid: 90b3cdcd782c86019afe6ac15063bf60, type: 3} + - {fileID: 2800000, guid: 0a142cb35a0c8ed6697be164e0aea899, type: 3} + - {fileID: 2800000, guid: ed77c60be946aab9ab0d9b829b59da6e, type: 3} + - {fileID: 2800000, guid: 53cdca53a80caedfd87e43b1f89beb19, type: 3} + - {fileID: 2800000, guid: 9f290a2c7b4f5e9698a7555dde3d341b, type: 3} + - {fileID: 2800000, guid: 668a2b77b6aa4b136ab1f4f49d57c30e, type: 3} + - {fileID: 2800000, guid: 0200f220cf51c569ab8bff1a1238e62a, type: 3} + - {fileID: 2800000, guid: c49ba38d244afbea785efd2f6770e742, type: 3} + - {fileID: 2800000, guid: c6a23892aa60d4a79b723b77e8bd223a, type: 3} + - {fileID: 2800000, guid: cc552c3984968a18ba818cf67f0438ad, type: 3} + - {fileID: 2800000, guid: e520e6b5252ce4990989866b2d2fc267, type: 3} + - {fileID: 2800000, guid: bb27b7d541778c2b581d29047e109315, type: 3} + - {fileID: 2800000, guid: 1df4157d8f2f0d62e971e10f34601b96, type: 3} + - {fileID: 2800000, guid: 363e3c4313095259ca7c785910845e47, type: 3} + - {fileID: 2800000, guid: 505661f5ec2db06e481d81d46ad33e31, type: 3} + - {fileID: 2800000, guid: 29c413ff81c64174f870d0cc56d1906c, type: 3} + - {fileID: 2800000, guid: aec8923bb3249b75cb00a23f9c9c64d7, type: 3} + - {fileID: 2800000, guid: 75457f288a672cf1c88bc4cbd862f07f, type: 3} + - {fileID: 2800000, guid: 7d1826fc5a9d913c2979e4a18d1ebf49, type: 3} + - {fileID: 2800000, guid: 9a6ac4f441a859243917f0c2b60a1b76, type: 3} + - {fileID: 2800000, guid: adb32ed485dd9c3ab97a914fbc3f14e1, type: 3} + - {fileID: 2800000, guid: 237212243311fefaaac51f694da3f378, type: 3} + - {fileID: 2800000, guid: 6b58c6cc1837ddb1c9e63d7082d14497, type: 3} + - {fileID: 2800000, guid: 3866da1dc464c112dbb672dbcac83d4e, type: 3} + - {fileID: 2800000, guid: bc770fe5f747d1d92a897eb1e11c9236, type: 3} + - {fileID: 2800000, guid: f9caabebbb98278cf9e337feed33f72c, type: 3} + - {fileID: 2800000, guid: a51aac9a98ad9a5f5a18c538393b688b, type: 3} + - {fileID: 2800000, guid: 8a51ab44422fc7ff787184896353fd51, type: 3} + - {fileID: 2800000, guid: 0757c518daa59a990b2958143b96f1da, type: 3} + - {fileID: 2800000, guid: 59e7a8fcbf9252c1d9c2c51743188572, type: 3} + - {fileID: 2800000, guid: c9d2abbb1e1a5ee84aa4b4e187939fdf, type: 3} + - {fileID: 2800000, guid: 69d3547963c6c0439be165072fbd0544, type: 3} + - {fileID: 2800000, guid: 367f74af1c95d7da18f381d6bd6f55fa, type: 3} + - {fileID: 2800000, guid: db0fc6a606f189d25abc2d18ae611318, type: 3} + - {fileID: 2800000, guid: 967f5dc8c8a9b5161aef7c67510384f7, type: 3} + - {fileID: 2800000, guid: a2ee50c5cd09731edae4a48a9eb0cb69, type: 3} + - {fileID: 2800000, guid: aa3dbb5e1be0758b0b60492480ea1043, type: 3} + - {fileID: 2800000, guid: 1ad0c1f0578ae3f04ac8f7dedae0734d, type: 3} + - {fileID: 2800000, guid: f8069ab3f8a1e21c2a6b720dd28890cb, type: 3} + - {fileID: 2800000, guid: b3a24dccc4baf9d7bb292e09a682a506, type: 3} + - {fileID: 2800000, guid: 8a352bd099c57fd8690740904e01ca8b, type: 3} + - {fileID: 2800000, guid: a4b3c1724a8b83015b8f09a3334e362e, type: 3} + - {fileID: 2800000, guid: e5553642ee43b41f2af23ac49f81c11b, type: 3} + - {fileID: 2800000, guid: 1226bef867bdfa72e9a302273ff3aa32, type: 3} + - {fileID: 2800000, guid: dcba487f02aa9aea1a18e2dd058690fa, type: 3} + - {fileID: 2800000, guid: fb4610d75993a1e9eb0809734352f33d, type: 3} + - {fileID: 2800000, guid: 0778d65a9d4d4fae98a24d95202b8e37, type: 3} + - {fileID: 2800000, guid: 80de77ab384b966f5a8411e07c39f583, type: 3} + - {fileID: 2800000, guid: 966254d3ee043368da463e20dde06e6c, type: 3} + - {fileID: 2800000, guid: 60e0482d8801caeccb1c177d96da7112, type: 3} + - {fileID: 2800000, guid: 3736113d9c1079d76a352b42cfec258b, type: 3} + - {fileID: 2800000, guid: e782000eef4ec55209ea7c39a77bccdb, type: 3} + - {fileID: 2800000, guid: 56b3e6c520f57de96a3d8c03225c768e, type: 3} + - {fileID: 2800000, guid: 85e7ff5caa604f1e198a3d79c512b414, type: 3} + - {fileID: 2800000, guid: 39a987f708208fe3ea4b3643f323a3c2, type: 3} + - {fileID: 2800000, guid: 9299d279e456f39638e64d04c67028db, type: 3} + - {fileID: 2800000, guid: 4252d964cad2a14da91e9573a393d4a9, type: 3} + - {fileID: 2800000, guid: 25b96553917a42036b7cb88c433bcfb3, type: 3} + - {fileID: 2800000, guid: 21331faba3758ffa4818ad93850f167e, type: 3} + - {fileID: 2800000, guid: 5062b34df3af719b8bc9a245515412cb, type: 3} + - {fileID: 2800000, guid: a975721b38587e7bb920a27b6c0f5910, type: 3} + - {fileID: 2800000, guid: 9ece58a87aba5c10e9d4e16eb5283a84, type: 3} + - {fileID: 2800000, guid: 20dc4edea8bd051c38c0635d42df3d18, type: 3} + - {fileID: 2800000, guid: 1ccb49a4292bf5d0ea5f8686a5f1c467, type: 3} + - {fileID: 2800000, guid: 6e7d1d99c6d2ae96ab060064f2110a05, type: 3} + - {fileID: 2800000, guid: a3299d740e6506f768ae62a34cdaf5a6, type: 3} + load_from_resources_if_empty: 1 + _texture: {fileID: 0} + _renderer: {fileID: 2302102554894629329} + use_shared: 0 + _last_sample: 0 + load_path: Textures +--- !u!136 &3674649710580244811 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Runtime/Prefabs/Obstructions/ObstructionCapsule.prefab.meta b/Runtime/Prefabs/Obstructions/ObstructionCapsule.prefab.meta new file mode 100644 index 000000000..440f1b3a3 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionCapsule.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7a0670a824381b505bc2a57bae32d625 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Obstructions/ObstructionCube.prefab b/Runtime/Prefabs/Obstructions/ObstructionCube.prefab new file mode 100644 index 000000000..55166b1b4 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionCube.prefab @@ -0,0 +1,654 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2302102554894629341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2302102554894629331} + - component: {fileID: 2302102554894629330} + - component: {fileID: 2302102554894629329} + - component: {fileID: 2302102554894629328} + - component: {fileID: 2302102554894629343} + - component: {fileID: 2302102554894629342} + - component: {fileID: 2302102554894629332} + m_Layer: 10 + m_Name: ObstructionCube + m_TagString: b + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2302102554894629331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.1437268, y: 3.4423447, z: -12.843082} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2302102554894629330 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2302102554894629329 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e7bc9ae29014cf4c9aa3e8a67cbb43da, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &2302102554894629328 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2302102554894629343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 429eddc2e17c50341b357a1de655ebf6, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 2 + _tiling_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _offset_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _color_space: + _space: + _min_: {x: 0.2, y: 0.2, z: 0.2, w: 0.2} + _max_: {x: 0.8, y: 0.8, z: 0.8, w: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _smoothness_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _reflection_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _use_shared: 0 +--- !u!114 &2302102554894629342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a22c41a371cb5014b955705c804c74aa, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _space: + _space: + _min_: {x: 0, y: 0, z: 0} + _max_: {x: 1, y: 1, z: 1} + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 +--- !u!114 &2302102554894629332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de609666bdf4489dbac2a6e84eaeb992, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _textures: + - {fileID: 2800000, guid: 5f599c75d7d2d3f2397e633a0a2cad10, type: 3} + - {fileID: 2800000, guid: 35997aa1fb9073cd5956b28c2f1733f1, type: 3} + - {fileID: 2800000, guid: 64e18793722966d539352fece171aca4, type: 3} + - {fileID: 2800000, guid: f2ab9b3b5d1f72ad98d471682b8cf7c9, type: 3} + - {fileID: 2800000, guid: 0d17962e11d952709b3e26b3ff68a395, type: 3} + - {fileID: 2800000, guid: 9fb9470f3fd529bd39417c7faa9774a7, type: 3} + - {fileID: 2800000, guid: 84e88be29a33c876782d228a08469e9e, type: 3} + - {fileID: 2800000, guid: b3d79c300971ed5068f42dbb851fdb91, type: 3} + - {fileID: 2800000, guid: 1f775d15cc88244adbf47cd8c28560b7, type: 3} + - {fileID: 2800000, guid: 242c691845e32213aa72d268bf8c3afc, type: 3} + - {fileID: 2800000, guid: f978018f756d0e8d69eab173e1c5e26e, type: 3} + - {fileID: 2800000, guid: b331e7a9d4c32f44b91437ea7a6392a3, type: 3} + - {fileID: 2800000, guid: 21d14a05f13516581b7a821bd7327c2c, type: 3} + - {fileID: 2800000, guid: abafbf2b15ebd8d3eb18e69c5af89423, type: 3} + - {fileID: 2800000, guid: c7d8a0f5affc52f0198dff2bc0d55bcc, type: 3} + - {fileID: 2800000, guid: b884fd7c59514a6e08465daab211eecc, type: 3} + - {fileID: 2800000, guid: d238841fc28268738bdb07634559baa8, type: 3} + - {fileID: 2800000, guid: 7ce3f4f3a46be893eb352aa8bc6757c5, type: 3} + - {fileID: 2800000, guid: 482ca8a197b1af65bbf8f5ec5db7b693, type: 3} + - {fileID: 2800000, guid: e9009b5738cfe13fc859c01cb6bebd3a, type: 3} + - {fileID: 2800000, guid: e72bbde12cfa52a1fbff62fb30bdad3c, type: 3} + - {fileID: 2800000, guid: 449c150033d2d373ca3fa6fb1c52d7aa, type: 3} + - {fileID: 2800000, guid: 322c8e42837226afb8e5f7218a22f615, type: 3} + - {fileID: 2800000, guid: c7b04f33dd1b448d8932320361d31781, type: 3} + - {fileID: 2800000, guid: f8a7d4b8268fa7676982e6f50e7366ec, type: 3} + - {fileID: 2800000, guid: 1a5bf1e28e1e70f86824301a1f8b52e5, type: 3} + - {fileID: 2800000, guid: 92cb44d88c40cfd338264568800a5c5f, type: 3} + - {fileID: 2800000, guid: d6fe8cd585a7fc088b45ea5a56563bd7, type: 3} + - {fileID: 2800000, guid: 93e5a176835fcfc9b8d742b4741aa5da, type: 3} + - {fileID: 2800000, guid: 349c4081e4aaa23658f4e8b0aa786a37, type: 3} + - {fileID: 2800000, guid: c4616dd426db89b73b327120c4f6bc54, type: 3} + - {fileID: 2800000, guid: fc57258ba0cbf96019b082db7f2a783a, type: 3} + - {fileID: 2800000, guid: 547405889a5c4d37188395e8763a7501, type: 3} + - {fileID: 2800000, guid: 744a73a1523db1fc7b167c88357a6252, type: 3} + - {fileID: 2800000, guid: c2a249280a347039ea24e702dc562703, type: 3} + - {fileID: 2800000, guid: 5ace4931437b72abca9fe986f35a16bc, type: 3} + - {fileID: 2800000, guid: 239842f75ff0d38f788d3f76b11cd71a, type: 3} + - {fileID: 2800000, guid: f11ab4af40b591ae0a197d3185ffdec5, type: 3} + - {fileID: 2800000, guid: 38ee90bfd9b48ebd19f991475b9bd374, type: 3} + - {fileID: 2800000, guid: 72a34f3f76339da6abac282de8138d87, type: 3} + - {fileID: 2800000, guid: 0b91faa29855e49808f8b5d44a396b4f, type: 3} + - {fileID: 2800000, guid: b167686af5d9f9d53ac3b2cc13db04c8, type: 3} + - {fileID: 2800000, guid: c0433e91a072738bb8adc6d22234c44a, type: 3} + - {fileID: 2800000, guid: 3f04f04af0c2105a6a202fee90911682, type: 3} + - {fileID: 2800000, guid: e2cc7b6f3a7ea7a58b933e42cb5ca640, type: 3} + - {fileID: 2800000, guid: 3afa4fc416e1e31c787db2cfbdaae3ea, type: 3} + - {fileID: 2800000, guid: 8018e57449252a678a62594d35626af8, type: 3} + - {fileID: 2800000, guid: e60a34c308361185c88aac528d680eb9, type: 3} + - {fileID: 2800000, guid: a15018ab9ac7f59668731a91c64a8e68, type: 3} + - {fileID: 2800000, guid: e78c3f43d704bd6a7ac44d6b5155cd57, type: 3} + - {fileID: 2800000, guid: 8e3d6cfd5c8b263aabf61c7baa0f2202, type: 3} + - {fileID: 2800000, guid: 5de3299c2b3108f778f1083cd300014f, type: 3} + - {fileID: 2800000, guid: cfcec2ca8476e43d18027f01a8bd2946, type: 3} + - {fileID: 2800000, guid: 8e0921fa566d6cf04ba0a96a62bd6245, type: 3} + - {fileID: 2800000, guid: a94988f60f214c656bf7f7024bf62e24, type: 3} + - {fileID: 2800000, guid: 63f05e96863c0cf19ab8f94c1c3c1559, type: 3} + - {fileID: 2800000, guid: 2e2fc84d890be4dcb9ca0b5f76634eee, type: 3} + - {fileID: 2800000, guid: bb2dc4d5af36e35e2bdd8959826900a5, type: 3} + - {fileID: 2800000, guid: 9de42e16ca0d5d779a4e1f429878e1a7, type: 3} + - {fileID: 2800000, guid: 59a99f906bb7070ddbb1d0b7ad9f1a5f, type: 3} + - {fileID: 2800000, guid: 9c8f9403db897b36585b670783df3ea8, type: 3} + - {fileID: 2800000, guid: d13d315f27fceba2dbf83afec85ac3a7, type: 3} + - {fileID: 2800000, guid: dea1cd11bf285cdc9942eee3dc6f161a, type: 3} + - {fileID: 2800000, guid: e7b9b905cc918a1bc8f2b2efad972505, type: 3} + - {fileID: 2800000, guid: 5c85e9cd3ec590d21874ffa8d6360a94, type: 3} + - {fileID: 2800000, guid: ce246d761b4ef5004be6ae07fc0db1a3, type: 3} + - {fileID: 2800000, guid: 2443f0fee7f3a80159c6633341f5f47d, type: 3} + - {fileID: 2800000, guid: b9cc471440a74400d98e2908420b88d2, type: 3} + - {fileID: 2800000, guid: a11bf7acb0668c9efafab0efa992a669, type: 3} + - {fileID: 2800000, guid: c2daaa1ac2f78fb0baddf28ad071ecf6, type: 3} + - {fileID: 2800000, guid: 51419fb9959103351925225870b4b4a9, type: 3} + - {fileID: 2800000, guid: 7edb149c74f886a1182eb4d8cd3989d4, type: 3} + - {fileID: 2800000, guid: d01b2f983c50eb7df9ea73506dbd8bc8, type: 3} + - {fileID: 2800000, guid: 5996ed09056f967b4b7f09f0b7bfcb54, type: 3} + - {fileID: 2800000, guid: 890ad4627790e6ed99c6fc658522a04f, type: 3} + - {fileID: 2800000, guid: 125180fb60693811b89970c31746ab99, type: 3} + - {fileID: 2800000, guid: a7bc4e666025adb67b3571b680b24c12, type: 3} + - {fileID: 2800000, guid: 15b8b31621fa8c8d797d19906412d090, type: 3} + - {fileID: 2800000, guid: 53241d4b28bdcf92588925ea85b953ec, type: 3} + - {fileID: 2800000, guid: 148abc0f11d542f308e7a85023ac7076, type: 3} + - {fileID: 2800000, guid: 33fe32ac3bfe2f7d3b5fad180e9e5d8d, type: 3} + - {fileID: 2800000, guid: ebfda5d01d6259d4db534bb12c5495c6, type: 3} + - {fileID: 2800000, guid: 8d0c527b34bd2635f8511c9e0ea201f4, type: 3} + - {fileID: 2800000, guid: ad00aa6df81675397857dd27656145cb, type: 3} + - {fileID: 2800000, guid: 6dd7e7a3f083d02148407eb88455d179, type: 3} + - {fileID: 2800000, guid: 0ba144e573c92f529ad708694edca4be, type: 3} + - {fileID: 2800000, guid: 7abd5a5900ef7042c94a9f1baea716c0, type: 3} + - {fileID: 2800000, guid: 220e2a7b82ffe4ca9b17de0d4e7fc57d, type: 3} + - {fileID: 2800000, guid: ddebf5771a8b33ca7a07ce719664f372, type: 3} + - {fileID: 2800000, guid: 50dbc1da7beebdc938cd6c8ecb3c7153, type: 3} + - {fileID: 2800000, guid: e84abad7ad3564e3590b8b0ed95893b6, type: 3} + - {fileID: 2800000, guid: 0a3d69b4b8182474ea9af5265dddde5c, type: 3} + - {fileID: 2800000, guid: b1d1b183a4d860b6d9d4d84fca5252f5, type: 3} + - {fileID: 2800000, guid: 698163fb7eeb500ef96ea7e79f4a4080, type: 3} + - {fileID: 2800000, guid: 7cff9f7095b86cac080c32361338d2e4, type: 3} + - {fileID: 2800000, guid: 4fa42e68235808872af68d503a05ec72, type: 3} + - {fileID: 2800000, guid: 44b0fe3be11aa3fc4a66d590464634c5, type: 3} + - {fileID: 2800000, guid: 381fd379b20851d8bafbf9f68b698b82, type: 3} + - {fileID: 2800000, guid: 5cbc170583d04417c9082b3e407c35f0, type: 3} + - {fileID: 2800000, guid: 8ca02a1d900fed08ea63f17fee4a5e66, type: 3} + - {fileID: 2800000, guid: 0b610d7abf4e9f0dc801f5eddbd16d59, type: 3} + - {fileID: 2800000, guid: 12cf492b4b8055da2a0beab8f1f60bea, type: 3} + - {fileID: 2800000, guid: c1bf0dbba7455ceb0acc4104aab91fd6, type: 3} + - {fileID: 2800000, guid: 31585c155dd6735cf9cc4a32a8f2962c, type: 3} + - {fileID: 2800000, guid: 9c7c9ffb62c4ed1c6b0ab14c0c2d58f4, type: 3} + - {fileID: 2800000, guid: 673933e3ae75fbd0bb858b41e7b9ac57, type: 3} + - {fileID: 2800000, guid: 29e10c7d78307302ab8fe96fc3c9ea7d, type: 3} + - {fileID: 2800000, guid: 5dc3d40006c2ef89dae46a999de6a4a3, type: 3} + - {fileID: 2800000, guid: 1d658835cedec7a38af140197779158f, type: 3} + - {fileID: 2800000, guid: 2786e79ec3be0b43d9f4cf58a3a9261f, type: 3} + - {fileID: 2800000, guid: c91454be3cebf185ab09aff353e6caad, type: 3} + - {fileID: 2800000, guid: d5d942b1c51d86ebba9fcf55728e89ce, type: 3} + - {fileID: 2800000, guid: c9e4963dc97837b28b416f991fe0402b, type: 3} + - {fileID: 2800000, guid: 38ba08b2806887c9ba61605bcb5f7e72, type: 3} + - {fileID: 2800000, guid: 07e95190c9115015990e534d6b5a76cc, type: 3} + - {fileID: 2800000, guid: 45444296d1134d016ba2e9b6668752a9, type: 3} + - {fileID: 2800000, guid: 2998861db761580678b44daf33af38b4, type: 3} + - {fileID: 2800000, guid: 8cec23edbbd2c469682ca9ec4cbec9a9, type: 3} + - {fileID: 2800000, guid: 1d23092ddccf645219286dd346c89604, type: 3} + - {fileID: 2800000, guid: 2083c331c3e0e810694c7c8860371c48, type: 3} + - {fileID: 2800000, guid: 4b7bfc67fb8a14705bd3611b29130ce3, type: 3} + - {fileID: 2800000, guid: 9e359b531b107bf37aa6e4f3df08d300, type: 3} + - {fileID: 2800000, guid: 80db4effcc199d872a3da8436a78c58d, type: 3} + - {fileID: 2800000, guid: 85d6a82043bc966b8990c14da05c148e, type: 3} + - {fileID: 2800000, guid: 7f590f9b699d83140a84c5574dab3d39, type: 3} + - {fileID: 2800000, guid: 47ad1bead5252c92d840e4ebacc0540b, type: 3} + - {fileID: 2800000, guid: cc207009b2afc6ba7abeac568c8917df, type: 3} + - {fileID: 2800000, guid: 8c4f8c558f1e9b99bb4be1ba88ec8dad, type: 3} + - {fileID: 2800000, guid: faf04a8c261844e9db743a0cf2d731cd, type: 3} + - {fileID: 2800000, guid: 578c224320017de8a84379452f1ca231, type: 3} + - {fileID: 2800000, guid: 282c9613da3980702a2c0daeb9ba0bfa, type: 3} + - {fileID: 2800000, guid: d3112b0dd75646391a66bcff0b6ed05d, type: 3} + - {fileID: 2800000, guid: 5de36759b8ee98525ba73d18914315b3, type: 3} + - {fileID: 2800000, guid: 03525ff13fd626578b5bc7f6275bf3dd, type: 3} + - {fileID: 2800000, guid: 047d55b6c222e3d068183678d3027d7a, type: 3} + - {fileID: 2800000, guid: 05c0df2616d6e2e9390aad50ddeb21b1, type: 3} + - {fileID: 2800000, guid: 36ea701974c9fac79b571aca662dbc22, type: 3} + - {fileID: 2800000, guid: ae4131e8bccee5e848a43f92e75f7d55, type: 3} + - {fileID: 2800000, guid: a6f05734b7b843a339342298ccb24b36, type: 3} + - {fileID: 2800000, guid: f8671588dab50a611bcb50d861c0d2f4, type: 3} + - {fileID: 2800000, guid: 27eebcc4579a2a854a276e8f2dc9c8fd, type: 3} + - {fileID: 2800000, guid: f21472ccfd0b38189978d3a4048ece1f, type: 3} + - {fileID: 2800000, guid: b61e4370a1cadab99b3f80d30f2b03ba, type: 3} + - {fileID: 2800000, guid: 4412fab0751949df7a229778a07a0f9a, type: 3} + - {fileID: 2800000, guid: 176172bdb6a30628a98564ccf6e72a0e, type: 3} + - {fileID: 2800000, guid: 49865d307e9b5e089a7ad9e73dfff3d8, type: 3} + - {fileID: 2800000, guid: 827b6052ee8118888b044bb1ab5e7096, type: 3} + - {fileID: 2800000, guid: 540a8a976f18e69f3a9a06040aebc161, type: 3} + - {fileID: 2800000, guid: eae9a8a283bc667a6874a02e91c00111, type: 3} + - {fileID: 2800000, guid: b7f911f6aa6afbefc8eff3e46534edfd, type: 3} + - {fileID: 2800000, guid: 195f7dc375e8e5f3eaad22e8f0cfbc3a, type: 3} + - {fileID: 2800000, guid: a9ee3302df0f4dbe386bdb37fb71a6f8, type: 3} + - {fileID: 2800000, guid: 6ff729031023d8c7dbc9c12ee68b41d3, type: 3} + - {fileID: 2800000, guid: 5fd1ade951922db86a3bb2d856db4651, type: 3} + - {fileID: 2800000, guid: 98f3f1b5e7f2f9148a41ff1976c1041a, type: 3} + - {fileID: 2800000, guid: 1bc91030077ad5bb7aebe62d9e32c637, type: 3} + - {fileID: 2800000, guid: 12dd78c76e397ba2199898d82e088ef9, type: 3} + - {fileID: 2800000, guid: be824cdd618ba7b49a77c7a849918415, type: 3} + - {fileID: 2800000, guid: 620e73dae9743133aafbbba50198e2b4, type: 3} + - {fileID: 2800000, guid: 3866a095b85fc80ff944b477fe522184, type: 3} + - {fileID: 2800000, guid: 01c66224279e195d3a427d8fbcb53312, type: 3} + - {fileID: 2800000, guid: 115f4005a1c548a0595913b4bb27760f, type: 3} + - {fileID: 2800000, guid: bddbcb78ab540ffaca4fea86861a793a, type: 3} + - {fileID: 2800000, guid: 4a287a1cfb2d75ced865543fc2537cde, type: 3} + - {fileID: 2800000, guid: 29838801612d81246a7123b99bf388f4, type: 3} + - {fileID: 2800000, guid: 272d59e14db399a96808d119b60166f9, type: 3} + - {fileID: 2800000, guid: 7b740df220e94cc7cac34a10b319eeea, type: 3} + - {fileID: 2800000, guid: ea69ea3075c22cb5f9e37ab795f1a11a, type: 3} + - {fileID: 2800000, guid: 236f676df38dc9c95b85b8eda647a1fa, type: 3} + - {fileID: 2800000, guid: dd0ccbec514ab94b38805503703909c4, type: 3} + - {fileID: 2800000, guid: 068020469f3b0dd0095bf5597140f9d5, type: 3} + - {fileID: 2800000, guid: cc64aa92b777d61a3b1a2f9c6ebb8ec6, type: 3} + - {fileID: 2800000, guid: 19c0f0714a7731ddc8ca6b1871008a8a, type: 3} + - {fileID: 2800000, guid: 71afca7c11b144189b314a5b2a514ed5, type: 3} + - {fileID: 2800000, guid: b40283dfe60350c5c89d9a9ce1c8d94b, type: 3} + - {fileID: 2800000, guid: eb8db98838f086dfb9cca8a78224f222, type: 3} + - {fileID: 2800000, guid: bf037247bed3e89c59ad845e65afe2db, type: 3} + - {fileID: 2800000, guid: 0e5a3c0f67fba18429a572beaa1f1112, type: 3} + - {fileID: 2800000, guid: dccb01cc63b4c61538a7c4081075e7e2, type: 3} + - {fileID: 2800000, guid: 7d071c762e2b7c45b9648b7b2b9c2ab6, type: 3} + - {fileID: 2800000, guid: 9db49870869b0be6bb2ad4b19b71fd66, type: 3} + - {fileID: 2800000, guid: 83f454b21c8c5d0ca96fff6b32d53082, type: 3} + - {fileID: 2800000, guid: 49bee3922bdb3c746b8d1ce0846791c3, type: 3} + - {fileID: 2800000, guid: 41855a2efd741d8bb9e37d8bf34bb8f4, type: 3} + - {fileID: 2800000, guid: 220262786a06bf5b4a5bfd4bc45c7e6a, type: 3} + - {fileID: 2800000, guid: 286c6701a7a66ee77928dd7358ce88fa, type: 3} + - {fileID: 2800000, guid: 02d6c690dc3649442b8968f9343a2877, type: 3} + - {fileID: 2800000, guid: ef5cded1587408affa11a615af830933, type: 3} + - {fileID: 2800000, guid: 349c1204da21568b7af8789b5c7226b0, type: 3} + - {fileID: 2800000, guid: b3c9745444e1725d0bb4a5051721c1a4, type: 3} + - {fileID: 2800000, guid: d49f3c33f441bfedba3ce7c5f8ddb56f, type: 3} + - {fileID: 2800000, guid: 89b5e7ad4f5712cd0849ae677f8857e5, type: 3} + - {fileID: 2800000, guid: a3abff674cfe6a1a4a52ec38ad73e017, type: 3} + - {fileID: 2800000, guid: bad7baaf5f575ec688892fe9becd24e9, type: 3} + - {fileID: 2800000, guid: daca5af317c38a874b9d0927986fdbaf, type: 3} + - {fileID: 2800000, guid: 7bdef68ef7f0d11d19134b5201288a03, type: 3} + - {fileID: 2800000, guid: 7e3dd37a886526e9ca4ceda152d721e6, type: 3} + - {fileID: 2800000, guid: be939f72a8df3aba6b1b2b740b714bab, type: 3} + - {fileID: 2800000, guid: c675c6456cfb790e3a99e723b810d682, type: 3} + - {fileID: 2800000, guid: dd4ec8e154108b340993fc58b311ee5c, type: 3} + - {fileID: 2800000, guid: 75fad3cbcb32c0f34b895f3c83e27267, type: 3} + - {fileID: 2800000, guid: cb071372526ae797681a126149b18395, type: 3} + - {fileID: 2800000, guid: f943025f09be3e97bb855d26ecb08abf, type: 3} + - {fileID: 2800000, guid: 8ec58df08e9810963b419d1ad7d849a1, type: 3} + - {fileID: 2800000, guid: bdda667d6103d42b0a4da5bd3555b156, type: 3} + - {fileID: 2800000, guid: e5421f7863977ec5e9d511152eb2f1ee, type: 3} + - {fileID: 2800000, guid: ba132c0ec4acb878e8c8bac520cfcfb4, type: 3} + - {fileID: 2800000, guid: fb3d24ab117b2436b8e8b8364527b3fc, type: 3} + - {fileID: 2800000, guid: 72f9843606654c5158f760a23010bbe3, type: 3} + - {fileID: 2800000, guid: 4501d2917423d6e28989c8733f439d1d, type: 3} + - {fileID: 2800000, guid: c213700a160dfb7e698d0a4bd1c16cca, type: 3} + - {fileID: 2800000, guid: 8f6d1d53bf434fc2b9f302e96fefa920, type: 3} + - {fileID: 2800000, guid: b4e8749b47629943b9918dba81f206e7, type: 3} + - {fileID: 2800000, guid: 943c0dbf1c0f7860b872afd634ddd921, type: 3} + - {fileID: 2800000, guid: 2de9a2f6e0a621658bddc6ae37277e61, type: 3} + - {fileID: 2800000, guid: 372a00d27cff788e2be7a846a7ce3d94, type: 3} + - {fileID: 2800000, guid: 90cc8e1643e7646b0aff80187036e675, type: 3} + - {fileID: 2800000, guid: 76561c0759203f5f4b016c3309b34971, type: 3} + - {fileID: 2800000, guid: 85e850c67eecf81029d3fc200aec134b, type: 3} + - {fileID: 2800000, guid: 031e604f1a1f18b8eac6bd0fbd8f5aac, type: 3} + - {fileID: 2800000, guid: edf89690bab71ed85a8c476a09f92f34, type: 3} + - {fileID: 2800000, guid: f4ff0a60310ea1085912b208fd022f75, type: 3} + - {fileID: 2800000, guid: 9e7f9a6575f94e107b73c18d3b00e2e1, type: 3} + - {fileID: 2800000, guid: 02aa12704b39a122f89b28b149907c57, type: 3} + - {fileID: 2800000, guid: 6adddbf76d66cc981aafe878d28c84ac, type: 3} + - {fileID: 2800000, guid: f2c698b5e5b4991beb6f03145d755bdc, type: 3} + - {fileID: 2800000, guid: 852bd4dd411d5f6a2b040b06e88bcd70, type: 3} + - {fileID: 2800000, guid: f5513b7bccf06cfb69d719d52a6ab6fb, type: 3} + - {fileID: 2800000, guid: df54d5095508a6f13a537c9cf04cb7b2, type: 3} + - {fileID: 2800000, guid: 03e13715364505a17a41ecaedcee06f1, type: 3} + - {fileID: 2800000, guid: f81fb26d564504e46ae15b4db749bbcc, type: 3} + - {fileID: 2800000, guid: ae3a59541443a390eab560579710e056, type: 3} + - {fileID: 2800000, guid: 1c47c6d8111cc2551b932b21797f2a70, type: 3} + - {fileID: 2800000, guid: ed14689e6b1319ad4a2eb6951d8b5694, type: 3} + - {fileID: 2800000, guid: 298863293e70971caa7a507cb2c22c3a, type: 3} + - {fileID: 2800000, guid: 9d25695879b19dc8191cf066f4a1e14d, type: 3} + - {fileID: 2800000, guid: f8a9923eed02867abac717fb865c99b9, type: 3} + - {fileID: 2800000, guid: 679cbc431e17342d6abd3e6e710f403b, type: 3} + - {fileID: 2800000, guid: 87f1ee9ddd1bbe01d826928e753b93c7, type: 3} + - {fileID: 2800000, guid: 7767585d3405da89190773b3b6fd52a8, type: 3} + - {fileID: 2800000, guid: 6963de4700f50368fa20506034b5f72a, type: 3} + - {fileID: 2800000, guid: c109b3fb4a017fbbf8b6fc5967f923dc, type: 3} + - {fileID: 2800000, guid: cbd4aeea5fa1b9daa9d84e34fb3647a1, type: 3} + - {fileID: 2800000, guid: 0ea4f06e668a633978f69d4f873890d4, type: 3} + - {fileID: 2800000, guid: 3789dc1d4bf6e97f7918608cce9c519c, type: 3} + - {fileID: 2800000, guid: dbed6a4725cf14074b3c5bc8761288be, type: 3} + - {fileID: 2800000, guid: d995999a0938546df825fc4f866d6ee5, type: 3} + - {fileID: 2800000, guid: 89930dd31b46377cabd06a94037cb912, type: 3} + - {fileID: 2800000, guid: 2662b3d989f8131c9938188bef17cd74, type: 3} + - {fileID: 2800000, guid: 157409304f5409e44ba99bafcd75e4e5, type: 3} + - {fileID: 2800000, guid: b89356fd67876131a9e2e45281d62990, type: 3} + - {fileID: 2800000, guid: 0c4adcff786a8bf549b64db0b9d34b19, type: 3} + - {fileID: 2800000, guid: 9c06dc309a27bd99d842df13c4f95910, type: 3} + - {fileID: 2800000, guid: f9c76396a250a3b2c819f33f8df1dfe5, type: 3} + - {fileID: 2800000, guid: c1245f48df41d1f73ad55a070ff8016c, type: 3} + - {fileID: 2800000, guid: c80dbd8e69b86ff7e8b86e52d8febc76, type: 3} + - {fileID: 2800000, guid: 84c02a151d793ca9cb7ca6b8bd6e5e3b, type: 3} + - {fileID: 2800000, guid: 3ac7462f1200f9479ae7519aee68a553, type: 3} + - {fileID: 2800000, guid: 2856a04ea2fe81866b03efa6176a27b8, type: 3} + - {fileID: 2800000, guid: 8e4e3ec31ed3d2392b0d9c8047eb6961, type: 3} + - {fileID: 2800000, guid: aecd175309d294fcb8c37498946518a2, type: 3} + - {fileID: 2800000, guid: f794ca19773df0719b21817ad4b2b078, type: 3} + - {fileID: 2800000, guid: 26d6f147dfc92ed12aaca0a7d27d584a, type: 3} + - {fileID: 2800000, guid: 2aace7b244eb27222b9370e00ebb1b48, type: 3} + - {fileID: 2800000, guid: e0a57495cff407ee9a13d89d34ffae0d, type: 3} + - {fileID: 2800000, guid: a785e13ba4eed7fd5b889cf68a27e58e, type: 3} + - {fileID: 2800000, guid: 15a32c9ad9e9df997b3205ab7adc081a, type: 3} + - {fileID: 2800000, guid: 47b78291ab7045c6c9ad4275a68ce60f, type: 3} + - {fileID: 2800000, guid: 8cef7caadf55266679191e719d62a419, type: 3} + - {fileID: 2800000, guid: 68bbee40b5bc7507fa3832b6cfc1f9ba, type: 3} + - {fileID: 2800000, guid: 280bcdad195bf14168276536c2afd703, type: 3} + - {fileID: 2800000, guid: 1040a1f0e4b8046e28114563ef12729e, type: 3} + - {fileID: 2800000, guid: 7da02c63abdea34debe24724fdfdc829, type: 3} + - {fileID: 2800000, guid: bebee34bbe79a67b6ae58845f010e00a, type: 3} + - {fileID: 2800000, guid: 657cc23e711ca100c94d77614a9a1a6c, type: 3} + - {fileID: 2800000, guid: 150d2334953b6f59f82498d33502ea6f, type: 3} + - {fileID: 2800000, guid: f86dbc324d5c78301906f64773a7443f, type: 3} + - {fileID: 2800000, guid: e75b64e870862d3b48bf0bcb7abb5fc6, type: 3} + - {fileID: 2800000, guid: 20e13a7d1a6c117fc9d644cc0ffddad0, type: 3} + - {fileID: 2800000, guid: 9438132c0617c6bbc95cda456e2cc973, type: 3} + - {fileID: 2800000, guid: 79429f979bdb6c1a8bf0f7b9305652a4, type: 3} + - {fileID: 2800000, guid: c4d284af9cc67fe60aaa09d0c6bdcfc6, type: 3} + - {fileID: 2800000, guid: 2f9b567d3f611220db97c6a8724f1c00, type: 3} + - {fileID: 2800000, guid: 4e7719afbc07d00f6ae55491521fa261, type: 3} + - {fileID: 2800000, guid: 35a85776e55256cfa96e4efca55860e8, type: 3} + - {fileID: 2800000, guid: bd1aae54de330709f81ce487987b8d2c, type: 3} + - {fileID: 2800000, guid: 0723c22d38c92d3cf8f7e9dca0dfdfac, type: 3} + - {fileID: 2800000, guid: 799e1f97ea4509e24b63ec01a0c8ef53, type: 3} + - {fileID: 2800000, guid: 37665b3cf8f6c2f688f863e085cc96fc, type: 3} + - {fileID: 2800000, guid: 83da787a05efbdbaca86d211ddd67a09, type: 3} + - {fileID: 2800000, guid: c9cf3da08eaae8e7d95cc9406598effa, type: 3} + - {fileID: 2800000, guid: 927bc5a30638e8131a81cd3d5ff83388, type: 3} + - {fileID: 2800000, guid: 5248907572899d21d8191f1216ef9a53, type: 3} + - {fileID: 2800000, guid: d5c7a9e2901cc50f6bb5c8d505cfca72, type: 3} + - {fileID: 2800000, guid: c64192ad9a2db6cc9b77303f5fb5d03b, type: 3} + - {fileID: 2800000, guid: c83b5112d93d973b4b4cf2b579ee4228, type: 3} + - {fileID: 2800000, guid: c84a12e0eeb79b3798914965a151163f, type: 3} + - {fileID: 2800000, guid: e3ac760f7d9b9b8489db31eb586a1254, type: 3} + - {fileID: 2800000, guid: 522a9db8885cb2e08a647fd2d18daa56, type: 3} + - {fileID: 2800000, guid: 70694232e6013737eaad624e70c9f77d, type: 3} + - {fileID: 2800000, guid: 14cbce0d25637fb38a866d9e1be4262c, type: 3} + - {fileID: 2800000, guid: 80ce9d777010e15f4a0a3dfa924641f7, type: 3} + - {fileID: 2800000, guid: f6e7517c3b94602c79702e0fec00b0c2, type: 3} + - {fileID: 2800000, guid: 625e18044577a30bbb2060055857f742, type: 3} + - {fileID: 2800000, guid: 9fc089b69065b7807aa9c086e391007b, type: 3} + - {fileID: 2800000, guid: 3e4345c1e72ed4ec2b28a92c67ab4e57, type: 3} + - {fileID: 2800000, guid: 50b6aa8cc7e355966bcaecf733e99af2, type: 3} + - {fileID: 2800000, guid: 08a20c4bab446a4748df70e717cac3d1, type: 3} + - {fileID: 2800000, guid: c711d18a15318dee398327fa86655d75, type: 3} + - {fileID: 2800000, guid: f1b33071530ef693ba3f5e709e38e7af, type: 3} + - {fileID: 2800000, guid: a748ba4f29cb382b28f75da9a76cab49, type: 3} + - {fileID: 2800000, guid: 3c80a9c3ee4425399a41e42accf9580e, type: 3} + - {fileID: 2800000, guid: f0f45bc034f01cd0e8bbaffd2842d431, type: 3} + - {fileID: 2800000, guid: 3dcd625b3266890b5bb92bab551d1a0c, type: 3} + - {fileID: 2800000, guid: 6dd42e347f2983036b8c97e15999c90d, type: 3} + - {fileID: 2800000, guid: da2f14188576a1575bb20f5afee54919, type: 3} + - {fileID: 2800000, guid: ae20ecf1ce68849b3bdb3cd92cbe39ea, type: 3} + - {fileID: 2800000, guid: 8a57521c684f7ac3488f90cbc39d5fd8, type: 3} + - {fileID: 2800000, guid: f1577976faeb79461a7a9a79190b6b4b, type: 3} + - {fileID: 2800000, guid: 594155866fdbee1b58696ab68d1959a6, type: 3} + - {fileID: 2800000, guid: 3a1d4aaac08c16e6bbd682137d125f7f, type: 3} + - {fileID: 2800000, guid: 34fd05b7d89511b11aca0296b43c5873, type: 3} + - {fileID: 2800000, guid: f38a2dac9dd5e9b5fa3b3b73901b53e2, type: 3} + - {fileID: 2800000, guid: 0a779f173dc9028d3b660a2779c2e91f, type: 3} + - {fileID: 2800000, guid: 371006b48caca779aa7ba96ea35c066e, type: 3} + - {fileID: 2800000, guid: c1b204da6f89d2ceeb74b3fd6b0029f3, type: 3} + - {fileID: 2800000, guid: 394d62399240c431981b94616449179b, type: 3} + - {fileID: 2800000, guid: 7bd465c185f684f618e56d439bf20310, type: 3} + - {fileID: 2800000, guid: dd1e5afaed96bb38ebf0d1503c5a0d58, type: 3} + - {fileID: 2800000, guid: da71bf5055b765d5ebbefd0bb5eb120b, type: 3} + - {fileID: 2800000, guid: d819abd6cb3c8d382ae411ccd52ef717, type: 3} + - {fileID: 2800000, guid: 60320f8c78cd07d8595f05bc8ab83b54, type: 3} + - {fileID: 2800000, guid: b08721c0ae90d870398ad3b47d48a029, type: 3} + - {fileID: 2800000, guid: db4674d06aefae26899b734c571bdd20, type: 3} + - {fileID: 2800000, guid: f1f598436e883a103be05287bde4c979, type: 3} + - {fileID: 2800000, guid: 09a8399ecfbca64f4931a64a49b75f1d, type: 3} + - {fileID: 2800000, guid: 03ca744af66a0d60295e4d2f74907888, type: 3} + - {fileID: 2800000, guid: b4218311ddd285291b4b3f7c9305e877, type: 3} + - {fileID: 2800000, guid: 9ceb5f6af095095f0bd2c9fa26fa69aa, type: 3} + - {fileID: 2800000, guid: f0f4e91a21221b6d9906a08958128f78, type: 3} + - {fileID: 2800000, guid: 240ed44db69e3bb8ca850704e6da2c60, type: 3} + - {fileID: 2800000, guid: 402163db87c4ad9a796dfab615fa5187, type: 3} + - {fileID: 2800000, guid: 5643eb5762f0c7e009b727b180038cec, type: 3} + - {fileID: 2800000, guid: 8a8215a4bfb1ab4a78e589c2c636f53a, type: 3} + - {fileID: 2800000, guid: 7cb08806ee1a9941c99ab1af0b1f702a, type: 3} + - {fileID: 2800000, guid: 40001f285675ebb57824ecc7f96b9d1e, type: 3} + - {fileID: 2800000, guid: 08b722beefc1e824296b85c484c99106, type: 3} + - {fileID: 2800000, guid: 0b51f1891a3844aad9855232d2b727f8, type: 3} + - {fileID: 2800000, guid: 6ed40afe83287716bbddd9866586a247, type: 3} + - {fileID: 2800000, guid: 844d8099313e3b44bb89342cd303c05e, type: 3} + - {fileID: 2800000, guid: 042197a3765c901edbd135f32ff4a5bb, type: 3} + - {fileID: 2800000, guid: bc1a34949777ec6e8a225d14fb0d9982, type: 3} + - {fileID: 2800000, guid: e91608c78c4a069eeab1841009f22b7e, type: 3} + - {fileID: 2800000, guid: 96e21489d4f9be4759b6b353d0c03834, type: 3} + - {fileID: 2800000, guid: 2705022dc8ca91af99710941262982f4, type: 3} + - {fileID: 2800000, guid: 538fb5f9e9a5118aa9cb9ac3fa289173, type: 3} + - {fileID: 2800000, guid: 92e43c775ef242557b60a142124fdefd, type: 3} + - {fileID: 2800000, guid: 3fb5232b7511d16cd9a94c2385c28328, type: 3} + - {fileID: 2800000, guid: f2215f2af883c4c89a9484a945ce159d, type: 3} + - {fileID: 2800000, guid: b39ff33d39b2a5e30b82786e83b42e0b, type: 3} + - {fileID: 2800000, guid: e3a883c999c21d37bba4ecca19f67de0, type: 3} + - {fileID: 2800000, guid: f0d76e65ea629aca29a3ce2793872f7c, type: 3} + - {fileID: 2800000, guid: dcb6992a665b0e742ab2fc45232a8a00, type: 3} + - {fileID: 2800000, guid: 9e666096a25af0b229d04b6048688434, type: 3} + - {fileID: 2800000, guid: a21932911d1435f44bb0b29e3fcc05ee, type: 3} + - {fileID: 2800000, guid: 2dabffbe5b3377e34abe2bf85799de7e, type: 3} + - {fileID: 2800000, guid: 07682d1f469efb67c97cc4e61ddd1e5e, type: 3} + - {fileID: 2800000, guid: b1625608abb081902ab56610a41028ae, type: 3} + - {fileID: 2800000, guid: ff7be7341f122fa8682c879b23c0a034, type: 3} + - {fileID: 2800000, guid: 3ea8d75f410cb9ee3b74c819ca2a4f28, type: 3} + - {fileID: 2800000, guid: 38a07cb9f82ec6bae8d9a285565bcef7, type: 3} + - {fileID: 2800000, guid: 90b3cdcd782c86019afe6ac15063bf60, type: 3} + - {fileID: 2800000, guid: 0a142cb35a0c8ed6697be164e0aea899, type: 3} + - {fileID: 2800000, guid: ed77c60be946aab9ab0d9b829b59da6e, type: 3} + - {fileID: 2800000, guid: 53cdca53a80caedfd87e43b1f89beb19, type: 3} + - {fileID: 2800000, guid: 9f290a2c7b4f5e9698a7555dde3d341b, type: 3} + - {fileID: 2800000, guid: 668a2b77b6aa4b136ab1f4f49d57c30e, type: 3} + - {fileID: 2800000, guid: 0200f220cf51c569ab8bff1a1238e62a, type: 3} + - {fileID: 2800000, guid: c49ba38d244afbea785efd2f6770e742, type: 3} + - {fileID: 2800000, guid: c6a23892aa60d4a79b723b77e8bd223a, type: 3} + - {fileID: 2800000, guid: cc552c3984968a18ba818cf67f0438ad, type: 3} + - {fileID: 2800000, guid: e520e6b5252ce4990989866b2d2fc267, type: 3} + - {fileID: 2800000, guid: bb27b7d541778c2b581d29047e109315, type: 3} + - {fileID: 2800000, guid: 1df4157d8f2f0d62e971e10f34601b96, type: 3} + - {fileID: 2800000, guid: 363e3c4313095259ca7c785910845e47, type: 3} + - {fileID: 2800000, guid: 505661f5ec2db06e481d81d46ad33e31, type: 3} + - {fileID: 2800000, guid: 29c413ff81c64174f870d0cc56d1906c, type: 3} + - {fileID: 2800000, guid: aec8923bb3249b75cb00a23f9c9c64d7, type: 3} + - {fileID: 2800000, guid: 75457f288a672cf1c88bc4cbd862f07f, type: 3} + - {fileID: 2800000, guid: 7d1826fc5a9d913c2979e4a18d1ebf49, type: 3} + - {fileID: 2800000, guid: 9a6ac4f441a859243917f0c2b60a1b76, type: 3} + - {fileID: 2800000, guid: adb32ed485dd9c3ab97a914fbc3f14e1, type: 3} + - {fileID: 2800000, guid: 237212243311fefaaac51f694da3f378, type: 3} + - {fileID: 2800000, guid: 6b58c6cc1837ddb1c9e63d7082d14497, type: 3} + - {fileID: 2800000, guid: 3866da1dc464c112dbb672dbcac83d4e, type: 3} + - {fileID: 2800000, guid: bc770fe5f747d1d92a897eb1e11c9236, type: 3} + - {fileID: 2800000, guid: f9caabebbb98278cf9e337feed33f72c, type: 3} + - {fileID: 2800000, guid: a51aac9a98ad9a5f5a18c538393b688b, type: 3} + - {fileID: 2800000, guid: 8a51ab44422fc7ff787184896353fd51, type: 3} + - {fileID: 2800000, guid: 0757c518daa59a990b2958143b96f1da, type: 3} + - {fileID: 2800000, guid: 59e7a8fcbf9252c1d9c2c51743188572, type: 3} + - {fileID: 2800000, guid: c9d2abbb1e1a5ee84aa4b4e187939fdf, type: 3} + - {fileID: 2800000, guid: 69d3547963c6c0439be165072fbd0544, type: 3} + - {fileID: 2800000, guid: 367f74af1c95d7da18f381d6bd6f55fa, type: 3} + - {fileID: 2800000, guid: db0fc6a606f189d25abc2d18ae611318, type: 3} + - {fileID: 2800000, guid: 967f5dc8c8a9b5161aef7c67510384f7, type: 3} + - {fileID: 2800000, guid: a2ee50c5cd09731edae4a48a9eb0cb69, type: 3} + - {fileID: 2800000, guid: aa3dbb5e1be0758b0b60492480ea1043, type: 3} + - {fileID: 2800000, guid: 1ad0c1f0578ae3f04ac8f7dedae0734d, type: 3} + - {fileID: 2800000, guid: f8069ab3f8a1e21c2a6b720dd28890cb, type: 3} + - {fileID: 2800000, guid: b3a24dccc4baf9d7bb292e09a682a506, type: 3} + - {fileID: 2800000, guid: 8a352bd099c57fd8690740904e01ca8b, type: 3} + - {fileID: 2800000, guid: a4b3c1724a8b83015b8f09a3334e362e, type: 3} + - {fileID: 2800000, guid: e5553642ee43b41f2af23ac49f81c11b, type: 3} + - {fileID: 2800000, guid: 1226bef867bdfa72e9a302273ff3aa32, type: 3} + - {fileID: 2800000, guid: dcba487f02aa9aea1a18e2dd058690fa, type: 3} + - {fileID: 2800000, guid: fb4610d75993a1e9eb0809734352f33d, type: 3} + - {fileID: 2800000, guid: 0778d65a9d4d4fae98a24d95202b8e37, type: 3} + - {fileID: 2800000, guid: 80de77ab384b966f5a8411e07c39f583, type: 3} + - {fileID: 2800000, guid: 966254d3ee043368da463e20dde06e6c, type: 3} + - {fileID: 2800000, guid: 60e0482d8801caeccb1c177d96da7112, type: 3} + - {fileID: 2800000, guid: 3736113d9c1079d76a352b42cfec258b, type: 3} + - {fileID: 2800000, guid: e782000eef4ec55209ea7c39a77bccdb, type: 3} + - {fileID: 2800000, guid: 56b3e6c520f57de96a3d8c03225c768e, type: 3} + - {fileID: 2800000, guid: 85e7ff5caa604f1e198a3d79c512b414, type: 3} + - {fileID: 2800000, guid: 39a987f708208fe3ea4b3643f323a3c2, type: 3} + - {fileID: 2800000, guid: 9299d279e456f39638e64d04c67028db, type: 3} + - {fileID: 2800000, guid: 4252d964cad2a14da91e9573a393d4a9, type: 3} + - {fileID: 2800000, guid: 25b96553917a42036b7cb88c433bcfb3, type: 3} + - {fileID: 2800000, guid: 21331faba3758ffa4818ad93850f167e, type: 3} + - {fileID: 2800000, guid: 5062b34df3af719b8bc9a245515412cb, type: 3} + - {fileID: 2800000, guid: a975721b38587e7bb920a27b6c0f5910, type: 3} + - {fileID: 2800000, guid: 9ece58a87aba5c10e9d4e16eb5283a84, type: 3} + - {fileID: 2800000, guid: 20dc4edea8bd051c38c0635d42df3d18, type: 3} + - {fileID: 2800000, guid: 1ccb49a4292bf5d0ea5f8686a5f1c467, type: 3} + - {fileID: 2800000, guid: 6e7d1d99c6d2ae96ab060064f2110a05, type: 3} + - {fileID: 2800000, guid: a3299d740e6506f768ae62a34cdaf5a6, type: 3} + load_from_resources_if_empty: 1 + _texture: {fileID: 0} + _renderer: {fileID: 2302102554894629329} + use_shared: 0 + _last_sample: 0 + load_path: Textures diff --git a/Runtime/Prefabs/Obstructions/ObstructionCube.prefab.meta b/Runtime/Prefabs/Obstructions/ObstructionCube.prefab.meta new file mode 100644 index 000000000..67db1e293 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionCube.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8cd7c0ac8053f9c298f1d3ce3d8892a0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Obstructions/ObstructionCylinder.prefab b/Runtime/Prefabs/Obstructions/ObstructionCylinder.prefab new file mode 100644 index 000000000..49bf60e27 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionCylinder.prefab @@ -0,0 +1,655 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2302102554894629341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2302102554894629331} + - component: {fileID: 2302102554894629330} + - component: {fileID: 2302102554894629329} + - component: {fileID: 2302102554894629343} + - component: {fileID: 2302102554894629342} + - component: {fileID: 2302102554894629332} + - component: {fileID: 3674649710580244811} + m_Layer: 10 + m_Name: ObstructionCylinder + m_TagString: b + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2302102554894629331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.1437268, y: 3.4423447, z: -12.843082} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2302102554894629330 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2302102554894629329 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e7bc9ae29014cf4c9aa3e8a67cbb43da, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!114 &2302102554894629343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 429eddc2e17c50341b357a1de655ebf6, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _tiling_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _offset_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _color_space: + _space: + _min_: {x: 0.2, y: 0.2, z: 0.2, w: 0.2} + _max_: {x: 0.8, y: 0.8, z: 0.8, w: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _smoothness_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _reflection_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _use_shared: 0 +--- !u!114 &2302102554894629342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a22c41a371cb5014b955705c804c74aa, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _space: + _space: + _min_: {x: 0, y: 0, z: 0} + _max_: {x: 1, y: 1, z: 1} + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 +--- !u!114 &2302102554894629332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de609666bdf4489dbac2a6e84eaeb992, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _textures: + - {fileID: 2800000, guid: 5f599c75d7d2d3f2397e633a0a2cad10, type: 3} + - {fileID: 2800000, guid: 35997aa1fb9073cd5956b28c2f1733f1, type: 3} + - {fileID: 2800000, guid: 64e18793722966d539352fece171aca4, type: 3} + - {fileID: 2800000, guid: f2ab9b3b5d1f72ad98d471682b8cf7c9, type: 3} + - {fileID: 2800000, guid: 0d17962e11d952709b3e26b3ff68a395, type: 3} + - {fileID: 2800000, guid: 9fb9470f3fd529bd39417c7faa9774a7, type: 3} + - {fileID: 2800000, guid: 84e88be29a33c876782d228a08469e9e, type: 3} + - {fileID: 2800000, guid: b3d79c300971ed5068f42dbb851fdb91, type: 3} + - {fileID: 2800000, guid: 1f775d15cc88244adbf47cd8c28560b7, type: 3} + - {fileID: 2800000, guid: 242c691845e32213aa72d268bf8c3afc, type: 3} + - {fileID: 2800000, guid: f978018f756d0e8d69eab173e1c5e26e, type: 3} + - {fileID: 2800000, guid: b331e7a9d4c32f44b91437ea7a6392a3, type: 3} + - {fileID: 2800000, guid: 21d14a05f13516581b7a821bd7327c2c, type: 3} + - {fileID: 2800000, guid: abafbf2b15ebd8d3eb18e69c5af89423, type: 3} + - {fileID: 2800000, guid: c7d8a0f5affc52f0198dff2bc0d55bcc, type: 3} + - {fileID: 2800000, guid: b884fd7c59514a6e08465daab211eecc, type: 3} + - {fileID: 2800000, guid: d238841fc28268738bdb07634559baa8, type: 3} + - {fileID: 2800000, guid: 7ce3f4f3a46be893eb352aa8bc6757c5, type: 3} + - {fileID: 2800000, guid: 482ca8a197b1af65bbf8f5ec5db7b693, type: 3} + - {fileID: 2800000, guid: e9009b5738cfe13fc859c01cb6bebd3a, type: 3} + - {fileID: 2800000, guid: e72bbde12cfa52a1fbff62fb30bdad3c, type: 3} + - {fileID: 2800000, guid: 449c150033d2d373ca3fa6fb1c52d7aa, type: 3} + - {fileID: 2800000, guid: 322c8e42837226afb8e5f7218a22f615, type: 3} + - {fileID: 2800000, guid: c7b04f33dd1b448d8932320361d31781, type: 3} + - {fileID: 2800000, guid: f8a7d4b8268fa7676982e6f50e7366ec, type: 3} + - {fileID: 2800000, guid: 1a5bf1e28e1e70f86824301a1f8b52e5, type: 3} + - {fileID: 2800000, guid: 92cb44d88c40cfd338264568800a5c5f, type: 3} + - {fileID: 2800000, guid: d6fe8cd585a7fc088b45ea5a56563bd7, type: 3} + - {fileID: 2800000, guid: 93e5a176835fcfc9b8d742b4741aa5da, type: 3} + - {fileID: 2800000, guid: 349c4081e4aaa23658f4e8b0aa786a37, type: 3} + - {fileID: 2800000, guid: c4616dd426db89b73b327120c4f6bc54, type: 3} + - {fileID: 2800000, guid: fc57258ba0cbf96019b082db7f2a783a, type: 3} + - {fileID: 2800000, guid: 547405889a5c4d37188395e8763a7501, type: 3} + - {fileID: 2800000, guid: 744a73a1523db1fc7b167c88357a6252, type: 3} + - {fileID: 2800000, guid: c2a249280a347039ea24e702dc562703, type: 3} + - {fileID: 2800000, guid: 5ace4931437b72abca9fe986f35a16bc, type: 3} + - {fileID: 2800000, guid: 239842f75ff0d38f788d3f76b11cd71a, type: 3} + - {fileID: 2800000, guid: f11ab4af40b591ae0a197d3185ffdec5, type: 3} + - {fileID: 2800000, guid: 38ee90bfd9b48ebd19f991475b9bd374, type: 3} + - {fileID: 2800000, guid: 72a34f3f76339da6abac282de8138d87, type: 3} + - {fileID: 2800000, guid: 0b91faa29855e49808f8b5d44a396b4f, type: 3} + - {fileID: 2800000, guid: b167686af5d9f9d53ac3b2cc13db04c8, type: 3} + - {fileID: 2800000, guid: c0433e91a072738bb8adc6d22234c44a, type: 3} + - {fileID: 2800000, guid: 3f04f04af0c2105a6a202fee90911682, type: 3} + - {fileID: 2800000, guid: e2cc7b6f3a7ea7a58b933e42cb5ca640, type: 3} + - {fileID: 2800000, guid: 3afa4fc416e1e31c787db2cfbdaae3ea, type: 3} + - {fileID: 2800000, guid: 8018e57449252a678a62594d35626af8, type: 3} + - {fileID: 2800000, guid: e60a34c308361185c88aac528d680eb9, type: 3} + - {fileID: 2800000, guid: a15018ab9ac7f59668731a91c64a8e68, type: 3} + - {fileID: 2800000, guid: e78c3f43d704bd6a7ac44d6b5155cd57, type: 3} + - {fileID: 2800000, guid: 8e3d6cfd5c8b263aabf61c7baa0f2202, type: 3} + - {fileID: 2800000, guid: 5de3299c2b3108f778f1083cd300014f, type: 3} + - {fileID: 2800000, guid: cfcec2ca8476e43d18027f01a8bd2946, type: 3} + - {fileID: 2800000, guid: 8e0921fa566d6cf04ba0a96a62bd6245, type: 3} + - {fileID: 2800000, guid: a94988f60f214c656bf7f7024bf62e24, type: 3} + - {fileID: 2800000, guid: 63f05e96863c0cf19ab8f94c1c3c1559, type: 3} + - {fileID: 2800000, guid: 2e2fc84d890be4dcb9ca0b5f76634eee, type: 3} + - {fileID: 2800000, guid: bb2dc4d5af36e35e2bdd8959826900a5, type: 3} + - {fileID: 2800000, guid: 9de42e16ca0d5d779a4e1f429878e1a7, type: 3} + - {fileID: 2800000, guid: 59a99f906bb7070ddbb1d0b7ad9f1a5f, type: 3} + - {fileID: 2800000, guid: 9c8f9403db897b36585b670783df3ea8, type: 3} + - {fileID: 2800000, guid: d13d315f27fceba2dbf83afec85ac3a7, type: 3} + - {fileID: 2800000, guid: dea1cd11bf285cdc9942eee3dc6f161a, type: 3} + - {fileID: 2800000, guid: e7b9b905cc918a1bc8f2b2efad972505, type: 3} + - {fileID: 2800000, guid: 5c85e9cd3ec590d21874ffa8d6360a94, type: 3} + - {fileID: 2800000, guid: ce246d761b4ef5004be6ae07fc0db1a3, type: 3} + - {fileID: 2800000, guid: 2443f0fee7f3a80159c6633341f5f47d, type: 3} + - {fileID: 2800000, guid: b9cc471440a74400d98e2908420b88d2, type: 3} + - {fileID: 2800000, guid: a11bf7acb0668c9efafab0efa992a669, type: 3} + - {fileID: 2800000, guid: c2daaa1ac2f78fb0baddf28ad071ecf6, type: 3} + - {fileID: 2800000, guid: 51419fb9959103351925225870b4b4a9, type: 3} + - {fileID: 2800000, guid: 7edb149c74f886a1182eb4d8cd3989d4, type: 3} + - {fileID: 2800000, guid: d01b2f983c50eb7df9ea73506dbd8bc8, type: 3} + - {fileID: 2800000, guid: 5996ed09056f967b4b7f09f0b7bfcb54, type: 3} + - {fileID: 2800000, guid: 890ad4627790e6ed99c6fc658522a04f, type: 3} + - {fileID: 2800000, guid: 125180fb60693811b89970c31746ab99, type: 3} + - {fileID: 2800000, guid: a7bc4e666025adb67b3571b680b24c12, type: 3} + - {fileID: 2800000, guid: 15b8b31621fa8c8d797d19906412d090, type: 3} + - {fileID: 2800000, guid: 53241d4b28bdcf92588925ea85b953ec, type: 3} + - {fileID: 2800000, guid: 148abc0f11d542f308e7a85023ac7076, type: 3} + - {fileID: 2800000, guid: 33fe32ac3bfe2f7d3b5fad180e9e5d8d, type: 3} + - {fileID: 2800000, guid: ebfda5d01d6259d4db534bb12c5495c6, type: 3} + - {fileID: 2800000, guid: 8d0c527b34bd2635f8511c9e0ea201f4, type: 3} + - {fileID: 2800000, guid: ad00aa6df81675397857dd27656145cb, type: 3} + - {fileID: 2800000, guid: 6dd7e7a3f083d02148407eb88455d179, type: 3} + - {fileID: 2800000, guid: 0ba144e573c92f529ad708694edca4be, type: 3} + - {fileID: 2800000, guid: 7abd5a5900ef7042c94a9f1baea716c0, type: 3} + - {fileID: 2800000, guid: 220e2a7b82ffe4ca9b17de0d4e7fc57d, type: 3} + - {fileID: 2800000, guid: ddebf5771a8b33ca7a07ce719664f372, type: 3} + - {fileID: 2800000, guid: 50dbc1da7beebdc938cd6c8ecb3c7153, type: 3} + - {fileID: 2800000, guid: e84abad7ad3564e3590b8b0ed95893b6, type: 3} + - {fileID: 2800000, guid: 0a3d69b4b8182474ea9af5265dddde5c, type: 3} + - {fileID: 2800000, guid: b1d1b183a4d860b6d9d4d84fca5252f5, type: 3} + - {fileID: 2800000, guid: 698163fb7eeb500ef96ea7e79f4a4080, type: 3} + - {fileID: 2800000, guid: 7cff9f7095b86cac080c32361338d2e4, type: 3} + - {fileID: 2800000, guid: 4fa42e68235808872af68d503a05ec72, type: 3} + - {fileID: 2800000, guid: 44b0fe3be11aa3fc4a66d590464634c5, type: 3} + - {fileID: 2800000, guid: 381fd379b20851d8bafbf9f68b698b82, type: 3} + - {fileID: 2800000, guid: 5cbc170583d04417c9082b3e407c35f0, type: 3} + - {fileID: 2800000, guid: 8ca02a1d900fed08ea63f17fee4a5e66, type: 3} + - {fileID: 2800000, guid: 0b610d7abf4e9f0dc801f5eddbd16d59, type: 3} + - {fileID: 2800000, guid: 12cf492b4b8055da2a0beab8f1f60bea, type: 3} + - {fileID: 2800000, guid: c1bf0dbba7455ceb0acc4104aab91fd6, type: 3} + - {fileID: 2800000, guid: 31585c155dd6735cf9cc4a32a8f2962c, type: 3} + - {fileID: 2800000, guid: 9c7c9ffb62c4ed1c6b0ab14c0c2d58f4, type: 3} + - {fileID: 2800000, guid: 673933e3ae75fbd0bb858b41e7b9ac57, type: 3} + - {fileID: 2800000, guid: 29e10c7d78307302ab8fe96fc3c9ea7d, type: 3} + - {fileID: 2800000, guid: 5dc3d40006c2ef89dae46a999de6a4a3, type: 3} + - {fileID: 2800000, guid: 1d658835cedec7a38af140197779158f, type: 3} + - {fileID: 2800000, guid: 2786e79ec3be0b43d9f4cf58a3a9261f, type: 3} + - {fileID: 2800000, guid: c91454be3cebf185ab09aff353e6caad, type: 3} + - {fileID: 2800000, guid: d5d942b1c51d86ebba9fcf55728e89ce, type: 3} + - {fileID: 2800000, guid: c9e4963dc97837b28b416f991fe0402b, type: 3} + - {fileID: 2800000, guid: 38ba08b2806887c9ba61605bcb5f7e72, type: 3} + - {fileID: 2800000, guid: 07e95190c9115015990e534d6b5a76cc, type: 3} + - {fileID: 2800000, guid: 45444296d1134d016ba2e9b6668752a9, type: 3} + - {fileID: 2800000, guid: 2998861db761580678b44daf33af38b4, type: 3} + - {fileID: 2800000, guid: 8cec23edbbd2c469682ca9ec4cbec9a9, type: 3} + - {fileID: 2800000, guid: 1d23092ddccf645219286dd346c89604, type: 3} + - {fileID: 2800000, guid: 2083c331c3e0e810694c7c8860371c48, type: 3} + - {fileID: 2800000, guid: 4b7bfc67fb8a14705bd3611b29130ce3, type: 3} + - {fileID: 2800000, guid: 9e359b531b107bf37aa6e4f3df08d300, type: 3} + - {fileID: 2800000, guid: 80db4effcc199d872a3da8436a78c58d, type: 3} + - {fileID: 2800000, guid: 85d6a82043bc966b8990c14da05c148e, type: 3} + - {fileID: 2800000, guid: 7f590f9b699d83140a84c5574dab3d39, type: 3} + - {fileID: 2800000, guid: 47ad1bead5252c92d840e4ebacc0540b, type: 3} + - {fileID: 2800000, guid: cc207009b2afc6ba7abeac568c8917df, type: 3} + - {fileID: 2800000, guid: 8c4f8c558f1e9b99bb4be1ba88ec8dad, type: 3} + - {fileID: 2800000, guid: faf04a8c261844e9db743a0cf2d731cd, type: 3} + - {fileID: 2800000, guid: 578c224320017de8a84379452f1ca231, type: 3} + - {fileID: 2800000, guid: 282c9613da3980702a2c0daeb9ba0bfa, type: 3} + - {fileID: 2800000, guid: d3112b0dd75646391a66bcff0b6ed05d, type: 3} + - {fileID: 2800000, guid: 5de36759b8ee98525ba73d18914315b3, type: 3} + - {fileID: 2800000, guid: 03525ff13fd626578b5bc7f6275bf3dd, type: 3} + - {fileID: 2800000, guid: 047d55b6c222e3d068183678d3027d7a, type: 3} + - {fileID: 2800000, guid: 05c0df2616d6e2e9390aad50ddeb21b1, type: 3} + - {fileID: 2800000, guid: 36ea701974c9fac79b571aca662dbc22, type: 3} + - {fileID: 2800000, guid: ae4131e8bccee5e848a43f92e75f7d55, type: 3} + - {fileID: 2800000, guid: a6f05734b7b843a339342298ccb24b36, type: 3} + - {fileID: 2800000, guid: f8671588dab50a611bcb50d861c0d2f4, type: 3} + - {fileID: 2800000, guid: 27eebcc4579a2a854a276e8f2dc9c8fd, type: 3} + - {fileID: 2800000, guid: f21472ccfd0b38189978d3a4048ece1f, type: 3} + - {fileID: 2800000, guid: b61e4370a1cadab99b3f80d30f2b03ba, type: 3} + - {fileID: 2800000, guid: 4412fab0751949df7a229778a07a0f9a, type: 3} + - {fileID: 2800000, guid: 176172bdb6a30628a98564ccf6e72a0e, type: 3} + - {fileID: 2800000, guid: 49865d307e9b5e089a7ad9e73dfff3d8, type: 3} + - {fileID: 2800000, guid: 827b6052ee8118888b044bb1ab5e7096, type: 3} + - {fileID: 2800000, guid: 540a8a976f18e69f3a9a06040aebc161, type: 3} + - {fileID: 2800000, guid: eae9a8a283bc667a6874a02e91c00111, type: 3} + - {fileID: 2800000, guid: b7f911f6aa6afbefc8eff3e46534edfd, type: 3} + - {fileID: 2800000, guid: 195f7dc375e8e5f3eaad22e8f0cfbc3a, type: 3} + - {fileID: 2800000, guid: a9ee3302df0f4dbe386bdb37fb71a6f8, type: 3} + - {fileID: 2800000, guid: 6ff729031023d8c7dbc9c12ee68b41d3, type: 3} + - {fileID: 2800000, guid: 5fd1ade951922db86a3bb2d856db4651, type: 3} + - {fileID: 2800000, guid: 98f3f1b5e7f2f9148a41ff1976c1041a, type: 3} + - {fileID: 2800000, guid: 1bc91030077ad5bb7aebe62d9e32c637, type: 3} + - {fileID: 2800000, guid: 12dd78c76e397ba2199898d82e088ef9, type: 3} + - {fileID: 2800000, guid: be824cdd618ba7b49a77c7a849918415, type: 3} + - {fileID: 2800000, guid: 620e73dae9743133aafbbba50198e2b4, type: 3} + - {fileID: 2800000, guid: 3866a095b85fc80ff944b477fe522184, type: 3} + - {fileID: 2800000, guid: 01c66224279e195d3a427d8fbcb53312, type: 3} + - {fileID: 2800000, guid: 115f4005a1c548a0595913b4bb27760f, type: 3} + - {fileID: 2800000, guid: bddbcb78ab540ffaca4fea86861a793a, type: 3} + - {fileID: 2800000, guid: 4a287a1cfb2d75ced865543fc2537cde, type: 3} + - {fileID: 2800000, guid: 29838801612d81246a7123b99bf388f4, type: 3} + - {fileID: 2800000, guid: 272d59e14db399a96808d119b60166f9, type: 3} + - {fileID: 2800000, guid: 7b740df220e94cc7cac34a10b319eeea, type: 3} + - {fileID: 2800000, guid: ea69ea3075c22cb5f9e37ab795f1a11a, type: 3} + - {fileID: 2800000, guid: 236f676df38dc9c95b85b8eda647a1fa, type: 3} + - {fileID: 2800000, guid: dd0ccbec514ab94b38805503703909c4, type: 3} + - {fileID: 2800000, guid: 068020469f3b0dd0095bf5597140f9d5, type: 3} + - {fileID: 2800000, guid: cc64aa92b777d61a3b1a2f9c6ebb8ec6, type: 3} + - {fileID: 2800000, guid: 19c0f0714a7731ddc8ca6b1871008a8a, type: 3} + - {fileID: 2800000, guid: 71afca7c11b144189b314a5b2a514ed5, type: 3} + - {fileID: 2800000, guid: b40283dfe60350c5c89d9a9ce1c8d94b, type: 3} + - {fileID: 2800000, guid: eb8db98838f086dfb9cca8a78224f222, type: 3} + - {fileID: 2800000, guid: bf037247bed3e89c59ad845e65afe2db, type: 3} + - {fileID: 2800000, guid: 0e5a3c0f67fba18429a572beaa1f1112, type: 3} + - {fileID: 2800000, guid: dccb01cc63b4c61538a7c4081075e7e2, type: 3} + - {fileID: 2800000, guid: 7d071c762e2b7c45b9648b7b2b9c2ab6, type: 3} + - {fileID: 2800000, guid: 9db49870869b0be6bb2ad4b19b71fd66, type: 3} + - {fileID: 2800000, guid: 83f454b21c8c5d0ca96fff6b32d53082, type: 3} + - {fileID: 2800000, guid: 49bee3922bdb3c746b8d1ce0846791c3, type: 3} + - {fileID: 2800000, guid: 41855a2efd741d8bb9e37d8bf34bb8f4, type: 3} + - {fileID: 2800000, guid: 220262786a06bf5b4a5bfd4bc45c7e6a, type: 3} + - {fileID: 2800000, guid: 286c6701a7a66ee77928dd7358ce88fa, type: 3} + - {fileID: 2800000, guid: 02d6c690dc3649442b8968f9343a2877, type: 3} + - {fileID: 2800000, guid: ef5cded1587408affa11a615af830933, type: 3} + - {fileID: 2800000, guid: 349c1204da21568b7af8789b5c7226b0, type: 3} + - {fileID: 2800000, guid: b3c9745444e1725d0bb4a5051721c1a4, type: 3} + - {fileID: 2800000, guid: d49f3c33f441bfedba3ce7c5f8ddb56f, type: 3} + - {fileID: 2800000, guid: 89b5e7ad4f5712cd0849ae677f8857e5, type: 3} + - {fileID: 2800000, guid: a3abff674cfe6a1a4a52ec38ad73e017, type: 3} + - {fileID: 2800000, guid: bad7baaf5f575ec688892fe9becd24e9, type: 3} + - {fileID: 2800000, guid: daca5af317c38a874b9d0927986fdbaf, type: 3} + - {fileID: 2800000, guid: 7bdef68ef7f0d11d19134b5201288a03, type: 3} + - {fileID: 2800000, guid: 7e3dd37a886526e9ca4ceda152d721e6, type: 3} + - {fileID: 2800000, guid: be939f72a8df3aba6b1b2b740b714bab, type: 3} + - {fileID: 2800000, guid: c675c6456cfb790e3a99e723b810d682, type: 3} + - {fileID: 2800000, guid: dd4ec8e154108b340993fc58b311ee5c, type: 3} + - {fileID: 2800000, guid: 75fad3cbcb32c0f34b895f3c83e27267, type: 3} + - {fileID: 2800000, guid: cb071372526ae797681a126149b18395, type: 3} + - {fileID: 2800000, guid: f943025f09be3e97bb855d26ecb08abf, type: 3} + - {fileID: 2800000, guid: 8ec58df08e9810963b419d1ad7d849a1, type: 3} + - {fileID: 2800000, guid: bdda667d6103d42b0a4da5bd3555b156, type: 3} + - {fileID: 2800000, guid: e5421f7863977ec5e9d511152eb2f1ee, type: 3} + - {fileID: 2800000, guid: ba132c0ec4acb878e8c8bac520cfcfb4, type: 3} + - {fileID: 2800000, guid: fb3d24ab117b2436b8e8b8364527b3fc, type: 3} + - {fileID: 2800000, guid: 72f9843606654c5158f760a23010bbe3, type: 3} + - {fileID: 2800000, guid: 4501d2917423d6e28989c8733f439d1d, type: 3} + - {fileID: 2800000, guid: c213700a160dfb7e698d0a4bd1c16cca, type: 3} + - {fileID: 2800000, guid: 8f6d1d53bf434fc2b9f302e96fefa920, type: 3} + - {fileID: 2800000, guid: b4e8749b47629943b9918dba81f206e7, type: 3} + - {fileID: 2800000, guid: 943c0dbf1c0f7860b872afd634ddd921, type: 3} + - {fileID: 2800000, guid: 2de9a2f6e0a621658bddc6ae37277e61, type: 3} + - {fileID: 2800000, guid: 372a00d27cff788e2be7a846a7ce3d94, type: 3} + - {fileID: 2800000, guid: 90cc8e1643e7646b0aff80187036e675, type: 3} + - {fileID: 2800000, guid: 76561c0759203f5f4b016c3309b34971, type: 3} + - {fileID: 2800000, guid: 85e850c67eecf81029d3fc200aec134b, type: 3} + - {fileID: 2800000, guid: 031e604f1a1f18b8eac6bd0fbd8f5aac, type: 3} + - {fileID: 2800000, guid: edf89690bab71ed85a8c476a09f92f34, type: 3} + - {fileID: 2800000, guid: f4ff0a60310ea1085912b208fd022f75, type: 3} + - {fileID: 2800000, guid: 9e7f9a6575f94e107b73c18d3b00e2e1, type: 3} + - {fileID: 2800000, guid: 02aa12704b39a122f89b28b149907c57, type: 3} + - {fileID: 2800000, guid: 6adddbf76d66cc981aafe878d28c84ac, type: 3} + - {fileID: 2800000, guid: f2c698b5e5b4991beb6f03145d755bdc, type: 3} + - {fileID: 2800000, guid: 852bd4dd411d5f6a2b040b06e88bcd70, type: 3} + - {fileID: 2800000, guid: f5513b7bccf06cfb69d719d52a6ab6fb, type: 3} + - {fileID: 2800000, guid: df54d5095508a6f13a537c9cf04cb7b2, type: 3} + - {fileID: 2800000, guid: 03e13715364505a17a41ecaedcee06f1, type: 3} + - {fileID: 2800000, guid: f81fb26d564504e46ae15b4db749bbcc, type: 3} + - {fileID: 2800000, guid: ae3a59541443a390eab560579710e056, type: 3} + - {fileID: 2800000, guid: 1c47c6d8111cc2551b932b21797f2a70, type: 3} + - {fileID: 2800000, guid: ed14689e6b1319ad4a2eb6951d8b5694, type: 3} + - {fileID: 2800000, guid: 298863293e70971caa7a507cb2c22c3a, type: 3} + - {fileID: 2800000, guid: 9d25695879b19dc8191cf066f4a1e14d, type: 3} + - {fileID: 2800000, guid: f8a9923eed02867abac717fb865c99b9, type: 3} + - {fileID: 2800000, guid: 679cbc431e17342d6abd3e6e710f403b, type: 3} + - {fileID: 2800000, guid: 87f1ee9ddd1bbe01d826928e753b93c7, type: 3} + - {fileID: 2800000, guid: 7767585d3405da89190773b3b6fd52a8, type: 3} + - {fileID: 2800000, guid: 6963de4700f50368fa20506034b5f72a, type: 3} + - {fileID: 2800000, guid: c109b3fb4a017fbbf8b6fc5967f923dc, type: 3} + - {fileID: 2800000, guid: cbd4aeea5fa1b9daa9d84e34fb3647a1, type: 3} + - {fileID: 2800000, guid: 0ea4f06e668a633978f69d4f873890d4, type: 3} + - {fileID: 2800000, guid: 3789dc1d4bf6e97f7918608cce9c519c, type: 3} + - {fileID: 2800000, guid: dbed6a4725cf14074b3c5bc8761288be, type: 3} + - {fileID: 2800000, guid: d995999a0938546df825fc4f866d6ee5, type: 3} + - {fileID: 2800000, guid: 89930dd31b46377cabd06a94037cb912, type: 3} + - {fileID: 2800000, guid: 2662b3d989f8131c9938188bef17cd74, type: 3} + - {fileID: 2800000, guid: 157409304f5409e44ba99bafcd75e4e5, type: 3} + - {fileID: 2800000, guid: b89356fd67876131a9e2e45281d62990, type: 3} + - {fileID: 2800000, guid: 0c4adcff786a8bf549b64db0b9d34b19, type: 3} + - {fileID: 2800000, guid: 9c06dc309a27bd99d842df13c4f95910, type: 3} + - {fileID: 2800000, guid: f9c76396a250a3b2c819f33f8df1dfe5, type: 3} + - {fileID: 2800000, guid: c1245f48df41d1f73ad55a070ff8016c, type: 3} + - {fileID: 2800000, guid: c80dbd8e69b86ff7e8b86e52d8febc76, type: 3} + - {fileID: 2800000, guid: 84c02a151d793ca9cb7ca6b8bd6e5e3b, type: 3} + - {fileID: 2800000, guid: 3ac7462f1200f9479ae7519aee68a553, type: 3} + - {fileID: 2800000, guid: 2856a04ea2fe81866b03efa6176a27b8, type: 3} + - {fileID: 2800000, guid: 8e4e3ec31ed3d2392b0d9c8047eb6961, type: 3} + - {fileID: 2800000, guid: aecd175309d294fcb8c37498946518a2, type: 3} + - {fileID: 2800000, guid: f794ca19773df0719b21817ad4b2b078, type: 3} + - {fileID: 2800000, guid: 26d6f147dfc92ed12aaca0a7d27d584a, type: 3} + - {fileID: 2800000, guid: 2aace7b244eb27222b9370e00ebb1b48, type: 3} + - {fileID: 2800000, guid: e0a57495cff407ee9a13d89d34ffae0d, type: 3} + - {fileID: 2800000, guid: a785e13ba4eed7fd5b889cf68a27e58e, type: 3} + - {fileID: 2800000, guid: 15a32c9ad9e9df997b3205ab7adc081a, type: 3} + - {fileID: 2800000, guid: 47b78291ab7045c6c9ad4275a68ce60f, type: 3} + - {fileID: 2800000, guid: 8cef7caadf55266679191e719d62a419, type: 3} + - {fileID: 2800000, guid: 68bbee40b5bc7507fa3832b6cfc1f9ba, type: 3} + - {fileID: 2800000, guid: 280bcdad195bf14168276536c2afd703, type: 3} + - {fileID: 2800000, guid: 1040a1f0e4b8046e28114563ef12729e, type: 3} + - {fileID: 2800000, guid: 7da02c63abdea34debe24724fdfdc829, type: 3} + - {fileID: 2800000, guid: bebee34bbe79a67b6ae58845f010e00a, type: 3} + - {fileID: 2800000, guid: 657cc23e711ca100c94d77614a9a1a6c, type: 3} + - {fileID: 2800000, guid: 150d2334953b6f59f82498d33502ea6f, type: 3} + - {fileID: 2800000, guid: f86dbc324d5c78301906f64773a7443f, type: 3} + - {fileID: 2800000, guid: e75b64e870862d3b48bf0bcb7abb5fc6, type: 3} + - {fileID: 2800000, guid: 20e13a7d1a6c117fc9d644cc0ffddad0, type: 3} + - {fileID: 2800000, guid: 9438132c0617c6bbc95cda456e2cc973, type: 3} + - {fileID: 2800000, guid: 79429f979bdb6c1a8bf0f7b9305652a4, type: 3} + - {fileID: 2800000, guid: c4d284af9cc67fe60aaa09d0c6bdcfc6, type: 3} + - {fileID: 2800000, guid: 2f9b567d3f611220db97c6a8724f1c00, type: 3} + - {fileID: 2800000, guid: 4e7719afbc07d00f6ae55491521fa261, type: 3} + - {fileID: 2800000, guid: 35a85776e55256cfa96e4efca55860e8, type: 3} + - {fileID: 2800000, guid: bd1aae54de330709f81ce487987b8d2c, type: 3} + - {fileID: 2800000, guid: 0723c22d38c92d3cf8f7e9dca0dfdfac, type: 3} + - {fileID: 2800000, guid: 799e1f97ea4509e24b63ec01a0c8ef53, type: 3} + - {fileID: 2800000, guid: 37665b3cf8f6c2f688f863e085cc96fc, type: 3} + - {fileID: 2800000, guid: 83da787a05efbdbaca86d211ddd67a09, type: 3} + - {fileID: 2800000, guid: c9cf3da08eaae8e7d95cc9406598effa, type: 3} + - {fileID: 2800000, guid: 927bc5a30638e8131a81cd3d5ff83388, type: 3} + - {fileID: 2800000, guid: 5248907572899d21d8191f1216ef9a53, type: 3} + - {fileID: 2800000, guid: d5c7a9e2901cc50f6bb5c8d505cfca72, type: 3} + - {fileID: 2800000, guid: c64192ad9a2db6cc9b77303f5fb5d03b, type: 3} + - {fileID: 2800000, guid: c83b5112d93d973b4b4cf2b579ee4228, type: 3} + - {fileID: 2800000, guid: c84a12e0eeb79b3798914965a151163f, type: 3} + - {fileID: 2800000, guid: e3ac760f7d9b9b8489db31eb586a1254, type: 3} + - {fileID: 2800000, guid: 522a9db8885cb2e08a647fd2d18daa56, type: 3} + - {fileID: 2800000, guid: 70694232e6013737eaad624e70c9f77d, type: 3} + - {fileID: 2800000, guid: 14cbce0d25637fb38a866d9e1be4262c, type: 3} + - {fileID: 2800000, guid: 80ce9d777010e15f4a0a3dfa924641f7, type: 3} + - {fileID: 2800000, guid: f6e7517c3b94602c79702e0fec00b0c2, type: 3} + - {fileID: 2800000, guid: 625e18044577a30bbb2060055857f742, type: 3} + - {fileID: 2800000, guid: 9fc089b69065b7807aa9c086e391007b, type: 3} + - {fileID: 2800000, guid: 3e4345c1e72ed4ec2b28a92c67ab4e57, type: 3} + - {fileID: 2800000, guid: 50b6aa8cc7e355966bcaecf733e99af2, type: 3} + - {fileID: 2800000, guid: 08a20c4bab446a4748df70e717cac3d1, type: 3} + - {fileID: 2800000, guid: c711d18a15318dee398327fa86655d75, type: 3} + - {fileID: 2800000, guid: f1b33071530ef693ba3f5e709e38e7af, type: 3} + - {fileID: 2800000, guid: a748ba4f29cb382b28f75da9a76cab49, type: 3} + - {fileID: 2800000, guid: 3c80a9c3ee4425399a41e42accf9580e, type: 3} + - {fileID: 2800000, guid: f0f45bc034f01cd0e8bbaffd2842d431, type: 3} + - {fileID: 2800000, guid: 3dcd625b3266890b5bb92bab551d1a0c, type: 3} + - {fileID: 2800000, guid: 6dd42e347f2983036b8c97e15999c90d, type: 3} + - {fileID: 2800000, guid: da2f14188576a1575bb20f5afee54919, type: 3} + - {fileID: 2800000, guid: ae20ecf1ce68849b3bdb3cd92cbe39ea, type: 3} + - {fileID: 2800000, guid: 8a57521c684f7ac3488f90cbc39d5fd8, type: 3} + - {fileID: 2800000, guid: f1577976faeb79461a7a9a79190b6b4b, type: 3} + - {fileID: 2800000, guid: 594155866fdbee1b58696ab68d1959a6, type: 3} + - {fileID: 2800000, guid: 3a1d4aaac08c16e6bbd682137d125f7f, type: 3} + - {fileID: 2800000, guid: 34fd05b7d89511b11aca0296b43c5873, type: 3} + - {fileID: 2800000, guid: f38a2dac9dd5e9b5fa3b3b73901b53e2, type: 3} + - {fileID: 2800000, guid: 0a779f173dc9028d3b660a2779c2e91f, type: 3} + - {fileID: 2800000, guid: 371006b48caca779aa7ba96ea35c066e, type: 3} + - {fileID: 2800000, guid: c1b204da6f89d2ceeb74b3fd6b0029f3, type: 3} + - {fileID: 2800000, guid: 394d62399240c431981b94616449179b, type: 3} + - {fileID: 2800000, guid: 7bd465c185f684f618e56d439bf20310, type: 3} + - {fileID: 2800000, guid: dd1e5afaed96bb38ebf0d1503c5a0d58, type: 3} + - {fileID: 2800000, guid: da71bf5055b765d5ebbefd0bb5eb120b, type: 3} + - {fileID: 2800000, guid: d819abd6cb3c8d382ae411ccd52ef717, type: 3} + - {fileID: 2800000, guid: 60320f8c78cd07d8595f05bc8ab83b54, type: 3} + - {fileID: 2800000, guid: b08721c0ae90d870398ad3b47d48a029, type: 3} + - {fileID: 2800000, guid: db4674d06aefae26899b734c571bdd20, type: 3} + - {fileID: 2800000, guid: f1f598436e883a103be05287bde4c979, type: 3} + - {fileID: 2800000, guid: 09a8399ecfbca64f4931a64a49b75f1d, type: 3} + - {fileID: 2800000, guid: 03ca744af66a0d60295e4d2f74907888, type: 3} + - {fileID: 2800000, guid: b4218311ddd285291b4b3f7c9305e877, type: 3} + - {fileID: 2800000, guid: 9ceb5f6af095095f0bd2c9fa26fa69aa, type: 3} + - {fileID: 2800000, guid: f0f4e91a21221b6d9906a08958128f78, type: 3} + - {fileID: 2800000, guid: 240ed44db69e3bb8ca850704e6da2c60, type: 3} + - {fileID: 2800000, guid: 402163db87c4ad9a796dfab615fa5187, type: 3} + - {fileID: 2800000, guid: 5643eb5762f0c7e009b727b180038cec, type: 3} + - {fileID: 2800000, guid: 8a8215a4bfb1ab4a78e589c2c636f53a, type: 3} + - {fileID: 2800000, guid: 7cb08806ee1a9941c99ab1af0b1f702a, type: 3} + - {fileID: 2800000, guid: 40001f285675ebb57824ecc7f96b9d1e, type: 3} + - {fileID: 2800000, guid: 08b722beefc1e824296b85c484c99106, type: 3} + - {fileID: 2800000, guid: 0b51f1891a3844aad9855232d2b727f8, type: 3} + - {fileID: 2800000, guid: 6ed40afe83287716bbddd9866586a247, type: 3} + - {fileID: 2800000, guid: 844d8099313e3b44bb89342cd303c05e, type: 3} + - {fileID: 2800000, guid: 042197a3765c901edbd135f32ff4a5bb, type: 3} + - {fileID: 2800000, guid: bc1a34949777ec6e8a225d14fb0d9982, type: 3} + - {fileID: 2800000, guid: e91608c78c4a069eeab1841009f22b7e, type: 3} + - {fileID: 2800000, guid: 96e21489d4f9be4759b6b353d0c03834, type: 3} + - {fileID: 2800000, guid: 2705022dc8ca91af99710941262982f4, type: 3} + - {fileID: 2800000, guid: 538fb5f9e9a5118aa9cb9ac3fa289173, type: 3} + - {fileID: 2800000, guid: 92e43c775ef242557b60a142124fdefd, type: 3} + - {fileID: 2800000, guid: 3fb5232b7511d16cd9a94c2385c28328, type: 3} + - {fileID: 2800000, guid: f2215f2af883c4c89a9484a945ce159d, type: 3} + - {fileID: 2800000, guid: b39ff33d39b2a5e30b82786e83b42e0b, type: 3} + - {fileID: 2800000, guid: e3a883c999c21d37bba4ecca19f67de0, type: 3} + - {fileID: 2800000, guid: f0d76e65ea629aca29a3ce2793872f7c, type: 3} + - {fileID: 2800000, guid: dcb6992a665b0e742ab2fc45232a8a00, type: 3} + - {fileID: 2800000, guid: 9e666096a25af0b229d04b6048688434, type: 3} + - {fileID: 2800000, guid: a21932911d1435f44bb0b29e3fcc05ee, type: 3} + - {fileID: 2800000, guid: 2dabffbe5b3377e34abe2bf85799de7e, type: 3} + - {fileID: 2800000, guid: 07682d1f469efb67c97cc4e61ddd1e5e, type: 3} + - {fileID: 2800000, guid: b1625608abb081902ab56610a41028ae, type: 3} + - {fileID: 2800000, guid: ff7be7341f122fa8682c879b23c0a034, type: 3} + - {fileID: 2800000, guid: 3ea8d75f410cb9ee3b74c819ca2a4f28, type: 3} + - {fileID: 2800000, guid: 38a07cb9f82ec6bae8d9a285565bcef7, type: 3} + - {fileID: 2800000, guid: 90b3cdcd782c86019afe6ac15063bf60, type: 3} + - {fileID: 2800000, guid: 0a142cb35a0c8ed6697be164e0aea899, type: 3} + - {fileID: 2800000, guid: ed77c60be946aab9ab0d9b829b59da6e, type: 3} + - {fileID: 2800000, guid: 53cdca53a80caedfd87e43b1f89beb19, type: 3} + - {fileID: 2800000, guid: 9f290a2c7b4f5e9698a7555dde3d341b, type: 3} + - {fileID: 2800000, guid: 668a2b77b6aa4b136ab1f4f49d57c30e, type: 3} + - {fileID: 2800000, guid: 0200f220cf51c569ab8bff1a1238e62a, type: 3} + - {fileID: 2800000, guid: c49ba38d244afbea785efd2f6770e742, type: 3} + - {fileID: 2800000, guid: c6a23892aa60d4a79b723b77e8bd223a, type: 3} + - {fileID: 2800000, guid: cc552c3984968a18ba818cf67f0438ad, type: 3} + - {fileID: 2800000, guid: e520e6b5252ce4990989866b2d2fc267, type: 3} + - {fileID: 2800000, guid: bb27b7d541778c2b581d29047e109315, type: 3} + - {fileID: 2800000, guid: 1df4157d8f2f0d62e971e10f34601b96, type: 3} + - {fileID: 2800000, guid: 363e3c4313095259ca7c785910845e47, type: 3} + - {fileID: 2800000, guid: 505661f5ec2db06e481d81d46ad33e31, type: 3} + - {fileID: 2800000, guid: 29c413ff81c64174f870d0cc56d1906c, type: 3} + - {fileID: 2800000, guid: aec8923bb3249b75cb00a23f9c9c64d7, type: 3} + - {fileID: 2800000, guid: 75457f288a672cf1c88bc4cbd862f07f, type: 3} + - {fileID: 2800000, guid: 7d1826fc5a9d913c2979e4a18d1ebf49, type: 3} + - {fileID: 2800000, guid: 9a6ac4f441a859243917f0c2b60a1b76, type: 3} + - {fileID: 2800000, guid: adb32ed485dd9c3ab97a914fbc3f14e1, type: 3} + - {fileID: 2800000, guid: 237212243311fefaaac51f694da3f378, type: 3} + - {fileID: 2800000, guid: 6b58c6cc1837ddb1c9e63d7082d14497, type: 3} + - {fileID: 2800000, guid: 3866da1dc464c112dbb672dbcac83d4e, type: 3} + - {fileID: 2800000, guid: bc770fe5f747d1d92a897eb1e11c9236, type: 3} + - {fileID: 2800000, guid: f9caabebbb98278cf9e337feed33f72c, type: 3} + - {fileID: 2800000, guid: a51aac9a98ad9a5f5a18c538393b688b, type: 3} + - {fileID: 2800000, guid: 8a51ab44422fc7ff787184896353fd51, type: 3} + - {fileID: 2800000, guid: 0757c518daa59a990b2958143b96f1da, type: 3} + - {fileID: 2800000, guid: 59e7a8fcbf9252c1d9c2c51743188572, type: 3} + - {fileID: 2800000, guid: c9d2abbb1e1a5ee84aa4b4e187939fdf, type: 3} + - {fileID: 2800000, guid: 69d3547963c6c0439be165072fbd0544, type: 3} + - {fileID: 2800000, guid: 367f74af1c95d7da18f381d6bd6f55fa, type: 3} + - {fileID: 2800000, guid: db0fc6a606f189d25abc2d18ae611318, type: 3} + - {fileID: 2800000, guid: 967f5dc8c8a9b5161aef7c67510384f7, type: 3} + - {fileID: 2800000, guid: a2ee50c5cd09731edae4a48a9eb0cb69, type: 3} + - {fileID: 2800000, guid: aa3dbb5e1be0758b0b60492480ea1043, type: 3} + - {fileID: 2800000, guid: 1ad0c1f0578ae3f04ac8f7dedae0734d, type: 3} + - {fileID: 2800000, guid: f8069ab3f8a1e21c2a6b720dd28890cb, type: 3} + - {fileID: 2800000, guid: b3a24dccc4baf9d7bb292e09a682a506, type: 3} + - {fileID: 2800000, guid: 8a352bd099c57fd8690740904e01ca8b, type: 3} + - {fileID: 2800000, guid: a4b3c1724a8b83015b8f09a3334e362e, type: 3} + - {fileID: 2800000, guid: e5553642ee43b41f2af23ac49f81c11b, type: 3} + - {fileID: 2800000, guid: 1226bef867bdfa72e9a302273ff3aa32, type: 3} + - {fileID: 2800000, guid: dcba487f02aa9aea1a18e2dd058690fa, type: 3} + - {fileID: 2800000, guid: fb4610d75993a1e9eb0809734352f33d, type: 3} + - {fileID: 2800000, guid: 0778d65a9d4d4fae98a24d95202b8e37, type: 3} + - {fileID: 2800000, guid: 80de77ab384b966f5a8411e07c39f583, type: 3} + - {fileID: 2800000, guid: 966254d3ee043368da463e20dde06e6c, type: 3} + - {fileID: 2800000, guid: 60e0482d8801caeccb1c177d96da7112, type: 3} + - {fileID: 2800000, guid: 3736113d9c1079d76a352b42cfec258b, type: 3} + - {fileID: 2800000, guid: e782000eef4ec55209ea7c39a77bccdb, type: 3} + - {fileID: 2800000, guid: 56b3e6c520f57de96a3d8c03225c768e, type: 3} + - {fileID: 2800000, guid: 85e7ff5caa604f1e198a3d79c512b414, type: 3} + - {fileID: 2800000, guid: 39a987f708208fe3ea4b3643f323a3c2, type: 3} + - {fileID: 2800000, guid: 9299d279e456f39638e64d04c67028db, type: 3} + - {fileID: 2800000, guid: 4252d964cad2a14da91e9573a393d4a9, type: 3} + - {fileID: 2800000, guid: 25b96553917a42036b7cb88c433bcfb3, type: 3} + - {fileID: 2800000, guid: 21331faba3758ffa4818ad93850f167e, type: 3} + - {fileID: 2800000, guid: 5062b34df3af719b8bc9a245515412cb, type: 3} + - {fileID: 2800000, guid: a975721b38587e7bb920a27b6c0f5910, type: 3} + - {fileID: 2800000, guid: 9ece58a87aba5c10e9d4e16eb5283a84, type: 3} + - {fileID: 2800000, guid: 20dc4edea8bd051c38c0635d42df3d18, type: 3} + - {fileID: 2800000, guid: 1ccb49a4292bf5d0ea5f8686a5f1c467, type: 3} + - {fileID: 2800000, guid: 6e7d1d99c6d2ae96ab060064f2110a05, type: 3} + - {fileID: 2800000, guid: a3299d740e6506f768ae62a34cdaf5a6, type: 3} + load_from_resources_if_empty: 1 + _texture: {fileID: 0} + _renderer: {fileID: 2302102554894629329} + use_shared: 0 + _last_sample: 0 + load_path: Textures +--- !u!136 &3674649710580244811 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Runtime/Prefabs/Obstructions/ObstructionCylinder.prefab.meta b/Runtime/Prefabs/Obstructions/ObstructionCylinder.prefab.meta new file mode 100644 index 000000000..7e4fb185b --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionCylinder.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 55c06204392f83553a885357fe39f972 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Obstructions/ObstructionSphere.prefab b/Runtime/Prefabs/Obstructions/ObstructionSphere.prefab new file mode 100644 index 000000000..090eb13c1 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionSphere.prefab @@ -0,0 +1,654 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2302102554894629341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2302102554894629331} + - component: {fileID: 2302102554894629330} + - component: {fileID: 2302102554894629329} + - component: {fileID: 2302102554894629343} + - component: {fileID: 2302102554894629342} + - component: {fileID: 2302102554894629332} + - component: {fileID: 7992057885548089325} + m_Layer: 10 + m_Name: ObstructionSphere + m_TagString: b + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2302102554894629331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.1437268, y: 3.4423447, z: -12.843082} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2302102554894629330 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Mesh: {fileID: 4300000, guid: 9b361a5cb5c401068945d1c91c2da3d3, type: 2} +--- !u!23 &2302102554894629329 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e7bc9ae29014cf4c9aa3e8a67cbb43da, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!114 &2302102554894629343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 429eddc2e17c50341b357a1de655ebf6, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _tiling_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _offset_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _color_space: + _space: + _min_: {x: 0.2, y: 0.2, z: 0.2, w: 0.2} + _max_: {x: 0.8, y: 0.8, z: 0.8, w: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _smoothness_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _reflection_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _use_shared: 0 +--- !u!114 &2302102554894629342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a22c41a371cb5014b955705c804c74aa, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _space: + _space: + _min_: {x: 0, y: 0, z: 0} + _max_: {x: 1, y: 1, z: 1} + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 +--- !u!114 &2302102554894629332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de609666bdf4489dbac2a6e84eaeb992, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _textures: + - {fileID: 2800000, guid: 5f599c75d7d2d3f2397e633a0a2cad10, type: 3} + - {fileID: 2800000, guid: 35997aa1fb9073cd5956b28c2f1733f1, type: 3} + - {fileID: 2800000, guid: 64e18793722966d539352fece171aca4, type: 3} + - {fileID: 2800000, guid: f2ab9b3b5d1f72ad98d471682b8cf7c9, type: 3} + - {fileID: 2800000, guid: 0d17962e11d952709b3e26b3ff68a395, type: 3} + - {fileID: 2800000, guid: 9fb9470f3fd529bd39417c7faa9774a7, type: 3} + - {fileID: 2800000, guid: 84e88be29a33c876782d228a08469e9e, type: 3} + - {fileID: 2800000, guid: b3d79c300971ed5068f42dbb851fdb91, type: 3} + - {fileID: 2800000, guid: 1f775d15cc88244adbf47cd8c28560b7, type: 3} + - {fileID: 2800000, guid: 242c691845e32213aa72d268bf8c3afc, type: 3} + - {fileID: 2800000, guid: f978018f756d0e8d69eab173e1c5e26e, type: 3} + - {fileID: 2800000, guid: b331e7a9d4c32f44b91437ea7a6392a3, type: 3} + - {fileID: 2800000, guid: 21d14a05f13516581b7a821bd7327c2c, type: 3} + - {fileID: 2800000, guid: abafbf2b15ebd8d3eb18e69c5af89423, type: 3} + - {fileID: 2800000, guid: c7d8a0f5affc52f0198dff2bc0d55bcc, type: 3} + - {fileID: 2800000, guid: b884fd7c59514a6e08465daab211eecc, type: 3} + - {fileID: 2800000, guid: d238841fc28268738bdb07634559baa8, type: 3} + - {fileID: 2800000, guid: 7ce3f4f3a46be893eb352aa8bc6757c5, type: 3} + - {fileID: 2800000, guid: 482ca8a197b1af65bbf8f5ec5db7b693, type: 3} + - {fileID: 2800000, guid: e9009b5738cfe13fc859c01cb6bebd3a, type: 3} + - {fileID: 2800000, guid: e72bbde12cfa52a1fbff62fb30bdad3c, type: 3} + - {fileID: 2800000, guid: 449c150033d2d373ca3fa6fb1c52d7aa, type: 3} + - {fileID: 2800000, guid: 322c8e42837226afb8e5f7218a22f615, type: 3} + - {fileID: 2800000, guid: c7b04f33dd1b448d8932320361d31781, type: 3} + - {fileID: 2800000, guid: f8a7d4b8268fa7676982e6f50e7366ec, type: 3} + - {fileID: 2800000, guid: 1a5bf1e28e1e70f86824301a1f8b52e5, type: 3} + - {fileID: 2800000, guid: 92cb44d88c40cfd338264568800a5c5f, type: 3} + - {fileID: 2800000, guid: d6fe8cd585a7fc088b45ea5a56563bd7, type: 3} + - {fileID: 2800000, guid: 93e5a176835fcfc9b8d742b4741aa5da, type: 3} + - {fileID: 2800000, guid: 349c4081e4aaa23658f4e8b0aa786a37, type: 3} + - {fileID: 2800000, guid: c4616dd426db89b73b327120c4f6bc54, type: 3} + - {fileID: 2800000, guid: fc57258ba0cbf96019b082db7f2a783a, type: 3} + - {fileID: 2800000, guid: 547405889a5c4d37188395e8763a7501, type: 3} + - {fileID: 2800000, guid: 744a73a1523db1fc7b167c88357a6252, type: 3} + - {fileID: 2800000, guid: c2a249280a347039ea24e702dc562703, type: 3} + - {fileID: 2800000, guid: 5ace4931437b72abca9fe986f35a16bc, type: 3} + - {fileID: 2800000, guid: 239842f75ff0d38f788d3f76b11cd71a, type: 3} + - {fileID: 2800000, guid: f11ab4af40b591ae0a197d3185ffdec5, type: 3} + - {fileID: 2800000, guid: 38ee90bfd9b48ebd19f991475b9bd374, type: 3} + - {fileID: 2800000, guid: 72a34f3f76339da6abac282de8138d87, type: 3} + - {fileID: 2800000, guid: 0b91faa29855e49808f8b5d44a396b4f, type: 3} + - {fileID: 2800000, guid: b167686af5d9f9d53ac3b2cc13db04c8, type: 3} + - {fileID: 2800000, guid: c0433e91a072738bb8adc6d22234c44a, type: 3} + - {fileID: 2800000, guid: 3f04f04af0c2105a6a202fee90911682, type: 3} + - {fileID: 2800000, guid: e2cc7b6f3a7ea7a58b933e42cb5ca640, type: 3} + - {fileID: 2800000, guid: 3afa4fc416e1e31c787db2cfbdaae3ea, type: 3} + - {fileID: 2800000, guid: 8018e57449252a678a62594d35626af8, type: 3} + - {fileID: 2800000, guid: e60a34c308361185c88aac528d680eb9, type: 3} + - {fileID: 2800000, guid: a15018ab9ac7f59668731a91c64a8e68, type: 3} + - {fileID: 2800000, guid: e78c3f43d704bd6a7ac44d6b5155cd57, type: 3} + - {fileID: 2800000, guid: 8e3d6cfd5c8b263aabf61c7baa0f2202, type: 3} + - {fileID: 2800000, guid: 5de3299c2b3108f778f1083cd300014f, type: 3} + - {fileID: 2800000, guid: cfcec2ca8476e43d18027f01a8bd2946, type: 3} + - {fileID: 2800000, guid: 8e0921fa566d6cf04ba0a96a62bd6245, type: 3} + - {fileID: 2800000, guid: a94988f60f214c656bf7f7024bf62e24, type: 3} + - {fileID: 2800000, guid: 63f05e96863c0cf19ab8f94c1c3c1559, type: 3} + - {fileID: 2800000, guid: 2e2fc84d890be4dcb9ca0b5f76634eee, type: 3} + - {fileID: 2800000, guid: bb2dc4d5af36e35e2bdd8959826900a5, type: 3} + - {fileID: 2800000, guid: 9de42e16ca0d5d779a4e1f429878e1a7, type: 3} + - {fileID: 2800000, guid: 59a99f906bb7070ddbb1d0b7ad9f1a5f, type: 3} + - {fileID: 2800000, guid: 9c8f9403db897b36585b670783df3ea8, type: 3} + - {fileID: 2800000, guid: d13d315f27fceba2dbf83afec85ac3a7, type: 3} + - {fileID: 2800000, guid: dea1cd11bf285cdc9942eee3dc6f161a, type: 3} + - {fileID: 2800000, guid: e7b9b905cc918a1bc8f2b2efad972505, type: 3} + - {fileID: 2800000, guid: 5c85e9cd3ec590d21874ffa8d6360a94, type: 3} + - {fileID: 2800000, guid: ce246d761b4ef5004be6ae07fc0db1a3, type: 3} + - {fileID: 2800000, guid: 2443f0fee7f3a80159c6633341f5f47d, type: 3} + - {fileID: 2800000, guid: b9cc471440a74400d98e2908420b88d2, type: 3} + - {fileID: 2800000, guid: a11bf7acb0668c9efafab0efa992a669, type: 3} + - {fileID: 2800000, guid: c2daaa1ac2f78fb0baddf28ad071ecf6, type: 3} + - {fileID: 2800000, guid: 51419fb9959103351925225870b4b4a9, type: 3} + - {fileID: 2800000, guid: 7edb149c74f886a1182eb4d8cd3989d4, type: 3} + - {fileID: 2800000, guid: d01b2f983c50eb7df9ea73506dbd8bc8, type: 3} + - {fileID: 2800000, guid: 5996ed09056f967b4b7f09f0b7bfcb54, type: 3} + - {fileID: 2800000, guid: 890ad4627790e6ed99c6fc658522a04f, type: 3} + - {fileID: 2800000, guid: 125180fb60693811b89970c31746ab99, type: 3} + - {fileID: 2800000, guid: a7bc4e666025adb67b3571b680b24c12, type: 3} + - {fileID: 2800000, guid: 15b8b31621fa8c8d797d19906412d090, type: 3} + - {fileID: 2800000, guid: 53241d4b28bdcf92588925ea85b953ec, type: 3} + - {fileID: 2800000, guid: 148abc0f11d542f308e7a85023ac7076, type: 3} + - {fileID: 2800000, guid: 33fe32ac3bfe2f7d3b5fad180e9e5d8d, type: 3} + - {fileID: 2800000, guid: ebfda5d01d6259d4db534bb12c5495c6, type: 3} + - {fileID: 2800000, guid: 8d0c527b34bd2635f8511c9e0ea201f4, type: 3} + - {fileID: 2800000, guid: ad00aa6df81675397857dd27656145cb, type: 3} + - {fileID: 2800000, guid: 6dd7e7a3f083d02148407eb88455d179, type: 3} + - {fileID: 2800000, guid: 0ba144e573c92f529ad708694edca4be, type: 3} + - {fileID: 2800000, guid: 7abd5a5900ef7042c94a9f1baea716c0, type: 3} + - {fileID: 2800000, guid: 220e2a7b82ffe4ca9b17de0d4e7fc57d, type: 3} + - {fileID: 2800000, guid: ddebf5771a8b33ca7a07ce719664f372, type: 3} + - {fileID: 2800000, guid: 50dbc1da7beebdc938cd6c8ecb3c7153, type: 3} + - {fileID: 2800000, guid: e84abad7ad3564e3590b8b0ed95893b6, type: 3} + - {fileID: 2800000, guid: 0a3d69b4b8182474ea9af5265dddde5c, type: 3} + - {fileID: 2800000, guid: b1d1b183a4d860b6d9d4d84fca5252f5, type: 3} + - {fileID: 2800000, guid: 698163fb7eeb500ef96ea7e79f4a4080, type: 3} + - {fileID: 2800000, guid: 7cff9f7095b86cac080c32361338d2e4, type: 3} + - {fileID: 2800000, guid: 4fa42e68235808872af68d503a05ec72, type: 3} + - {fileID: 2800000, guid: 44b0fe3be11aa3fc4a66d590464634c5, type: 3} + - {fileID: 2800000, guid: 381fd379b20851d8bafbf9f68b698b82, type: 3} + - {fileID: 2800000, guid: 5cbc170583d04417c9082b3e407c35f0, type: 3} + - {fileID: 2800000, guid: 8ca02a1d900fed08ea63f17fee4a5e66, type: 3} + - {fileID: 2800000, guid: 0b610d7abf4e9f0dc801f5eddbd16d59, type: 3} + - {fileID: 2800000, guid: 12cf492b4b8055da2a0beab8f1f60bea, type: 3} + - {fileID: 2800000, guid: c1bf0dbba7455ceb0acc4104aab91fd6, type: 3} + - {fileID: 2800000, guid: 31585c155dd6735cf9cc4a32a8f2962c, type: 3} + - {fileID: 2800000, guid: 9c7c9ffb62c4ed1c6b0ab14c0c2d58f4, type: 3} + - {fileID: 2800000, guid: 673933e3ae75fbd0bb858b41e7b9ac57, type: 3} + - {fileID: 2800000, guid: 29e10c7d78307302ab8fe96fc3c9ea7d, type: 3} + - {fileID: 2800000, guid: 5dc3d40006c2ef89dae46a999de6a4a3, type: 3} + - {fileID: 2800000, guid: 1d658835cedec7a38af140197779158f, type: 3} + - {fileID: 2800000, guid: 2786e79ec3be0b43d9f4cf58a3a9261f, type: 3} + - {fileID: 2800000, guid: c91454be3cebf185ab09aff353e6caad, type: 3} + - {fileID: 2800000, guid: d5d942b1c51d86ebba9fcf55728e89ce, type: 3} + - {fileID: 2800000, guid: c9e4963dc97837b28b416f991fe0402b, type: 3} + - {fileID: 2800000, guid: 38ba08b2806887c9ba61605bcb5f7e72, type: 3} + - {fileID: 2800000, guid: 07e95190c9115015990e534d6b5a76cc, type: 3} + - {fileID: 2800000, guid: 45444296d1134d016ba2e9b6668752a9, type: 3} + - {fileID: 2800000, guid: 2998861db761580678b44daf33af38b4, type: 3} + - {fileID: 2800000, guid: 8cec23edbbd2c469682ca9ec4cbec9a9, type: 3} + - {fileID: 2800000, guid: 1d23092ddccf645219286dd346c89604, type: 3} + - {fileID: 2800000, guid: 2083c331c3e0e810694c7c8860371c48, type: 3} + - {fileID: 2800000, guid: 4b7bfc67fb8a14705bd3611b29130ce3, type: 3} + - {fileID: 2800000, guid: 9e359b531b107bf37aa6e4f3df08d300, type: 3} + - {fileID: 2800000, guid: 80db4effcc199d872a3da8436a78c58d, type: 3} + - {fileID: 2800000, guid: 85d6a82043bc966b8990c14da05c148e, type: 3} + - {fileID: 2800000, guid: 7f590f9b699d83140a84c5574dab3d39, type: 3} + - {fileID: 2800000, guid: 47ad1bead5252c92d840e4ebacc0540b, type: 3} + - {fileID: 2800000, guid: cc207009b2afc6ba7abeac568c8917df, type: 3} + - {fileID: 2800000, guid: 8c4f8c558f1e9b99bb4be1ba88ec8dad, type: 3} + - {fileID: 2800000, guid: faf04a8c261844e9db743a0cf2d731cd, type: 3} + - {fileID: 2800000, guid: 578c224320017de8a84379452f1ca231, type: 3} + - {fileID: 2800000, guid: 282c9613da3980702a2c0daeb9ba0bfa, type: 3} + - {fileID: 2800000, guid: d3112b0dd75646391a66bcff0b6ed05d, type: 3} + - {fileID: 2800000, guid: 5de36759b8ee98525ba73d18914315b3, type: 3} + - {fileID: 2800000, guid: 03525ff13fd626578b5bc7f6275bf3dd, type: 3} + - {fileID: 2800000, guid: 047d55b6c222e3d068183678d3027d7a, type: 3} + - {fileID: 2800000, guid: 05c0df2616d6e2e9390aad50ddeb21b1, type: 3} + - {fileID: 2800000, guid: 36ea701974c9fac79b571aca662dbc22, type: 3} + - {fileID: 2800000, guid: ae4131e8bccee5e848a43f92e75f7d55, type: 3} + - {fileID: 2800000, guid: a6f05734b7b843a339342298ccb24b36, type: 3} + - {fileID: 2800000, guid: f8671588dab50a611bcb50d861c0d2f4, type: 3} + - {fileID: 2800000, guid: 27eebcc4579a2a854a276e8f2dc9c8fd, type: 3} + - {fileID: 2800000, guid: f21472ccfd0b38189978d3a4048ece1f, type: 3} + - {fileID: 2800000, guid: b61e4370a1cadab99b3f80d30f2b03ba, type: 3} + - {fileID: 2800000, guid: 4412fab0751949df7a229778a07a0f9a, type: 3} + - {fileID: 2800000, guid: 176172bdb6a30628a98564ccf6e72a0e, type: 3} + - {fileID: 2800000, guid: 49865d307e9b5e089a7ad9e73dfff3d8, type: 3} + - {fileID: 2800000, guid: 827b6052ee8118888b044bb1ab5e7096, type: 3} + - {fileID: 2800000, guid: 540a8a976f18e69f3a9a06040aebc161, type: 3} + - {fileID: 2800000, guid: eae9a8a283bc667a6874a02e91c00111, type: 3} + - {fileID: 2800000, guid: b7f911f6aa6afbefc8eff3e46534edfd, type: 3} + - {fileID: 2800000, guid: 195f7dc375e8e5f3eaad22e8f0cfbc3a, type: 3} + - {fileID: 2800000, guid: a9ee3302df0f4dbe386bdb37fb71a6f8, type: 3} + - {fileID: 2800000, guid: 6ff729031023d8c7dbc9c12ee68b41d3, type: 3} + - {fileID: 2800000, guid: 5fd1ade951922db86a3bb2d856db4651, type: 3} + - {fileID: 2800000, guid: 98f3f1b5e7f2f9148a41ff1976c1041a, type: 3} + - {fileID: 2800000, guid: 1bc91030077ad5bb7aebe62d9e32c637, type: 3} + - {fileID: 2800000, guid: 12dd78c76e397ba2199898d82e088ef9, type: 3} + - {fileID: 2800000, guid: be824cdd618ba7b49a77c7a849918415, type: 3} + - {fileID: 2800000, guid: 620e73dae9743133aafbbba50198e2b4, type: 3} + - {fileID: 2800000, guid: 3866a095b85fc80ff944b477fe522184, type: 3} + - {fileID: 2800000, guid: 01c66224279e195d3a427d8fbcb53312, type: 3} + - {fileID: 2800000, guid: 115f4005a1c548a0595913b4bb27760f, type: 3} + - {fileID: 2800000, guid: bddbcb78ab540ffaca4fea86861a793a, type: 3} + - {fileID: 2800000, guid: 4a287a1cfb2d75ced865543fc2537cde, type: 3} + - {fileID: 2800000, guid: 29838801612d81246a7123b99bf388f4, type: 3} + - {fileID: 2800000, guid: 272d59e14db399a96808d119b60166f9, type: 3} + - {fileID: 2800000, guid: 7b740df220e94cc7cac34a10b319eeea, type: 3} + - {fileID: 2800000, guid: ea69ea3075c22cb5f9e37ab795f1a11a, type: 3} + - {fileID: 2800000, guid: 236f676df38dc9c95b85b8eda647a1fa, type: 3} + - {fileID: 2800000, guid: dd0ccbec514ab94b38805503703909c4, type: 3} + - {fileID: 2800000, guid: 068020469f3b0dd0095bf5597140f9d5, type: 3} + - {fileID: 2800000, guid: cc64aa92b777d61a3b1a2f9c6ebb8ec6, type: 3} + - {fileID: 2800000, guid: 19c0f0714a7731ddc8ca6b1871008a8a, type: 3} + - {fileID: 2800000, guid: 71afca7c11b144189b314a5b2a514ed5, type: 3} + - {fileID: 2800000, guid: b40283dfe60350c5c89d9a9ce1c8d94b, type: 3} + - {fileID: 2800000, guid: eb8db98838f086dfb9cca8a78224f222, type: 3} + - {fileID: 2800000, guid: bf037247bed3e89c59ad845e65afe2db, type: 3} + - {fileID: 2800000, guid: 0e5a3c0f67fba18429a572beaa1f1112, type: 3} + - {fileID: 2800000, guid: dccb01cc63b4c61538a7c4081075e7e2, type: 3} + - {fileID: 2800000, guid: 7d071c762e2b7c45b9648b7b2b9c2ab6, type: 3} + - {fileID: 2800000, guid: 9db49870869b0be6bb2ad4b19b71fd66, type: 3} + - {fileID: 2800000, guid: 83f454b21c8c5d0ca96fff6b32d53082, type: 3} + - {fileID: 2800000, guid: 49bee3922bdb3c746b8d1ce0846791c3, type: 3} + - {fileID: 2800000, guid: 41855a2efd741d8bb9e37d8bf34bb8f4, type: 3} + - {fileID: 2800000, guid: 220262786a06bf5b4a5bfd4bc45c7e6a, type: 3} + - {fileID: 2800000, guid: 286c6701a7a66ee77928dd7358ce88fa, type: 3} + - {fileID: 2800000, guid: 02d6c690dc3649442b8968f9343a2877, type: 3} + - {fileID: 2800000, guid: ef5cded1587408affa11a615af830933, type: 3} + - {fileID: 2800000, guid: 349c1204da21568b7af8789b5c7226b0, type: 3} + - {fileID: 2800000, guid: b3c9745444e1725d0bb4a5051721c1a4, type: 3} + - {fileID: 2800000, guid: d49f3c33f441bfedba3ce7c5f8ddb56f, type: 3} + - {fileID: 2800000, guid: 89b5e7ad4f5712cd0849ae677f8857e5, type: 3} + - {fileID: 2800000, guid: a3abff674cfe6a1a4a52ec38ad73e017, type: 3} + - {fileID: 2800000, guid: bad7baaf5f575ec688892fe9becd24e9, type: 3} + - {fileID: 2800000, guid: daca5af317c38a874b9d0927986fdbaf, type: 3} + - {fileID: 2800000, guid: 7bdef68ef7f0d11d19134b5201288a03, type: 3} + - {fileID: 2800000, guid: 7e3dd37a886526e9ca4ceda152d721e6, type: 3} + - {fileID: 2800000, guid: be939f72a8df3aba6b1b2b740b714bab, type: 3} + - {fileID: 2800000, guid: c675c6456cfb790e3a99e723b810d682, type: 3} + - {fileID: 2800000, guid: dd4ec8e154108b340993fc58b311ee5c, type: 3} + - {fileID: 2800000, guid: 75fad3cbcb32c0f34b895f3c83e27267, type: 3} + - {fileID: 2800000, guid: cb071372526ae797681a126149b18395, type: 3} + - {fileID: 2800000, guid: f943025f09be3e97bb855d26ecb08abf, type: 3} + - {fileID: 2800000, guid: 8ec58df08e9810963b419d1ad7d849a1, type: 3} + - {fileID: 2800000, guid: bdda667d6103d42b0a4da5bd3555b156, type: 3} + - {fileID: 2800000, guid: e5421f7863977ec5e9d511152eb2f1ee, type: 3} + - {fileID: 2800000, guid: ba132c0ec4acb878e8c8bac520cfcfb4, type: 3} + - {fileID: 2800000, guid: fb3d24ab117b2436b8e8b8364527b3fc, type: 3} + - {fileID: 2800000, guid: 72f9843606654c5158f760a23010bbe3, type: 3} + - {fileID: 2800000, guid: 4501d2917423d6e28989c8733f439d1d, type: 3} + - {fileID: 2800000, guid: c213700a160dfb7e698d0a4bd1c16cca, type: 3} + - {fileID: 2800000, guid: 8f6d1d53bf434fc2b9f302e96fefa920, type: 3} + - {fileID: 2800000, guid: b4e8749b47629943b9918dba81f206e7, type: 3} + - {fileID: 2800000, guid: 943c0dbf1c0f7860b872afd634ddd921, type: 3} + - {fileID: 2800000, guid: 2de9a2f6e0a621658bddc6ae37277e61, type: 3} + - {fileID: 2800000, guid: 372a00d27cff788e2be7a846a7ce3d94, type: 3} + - {fileID: 2800000, guid: 90cc8e1643e7646b0aff80187036e675, type: 3} + - {fileID: 2800000, guid: 76561c0759203f5f4b016c3309b34971, type: 3} + - {fileID: 2800000, guid: 85e850c67eecf81029d3fc200aec134b, type: 3} + - {fileID: 2800000, guid: 031e604f1a1f18b8eac6bd0fbd8f5aac, type: 3} + - {fileID: 2800000, guid: edf89690bab71ed85a8c476a09f92f34, type: 3} + - {fileID: 2800000, guid: f4ff0a60310ea1085912b208fd022f75, type: 3} + - {fileID: 2800000, guid: 9e7f9a6575f94e107b73c18d3b00e2e1, type: 3} + - {fileID: 2800000, guid: 02aa12704b39a122f89b28b149907c57, type: 3} + - {fileID: 2800000, guid: 6adddbf76d66cc981aafe878d28c84ac, type: 3} + - {fileID: 2800000, guid: f2c698b5e5b4991beb6f03145d755bdc, type: 3} + - {fileID: 2800000, guid: 852bd4dd411d5f6a2b040b06e88bcd70, type: 3} + - {fileID: 2800000, guid: f5513b7bccf06cfb69d719d52a6ab6fb, type: 3} + - {fileID: 2800000, guid: df54d5095508a6f13a537c9cf04cb7b2, type: 3} + - {fileID: 2800000, guid: 03e13715364505a17a41ecaedcee06f1, type: 3} + - {fileID: 2800000, guid: f81fb26d564504e46ae15b4db749bbcc, type: 3} + - {fileID: 2800000, guid: ae3a59541443a390eab560579710e056, type: 3} + - {fileID: 2800000, guid: 1c47c6d8111cc2551b932b21797f2a70, type: 3} + - {fileID: 2800000, guid: ed14689e6b1319ad4a2eb6951d8b5694, type: 3} + - {fileID: 2800000, guid: 298863293e70971caa7a507cb2c22c3a, type: 3} + - {fileID: 2800000, guid: 9d25695879b19dc8191cf066f4a1e14d, type: 3} + - {fileID: 2800000, guid: f8a9923eed02867abac717fb865c99b9, type: 3} + - {fileID: 2800000, guid: 679cbc431e17342d6abd3e6e710f403b, type: 3} + - {fileID: 2800000, guid: 87f1ee9ddd1bbe01d826928e753b93c7, type: 3} + - {fileID: 2800000, guid: 7767585d3405da89190773b3b6fd52a8, type: 3} + - {fileID: 2800000, guid: 6963de4700f50368fa20506034b5f72a, type: 3} + - {fileID: 2800000, guid: c109b3fb4a017fbbf8b6fc5967f923dc, type: 3} + - {fileID: 2800000, guid: cbd4aeea5fa1b9daa9d84e34fb3647a1, type: 3} + - {fileID: 2800000, guid: 0ea4f06e668a633978f69d4f873890d4, type: 3} + - {fileID: 2800000, guid: 3789dc1d4bf6e97f7918608cce9c519c, type: 3} + - {fileID: 2800000, guid: dbed6a4725cf14074b3c5bc8761288be, type: 3} + - {fileID: 2800000, guid: d995999a0938546df825fc4f866d6ee5, type: 3} + - {fileID: 2800000, guid: 89930dd31b46377cabd06a94037cb912, type: 3} + - {fileID: 2800000, guid: 2662b3d989f8131c9938188bef17cd74, type: 3} + - {fileID: 2800000, guid: 157409304f5409e44ba99bafcd75e4e5, type: 3} + - {fileID: 2800000, guid: b89356fd67876131a9e2e45281d62990, type: 3} + - {fileID: 2800000, guid: 0c4adcff786a8bf549b64db0b9d34b19, type: 3} + - {fileID: 2800000, guid: 9c06dc309a27bd99d842df13c4f95910, type: 3} + - {fileID: 2800000, guid: f9c76396a250a3b2c819f33f8df1dfe5, type: 3} + - {fileID: 2800000, guid: c1245f48df41d1f73ad55a070ff8016c, type: 3} + - {fileID: 2800000, guid: c80dbd8e69b86ff7e8b86e52d8febc76, type: 3} + - {fileID: 2800000, guid: 84c02a151d793ca9cb7ca6b8bd6e5e3b, type: 3} + - {fileID: 2800000, guid: 3ac7462f1200f9479ae7519aee68a553, type: 3} + - {fileID: 2800000, guid: 2856a04ea2fe81866b03efa6176a27b8, type: 3} + - {fileID: 2800000, guid: 8e4e3ec31ed3d2392b0d9c8047eb6961, type: 3} + - {fileID: 2800000, guid: aecd175309d294fcb8c37498946518a2, type: 3} + - {fileID: 2800000, guid: f794ca19773df0719b21817ad4b2b078, type: 3} + - {fileID: 2800000, guid: 26d6f147dfc92ed12aaca0a7d27d584a, type: 3} + - {fileID: 2800000, guid: 2aace7b244eb27222b9370e00ebb1b48, type: 3} + - {fileID: 2800000, guid: e0a57495cff407ee9a13d89d34ffae0d, type: 3} + - {fileID: 2800000, guid: a785e13ba4eed7fd5b889cf68a27e58e, type: 3} + - {fileID: 2800000, guid: 15a32c9ad9e9df997b3205ab7adc081a, type: 3} + - {fileID: 2800000, guid: 47b78291ab7045c6c9ad4275a68ce60f, type: 3} + - {fileID: 2800000, guid: 8cef7caadf55266679191e719d62a419, type: 3} + - {fileID: 2800000, guid: 68bbee40b5bc7507fa3832b6cfc1f9ba, type: 3} + - {fileID: 2800000, guid: 280bcdad195bf14168276536c2afd703, type: 3} + - {fileID: 2800000, guid: 1040a1f0e4b8046e28114563ef12729e, type: 3} + - {fileID: 2800000, guid: 7da02c63abdea34debe24724fdfdc829, type: 3} + - {fileID: 2800000, guid: bebee34bbe79a67b6ae58845f010e00a, type: 3} + - {fileID: 2800000, guid: 657cc23e711ca100c94d77614a9a1a6c, type: 3} + - {fileID: 2800000, guid: 150d2334953b6f59f82498d33502ea6f, type: 3} + - {fileID: 2800000, guid: f86dbc324d5c78301906f64773a7443f, type: 3} + - {fileID: 2800000, guid: e75b64e870862d3b48bf0bcb7abb5fc6, type: 3} + - {fileID: 2800000, guid: 20e13a7d1a6c117fc9d644cc0ffddad0, type: 3} + - {fileID: 2800000, guid: 9438132c0617c6bbc95cda456e2cc973, type: 3} + - {fileID: 2800000, guid: 79429f979bdb6c1a8bf0f7b9305652a4, type: 3} + - {fileID: 2800000, guid: c4d284af9cc67fe60aaa09d0c6bdcfc6, type: 3} + - {fileID: 2800000, guid: 2f9b567d3f611220db97c6a8724f1c00, type: 3} + - {fileID: 2800000, guid: 4e7719afbc07d00f6ae55491521fa261, type: 3} + - {fileID: 2800000, guid: 35a85776e55256cfa96e4efca55860e8, type: 3} + - {fileID: 2800000, guid: bd1aae54de330709f81ce487987b8d2c, type: 3} + - {fileID: 2800000, guid: 0723c22d38c92d3cf8f7e9dca0dfdfac, type: 3} + - {fileID: 2800000, guid: 799e1f97ea4509e24b63ec01a0c8ef53, type: 3} + - {fileID: 2800000, guid: 37665b3cf8f6c2f688f863e085cc96fc, type: 3} + - {fileID: 2800000, guid: 83da787a05efbdbaca86d211ddd67a09, type: 3} + - {fileID: 2800000, guid: c9cf3da08eaae8e7d95cc9406598effa, type: 3} + - {fileID: 2800000, guid: 927bc5a30638e8131a81cd3d5ff83388, type: 3} + - {fileID: 2800000, guid: 5248907572899d21d8191f1216ef9a53, type: 3} + - {fileID: 2800000, guid: d5c7a9e2901cc50f6bb5c8d505cfca72, type: 3} + - {fileID: 2800000, guid: c64192ad9a2db6cc9b77303f5fb5d03b, type: 3} + - {fileID: 2800000, guid: c83b5112d93d973b4b4cf2b579ee4228, type: 3} + - {fileID: 2800000, guid: c84a12e0eeb79b3798914965a151163f, type: 3} + - {fileID: 2800000, guid: e3ac760f7d9b9b8489db31eb586a1254, type: 3} + - {fileID: 2800000, guid: 522a9db8885cb2e08a647fd2d18daa56, type: 3} + - {fileID: 2800000, guid: 70694232e6013737eaad624e70c9f77d, type: 3} + - {fileID: 2800000, guid: 14cbce0d25637fb38a866d9e1be4262c, type: 3} + - {fileID: 2800000, guid: 80ce9d777010e15f4a0a3dfa924641f7, type: 3} + - {fileID: 2800000, guid: f6e7517c3b94602c79702e0fec00b0c2, type: 3} + - {fileID: 2800000, guid: 625e18044577a30bbb2060055857f742, type: 3} + - {fileID: 2800000, guid: 9fc089b69065b7807aa9c086e391007b, type: 3} + - {fileID: 2800000, guid: 3e4345c1e72ed4ec2b28a92c67ab4e57, type: 3} + - {fileID: 2800000, guid: 50b6aa8cc7e355966bcaecf733e99af2, type: 3} + - {fileID: 2800000, guid: 08a20c4bab446a4748df70e717cac3d1, type: 3} + - {fileID: 2800000, guid: c711d18a15318dee398327fa86655d75, type: 3} + - {fileID: 2800000, guid: f1b33071530ef693ba3f5e709e38e7af, type: 3} + - {fileID: 2800000, guid: a748ba4f29cb382b28f75da9a76cab49, type: 3} + - {fileID: 2800000, guid: 3c80a9c3ee4425399a41e42accf9580e, type: 3} + - {fileID: 2800000, guid: f0f45bc034f01cd0e8bbaffd2842d431, type: 3} + - {fileID: 2800000, guid: 3dcd625b3266890b5bb92bab551d1a0c, type: 3} + - {fileID: 2800000, guid: 6dd42e347f2983036b8c97e15999c90d, type: 3} + - {fileID: 2800000, guid: da2f14188576a1575bb20f5afee54919, type: 3} + - {fileID: 2800000, guid: ae20ecf1ce68849b3bdb3cd92cbe39ea, type: 3} + - {fileID: 2800000, guid: 8a57521c684f7ac3488f90cbc39d5fd8, type: 3} + - {fileID: 2800000, guid: f1577976faeb79461a7a9a79190b6b4b, type: 3} + - {fileID: 2800000, guid: 594155866fdbee1b58696ab68d1959a6, type: 3} + - {fileID: 2800000, guid: 3a1d4aaac08c16e6bbd682137d125f7f, type: 3} + - {fileID: 2800000, guid: 34fd05b7d89511b11aca0296b43c5873, type: 3} + - {fileID: 2800000, guid: f38a2dac9dd5e9b5fa3b3b73901b53e2, type: 3} + - {fileID: 2800000, guid: 0a779f173dc9028d3b660a2779c2e91f, type: 3} + - {fileID: 2800000, guid: 371006b48caca779aa7ba96ea35c066e, type: 3} + - {fileID: 2800000, guid: c1b204da6f89d2ceeb74b3fd6b0029f3, type: 3} + - {fileID: 2800000, guid: 394d62399240c431981b94616449179b, type: 3} + - {fileID: 2800000, guid: 7bd465c185f684f618e56d439bf20310, type: 3} + - {fileID: 2800000, guid: dd1e5afaed96bb38ebf0d1503c5a0d58, type: 3} + - {fileID: 2800000, guid: da71bf5055b765d5ebbefd0bb5eb120b, type: 3} + - {fileID: 2800000, guid: d819abd6cb3c8d382ae411ccd52ef717, type: 3} + - {fileID: 2800000, guid: 60320f8c78cd07d8595f05bc8ab83b54, type: 3} + - {fileID: 2800000, guid: b08721c0ae90d870398ad3b47d48a029, type: 3} + - {fileID: 2800000, guid: db4674d06aefae26899b734c571bdd20, type: 3} + - {fileID: 2800000, guid: f1f598436e883a103be05287bde4c979, type: 3} + - {fileID: 2800000, guid: 09a8399ecfbca64f4931a64a49b75f1d, type: 3} + - {fileID: 2800000, guid: 03ca744af66a0d60295e4d2f74907888, type: 3} + - {fileID: 2800000, guid: b4218311ddd285291b4b3f7c9305e877, type: 3} + - {fileID: 2800000, guid: 9ceb5f6af095095f0bd2c9fa26fa69aa, type: 3} + - {fileID: 2800000, guid: f0f4e91a21221b6d9906a08958128f78, type: 3} + - {fileID: 2800000, guid: 240ed44db69e3bb8ca850704e6da2c60, type: 3} + - {fileID: 2800000, guid: 402163db87c4ad9a796dfab615fa5187, type: 3} + - {fileID: 2800000, guid: 5643eb5762f0c7e009b727b180038cec, type: 3} + - {fileID: 2800000, guid: 8a8215a4bfb1ab4a78e589c2c636f53a, type: 3} + - {fileID: 2800000, guid: 7cb08806ee1a9941c99ab1af0b1f702a, type: 3} + - {fileID: 2800000, guid: 40001f285675ebb57824ecc7f96b9d1e, type: 3} + - {fileID: 2800000, guid: 08b722beefc1e824296b85c484c99106, type: 3} + - {fileID: 2800000, guid: 0b51f1891a3844aad9855232d2b727f8, type: 3} + - {fileID: 2800000, guid: 6ed40afe83287716bbddd9866586a247, type: 3} + - {fileID: 2800000, guid: 844d8099313e3b44bb89342cd303c05e, type: 3} + - {fileID: 2800000, guid: 042197a3765c901edbd135f32ff4a5bb, type: 3} + - {fileID: 2800000, guid: bc1a34949777ec6e8a225d14fb0d9982, type: 3} + - {fileID: 2800000, guid: e91608c78c4a069eeab1841009f22b7e, type: 3} + - {fileID: 2800000, guid: 96e21489d4f9be4759b6b353d0c03834, type: 3} + - {fileID: 2800000, guid: 2705022dc8ca91af99710941262982f4, type: 3} + - {fileID: 2800000, guid: 538fb5f9e9a5118aa9cb9ac3fa289173, type: 3} + - {fileID: 2800000, guid: 92e43c775ef242557b60a142124fdefd, type: 3} + - {fileID: 2800000, guid: 3fb5232b7511d16cd9a94c2385c28328, type: 3} + - {fileID: 2800000, guid: f2215f2af883c4c89a9484a945ce159d, type: 3} + - {fileID: 2800000, guid: b39ff33d39b2a5e30b82786e83b42e0b, type: 3} + - {fileID: 2800000, guid: e3a883c999c21d37bba4ecca19f67de0, type: 3} + - {fileID: 2800000, guid: f0d76e65ea629aca29a3ce2793872f7c, type: 3} + - {fileID: 2800000, guid: dcb6992a665b0e742ab2fc45232a8a00, type: 3} + - {fileID: 2800000, guid: 9e666096a25af0b229d04b6048688434, type: 3} + - {fileID: 2800000, guid: a21932911d1435f44bb0b29e3fcc05ee, type: 3} + - {fileID: 2800000, guid: 2dabffbe5b3377e34abe2bf85799de7e, type: 3} + - {fileID: 2800000, guid: 07682d1f469efb67c97cc4e61ddd1e5e, type: 3} + - {fileID: 2800000, guid: b1625608abb081902ab56610a41028ae, type: 3} + - {fileID: 2800000, guid: ff7be7341f122fa8682c879b23c0a034, type: 3} + - {fileID: 2800000, guid: 3ea8d75f410cb9ee3b74c819ca2a4f28, type: 3} + - {fileID: 2800000, guid: 38a07cb9f82ec6bae8d9a285565bcef7, type: 3} + - {fileID: 2800000, guid: 90b3cdcd782c86019afe6ac15063bf60, type: 3} + - {fileID: 2800000, guid: 0a142cb35a0c8ed6697be164e0aea899, type: 3} + - {fileID: 2800000, guid: ed77c60be946aab9ab0d9b829b59da6e, type: 3} + - {fileID: 2800000, guid: 53cdca53a80caedfd87e43b1f89beb19, type: 3} + - {fileID: 2800000, guid: 9f290a2c7b4f5e9698a7555dde3d341b, type: 3} + - {fileID: 2800000, guid: 668a2b77b6aa4b136ab1f4f49d57c30e, type: 3} + - {fileID: 2800000, guid: 0200f220cf51c569ab8bff1a1238e62a, type: 3} + - {fileID: 2800000, guid: c49ba38d244afbea785efd2f6770e742, type: 3} + - {fileID: 2800000, guid: c6a23892aa60d4a79b723b77e8bd223a, type: 3} + - {fileID: 2800000, guid: cc552c3984968a18ba818cf67f0438ad, type: 3} + - {fileID: 2800000, guid: e520e6b5252ce4990989866b2d2fc267, type: 3} + - {fileID: 2800000, guid: bb27b7d541778c2b581d29047e109315, type: 3} + - {fileID: 2800000, guid: 1df4157d8f2f0d62e971e10f34601b96, type: 3} + - {fileID: 2800000, guid: 363e3c4313095259ca7c785910845e47, type: 3} + - {fileID: 2800000, guid: 505661f5ec2db06e481d81d46ad33e31, type: 3} + - {fileID: 2800000, guid: 29c413ff81c64174f870d0cc56d1906c, type: 3} + - {fileID: 2800000, guid: aec8923bb3249b75cb00a23f9c9c64d7, type: 3} + - {fileID: 2800000, guid: 75457f288a672cf1c88bc4cbd862f07f, type: 3} + - {fileID: 2800000, guid: 7d1826fc5a9d913c2979e4a18d1ebf49, type: 3} + - {fileID: 2800000, guid: 9a6ac4f441a859243917f0c2b60a1b76, type: 3} + - {fileID: 2800000, guid: adb32ed485dd9c3ab97a914fbc3f14e1, type: 3} + - {fileID: 2800000, guid: 237212243311fefaaac51f694da3f378, type: 3} + - {fileID: 2800000, guid: 6b58c6cc1837ddb1c9e63d7082d14497, type: 3} + - {fileID: 2800000, guid: 3866da1dc464c112dbb672dbcac83d4e, type: 3} + - {fileID: 2800000, guid: bc770fe5f747d1d92a897eb1e11c9236, type: 3} + - {fileID: 2800000, guid: f9caabebbb98278cf9e337feed33f72c, type: 3} + - {fileID: 2800000, guid: a51aac9a98ad9a5f5a18c538393b688b, type: 3} + - {fileID: 2800000, guid: 8a51ab44422fc7ff787184896353fd51, type: 3} + - {fileID: 2800000, guid: 0757c518daa59a990b2958143b96f1da, type: 3} + - {fileID: 2800000, guid: 59e7a8fcbf9252c1d9c2c51743188572, type: 3} + - {fileID: 2800000, guid: c9d2abbb1e1a5ee84aa4b4e187939fdf, type: 3} + - {fileID: 2800000, guid: 69d3547963c6c0439be165072fbd0544, type: 3} + - {fileID: 2800000, guid: 367f74af1c95d7da18f381d6bd6f55fa, type: 3} + - {fileID: 2800000, guid: db0fc6a606f189d25abc2d18ae611318, type: 3} + - {fileID: 2800000, guid: 967f5dc8c8a9b5161aef7c67510384f7, type: 3} + - {fileID: 2800000, guid: a2ee50c5cd09731edae4a48a9eb0cb69, type: 3} + - {fileID: 2800000, guid: aa3dbb5e1be0758b0b60492480ea1043, type: 3} + - {fileID: 2800000, guid: 1ad0c1f0578ae3f04ac8f7dedae0734d, type: 3} + - {fileID: 2800000, guid: f8069ab3f8a1e21c2a6b720dd28890cb, type: 3} + - {fileID: 2800000, guid: b3a24dccc4baf9d7bb292e09a682a506, type: 3} + - {fileID: 2800000, guid: 8a352bd099c57fd8690740904e01ca8b, type: 3} + - {fileID: 2800000, guid: a4b3c1724a8b83015b8f09a3334e362e, type: 3} + - {fileID: 2800000, guid: e5553642ee43b41f2af23ac49f81c11b, type: 3} + - {fileID: 2800000, guid: 1226bef867bdfa72e9a302273ff3aa32, type: 3} + - {fileID: 2800000, guid: dcba487f02aa9aea1a18e2dd058690fa, type: 3} + - {fileID: 2800000, guid: fb4610d75993a1e9eb0809734352f33d, type: 3} + - {fileID: 2800000, guid: 0778d65a9d4d4fae98a24d95202b8e37, type: 3} + - {fileID: 2800000, guid: 80de77ab384b966f5a8411e07c39f583, type: 3} + - {fileID: 2800000, guid: 966254d3ee043368da463e20dde06e6c, type: 3} + - {fileID: 2800000, guid: 60e0482d8801caeccb1c177d96da7112, type: 3} + - {fileID: 2800000, guid: 3736113d9c1079d76a352b42cfec258b, type: 3} + - {fileID: 2800000, guid: e782000eef4ec55209ea7c39a77bccdb, type: 3} + - {fileID: 2800000, guid: 56b3e6c520f57de96a3d8c03225c768e, type: 3} + - {fileID: 2800000, guid: 85e7ff5caa604f1e198a3d79c512b414, type: 3} + - {fileID: 2800000, guid: 39a987f708208fe3ea4b3643f323a3c2, type: 3} + - {fileID: 2800000, guid: 9299d279e456f39638e64d04c67028db, type: 3} + - {fileID: 2800000, guid: 4252d964cad2a14da91e9573a393d4a9, type: 3} + - {fileID: 2800000, guid: 25b96553917a42036b7cb88c433bcfb3, type: 3} + - {fileID: 2800000, guid: 21331faba3758ffa4818ad93850f167e, type: 3} + - {fileID: 2800000, guid: 5062b34df3af719b8bc9a245515412cb, type: 3} + - {fileID: 2800000, guid: a975721b38587e7bb920a27b6c0f5910, type: 3} + - {fileID: 2800000, guid: 9ece58a87aba5c10e9d4e16eb5283a84, type: 3} + - {fileID: 2800000, guid: 20dc4edea8bd051c38c0635d42df3d18, type: 3} + - {fileID: 2800000, guid: 1ccb49a4292bf5d0ea5f8686a5f1c467, type: 3} + - {fileID: 2800000, guid: 6e7d1d99c6d2ae96ab060064f2110a05, type: 3} + - {fileID: 2800000, guid: a3299d740e6506f768ae62a34cdaf5a6, type: 3} + load_from_resources_if_empty: 1 + _texture: {fileID: 0} + _renderer: {fileID: 2302102554894629329} + use_shared: 0 + _last_sample: 0 + load_path: Textures +--- !u!135 &7992057885548089325 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Runtime/Prefabs/Obstructions/ObstructionSphere.prefab.meta b/Runtime/Prefabs/Obstructions/ObstructionSphere.prefab.meta new file mode 100644 index 000000000..bccc973c4 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionSphere.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ed60714293a8ddd7d9452428cc1c5a79 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/Obstructions/ObstructionTriangle.prefab b/Runtime/Prefabs/Obstructions/ObstructionTriangle.prefab new file mode 100644 index 000000000..954c439a8 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionTriangle.prefab @@ -0,0 +1,655 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2302102554894629341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2302102554894629331} + - component: {fileID: 2302102554894629330} + - component: {fileID: 2302102554894629329} + - component: {fileID: 2302102554894629343} + - component: {fileID: 2302102554894629342} + - component: {fileID: 2302102554894629332} + - component: {fileID: 3674649710580244811} + m_Layer: 10 + m_Name: ObstructionTriangle + m_TagString: b + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2302102554894629331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.1437268, y: 3.4423447, z: -12.843082} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2302102554894629330 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Mesh: {fileID: -648252975603501274, guid: aa7938ac6ec9976988dd7c6f00a053d3, type: 3} +--- !u!23 &2302102554894629329 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e7bc9ae29014cf4c9aa3e8a67cbb43da, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!114 &2302102554894629343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 429eddc2e17c50341b357a1de655ebf6, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _tiling_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _offset_space: + _space: + _min_: {x: 0.2, y: 0.2} + _max_: {x: 0.8, y: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _color_space: + _space: + _min_: {x: 0.2, y: 0.2, z: 0.2, w: 0.2} + _max_: {x: 0.8, y: 0.8, z: 0.8, w: 0.8} + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _smoothness_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _reflection_space: + _space: + _min_: 0.2 + _max_: 0.8 + _decimal_granularity: 1 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _use_shared: 0 +--- !u!114 &2302102554894629342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a22c41a371cb5014b955705c804c74aa, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _space: + _space: + _min_: {x: 0, y: 0, z: 0} + _max_: {x: 1, y: 1, z: 1} + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 +--- !u!114 &2302102554894629332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de609666bdf4489dbac2a6e84eaeb992, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _disables_children: 0 + _unregister_at_disable: 0 + _environment: {fileID: 0} + random_sampling_mode: 3 + _textures: + - {fileID: 2800000, guid: 5f599c75d7d2d3f2397e633a0a2cad10, type: 3} + - {fileID: 2800000, guid: 35997aa1fb9073cd5956b28c2f1733f1, type: 3} + - {fileID: 2800000, guid: 64e18793722966d539352fece171aca4, type: 3} + - {fileID: 2800000, guid: f2ab9b3b5d1f72ad98d471682b8cf7c9, type: 3} + - {fileID: 2800000, guid: 0d17962e11d952709b3e26b3ff68a395, type: 3} + - {fileID: 2800000, guid: 9fb9470f3fd529bd39417c7faa9774a7, type: 3} + - {fileID: 2800000, guid: 84e88be29a33c876782d228a08469e9e, type: 3} + - {fileID: 2800000, guid: b3d79c300971ed5068f42dbb851fdb91, type: 3} + - {fileID: 2800000, guid: 1f775d15cc88244adbf47cd8c28560b7, type: 3} + - {fileID: 2800000, guid: 242c691845e32213aa72d268bf8c3afc, type: 3} + - {fileID: 2800000, guid: f978018f756d0e8d69eab173e1c5e26e, type: 3} + - {fileID: 2800000, guid: b331e7a9d4c32f44b91437ea7a6392a3, type: 3} + - {fileID: 2800000, guid: 21d14a05f13516581b7a821bd7327c2c, type: 3} + - {fileID: 2800000, guid: abafbf2b15ebd8d3eb18e69c5af89423, type: 3} + - {fileID: 2800000, guid: c7d8a0f5affc52f0198dff2bc0d55bcc, type: 3} + - {fileID: 2800000, guid: b884fd7c59514a6e08465daab211eecc, type: 3} + - {fileID: 2800000, guid: d238841fc28268738bdb07634559baa8, type: 3} + - {fileID: 2800000, guid: 7ce3f4f3a46be893eb352aa8bc6757c5, type: 3} + - {fileID: 2800000, guid: 482ca8a197b1af65bbf8f5ec5db7b693, type: 3} + - {fileID: 2800000, guid: e9009b5738cfe13fc859c01cb6bebd3a, type: 3} + - {fileID: 2800000, guid: e72bbde12cfa52a1fbff62fb30bdad3c, type: 3} + - {fileID: 2800000, guid: 449c150033d2d373ca3fa6fb1c52d7aa, type: 3} + - {fileID: 2800000, guid: 322c8e42837226afb8e5f7218a22f615, type: 3} + - {fileID: 2800000, guid: c7b04f33dd1b448d8932320361d31781, type: 3} + - {fileID: 2800000, guid: f8a7d4b8268fa7676982e6f50e7366ec, type: 3} + - {fileID: 2800000, guid: 1a5bf1e28e1e70f86824301a1f8b52e5, type: 3} + - {fileID: 2800000, guid: 92cb44d88c40cfd338264568800a5c5f, type: 3} + - {fileID: 2800000, guid: d6fe8cd585a7fc088b45ea5a56563bd7, type: 3} + - {fileID: 2800000, guid: 93e5a176835fcfc9b8d742b4741aa5da, type: 3} + - {fileID: 2800000, guid: 349c4081e4aaa23658f4e8b0aa786a37, type: 3} + - {fileID: 2800000, guid: c4616dd426db89b73b327120c4f6bc54, type: 3} + - {fileID: 2800000, guid: fc57258ba0cbf96019b082db7f2a783a, type: 3} + - {fileID: 2800000, guid: 547405889a5c4d37188395e8763a7501, type: 3} + - {fileID: 2800000, guid: 744a73a1523db1fc7b167c88357a6252, type: 3} + - {fileID: 2800000, guid: c2a249280a347039ea24e702dc562703, type: 3} + - {fileID: 2800000, guid: 5ace4931437b72abca9fe986f35a16bc, type: 3} + - {fileID: 2800000, guid: 239842f75ff0d38f788d3f76b11cd71a, type: 3} + - {fileID: 2800000, guid: f11ab4af40b591ae0a197d3185ffdec5, type: 3} + - {fileID: 2800000, guid: 38ee90bfd9b48ebd19f991475b9bd374, type: 3} + - {fileID: 2800000, guid: 72a34f3f76339da6abac282de8138d87, type: 3} + - {fileID: 2800000, guid: 0b91faa29855e49808f8b5d44a396b4f, type: 3} + - {fileID: 2800000, guid: b167686af5d9f9d53ac3b2cc13db04c8, type: 3} + - {fileID: 2800000, guid: c0433e91a072738bb8adc6d22234c44a, type: 3} + - {fileID: 2800000, guid: 3f04f04af0c2105a6a202fee90911682, type: 3} + - {fileID: 2800000, guid: e2cc7b6f3a7ea7a58b933e42cb5ca640, type: 3} + - {fileID: 2800000, guid: 3afa4fc416e1e31c787db2cfbdaae3ea, type: 3} + - {fileID: 2800000, guid: 8018e57449252a678a62594d35626af8, type: 3} + - {fileID: 2800000, guid: e60a34c308361185c88aac528d680eb9, type: 3} + - {fileID: 2800000, guid: a15018ab9ac7f59668731a91c64a8e68, type: 3} + - {fileID: 2800000, guid: e78c3f43d704bd6a7ac44d6b5155cd57, type: 3} + - {fileID: 2800000, guid: 8e3d6cfd5c8b263aabf61c7baa0f2202, type: 3} + - {fileID: 2800000, guid: 5de3299c2b3108f778f1083cd300014f, type: 3} + - {fileID: 2800000, guid: cfcec2ca8476e43d18027f01a8bd2946, type: 3} + - {fileID: 2800000, guid: 8e0921fa566d6cf04ba0a96a62bd6245, type: 3} + - {fileID: 2800000, guid: a94988f60f214c656bf7f7024bf62e24, type: 3} + - {fileID: 2800000, guid: 63f05e96863c0cf19ab8f94c1c3c1559, type: 3} + - {fileID: 2800000, guid: 2e2fc84d890be4dcb9ca0b5f76634eee, type: 3} + - {fileID: 2800000, guid: bb2dc4d5af36e35e2bdd8959826900a5, type: 3} + - {fileID: 2800000, guid: 9de42e16ca0d5d779a4e1f429878e1a7, type: 3} + - {fileID: 2800000, guid: 59a99f906bb7070ddbb1d0b7ad9f1a5f, type: 3} + - {fileID: 2800000, guid: 9c8f9403db897b36585b670783df3ea8, type: 3} + - {fileID: 2800000, guid: d13d315f27fceba2dbf83afec85ac3a7, type: 3} + - {fileID: 2800000, guid: dea1cd11bf285cdc9942eee3dc6f161a, type: 3} + - {fileID: 2800000, guid: e7b9b905cc918a1bc8f2b2efad972505, type: 3} + - {fileID: 2800000, guid: 5c85e9cd3ec590d21874ffa8d6360a94, type: 3} + - {fileID: 2800000, guid: ce246d761b4ef5004be6ae07fc0db1a3, type: 3} + - {fileID: 2800000, guid: 2443f0fee7f3a80159c6633341f5f47d, type: 3} + - {fileID: 2800000, guid: b9cc471440a74400d98e2908420b88d2, type: 3} + - {fileID: 2800000, guid: a11bf7acb0668c9efafab0efa992a669, type: 3} + - {fileID: 2800000, guid: c2daaa1ac2f78fb0baddf28ad071ecf6, type: 3} + - {fileID: 2800000, guid: 51419fb9959103351925225870b4b4a9, type: 3} + - {fileID: 2800000, guid: 7edb149c74f886a1182eb4d8cd3989d4, type: 3} + - {fileID: 2800000, guid: d01b2f983c50eb7df9ea73506dbd8bc8, type: 3} + - {fileID: 2800000, guid: 5996ed09056f967b4b7f09f0b7bfcb54, type: 3} + - {fileID: 2800000, guid: 890ad4627790e6ed99c6fc658522a04f, type: 3} + - {fileID: 2800000, guid: 125180fb60693811b89970c31746ab99, type: 3} + - {fileID: 2800000, guid: a7bc4e666025adb67b3571b680b24c12, type: 3} + - {fileID: 2800000, guid: 15b8b31621fa8c8d797d19906412d090, type: 3} + - {fileID: 2800000, guid: 53241d4b28bdcf92588925ea85b953ec, type: 3} + - {fileID: 2800000, guid: 148abc0f11d542f308e7a85023ac7076, type: 3} + - {fileID: 2800000, guid: 33fe32ac3bfe2f7d3b5fad180e9e5d8d, type: 3} + - {fileID: 2800000, guid: ebfda5d01d6259d4db534bb12c5495c6, type: 3} + - {fileID: 2800000, guid: 8d0c527b34bd2635f8511c9e0ea201f4, type: 3} + - {fileID: 2800000, guid: ad00aa6df81675397857dd27656145cb, type: 3} + - {fileID: 2800000, guid: 6dd7e7a3f083d02148407eb88455d179, type: 3} + - {fileID: 2800000, guid: 0ba144e573c92f529ad708694edca4be, type: 3} + - {fileID: 2800000, guid: 7abd5a5900ef7042c94a9f1baea716c0, type: 3} + - {fileID: 2800000, guid: 220e2a7b82ffe4ca9b17de0d4e7fc57d, type: 3} + - {fileID: 2800000, guid: ddebf5771a8b33ca7a07ce719664f372, type: 3} + - {fileID: 2800000, guid: 50dbc1da7beebdc938cd6c8ecb3c7153, type: 3} + - {fileID: 2800000, guid: e84abad7ad3564e3590b8b0ed95893b6, type: 3} + - {fileID: 2800000, guid: 0a3d69b4b8182474ea9af5265dddde5c, type: 3} + - {fileID: 2800000, guid: b1d1b183a4d860b6d9d4d84fca5252f5, type: 3} + - {fileID: 2800000, guid: 698163fb7eeb500ef96ea7e79f4a4080, type: 3} + - {fileID: 2800000, guid: 7cff9f7095b86cac080c32361338d2e4, type: 3} + - {fileID: 2800000, guid: 4fa42e68235808872af68d503a05ec72, type: 3} + - {fileID: 2800000, guid: 44b0fe3be11aa3fc4a66d590464634c5, type: 3} + - {fileID: 2800000, guid: 381fd379b20851d8bafbf9f68b698b82, type: 3} + - {fileID: 2800000, guid: 5cbc170583d04417c9082b3e407c35f0, type: 3} + - {fileID: 2800000, guid: 8ca02a1d900fed08ea63f17fee4a5e66, type: 3} + - {fileID: 2800000, guid: 0b610d7abf4e9f0dc801f5eddbd16d59, type: 3} + - {fileID: 2800000, guid: 12cf492b4b8055da2a0beab8f1f60bea, type: 3} + - {fileID: 2800000, guid: c1bf0dbba7455ceb0acc4104aab91fd6, type: 3} + - {fileID: 2800000, guid: 31585c155dd6735cf9cc4a32a8f2962c, type: 3} + - {fileID: 2800000, guid: 9c7c9ffb62c4ed1c6b0ab14c0c2d58f4, type: 3} + - {fileID: 2800000, guid: 673933e3ae75fbd0bb858b41e7b9ac57, type: 3} + - {fileID: 2800000, guid: 29e10c7d78307302ab8fe96fc3c9ea7d, type: 3} + - {fileID: 2800000, guid: 5dc3d40006c2ef89dae46a999de6a4a3, type: 3} + - {fileID: 2800000, guid: 1d658835cedec7a38af140197779158f, type: 3} + - {fileID: 2800000, guid: 2786e79ec3be0b43d9f4cf58a3a9261f, type: 3} + - {fileID: 2800000, guid: c91454be3cebf185ab09aff353e6caad, type: 3} + - {fileID: 2800000, guid: d5d942b1c51d86ebba9fcf55728e89ce, type: 3} + - {fileID: 2800000, guid: c9e4963dc97837b28b416f991fe0402b, type: 3} + - {fileID: 2800000, guid: 38ba08b2806887c9ba61605bcb5f7e72, type: 3} + - {fileID: 2800000, guid: 07e95190c9115015990e534d6b5a76cc, type: 3} + - {fileID: 2800000, guid: 45444296d1134d016ba2e9b6668752a9, type: 3} + - {fileID: 2800000, guid: 2998861db761580678b44daf33af38b4, type: 3} + - {fileID: 2800000, guid: 8cec23edbbd2c469682ca9ec4cbec9a9, type: 3} + - {fileID: 2800000, guid: 1d23092ddccf645219286dd346c89604, type: 3} + - {fileID: 2800000, guid: 2083c331c3e0e810694c7c8860371c48, type: 3} + - {fileID: 2800000, guid: 4b7bfc67fb8a14705bd3611b29130ce3, type: 3} + - {fileID: 2800000, guid: 9e359b531b107bf37aa6e4f3df08d300, type: 3} + - {fileID: 2800000, guid: 80db4effcc199d872a3da8436a78c58d, type: 3} + - {fileID: 2800000, guid: 85d6a82043bc966b8990c14da05c148e, type: 3} + - {fileID: 2800000, guid: 7f590f9b699d83140a84c5574dab3d39, type: 3} + - {fileID: 2800000, guid: 47ad1bead5252c92d840e4ebacc0540b, type: 3} + - {fileID: 2800000, guid: cc207009b2afc6ba7abeac568c8917df, type: 3} + - {fileID: 2800000, guid: 8c4f8c558f1e9b99bb4be1ba88ec8dad, type: 3} + - {fileID: 2800000, guid: faf04a8c261844e9db743a0cf2d731cd, type: 3} + - {fileID: 2800000, guid: 578c224320017de8a84379452f1ca231, type: 3} + - {fileID: 2800000, guid: 282c9613da3980702a2c0daeb9ba0bfa, type: 3} + - {fileID: 2800000, guid: d3112b0dd75646391a66bcff0b6ed05d, type: 3} + - {fileID: 2800000, guid: 5de36759b8ee98525ba73d18914315b3, type: 3} + - {fileID: 2800000, guid: 03525ff13fd626578b5bc7f6275bf3dd, type: 3} + - {fileID: 2800000, guid: 047d55b6c222e3d068183678d3027d7a, type: 3} + - {fileID: 2800000, guid: 05c0df2616d6e2e9390aad50ddeb21b1, type: 3} + - {fileID: 2800000, guid: 36ea701974c9fac79b571aca662dbc22, type: 3} + - {fileID: 2800000, guid: ae4131e8bccee5e848a43f92e75f7d55, type: 3} + - {fileID: 2800000, guid: a6f05734b7b843a339342298ccb24b36, type: 3} + - {fileID: 2800000, guid: f8671588dab50a611bcb50d861c0d2f4, type: 3} + - {fileID: 2800000, guid: 27eebcc4579a2a854a276e8f2dc9c8fd, type: 3} + - {fileID: 2800000, guid: f21472ccfd0b38189978d3a4048ece1f, type: 3} + - {fileID: 2800000, guid: b61e4370a1cadab99b3f80d30f2b03ba, type: 3} + - {fileID: 2800000, guid: 4412fab0751949df7a229778a07a0f9a, type: 3} + - {fileID: 2800000, guid: 176172bdb6a30628a98564ccf6e72a0e, type: 3} + - {fileID: 2800000, guid: 49865d307e9b5e089a7ad9e73dfff3d8, type: 3} + - {fileID: 2800000, guid: 827b6052ee8118888b044bb1ab5e7096, type: 3} + - {fileID: 2800000, guid: 540a8a976f18e69f3a9a06040aebc161, type: 3} + - {fileID: 2800000, guid: eae9a8a283bc667a6874a02e91c00111, type: 3} + - {fileID: 2800000, guid: b7f911f6aa6afbefc8eff3e46534edfd, type: 3} + - {fileID: 2800000, guid: 195f7dc375e8e5f3eaad22e8f0cfbc3a, type: 3} + - {fileID: 2800000, guid: a9ee3302df0f4dbe386bdb37fb71a6f8, type: 3} + - {fileID: 2800000, guid: 6ff729031023d8c7dbc9c12ee68b41d3, type: 3} + - {fileID: 2800000, guid: 5fd1ade951922db86a3bb2d856db4651, type: 3} + - {fileID: 2800000, guid: 98f3f1b5e7f2f9148a41ff1976c1041a, type: 3} + - {fileID: 2800000, guid: 1bc91030077ad5bb7aebe62d9e32c637, type: 3} + - {fileID: 2800000, guid: 12dd78c76e397ba2199898d82e088ef9, type: 3} + - {fileID: 2800000, guid: be824cdd618ba7b49a77c7a849918415, type: 3} + - {fileID: 2800000, guid: 620e73dae9743133aafbbba50198e2b4, type: 3} + - {fileID: 2800000, guid: 3866a095b85fc80ff944b477fe522184, type: 3} + - {fileID: 2800000, guid: 01c66224279e195d3a427d8fbcb53312, type: 3} + - {fileID: 2800000, guid: 115f4005a1c548a0595913b4bb27760f, type: 3} + - {fileID: 2800000, guid: bddbcb78ab540ffaca4fea86861a793a, type: 3} + - {fileID: 2800000, guid: 4a287a1cfb2d75ced865543fc2537cde, type: 3} + - {fileID: 2800000, guid: 29838801612d81246a7123b99bf388f4, type: 3} + - {fileID: 2800000, guid: 272d59e14db399a96808d119b60166f9, type: 3} + - {fileID: 2800000, guid: 7b740df220e94cc7cac34a10b319eeea, type: 3} + - {fileID: 2800000, guid: ea69ea3075c22cb5f9e37ab795f1a11a, type: 3} + - {fileID: 2800000, guid: 236f676df38dc9c95b85b8eda647a1fa, type: 3} + - {fileID: 2800000, guid: dd0ccbec514ab94b38805503703909c4, type: 3} + - {fileID: 2800000, guid: 068020469f3b0dd0095bf5597140f9d5, type: 3} + - {fileID: 2800000, guid: cc64aa92b777d61a3b1a2f9c6ebb8ec6, type: 3} + - {fileID: 2800000, guid: 19c0f0714a7731ddc8ca6b1871008a8a, type: 3} + - {fileID: 2800000, guid: 71afca7c11b144189b314a5b2a514ed5, type: 3} + - {fileID: 2800000, guid: b40283dfe60350c5c89d9a9ce1c8d94b, type: 3} + - {fileID: 2800000, guid: eb8db98838f086dfb9cca8a78224f222, type: 3} + - {fileID: 2800000, guid: bf037247bed3e89c59ad845e65afe2db, type: 3} + - {fileID: 2800000, guid: 0e5a3c0f67fba18429a572beaa1f1112, type: 3} + - {fileID: 2800000, guid: dccb01cc63b4c61538a7c4081075e7e2, type: 3} + - {fileID: 2800000, guid: 7d071c762e2b7c45b9648b7b2b9c2ab6, type: 3} + - {fileID: 2800000, guid: 9db49870869b0be6bb2ad4b19b71fd66, type: 3} + - {fileID: 2800000, guid: 83f454b21c8c5d0ca96fff6b32d53082, type: 3} + - {fileID: 2800000, guid: 49bee3922bdb3c746b8d1ce0846791c3, type: 3} + - {fileID: 2800000, guid: 41855a2efd741d8bb9e37d8bf34bb8f4, type: 3} + - {fileID: 2800000, guid: 220262786a06bf5b4a5bfd4bc45c7e6a, type: 3} + - {fileID: 2800000, guid: 286c6701a7a66ee77928dd7358ce88fa, type: 3} + - {fileID: 2800000, guid: 02d6c690dc3649442b8968f9343a2877, type: 3} + - {fileID: 2800000, guid: ef5cded1587408affa11a615af830933, type: 3} + - {fileID: 2800000, guid: 349c1204da21568b7af8789b5c7226b0, type: 3} + - {fileID: 2800000, guid: b3c9745444e1725d0bb4a5051721c1a4, type: 3} + - {fileID: 2800000, guid: d49f3c33f441bfedba3ce7c5f8ddb56f, type: 3} + - {fileID: 2800000, guid: 89b5e7ad4f5712cd0849ae677f8857e5, type: 3} + - {fileID: 2800000, guid: a3abff674cfe6a1a4a52ec38ad73e017, type: 3} + - {fileID: 2800000, guid: bad7baaf5f575ec688892fe9becd24e9, type: 3} + - {fileID: 2800000, guid: daca5af317c38a874b9d0927986fdbaf, type: 3} + - {fileID: 2800000, guid: 7bdef68ef7f0d11d19134b5201288a03, type: 3} + - {fileID: 2800000, guid: 7e3dd37a886526e9ca4ceda152d721e6, type: 3} + - {fileID: 2800000, guid: be939f72a8df3aba6b1b2b740b714bab, type: 3} + - {fileID: 2800000, guid: c675c6456cfb790e3a99e723b810d682, type: 3} + - {fileID: 2800000, guid: dd4ec8e154108b340993fc58b311ee5c, type: 3} + - {fileID: 2800000, guid: 75fad3cbcb32c0f34b895f3c83e27267, type: 3} + - {fileID: 2800000, guid: cb071372526ae797681a126149b18395, type: 3} + - {fileID: 2800000, guid: f943025f09be3e97bb855d26ecb08abf, type: 3} + - {fileID: 2800000, guid: 8ec58df08e9810963b419d1ad7d849a1, type: 3} + - {fileID: 2800000, guid: bdda667d6103d42b0a4da5bd3555b156, type: 3} + - {fileID: 2800000, guid: e5421f7863977ec5e9d511152eb2f1ee, type: 3} + - {fileID: 2800000, guid: ba132c0ec4acb878e8c8bac520cfcfb4, type: 3} + - {fileID: 2800000, guid: fb3d24ab117b2436b8e8b8364527b3fc, type: 3} + - {fileID: 2800000, guid: 72f9843606654c5158f760a23010bbe3, type: 3} + - {fileID: 2800000, guid: 4501d2917423d6e28989c8733f439d1d, type: 3} + - {fileID: 2800000, guid: c213700a160dfb7e698d0a4bd1c16cca, type: 3} + - {fileID: 2800000, guid: 8f6d1d53bf434fc2b9f302e96fefa920, type: 3} + - {fileID: 2800000, guid: b4e8749b47629943b9918dba81f206e7, type: 3} + - {fileID: 2800000, guid: 943c0dbf1c0f7860b872afd634ddd921, type: 3} + - {fileID: 2800000, guid: 2de9a2f6e0a621658bddc6ae37277e61, type: 3} + - {fileID: 2800000, guid: 372a00d27cff788e2be7a846a7ce3d94, type: 3} + - {fileID: 2800000, guid: 90cc8e1643e7646b0aff80187036e675, type: 3} + - {fileID: 2800000, guid: 76561c0759203f5f4b016c3309b34971, type: 3} + - {fileID: 2800000, guid: 85e850c67eecf81029d3fc200aec134b, type: 3} + - {fileID: 2800000, guid: 031e604f1a1f18b8eac6bd0fbd8f5aac, type: 3} + - {fileID: 2800000, guid: edf89690bab71ed85a8c476a09f92f34, type: 3} + - {fileID: 2800000, guid: f4ff0a60310ea1085912b208fd022f75, type: 3} + - {fileID: 2800000, guid: 9e7f9a6575f94e107b73c18d3b00e2e1, type: 3} + - {fileID: 2800000, guid: 02aa12704b39a122f89b28b149907c57, type: 3} + - {fileID: 2800000, guid: 6adddbf76d66cc981aafe878d28c84ac, type: 3} + - {fileID: 2800000, guid: f2c698b5e5b4991beb6f03145d755bdc, type: 3} + - {fileID: 2800000, guid: 852bd4dd411d5f6a2b040b06e88bcd70, type: 3} + - {fileID: 2800000, guid: f5513b7bccf06cfb69d719d52a6ab6fb, type: 3} + - {fileID: 2800000, guid: df54d5095508a6f13a537c9cf04cb7b2, type: 3} + - {fileID: 2800000, guid: 03e13715364505a17a41ecaedcee06f1, type: 3} + - {fileID: 2800000, guid: f81fb26d564504e46ae15b4db749bbcc, type: 3} + - {fileID: 2800000, guid: ae3a59541443a390eab560579710e056, type: 3} + - {fileID: 2800000, guid: 1c47c6d8111cc2551b932b21797f2a70, type: 3} + - {fileID: 2800000, guid: ed14689e6b1319ad4a2eb6951d8b5694, type: 3} + - {fileID: 2800000, guid: 298863293e70971caa7a507cb2c22c3a, type: 3} + - {fileID: 2800000, guid: 9d25695879b19dc8191cf066f4a1e14d, type: 3} + - {fileID: 2800000, guid: f8a9923eed02867abac717fb865c99b9, type: 3} + - {fileID: 2800000, guid: 679cbc431e17342d6abd3e6e710f403b, type: 3} + - {fileID: 2800000, guid: 87f1ee9ddd1bbe01d826928e753b93c7, type: 3} + - {fileID: 2800000, guid: 7767585d3405da89190773b3b6fd52a8, type: 3} + - {fileID: 2800000, guid: 6963de4700f50368fa20506034b5f72a, type: 3} + - {fileID: 2800000, guid: c109b3fb4a017fbbf8b6fc5967f923dc, type: 3} + - {fileID: 2800000, guid: cbd4aeea5fa1b9daa9d84e34fb3647a1, type: 3} + - {fileID: 2800000, guid: 0ea4f06e668a633978f69d4f873890d4, type: 3} + - {fileID: 2800000, guid: 3789dc1d4bf6e97f7918608cce9c519c, type: 3} + - {fileID: 2800000, guid: dbed6a4725cf14074b3c5bc8761288be, type: 3} + - {fileID: 2800000, guid: d995999a0938546df825fc4f866d6ee5, type: 3} + - {fileID: 2800000, guid: 89930dd31b46377cabd06a94037cb912, type: 3} + - {fileID: 2800000, guid: 2662b3d989f8131c9938188bef17cd74, type: 3} + - {fileID: 2800000, guid: 157409304f5409e44ba99bafcd75e4e5, type: 3} + - {fileID: 2800000, guid: b89356fd67876131a9e2e45281d62990, type: 3} + - {fileID: 2800000, guid: 0c4adcff786a8bf549b64db0b9d34b19, type: 3} + - {fileID: 2800000, guid: 9c06dc309a27bd99d842df13c4f95910, type: 3} + - {fileID: 2800000, guid: f9c76396a250a3b2c819f33f8df1dfe5, type: 3} + - {fileID: 2800000, guid: c1245f48df41d1f73ad55a070ff8016c, type: 3} + - {fileID: 2800000, guid: c80dbd8e69b86ff7e8b86e52d8febc76, type: 3} + - {fileID: 2800000, guid: 84c02a151d793ca9cb7ca6b8bd6e5e3b, type: 3} + - {fileID: 2800000, guid: 3ac7462f1200f9479ae7519aee68a553, type: 3} + - {fileID: 2800000, guid: 2856a04ea2fe81866b03efa6176a27b8, type: 3} + - {fileID: 2800000, guid: 8e4e3ec31ed3d2392b0d9c8047eb6961, type: 3} + - {fileID: 2800000, guid: aecd175309d294fcb8c37498946518a2, type: 3} + - {fileID: 2800000, guid: f794ca19773df0719b21817ad4b2b078, type: 3} + - {fileID: 2800000, guid: 26d6f147dfc92ed12aaca0a7d27d584a, type: 3} + - {fileID: 2800000, guid: 2aace7b244eb27222b9370e00ebb1b48, type: 3} + - {fileID: 2800000, guid: e0a57495cff407ee9a13d89d34ffae0d, type: 3} + - {fileID: 2800000, guid: a785e13ba4eed7fd5b889cf68a27e58e, type: 3} + - {fileID: 2800000, guid: 15a32c9ad9e9df997b3205ab7adc081a, type: 3} + - {fileID: 2800000, guid: 47b78291ab7045c6c9ad4275a68ce60f, type: 3} + - {fileID: 2800000, guid: 8cef7caadf55266679191e719d62a419, type: 3} + - {fileID: 2800000, guid: 68bbee40b5bc7507fa3832b6cfc1f9ba, type: 3} + - {fileID: 2800000, guid: 280bcdad195bf14168276536c2afd703, type: 3} + - {fileID: 2800000, guid: 1040a1f0e4b8046e28114563ef12729e, type: 3} + - {fileID: 2800000, guid: 7da02c63abdea34debe24724fdfdc829, type: 3} + - {fileID: 2800000, guid: bebee34bbe79a67b6ae58845f010e00a, type: 3} + - {fileID: 2800000, guid: 657cc23e711ca100c94d77614a9a1a6c, type: 3} + - {fileID: 2800000, guid: 150d2334953b6f59f82498d33502ea6f, type: 3} + - {fileID: 2800000, guid: f86dbc324d5c78301906f64773a7443f, type: 3} + - {fileID: 2800000, guid: e75b64e870862d3b48bf0bcb7abb5fc6, type: 3} + - {fileID: 2800000, guid: 20e13a7d1a6c117fc9d644cc0ffddad0, type: 3} + - {fileID: 2800000, guid: 9438132c0617c6bbc95cda456e2cc973, type: 3} + - {fileID: 2800000, guid: 79429f979bdb6c1a8bf0f7b9305652a4, type: 3} + - {fileID: 2800000, guid: c4d284af9cc67fe60aaa09d0c6bdcfc6, type: 3} + - {fileID: 2800000, guid: 2f9b567d3f611220db97c6a8724f1c00, type: 3} + - {fileID: 2800000, guid: 4e7719afbc07d00f6ae55491521fa261, type: 3} + - {fileID: 2800000, guid: 35a85776e55256cfa96e4efca55860e8, type: 3} + - {fileID: 2800000, guid: bd1aae54de330709f81ce487987b8d2c, type: 3} + - {fileID: 2800000, guid: 0723c22d38c92d3cf8f7e9dca0dfdfac, type: 3} + - {fileID: 2800000, guid: 799e1f97ea4509e24b63ec01a0c8ef53, type: 3} + - {fileID: 2800000, guid: 37665b3cf8f6c2f688f863e085cc96fc, type: 3} + - {fileID: 2800000, guid: 83da787a05efbdbaca86d211ddd67a09, type: 3} + - {fileID: 2800000, guid: c9cf3da08eaae8e7d95cc9406598effa, type: 3} + - {fileID: 2800000, guid: 927bc5a30638e8131a81cd3d5ff83388, type: 3} + - {fileID: 2800000, guid: 5248907572899d21d8191f1216ef9a53, type: 3} + - {fileID: 2800000, guid: d5c7a9e2901cc50f6bb5c8d505cfca72, type: 3} + - {fileID: 2800000, guid: c64192ad9a2db6cc9b77303f5fb5d03b, type: 3} + - {fileID: 2800000, guid: c83b5112d93d973b4b4cf2b579ee4228, type: 3} + - {fileID: 2800000, guid: c84a12e0eeb79b3798914965a151163f, type: 3} + - {fileID: 2800000, guid: e3ac760f7d9b9b8489db31eb586a1254, type: 3} + - {fileID: 2800000, guid: 522a9db8885cb2e08a647fd2d18daa56, type: 3} + - {fileID: 2800000, guid: 70694232e6013737eaad624e70c9f77d, type: 3} + - {fileID: 2800000, guid: 14cbce0d25637fb38a866d9e1be4262c, type: 3} + - {fileID: 2800000, guid: 80ce9d777010e15f4a0a3dfa924641f7, type: 3} + - {fileID: 2800000, guid: f6e7517c3b94602c79702e0fec00b0c2, type: 3} + - {fileID: 2800000, guid: 625e18044577a30bbb2060055857f742, type: 3} + - {fileID: 2800000, guid: 9fc089b69065b7807aa9c086e391007b, type: 3} + - {fileID: 2800000, guid: 3e4345c1e72ed4ec2b28a92c67ab4e57, type: 3} + - {fileID: 2800000, guid: 50b6aa8cc7e355966bcaecf733e99af2, type: 3} + - {fileID: 2800000, guid: 08a20c4bab446a4748df70e717cac3d1, type: 3} + - {fileID: 2800000, guid: c711d18a15318dee398327fa86655d75, type: 3} + - {fileID: 2800000, guid: f1b33071530ef693ba3f5e709e38e7af, type: 3} + - {fileID: 2800000, guid: a748ba4f29cb382b28f75da9a76cab49, type: 3} + - {fileID: 2800000, guid: 3c80a9c3ee4425399a41e42accf9580e, type: 3} + - {fileID: 2800000, guid: f0f45bc034f01cd0e8bbaffd2842d431, type: 3} + - {fileID: 2800000, guid: 3dcd625b3266890b5bb92bab551d1a0c, type: 3} + - {fileID: 2800000, guid: 6dd42e347f2983036b8c97e15999c90d, type: 3} + - {fileID: 2800000, guid: da2f14188576a1575bb20f5afee54919, type: 3} + - {fileID: 2800000, guid: ae20ecf1ce68849b3bdb3cd92cbe39ea, type: 3} + - {fileID: 2800000, guid: 8a57521c684f7ac3488f90cbc39d5fd8, type: 3} + - {fileID: 2800000, guid: f1577976faeb79461a7a9a79190b6b4b, type: 3} + - {fileID: 2800000, guid: 594155866fdbee1b58696ab68d1959a6, type: 3} + - {fileID: 2800000, guid: 3a1d4aaac08c16e6bbd682137d125f7f, type: 3} + - {fileID: 2800000, guid: 34fd05b7d89511b11aca0296b43c5873, type: 3} + - {fileID: 2800000, guid: f38a2dac9dd5e9b5fa3b3b73901b53e2, type: 3} + - {fileID: 2800000, guid: 0a779f173dc9028d3b660a2779c2e91f, type: 3} + - {fileID: 2800000, guid: 371006b48caca779aa7ba96ea35c066e, type: 3} + - {fileID: 2800000, guid: c1b204da6f89d2ceeb74b3fd6b0029f3, type: 3} + - {fileID: 2800000, guid: 394d62399240c431981b94616449179b, type: 3} + - {fileID: 2800000, guid: 7bd465c185f684f618e56d439bf20310, type: 3} + - {fileID: 2800000, guid: dd1e5afaed96bb38ebf0d1503c5a0d58, type: 3} + - {fileID: 2800000, guid: da71bf5055b765d5ebbefd0bb5eb120b, type: 3} + - {fileID: 2800000, guid: d819abd6cb3c8d382ae411ccd52ef717, type: 3} + - {fileID: 2800000, guid: 60320f8c78cd07d8595f05bc8ab83b54, type: 3} + - {fileID: 2800000, guid: b08721c0ae90d870398ad3b47d48a029, type: 3} + - {fileID: 2800000, guid: db4674d06aefae26899b734c571bdd20, type: 3} + - {fileID: 2800000, guid: f1f598436e883a103be05287bde4c979, type: 3} + - {fileID: 2800000, guid: 09a8399ecfbca64f4931a64a49b75f1d, type: 3} + - {fileID: 2800000, guid: 03ca744af66a0d60295e4d2f74907888, type: 3} + - {fileID: 2800000, guid: b4218311ddd285291b4b3f7c9305e877, type: 3} + - {fileID: 2800000, guid: 9ceb5f6af095095f0bd2c9fa26fa69aa, type: 3} + - {fileID: 2800000, guid: f0f4e91a21221b6d9906a08958128f78, type: 3} + - {fileID: 2800000, guid: 240ed44db69e3bb8ca850704e6da2c60, type: 3} + - {fileID: 2800000, guid: 402163db87c4ad9a796dfab615fa5187, type: 3} + - {fileID: 2800000, guid: 5643eb5762f0c7e009b727b180038cec, type: 3} + - {fileID: 2800000, guid: 8a8215a4bfb1ab4a78e589c2c636f53a, type: 3} + - {fileID: 2800000, guid: 7cb08806ee1a9941c99ab1af0b1f702a, type: 3} + - {fileID: 2800000, guid: 40001f285675ebb57824ecc7f96b9d1e, type: 3} + - {fileID: 2800000, guid: 08b722beefc1e824296b85c484c99106, type: 3} + - {fileID: 2800000, guid: 0b51f1891a3844aad9855232d2b727f8, type: 3} + - {fileID: 2800000, guid: 6ed40afe83287716bbddd9866586a247, type: 3} + - {fileID: 2800000, guid: 844d8099313e3b44bb89342cd303c05e, type: 3} + - {fileID: 2800000, guid: 042197a3765c901edbd135f32ff4a5bb, type: 3} + - {fileID: 2800000, guid: bc1a34949777ec6e8a225d14fb0d9982, type: 3} + - {fileID: 2800000, guid: e91608c78c4a069eeab1841009f22b7e, type: 3} + - {fileID: 2800000, guid: 96e21489d4f9be4759b6b353d0c03834, type: 3} + - {fileID: 2800000, guid: 2705022dc8ca91af99710941262982f4, type: 3} + - {fileID: 2800000, guid: 538fb5f9e9a5118aa9cb9ac3fa289173, type: 3} + - {fileID: 2800000, guid: 92e43c775ef242557b60a142124fdefd, type: 3} + - {fileID: 2800000, guid: 3fb5232b7511d16cd9a94c2385c28328, type: 3} + - {fileID: 2800000, guid: f2215f2af883c4c89a9484a945ce159d, type: 3} + - {fileID: 2800000, guid: b39ff33d39b2a5e30b82786e83b42e0b, type: 3} + - {fileID: 2800000, guid: e3a883c999c21d37bba4ecca19f67de0, type: 3} + - {fileID: 2800000, guid: f0d76e65ea629aca29a3ce2793872f7c, type: 3} + - {fileID: 2800000, guid: dcb6992a665b0e742ab2fc45232a8a00, type: 3} + - {fileID: 2800000, guid: 9e666096a25af0b229d04b6048688434, type: 3} + - {fileID: 2800000, guid: a21932911d1435f44bb0b29e3fcc05ee, type: 3} + - {fileID: 2800000, guid: 2dabffbe5b3377e34abe2bf85799de7e, type: 3} + - {fileID: 2800000, guid: 07682d1f469efb67c97cc4e61ddd1e5e, type: 3} + - {fileID: 2800000, guid: b1625608abb081902ab56610a41028ae, type: 3} + - {fileID: 2800000, guid: ff7be7341f122fa8682c879b23c0a034, type: 3} + - {fileID: 2800000, guid: 3ea8d75f410cb9ee3b74c819ca2a4f28, type: 3} + - {fileID: 2800000, guid: 38a07cb9f82ec6bae8d9a285565bcef7, type: 3} + - {fileID: 2800000, guid: 90b3cdcd782c86019afe6ac15063bf60, type: 3} + - {fileID: 2800000, guid: 0a142cb35a0c8ed6697be164e0aea899, type: 3} + - {fileID: 2800000, guid: ed77c60be946aab9ab0d9b829b59da6e, type: 3} + - {fileID: 2800000, guid: 53cdca53a80caedfd87e43b1f89beb19, type: 3} + - {fileID: 2800000, guid: 9f290a2c7b4f5e9698a7555dde3d341b, type: 3} + - {fileID: 2800000, guid: 668a2b77b6aa4b136ab1f4f49d57c30e, type: 3} + - {fileID: 2800000, guid: 0200f220cf51c569ab8bff1a1238e62a, type: 3} + - {fileID: 2800000, guid: c49ba38d244afbea785efd2f6770e742, type: 3} + - {fileID: 2800000, guid: c6a23892aa60d4a79b723b77e8bd223a, type: 3} + - {fileID: 2800000, guid: cc552c3984968a18ba818cf67f0438ad, type: 3} + - {fileID: 2800000, guid: e520e6b5252ce4990989866b2d2fc267, type: 3} + - {fileID: 2800000, guid: bb27b7d541778c2b581d29047e109315, type: 3} + - {fileID: 2800000, guid: 1df4157d8f2f0d62e971e10f34601b96, type: 3} + - {fileID: 2800000, guid: 363e3c4313095259ca7c785910845e47, type: 3} + - {fileID: 2800000, guid: 505661f5ec2db06e481d81d46ad33e31, type: 3} + - {fileID: 2800000, guid: 29c413ff81c64174f870d0cc56d1906c, type: 3} + - {fileID: 2800000, guid: aec8923bb3249b75cb00a23f9c9c64d7, type: 3} + - {fileID: 2800000, guid: 75457f288a672cf1c88bc4cbd862f07f, type: 3} + - {fileID: 2800000, guid: 7d1826fc5a9d913c2979e4a18d1ebf49, type: 3} + - {fileID: 2800000, guid: 9a6ac4f441a859243917f0c2b60a1b76, type: 3} + - {fileID: 2800000, guid: adb32ed485dd9c3ab97a914fbc3f14e1, type: 3} + - {fileID: 2800000, guid: 237212243311fefaaac51f694da3f378, type: 3} + - {fileID: 2800000, guid: 6b58c6cc1837ddb1c9e63d7082d14497, type: 3} + - {fileID: 2800000, guid: 3866da1dc464c112dbb672dbcac83d4e, type: 3} + - {fileID: 2800000, guid: bc770fe5f747d1d92a897eb1e11c9236, type: 3} + - {fileID: 2800000, guid: f9caabebbb98278cf9e337feed33f72c, type: 3} + - {fileID: 2800000, guid: a51aac9a98ad9a5f5a18c538393b688b, type: 3} + - {fileID: 2800000, guid: 8a51ab44422fc7ff787184896353fd51, type: 3} + - {fileID: 2800000, guid: 0757c518daa59a990b2958143b96f1da, type: 3} + - {fileID: 2800000, guid: 59e7a8fcbf9252c1d9c2c51743188572, type: 3} + - {fileID: 2800000, guid: c9d2abbb1e1a5ee84aa4b4e187939fdf, type: 3} + - {fileID: 2800000, guid: 69d3547963c6c0439be165072fbd0544, type: 3} + - {fileID: 2800000, guid: 367f74af1c95d7da18f381d6bd6f55fa, type: 3} + - {fileID: 2800000, guid: db0fc6a606f189d25abc2d18ae611318, type: 3} + - {fileID: 2800000, guid: 967f5dc8c8a9b5161aef7c67510384f7, type: 3} + - {fileID: 2800000, guid: a2ee50c5cd09731edae4a48a9eb0cb69, type: 3} + - {fileID: 2800000, guid: aa3dbb5e1be0758b0b60492480ea1043, type: 3} + - {fileID: 2800000, guid: 1ad0c1f0578ae3f04ac8f7dedae0734d, type: 3} + - {fileID: 2800000, guid: f8069ab3f8a1e21c2a6b720dd28890cb, type: 3} + - {fileID: 2800000, guid: b3a24dccc4baf9d7bb292e09a682a506, type: 3} + - {fileID: 2800000, guid: 8a352bd099c57fd8690740904e01ca8b, type: 3} + - {fileID: 2800000, guid: a4b3c1724a8b83015b8f09a3334e362e, type: 3} + - {fileID: 2800000, guid: e5553642ee43b41f2af23ac49f81c11b, type: 3} + - {fileID: 2800000, guid: 1226bef867bdfa72e9a302273ff3aa32, type: 3} + - {fileID: 2800000, guid: dcba487f02aa9aea1a18e2dd058690fa, type: 3} + - {fileID: 2800000, guid: fb4610d75993a1e9eb0809734352f33d, type: 3} + - {fileID: 2800000, guid: 0778d65a9d4d4fae98a24d95202b8e37, type: 3} + - {fileID: 2800000, guid: 80de77ab384b966f5a8411e07c39f583, type: 3} + - {fileID: 2800000, guid: 966254d3ee043368da463e20dde06e6c, type: 3} + - {fileID: 2800000, guid: 60e0482d8801caeccb1c177d96da7112, type: 3} + - {fileID: 2800000, guid: 3736113d9c1079d76a352b42cfec258b, type: 3} + - {fileID: 2800000, guid: e782000eef4ec55209ea7c39a77bccdb, type: 3} + - {fileID: 2800000, guid: 56b3e6c520f57de96a3d8c03225c768e, type: 3} + - {fileID: 2800000, guid: 85e7ff5caa604f1e198a3d79c512b414, type: 3} + - {fileID: 2800000, guid: 39a987f708208fe3ea4b3643f323a3c2, type: 3} + - {fileID: 2800000, guid: 9299d279e456f39638e64d04c67028db, type: 3} + - {fileID: 2800000, guid: 4252d964cad2a14da91e9573a393d4a9, type: 3} + - {fileID: 2800000, guid: 25b96553917a42036b7cb88c433bcfb3, type: 3} + - {fileID: 2800000, guid: 21331faba3758ffa4818ad93850f167e, type: 3} + - {fileID: 2800000, guid: 5062b34df3af719b8bc9a245515412cb, type: 3} + - {fileID: 2800000, guid: a975721b38587e7bb920a27b6c0f5910, type: 3} + - {fileID: 2800000, guid: 9ece58a87aba5c10e9d4e16eb5283a84, type: 3} + - {fileID: 2800000, guid: 20dc4edea8bd051c38c0635d42df3d18, type: 3} + - {fileID: 2800000, guid: 1ccb49a4292bf5d0ea5f8686a5f1c467, type: 3} + - {fileID: 2800000, guid: 6e7d1d99c6d2ae96ab060064f2110a05, type: 3} + - {fileID: 2800000, guid: a3299d740e6506f768ae62a34cdaf5a6, type: 3} + load_from_resources_if_empty: 1 + _texture: {fileID: 0} + _renderer: {fileID: 2302102554894629329} + use_shared: 0 + _last_sample: 0 + load_path: Textures +--- !u!136 &3674649710580244811 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2302102554894629341} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Runtime/Prefabs/Obstructions/ObstructionTriangle.prefab.meta b/Runtime/Prefabs/Obstructions/ObstructionTriangle.prefab.meta new file mode 100644 index 000000000..44c08f7c7 --- /dev/null +++ b/Runtime/Prefabs/Obstructions/ObstructionTriangle.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0417113b0c49d89d88046598f357ecd8 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/StatusDisplayer.meta b/Runtime/Prefabs/StatusDisplayer.meta new file mode 100644 index 000000000..9ba2531ed --- /dev/null +++ b/Runtime/Prefabs/StatusDisplayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93a6f636b4bf8ac18a37383b066a79bb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/StatusDisplayer.prefab b/Runtime/Prefabs/StatusDisplayer.prefab deleted file mode 100644 index 817693f9a..000000000 --- a/Runtime/Prefabs/StatusDisplayer.prefab +++ /dev/null @@ -1,6775 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &1009201073953630 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224587882722061460} - - component: {fileID: 222024539503014030} - - component: {fileID: 114283572533019278} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224587882722061460 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1009201073953630} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224636536014505988} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -46} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222024539503014030 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1009201073953630} - m_CullTransparentMesh: 0 ---- !u!114 &114283572533019278 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1009201073953630} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 11 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: RGB ---- !u!1 &1012414855387826 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224349984539309466} - - component: {fileID: 222810166945352498} - - component: {fileID: 114286341486749746} - - component: {fileID: 114152215923272706} - m_Layer: 5 - m_Name: ResetButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224349984539309466 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1012414855387826} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224899560526562194} - m_Father: {fileID: 224402646093801010} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 8} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &222810166945352498 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1012414855387826} - m_CullTransparentMesh: 0 ---- !u!114 &114286341486749746 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1012414855387826} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114152215923272706 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1012414855387826} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114286341486749746} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: ResetAllEnvironments - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ---- !u!1 &1018378338062808 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224197669204420964} - - component: {fileID: 222502269407005894} - - component: {fileID: 114344504202892896} - m_Layer: 5 - m_Name: 7 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224197669204420964 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1018378338062808} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224050080613233214} - m_Father: {fileID: 224701342121933384} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 500, y: 0} - m_SizeDelta: {x: 102, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222502269407005894 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1018378338062808} - m_CullTransparentMesh: 0 ---- !u!114 &114344504202892896 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1018378338062808} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1019346069955308 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224701342121933384} - m_Layer: 5 - m_Name: RenderTextures - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224701342121933384 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1019346069955308} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224196915908625750} - - {fileID: 224353654338157032} - - {fileID: 224132139837726900} - - {fileID: 224172983077478202} - - {fileID: 224813270165938368} - - {fileID: 224391620420815862} - - {fileID: 224197669204420964} - - {fileID: 224848426646297228} - m_Father: {fileID: 224015848551928794} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 378.5, y: 50} - m_SizeDelta: {x: 1600, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1037944659948160 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224821225216088922} - - component: {fileID: 222796746965392762} - - component: {fileID: 114396056439857596} - m_Layer: 5 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224821225216088922 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1037944659948160} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224636536014505988} - m_Father: {fileID: 224353654338157032} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -2, y: -2} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222796746965392762 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1037944659948160} - m_CullTransparentMesh: 0 ---- !u!114 &114396056439857596 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1037944659948160} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1053614995849490 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224050080613233214} - - component: {fileID: 222412228792602018} - - component: {fileID: 114095996980366604} - m_Layer: 5 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224050080613233214 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1053614995849490} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224105945286103488} - m_Father: {fileID: 224197669204420964} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -2, y: -2} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222412228792602018 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1053614995849490} - m_CullTransparentMesh: 0 ---- !u!114 &114095996980366604 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1053614995849490} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1066881072510320 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224581161150068072} - - component: {fileID: 222297452545660146} - - component: {fileID: 114813592669122650} - m_Layer: 5 - m_Name: SignalLabel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224581161150068072 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1066881072510320} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224259966808611590} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 180, y: 26} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222297452545660146 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1066881072510320} - m_CullTransparentMesh: 0 ---- !u!114 &114813592669122650 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1066881072510320} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 16 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'Signal:' ---- !u!1 &1071133703767796 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224856473306989928} - - component: {fileID: 222532048391691158} - - component: {fileID: 114492109156347024} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224856473306989928 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1071133703767796} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224715232681261004} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -46} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222532048391691158 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1071133703767796} - m_CullTransparentMesh: 0 ---- !u!114 &114492109156347024 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1071133703767796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 11 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Instance ---- !u!1 &1075966971751546 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224326569454747260} - - component: {fileID: 222036187455366402} - - component: {fileID: 114712801458595206} - m_Layer: 5 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224326569454747260 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1075966971751546} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224688816834750794} - m_Father: {fileID: 224848426646297228} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -2, y: -2} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222036187455366402 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1075966971751546} - m_CullTransparentMesh: 0 ---- !u!114 &114712801458595206 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1075966971751546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1080499059968056 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224470425125242612} - - component: {fileID: 222569720873571916} - - component: {fileID: 114112702081801098} - m_Layer: 5 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224470425125242612 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1080499059968056} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224675873480807500} - m_Father: {fileID: 224538654709879808} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 8, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222569720873571916 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1080499059968056} - m_CullTransparentMesh: 0 ---- !u!114 &114112702081801098 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1080499059968056} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1089959586505930 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224059401825063212} - - component: {fileID: 222135205995285512} - - component: {fileID: 114533246432062424} - m_Layer: 5 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224059401825063212 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1089959586505930} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224715232681261004} - m_Father: {fileID: 224813270165938368} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -2, y: -2} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222135205995285512 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1089959586505930} - m_CullTransparentMesh: 0 ---- !u!114 &114533246432062424 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1089959586505930} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1094054334784862 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224582703667719680} - - component: {fileID: 222525060268950548} - - component: {fileID: 114742776673127912} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &224582703667719680 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094054334784862} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224267042087391786} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222525060268950548 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094054334784862} - m_CullTransparentMesh: 0 ---- !u!114 &114742776673127912 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094054334784862} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1094593375121814 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224482607053254736} - - component: {fileID: 222529654146109258} - m_Layer: 5 - m_Name: Info - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224482607053254736 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094593375121814} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224984678386874610} - - {fileID: 224279774314885746} - - {fileID: 224537146899461920} - - {fileID: 224259966808611590} - - {fileID: 224816755305354502} - m_Father: {fileID: 224234215991166828} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 4, y: -4} - m_SizeDelta: {x: 188, y: 188} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222529654146109258 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094593375121814} - m_CullTransparentMesh: 0 ---- !u!1 &1102776736730362 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224869762628237466} - - component: {fileID: 222569146989154506} - - component: {fileID: 114369306892687116} - - component: {fileID: 114988635351345222} - m_Layer: 5 - m_Name: EnvironmentText - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224869762628237466 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1102776736730362} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224279774314885746} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 16, y: 0} - m_SizeDelta: {x: 160, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222569146989154506 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1102776736730362} - m_CullTransparentMesh: 0 ---- !u!114 &114369306892687116 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1102776736730362} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} - m_FontSize: 16 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: APrototypingEnvironment ---- !u!114 &114988635351345222 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1102776736730362} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} - m_Name: - m_EditorClassIdentifier: - _poll_event: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: IdentifierString - m_Mode: 2 - m_Arguments: - m_ObjectArgument: {fileID: 114988635351345222} - m_ObjectArgumentAssemblyTypeName: Neodroid.Runtime.Utilities.EventRecipients.TextUpdater, Assembly-CSharp - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - _text: {fileID: 114369306892687116} ---- !u!1 &1106671700701944 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224984678386874610} - - component: {fileID: 222718928603090646} - - component: {fileID: 114464345980292760} - m_Layer: 5 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224984678386874610 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1106671700701944} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224967770781076552} - m_Father: {fileID: 224482607053254736} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222718928603090646 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1106671700701944} - m_CullTransparentMesh: 0 ---- !u!114 &114464345980292760 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1106671700701944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.39215687} - m_RaycastTarget: 0 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1115824818896674 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224758081212739480} - - component: {fileID: 222622810513617534} - - component: {fileID: 114181271829786234} - - component: {fileID: 114501781773825270} - m_Layer: 5 - m_Name: FrameText - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224758081212739480 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1115824818896674} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224537146899461920} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 16, y: 0} - m_SizeDelta: {x: 160, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222622810513617534 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1115824818896674} - m_CullTransparentMesh: 0 ---- !u!114 &114181271829786234 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1115824818896674} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} - m_FontSize: 16 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0/1000 ---- !u!114 &114501781773825270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1115824818896674} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} - m_Name: - m_EditorClassIdentifier: - _poll_event: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: FrameString - m_Mode: 2 - m_Arguments: - m_ObjectArgument: {fileID: 114501781773825270} - m_ObjectArgumentAssemblyTypeName: Neodroid.Runtime.Utilities.EventRecipients.TextUpdater, Assembly-CSharp - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - _text: {fileID: 114181271829786234} ---- !u!1 &1129146671143514 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224172983077478202} - - component: {fileID: 222174786035845504} - - component: {fileID: 114238067043212190} - m_Layer: 5 - m_Name: 4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224172983077478202 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1129146671143514} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224251973499681520} - m_Father: {fileID: 224701342121933384} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -100, y: 0} - m_SizeDelta: {x: 102, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222174786035845504 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1129146671143514} - m_CullTransparentMesh: 0 ---- !u!114 &114238067043212190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1129146671143514} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1140423343021272 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224766180822363746} - - component: {fileID: 222943141248688984} - - component: {fileID: 114196508728529600} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224766180822363746 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140423343021272} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224688816834750794} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -46} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222943141248688984 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140423343021272} - m_CullTransparentMesh: 0 ---- !u!114 &114196508728529600 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1140423343021272} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 11 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Satellite ---- !u!1 &1148135381051552 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224538654709879808} - m_Layer: 5 - m_Name: GameObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224538654709879808 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1148135381051552} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224470425125242612} - m_Father: {fileID: 224816755305354502} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 16, y: 0} - m_SizeDelta: {x: 160, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!1 &1161861293138692 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224132139837726900} - - component: {fileID: 222414558502754942} - - component: {fileID: 114151953491634132} - m_Layer: 5 - m_Name: 3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224132139837726900 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161861293138692} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224608780912732784} - m_Father: {fileID: 224701342121933384} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -300, y: 0} - m_SizeDelta: {x: 102, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222414558502754942 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161861293138692} - m_CullTransparentMesh: 0 ---- !u!114 &114151953491634132 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161861293138692} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1174067927235170 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4883451393892670} - - component: {fileID: 114445647698492218} - - component: {fileID: 114039640398606450} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &4883451393892670 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1174067927235170} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224293318527779910} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114445647698492218 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1174067927235170} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 0 - m_DragThreshold: 5 ---- !u!114 &114039640398606450 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1174067927235170} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!1 &1184938321628896 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224635333348531804} - - component: {fileID: 222264354910810676} - - component: {fileID: 114793424838932904} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224635333348531804 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1184938321628896} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224161216386936054} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -46} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222264354910810676 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1184938321628896} - m_CullTransparentMesh: 0 ---- !u!114 &114793424838932904 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1184938321628896} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 11 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Normal ---- !u!1 &1190758182245004 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224293318527779910} - - component: {fileID: 114209461203926368} - - component: {fileID: 223697436474172148} - - component: {fileID: 114606204937279818} - - component: {fileID: 114712140726527296} - - component: {fileID: 114905969786602410} - m_Layer: 5 - m_Name: StatusDisplayer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224293318527779910 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1190758182245004} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 224234215991166828} - - {fileID: 4883451393892670} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!114 &114209461203926368 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1190758182245004} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0d40864cd9d964cb7bf5197b12f20ca6, type: 3} - m_Name: - m_EditorClassIdentifier: - _game_object: {fileID: 1425110498396586} - _key: 27 ---- !u!223 &223697436474172148 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1190758182245004} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 2 - m_TargetDisplay: 0 ---- !u!114 &114606204937279818 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1190758182245004} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &114712140726527296 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1190758182245004} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 1 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 1 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!114 &114905969786602410 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1190758182245004} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d210b7b3a3a8cea468d3dbe25e1391bf, type: 3} - m_Name: - m_EditorClassIdentifier: - _manager: {fileID: 0} - _environment: {fileID: 0} - _evaluation_function: {fileID: 0} - _environment_text: {fileID: 114988635351345222} - _environment_frame: {fileID: 114501781773825270} - _environment_obs: {fileID: 114002950248132940} - _signal: {fileID: 114088500222901950} - _terminated: {fileID: 114221796099513398} - _status_text: {fileID: 114790955924512488} - _testing_toggle: {fileID: 114543584020609536} - _reset_button: {fileID: 114152215923272706} - _clean_empty_no_target_events: 1 - _debugging: 0 - _unity_event_call_state: 2 ---- !u!1 &1211048683901828 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224391620420815862} - - component: {fileID: 222681801505698338} - - component: {fileID: 114637728173033180} - m_Layer: 5 - m_Name: 6 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224391620420815862 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1211048683901828} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224270448574198842} - m_Father: {fileID: 224701342121933384} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 300, y: 0} - m_SizeDelta: {x: 102, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222681801505698338 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1211048683901828} - m_CullTransparentMesh: 0 ---- !u!114 &114637728173033180 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1211048683901828} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1251070856853632 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224868116962371652} - - component: {fileID: 222631966392680386} - m_Layer: 5 - m_Name: StatusBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224868116962371652 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1251070856853632} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224112667425157172} - - {fileID: 224961567739092654} - m_Father: {fileID: 224402646093801010} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 8, y: 0} - m_SizeDelta: {x: 180, y: 30} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222631966392680386 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1251070856853632} - m_CullTransparentMesh: 0 ---- !u!1 &1258037754798618 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224161216386936054} - - component: {fileID: 222299802144706768} - - component: {fileID: 114299916836981956} - m_Layer: 5 - m_Name: Normal - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224161216386936054 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1258037754798618} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224635333348531804} - m_Father: {fileID: 224270448574198842} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -28} - m_SizeDelta: {x: 100, y: 56} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222299802144706768 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1258037754798618} - m_CullTransparentMesh: 0 ---- !u!114 &114299916836981956 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1258037754798618} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 8400000, guid: 63f7bf9c3a80b4d169b394696cbbd9ab, type: 2} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1261835905664662 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224899560526562194} - - component: {fileID: 222269652196049820} - - component: {fileID: 114602368234537698} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224899560526562194 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1261835905664662} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224349984539309466} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222269652196049820 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1261835905664662} - m_CullTransparentMesh: 0 ---- !u!114 &114602368234537698 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1261835905664662} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} - m_FontSize: 18 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Reset ---- !u!1 &1271671388150976 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224001375150637708} - - component: {fileID: 114899035287920212} - - component: {fileID: 222274372351021572} - - component: {fileID: 114484429963385544} - m_Layer: 5 - m_Name: Viewport - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &224001375150637708 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1271671388150976} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224267871597078786} - m_Father: {fileID: 224709051787829256} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!114 &114899035287920212 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1271671388150976} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!222 &222274372351021572 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1271671388150976} - m_CullTransparentMesh: 0 ---- !u!114 &114484429963385544 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1271671388150976} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1275934059412194 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224015848551928794} - - component: {fileID: 114596287562862582} - - component: {fileID: 222456520692148974} - - component: {fileID: 114644325594984608} - m_Layer: 5 - m_Name: Viewport - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224015848551928794 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1275934059412194} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224701342121933384} - m_Father: {fileID: 224133478466665168} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!114 &114596287562862582 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1275934059412194} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!222 &222456520692148974 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1275934059412194} - m_CullTransparentMesh: 0 ---- !u!114 &114644325594984608 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1275934059412194} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1283009169310736 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224151899924162434} - - component: {fileID: 222766122359764956} - - component: {fileID: 114729435358129664} - m_Layer: 5 - m_Name: CenterDot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 0 ---- !u!224 &224151899924162434 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1283009169310736} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224234215991166828} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 3, y: 3} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222766122359764956 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1283009169310736} - m_CullTransparentMesh: 0 ---- !u!114 &114729435358129664 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1283009169310736} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 0, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1295270975088138 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224439380182749184} - - component: {fileID: 222940735172102760} - - component: {fileID: 114912175106822934} - m_Layer: 5 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224439380182749184 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1295270975088138} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224161602068173376} - m_Father: {fileID: 224402646093801010} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222940735172102760 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1295270975088138} - m_CullTransparentMesh: 0 ---- !u!114 &114912175106822934 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1295270975088138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.39215687} - m_RaycastTarget: 0 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1306543884284772 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224094362407379264} - - component: {fileID: 222210209648640928} - - component: {fileID: 114043286673291000} - m_Layer: 5 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224094362407379264 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1306543884284772} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224012912652757650} - m_Father: {fileID: 224196915908625750} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -2, y: -2} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222210209648640928 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1306543884284772} - m_CullTransparentMesh: 0 ---- !u!114 &114043286673291000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1306543884284772} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1315007209662002 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224234215991166828} - m_Layer: 5 - m_Name: Group - m_TagString: New tag - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224234215991166828 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1315007209662002} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224133478466665168} - - {fileID: 224709051787829256} - - {fileID: 224151899924162434} - - {fileID: 224402646093801010} - - {fileID: 224482607053254736} - m_Father: {fileID: 224293318527779910} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1324439920442932 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224110368661715722} - - component: {fileID: 222183915738499198} - - component: {fileID: 114942717479311642} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224110368661715722 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1324439920442932} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224279112397338844} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0.526875, y: 0} - m_AnchoredPosition: {x: 1649.5, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222183915738499198 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1324439920442932} - m_CullTransparentMesh: 0 ---- !u!114 &114942717479311642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1324439920442932} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1347674986760772 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224161690365559448} - - component: {fileID: 222004966743260960} - - component: {fileID: 114702938980033506} - - component: {fileID: 114088500222901950} - m_Layer: 5 - m_Name: SignalText - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224161690365559448 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1347674986760772} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224259966808611590} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 16, y: 0} - m_SizeDelta: {x: 160, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222004966743260960 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1347674986760772} - m_CullTransparentMesh: 0 ---- !u!114 &114702938980033506 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1347674986760772} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} - m_FontSize: 16 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0, 0 ---- !u!114 &114088500222901950 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1347674986760772} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} - m_Name: - m_EditorClassIdentifier: - _poll_event: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: SignalString - m_Mode: 2 - m_Arguments: - m_ObjectArgument: {fileID: 114088500222901950} - m_ObjectArgumentAssemblyTypeName: Neodroid.Runtime.Utilities.EventRecipients.TextUpdater, Assembly-CSharp - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - _text: {fileID: 114702938980033506} ---- !u!1 &1375527814440850 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224636536014505988} - - component: {fileID: 222491550220825340} - - component: {fileID: 114123423070401190} - m_Layer: 5 - m_Name: RGB - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224636536014505988 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1375527814440850} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224587882722061460} - m_Father: {fileID: 224821225216088922} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -28} - m_SizeDelta: {x: 100, y: 56} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222491550220825340 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1375527814440850} - m_CullTransparentMesh: 0 ---- !u!114 &114123423070401190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1375527814440850} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1399377135396542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224715232681261004} - - component: {fileID: 222128113798149870} - - component: {fileID: 114562030588395048} - m_Layer: 5 - m_Name: InstanceSegmentation - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224715232681261004 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1399377135396542} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224856473306989928} - m_Father: {fileID: 224059401825063212} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -28} - m_SizeDelta: {x: 100, y: 56} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222128113798149870 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1399377135396542} - m_CullTransparentMesh: 0 ---- !u!114 &114562030588395048 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1399377135396542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 8400000, guid: 8fb1467d625b3486199ecd1d9d21ef7d, type: 2} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1401723155215048 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224161602068173376} - - component: {fileID: 222469039663593504} - - component: {fileID: 114859067752077540} - m_Layer: 5 - m_Name: Border - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224161602068173376 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401723155215048} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224439380182749184} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222469039663593504 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401723155215048} - m_CullTransparentMesh: 0 ---- !u!114 &114859067752077540 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1401723155215048} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 21300000, guid: 400a66016a26d45479b1ba3aaf1e6ef8, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1425110498396586 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224402646093801010} - m_Layer: 5 - m_Name: Menu - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224402646093801010 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1425110498396586} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224439380182749184} - - {fileID: 224868116962371652} - - {fileID: 224981408229622084} - - {fileID: 224532449799468524} - - {fileID: 224736680352827420} - - {fileID: 224349984539309466} - m_Father: {fileID: 224234215991166828} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -4, y: -4} - m_SizeDelta: {x: 188, y: 188} - m_Pivot: {x: 1, y: 1} ---- !u!1 &1429766462561706 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224447797799902152} - - component: {fileID: 222885983098065206} - - component: {fileID: 114536312153518148} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224447797799902152 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1429766462561706} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224105945286103488} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -46} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222885983098065206 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1429766462561706} - m_CullTransparentMesh: 0 ---- !u!114 &114536312153518148 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1429766462561706} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 11 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Flow ---- !u!1 &1436566014300684 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224133478466665168} - - component: {fileID: 114946902466635962} - - component: {fileID: 222863937180506048} - - component: {fileID: 114779388325010268} - m_Layer: 5 - m_Name: 'CameraScrollView ' - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 0 ---- !u!224 &224133478466665168 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1436566014300684} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224015848551928794} - - {fileID: 224190067178417906} - m_Father: {fileID: 224234215991166828} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 60} - m_SizeDelta: {x: 0, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &114946902466635962 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1436566014300684} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 224701342121933384} - m_Horizontal: 1 - m_Vertical: 0 - m_MovementType: 1 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 224015848551928794} - m_HorizontalScrollbar: {fileID: 114837088913221662} - m_VerticalScrollbar: {fileID: 0} - m_HorizontalScrollbarVisibility: 2 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: -3 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ---- !u!222 &222863937180506048 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1436566014300684} - m_CullTransparentMesh: 0 ---- !u!114 &114779388325010268 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1436566014300684} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1442127883994938 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224736680352827420} - - component: {fileID: 114375385855601744} - m_Layer: 5 - m_Name: CenterDotToggle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224736680352827420 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1442127883994938} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224234345433003480} - - {fileID: 224856044140865628} - m_Father: {fileID: 224402646093801010} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 8, y: -100} - m_SizeDelta: {x: 180, y: 30} - m_Pivot: {x: 0, y: 1} ---- !u!114 &114375385855601744 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1442127883994938} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114649358254167946} - toggleTransition: 1 - graphic: {fileID: 114355468487659540} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 1283009169310736} - m_MethodName: SetActive - m_Mode: 0 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_IsOn: 0 ---- !u!1 &1446672015267520 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224259966808611590} - - component: {fileID: 222153686209723410} - m_Layer: 5 - m_Name: SignalBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224259966808611590 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1446672015267520} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224581161150068072} - - {fileID: 224161690365559448} - m_Father: {fileID: 224482607053254736} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 4, y: -90} - m_SizeDelta: {x: 180, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222153686209723410 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1446672015267520} - m_CullTransparentMesh: 0 ---- !u!1 &1451997379932040 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224219095199356408} - - component: {fileID: 222297974720063954} - - component: {fileID: 114312150337642752} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &224219095199356408 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1451997379932040} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224616556132205068} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222297974720063954 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1451997379932040} - m_CullTransparentMesh: 0 ---- !u!114 &114312150337642752 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1451997379932040} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1468739506957472 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224708962364915846} - - component: {fileID: 222679968395521688} - - component: {fileID: 114363195186259392} - m_Layer: 5 - m_Name: EnvironmentLabel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224708962364915846 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1468739506957472} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224279774314885746} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 180, y: 26} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222679968395521688 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1468739506957472} - m_CullTransparentMesh: 0 ---- !u!114 &114363195186259392 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1468739506957472} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 16 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'Environment:' ---- !u!1 &1477631225134320 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224346626108647524} - - component: {fileID: 222336697726680772} - - component: {fileID: 114555492544437722} - m_Layer: 5 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224346626108647524 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1477631225134320} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224676111182267588} - m_Father: {fileID: 224981408229622084} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222336697726680772 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1477631225134320} - m_CullTransparentMesh: 0 ---- !u!114 &114555492544437722 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1477631225134320} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1483751349519466 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224400783559291254} - - component: {fileID: 222278883706641706} - - component: {fileID: 114773818650062018} - m_Layer: 5 - m_Name: FrameLabel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224400783559291254 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1483751349519466} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224537146899461920} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 180, y: 26} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222278883706641706 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1483751349519466} - m_CullTransparentMesh: 0 ---- !u!114 &114773818650062018 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1483751349519466} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 16 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'Frame:' ---- !u!1 &1495280887321080 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224816755305354502} - - component: {fileID: 114559782006378406} - - component: {fileID: 114221796099513398} - m_Layer: 5 - m_Name: TerminatedToggle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224816755305354502 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1495280887321080} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224953985537205222} - - {fileID: 224538654709879808} - m_Father: {fileID: 224482607053254736} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 4, y: -130} - m_SizeDelta: {x: 180, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!114 &114559782006378406 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1495280887321080} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 0 - m_TargetGraphic: {fileID: 114112702081801098} - toggleTransition: 1 - graphic: {fileID: 114045521679516650} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_IsOn: 0 ---- !u!114 &114221796099513398 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1495280887321080} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fb23d22b856f4a6e862c42f26baab546, type: 3} - m_Name: - m_EditorClassIdentifier: - _poll_event: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: TerminatedBoolean - m_Mode: 2 - m_Arguments: - m_ObjectArgument: {fileID: 114221796099513398} - m_ObjectArgumentAssemblyTypeName: Neodroid.Runtime.Utilities.EventRecipients.ToggleUpdater, Assembly-CSharp - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - _toggle: {fileID: 114559782006378406} ---- !u!1 &1505478141713430 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224532449799468524} - - component: {fileID: 114464697478342806} - m_Layer: 5 - m_Name: ViewsToggle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224532449799468524 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1505478141713430} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224083395972142038} - - {fileID: 224844274684147976} - m_Father: {fileID: 224402646093801010} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 8, y: -70} - m_SizeDelta: {x: 180, y: 30} - m_Pivot: {x: 0, y: 1} ---- !u!114 &114464697478342806 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1505478141713430} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114925812254480488} - toggleTransition: 1 - graphic: {fileID: 114909405547853270} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 1436566014300684} - m_MethodName: SetActive - m_Mode: 0 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 1 - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_IsOn: 0 ---- !u!1 &1550247761088874 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224768789297563450} - - component: {fileID: 222678578676292072} - - component: {fileID: 114753848165734974} - m_Layer: 5 - m_Name: InfraredShadow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224768789297563450 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1550247761088874} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224501511996450078} - m_Father: {fileID: 224251973499681520} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -28} - m_SizeDelta: {x: 100, y: 56} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222678578676292072 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1550247761088874} - m_CullTransparentMesh: 0 ---- !u!114 &114753848165734974 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1550247761088874} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 8400000, guid: b22ce111b5af44afe8b8f2f085799a5f, type: 2} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1552574667554198 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224688816834750794} - - component: {fileID: 222743016619513096} - - component: {fileID: 114655183296997112} - m_Layer: 5 - m_Name: Satellite - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224688816834750794 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1552574667554198} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224766180822363746} - m_Father: {fileID: 224326569454747260} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -28} - m_SizeDelta: {x: 100, y: 56} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222743016619513096 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1552574667554198} - m_CullTransparentMesh: 0 ---- !u!114 &114655183296997112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1552574667554198} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 8400000, guid: bc593ac7628a042ac93b20ca1c0101b6, type: 2} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1553469427675754 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224190067178417906} - - component: {fileID: 222610976823379756} - - component: {fileID: 114499393921955320} - - component: {fileID: 114837088913221662} - m_Layer: 5 - m_Name: Scrollbar Horizontal - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224190067178417906 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1553469427675754} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224279112397338844} - m_Father: {fileID: 224133478466665168} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 2344, y: 0} - m_SizeDelta: {x: 0, y: 5} - m_Pivot: {x: 0, y: 0} ---- !u!222 &222610976823379756 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1553469427675754} - m_CullTransparentMesh: 0 ---- !u!114 &114499393921955320 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1553469427675754} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114837088913221662 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1553469427675754} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 1 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114942717479311642} - m_HandleRect: {fileID: 224110368661715722} - m_Direction: 0 - m_Value: 0 - m_Size: 0.645 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ---- !u!1 &1559866516279090 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224961567739092654} - - component: {fileID: 222291027818222050} - - component: {fileID: 114992145804104380} - - component: {fileID: 114790955924512488} - m_Layer: 5 - m_Name: StatusText - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224961567739092654 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1559866516279090} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224868116962371652} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 16, y: -20} - m_SizeDelta: {x: 172, y: 26} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222291027818222050 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1559866516279090} - m_CullTransparentMesh: 0 ---- !u!114 &114992145804104380 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1559866516279090} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 18 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Not Connected ---- !u!114 &114790955924512488 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1559866516279090} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} - m_Name: - m_EditorClassIdentifier: - _poll_event: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: StatusString - m_Mode: 2 - m_Arguments: - m_ObjectArgument: {fileID: 114790955924512488} - m_ObjectArgumentAssemblyTypeName: Neodroid.Runtime.Utilities.EventRecipients.TextUpdater, Assembly-CSharp - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - _text: {fileID: 114992145804104380} ---- !u!1 &1563356267366460 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224676111182267588} - - component: {fileID: 222209697532708656} - - component: {fileID: 114364188900800728} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224676111182267588 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1563356267366460} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224346626108647524} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222209697532708656 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1563356267366460} - m_CullTransparentMesh: 0 ---- !u!114 &114364188900800728 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1563356267366460} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1566480878314652 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224279774314885746} - - component: {fileID: 222376727753427890} - m_Layer: 5 - m_Name: EnvironmentBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224279774314885746 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1566480878314652} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224708962364915846} - - {fileID: 224869762628237466} - m_Father: {fileID: 224482607053254736} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 4, y: -6} - m_SizeDelta: {x: 180, y: 24} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222376727753427890 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1566480878314652} - m_CullTransparentMesh: 0 ---- !u!1 &1568554949134692 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224347770657582968} - - component: {fileID: 222892909289324472} - - component: {fileID: 114142662467235474} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224347770657582968 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568554949134692} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224012912652757650} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -46} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222892909289324472 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568554949134692} - m_CullTransparentMesh: 0 ---- !u!114 &114142662467235474 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1568554949134692} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 11 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Seg ---- !u!1 &1593388294626054 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224353654338157032} - - component: {fileID: 222170089196074892} - - component: {fileID: 114089746416087144} - m_Layer: 5 - m_Name: 2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224353654338157032 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593388294626054} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224821225216088922} - m_Father: {fileID: 224701342121933384} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -500, y: 0} - m_SizeDelta: {x: 102, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222170089196074892 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593388294626054} - m_CullTransparentMesh: 0 ---- !u!114 &114089746416087144 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593388294626054} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1593884039847720 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224608780912732784} - - component: {fileID: 222173027519260530} - - component: {fileID: 114997360877560072} - m_Layer: 5 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224608780912732784 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593884039847720} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224771550165842720} - m_Father: {fileID: 224132139837726900} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -2, y: -2} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222173027519260530 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593884039847720} - m_CullTransparentMesh: 0 ---- !u!114 &114997360877560072 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593884039847720} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1598934956293816 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224251973499681520} - - component: {fileID: 222691152383953500} - - component: {fileID: 114405192110032044} - m_Layer: 5 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224251973499681520 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1598934956293816} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224768789297563450} - m_Father: {fileID: 224172983077478202} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -2, y: -2} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222691152383953500 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1598934956293816} - m_CullTransparentMesh: 0 ---- !u!114 &114405192110032044 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1598934956293816} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1617461140317354 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224022790003590410} - - component: {fileID: 222509568372407010} - - component: {fileID: 114090866412346492} - - component: {fileID: 114360142959021996} - m_Layer: 5 - m_Name: VerticalScrollbar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &224022790003590410 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1617461140317354} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224267042087391786} - m_Father: {fileID: 224709051787829256} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 0} - m_Pivot: {x: 1, y: 1} ---- !u!222 &222509568372407010 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1617461140317354} - m_CullTransparentMesh: 0 ---- !u!114 &114090866412346492 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1617461140317354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114360142959021996 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1617461140317354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114742776673127912} - m_HandleRect: {fileID: 224582703667719680} - m_Direction: 2 - m_Value: 1 - m_Size: 0.07932692 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ---- !u!1 &1624603439447724 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224537146899461920} - - component: {fileID: 222828554972263622} - m_Layer: 5 - m_Name: FrameBar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224537146899461920 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1624603439447724} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224400783559291254} - - {fileID: 224758081212739480} - m_Father: {fileID: 224482607053254736} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 4, y: -50} - m_SizeDelta: {x: 180, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222828554972263622 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1624603439447724} - m_CullTransparentMesh: 0 ---- !u!1 &1634853657455818 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224856044140865628} - - component: {fileID: 222555089731765534} - - component: {fileID: 114712434871820202} - m_Layer: 5 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224856044140865628 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634853657455818} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224736680352827420} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 40, y: 0} - m_SizeDelta: {x: 131, y: 22} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222555089731765534 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634853657455818} - m_CullTransparentMesh: 0 ---- !u!114 &114712434871820202 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634853657455818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} - m_FontSize: 18 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 40 - m_Alignment: 3 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Center Dot ---- !u!1 &1643575321949496 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224616556132205068} - m_Layer: 5 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &224616556132205068 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643575321949496} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224219095199356408} - m_Father: {fileID: 224241792838047938} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1647382701396918 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224112667425157172} - - component: {fileID: 222060317342258194} - - component: {fileID: 114923601699482010} - m_Layer: 5 - m_Name: StatusLabel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224112667425157172 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1647382701396918} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224868116962371652} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 180, y: 26} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222060317342258194 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1647382701396918} - m_CullTransparentMesh: 0 ---- !u!114 &114923601699482010 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1647382701396918} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 18 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'Status:' ---- !u!1 &1665102617544614 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224105945286103488} - - component: {fileID: 222787258974861858} - - component: {fileID: 114459899662804706} - m_Layer: 5 - m_Name: Flow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224105945286103488 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1665102617544614} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224447797799902152} - m_Father: {fileID: 224050080613233214} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -28} - m_SizeDelta: {x: 100, y: 56} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222787258974861858 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1665102617544614} - m_CullTransparentMesh: 0 ---- !u!114 &114459899662804706 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1665102617544614} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 8400000, guid: afc5604d79d0849129803e463fc07bca, type: 2} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1670592868546114 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224234345433003480} - - component: {fileID: 222396942318584024} - - component: {fileID: 114649358254167946} - m_Layer: 5 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224234345433003480 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670592868546114} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224739625015266640} - m_Father: {fileID: 224736680352827420} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222396942318584024 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670592868546114} - m_CullTransparentMesh: 0 ---- !u!114 &114649358254167946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670592868546114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1672676918127502 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224709051787829256} - - component: {fileID: 114332933053416176} - - component: {fileID: 222776020242416584} - - component: {fileID: 114621012137224014} - m_Layer: 5 - m_Name: 'ObservationsScrollView ' - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &224709051787829256 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1672676918127502} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224001375150637708} - - {fileID: 224241792838047938} - - {fileID: 224022790003590410} - m_Father: {fileID: 224234215991166828} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -5} - m_SizeDelta: {x: -600, y: 50} - m_Pivot: {x: 0.5, y: 1} ---- !u!114 &114332933053416176 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1672676918127502} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 224267871597078786} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 1 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 224001375150637708} - m_HorizontalScrollbar: {fileID: 114785673117026166} - m_VerticalScrollbar: {fileID: 114360142959021996} - m_HorizontalScrollbarVisibility: 2 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: -3 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ---- !u!222 &222776020242416584 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1672676918127502} - m_CullTransparentMesh: 0 ---- !u!114 &114621012137224014 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1672676918127502} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1689838280500390 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224267042087391786} - m_Layer: 5 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &224267042087391786 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1689838280500390} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224582703667719680} - m_Father: {fileID: 224022790003590410} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1709103880620280 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224196915908625750} - - component: {fileID: 222607979330458978} - - component: {fileID: 114960183697678336} - m_Layer: 5 - m_Name: 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224196915908625750 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1709103880620280} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224094362407379264} - m_Father: {fileID: 224701342121933384} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -700, y: 0} - m_SizeDelta: {x: 102, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222607979330458978 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1709103880620280} - m_CullTransparentMesh: 0 ---- !u!114 &114960183697678336 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1709103880620280} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1709914492231660 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224267871597078786} - - component: {fileID: 222785475415721572} - - component: {fileID: 114926636315371600} - - component: {fileID: 114002950248132940} - - component: {fileID: 114991657407947670} - m_Layer: 5 - m_Name: ObservationsText - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224267871597078786 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1709914492231660} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224001375150637708} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: 16.500008} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 1} ---- !u!222 &222785475415721572 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1709914492231660} - m_CullTransparentMesh: 0 ---- !u!114 &114926636315371600 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1709914492231660} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: ca7561dbd3a3b964ab9da92d50a3baef, type: 3} - m_FontSize: 12 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 12 - m_MaxSize: 16 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 1 - m_LineSpacing: 1 - m_Text: 'ActorSingleAxisTransformObserver: - - 0.5 - - - DepthCamera: - - - - FlowCamera: - - - - InfraredShadowCamera: - - - - InstanceSegmentationCamera: - - - - NormalCamera: - - - - RGBCamera: - - - - SatelliteCamera: - - - - SegmentationCamera: - -' ---- !u!114 &114002950248132940 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1709914492231660} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} - m_Name: - m_EditorClassIdentifier: - _poll_event: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: ObservationsString - m_Mode: 2 - m_Arguments: - m_ObjectArgument: {fileID: 114002950248132940} - m_ObjectArgumentAssemblyTypeName: Neodroid.Runtime.Utilities.EventRecipients.TextUpdater, Assembly-CSharp - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 1 - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - _text: {fileID: 114926636315371600} ---- !u!114 &114991657407947670 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1709914492231660} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!1 &1729716153401794 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224844274684147976} - - component: {fileID: 222002537981852362} - - component: {fileID: 114124835853976742} - m_Layer: 5 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224844274684147976 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1729716153401794} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224532449799468524} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 40, y: 0} - m_SizeDelta: {x: 131, y: 22} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222002537981852362 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1729716153401794} - m_CullTransparentMesh: 0 ---- !u!114 &114124835853976742 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1729716153401794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} - m_FontSize: 18 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 40 - m_Alignment: 3 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Camera Views ---- !u!1 &1733990776603050 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224967770781076552} - - component: {fileID: 222937350607279502} - - component: {fileID: 114284854106277020} - m_Layer: 5 - m_Name: Border - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224967770781076552 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1733990776603050} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224984678386874610} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222937350607279502 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1733990776603050} - m_CullTransparentMesh: 0 ---- !u!114 &114284854106277020 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1733990776603050} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 21300000, guid: 400a66016a26d45479b1ba3aaf1e6ef8, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1738690579831682 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224675873480807500} - - component: {fileID: 222152646434772184} - - component: {fileID: 114045521679516650} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224675873480807500 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1738690579831682} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224470425125242612} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222152646434772184 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1738690579831682} - m_CullTransparentMesh: 0 ---- !u!114 &114045521679516650 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1738690579831682} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1745117465669022 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224771550165842720} - - component: {fileID: 222311594544407672} - - component: {fileID: 114992393246666558} - m_Layer: 5 - m_Name: Depth - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224771550165842720 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1745117465669022} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224296894259501836} - m_Father: {fileID: 224608780912732784} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -28} - m_SizeDelta: {x: 100, y: 56} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222311594544407672 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1745117465669022} - m_CullTransparentMesh: 0 ---- !u!114 &114992393246666558 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1745117465669022} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 8400000, guid: 5d9eca522a1944267b89beea11ffc58c, type: 2} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1745468383708284 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224083395972142038} - - component: {fileID: 222789467974402670} - - component: {fileID: 114925812254480488} - m_Layer: 5 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224083395972142038 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1745468383708284} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224339472726039552} - m_Father: {fileID: 224532449799468524} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222789467974402670 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1745468383708284} - m_CullTransparentMesh: 0 ---- !u!114 &114925812254480488 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1745468383708284} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1748858491772888 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224981408229622084} - - component: {fileID: 114543584020609536} - m_Layer: 5 - m_Name: TestToggle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224981408229622084 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1748858491772888} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224346626108647524} - - {fileID: 224809886157074576} - m_Father: {fileID: 224402646093801010} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 8, y: -40} - m_SizeDelta: {x: 180, y: 30} - m_Pivot: {x: 0, y: 1} ---- !u!114 &114543584020609536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1748858491772888} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114555492544437722} - toggleTransition: 1 - graphic: {fileID: 114364188900800728} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: SetTesting - m_Mode: 0 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_IsOn: 0 ---- !u!1 &1761075696505018 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224809886157074576} - - component: {fileID: 222080940038169356} - - component: {fileID: 114625923924919562} - m_Layer: 5 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224809886157074576 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1761075696505018} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224981408229622084} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 40, y: 0} - m_SizeDelta: {x: 131, y: 22} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222080940038169356 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1761075696505018} - m_CullTransparentMesh: 0 ---- !u!114 &114625923924919562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1761075696505018} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} - m_FontSize: 18 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 40 - m_Alignment: 3 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Test Motors ---- !u!1 &1766932758653506 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224813270165938368} - - component: {fileID: 222783814011317490} - - component: {fileID: 114407477407299342} - m_Layer: 5 - m_Name: 5 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224813270165938368 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1766932758653506} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224059401825063212} - m_Father: {fileID: 224701342121933384} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 100, y: 0} - m_SizeDelta: {x: 102, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222783814011317490 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1766932758653506} - m_CullTransparentMesh: 0 ---- !u!114 &114407477407299342 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1766932758653506} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1798268993041088 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224270448574198842} - - component: {fileID: 222043168792409690} - - component: {fileID: 114076640124492666} - m_Layer: 5 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224270448574198842 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1798268993041088} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224161216386936054} - m_Father: {fileID: 224391620420815862} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -2, y: -2} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222043168792409690 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1798268993041088} - m_CullTransparentMesh: 0 ---- !u!114 &114076640124492666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1798268993041088} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1804760205061794 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224953985537205222} - - component: {fileID: 222995404720874254} - - component: {fileID: 114672680113300006} - m_Layer: 5 - m_Name: TerminatedLabel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224953985537205222 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1804760205061794} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224816755305354502} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 180, y: 26} - m_Pivot: {x: 0, y: 1} ---- !u!222 &222995404720874254 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1804760205061794} - m_CullTransparentMesh: 0 ---- !u!114 &114672680113300006 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1804760205061794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 16 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'Terminated:' ---- !u!1 &1819261491275574 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224848426646297228} - - component: {fileID: 222233798545880978} - - component: {fileID: 114916060113506018} - m_Layer: 5 - m_Name: 8 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224848426646297228 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1819261491275574} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224326569454747260} - m_Father: {fileID: 224701342121933384} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 700, y: 0} - m_SizeDelta: {x: 102, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222233798545880978 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1819261491275574} - m_CullTransparentMesh: 0 ---- !u!114 &114916060113506018 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1819261491275574} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1827372217657208 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224501511996450078} - - component: {fileID: 222616110531685172} - - component: {fileID: 114964221192976352} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224501511996450078 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1827372217657208} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224768789297563450} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -46} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222616110531685172 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1827372217657208} - m_CullTransparentMesh: 0 ---- !u!114 &114964221192976352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1827372217657208} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 11 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Infrared ---- !u!1 &1847323714889568 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224296894259501836} - - component: {fileID: 222553757125154910} - - component: {fileID: 114418408576731734} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224296894259501836 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1847323714889568} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224771550165842720} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -46} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222553757125154910 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1847323714889568} - m_CullTransparentMesh: 0 ---- !u!114 &114418408576731734 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1847323714889568} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} - m_FontSize: 11 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 1 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Depth ---- !u!1 &1856477320062506 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224241792838047938} - - component: {fileID: 222363114423404832} - - component: {fileID: 114555527998959226} - - component: {fileID: 114785673117026166} - m_Layer: 5 - m_Name: HorizontalScrollbar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &224241792838047938 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1856477320062506} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224616556132205068} - m_Father: {fileID: 224709051787829256} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 20} - m_Pivot: {x: 0, y: 0} ---- !u!222 &222363114423404832 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1856477320062506} - m_CullTransparentMesh: 0 ---- !u!114 &114555527998959226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1856477320062506} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114785673117026166 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1856477320062506} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114312150337642752} - m_HandleRect: {fileID: 224219095199356408} - m_Direction: 0 - m_Value: 0 - m_Size: 1 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ---- !u!1 &1870303121723880 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224739625015266640} - - component: {fileID: 222611229899153576} - - component: {fileID: 114355468487659540} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224739625015266640 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870303121723880} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224234345433003480} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222611229899153576 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870303121723880} - m_CullTransparentMesh: 0 ---- !u!114 &114355468487659540 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870303121723880} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!1 &1895783123601904 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224279112397338844} - m_Layer: 5 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224279112397338844 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895783123601904} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224110368661715722} - m_Father: {fileID: 224190067178417906} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1911701515124116 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224012912652757650} - - component: {fileID: 222591695406254664} - - component: {fileID: 114243498231574028} - m_Layer: 5 - m_Name: Segmentation - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224012912652757650 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1911701515124116} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224347770657582968} - m_Father: {fileID: 224094362407379264} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -28} - m_SizeDelta: {x: 100, y: 56} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222591695406254664 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1911701515124116} - m_CullTransparentMesh: 0 ---- !u!114 &114243498231574028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1911701515124116} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Texture: {fileID: 8400000, guid: c0062e72afb4348d9b9bb702fba6c398, type: 2} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!1 &1983317495708126 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 224339472726039552} - - component: {fileID: 222153667607781724} - - component: {fileID: 114909405547853270} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!224 &224339472726039552 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1983317495708126} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224083395972142038} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &222153667607781724 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1983317495708126} - m_CullTransparentMesh: 0 ---- !u!114 &114909405547853270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1983317495708126} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 diff --git a/Runtime/Prefabs/StatusDisplayer/CameraObsCanvas.prefab b/Runtime/Prefabs/StatusDisplayer/CameraObsCanvas.prefab new file mode 100644 index 000000000..ce571dc0b --- /dev/null +++ b/Runtime/Prefabs/StatusDisplayer/CameraObsCanvas.prefab @@ -0,0 +1,378 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1969176689723083494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8504175065375550335} + - component: {fileID: 957625481491395494} + - component: {fileID: 6052546992980200481} + m_Layer: 5 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8504175065375550335 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1969176689723083494} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8293522495518203550} + m_Father: {fileID: 8295159174005021556} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &957625481491395494 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1969176689723083494} + m_CullTransparentMesh: 0 +--- !u!114 &6052546992980200481 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1969176689723083494} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.34509805} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!1 &8070480531431438466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8293522495518203550} + - component: {fileID: 8291784647881543262} + - component: {fileID: 8183055892476026740} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &8293522495518203550 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8070480531431438466} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8504175065375550335} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8291784647881543262 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8070480531431438466} + m_CullTransparentMesh: 0 +--- !u!114 &8183055892476026740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8070480531431438466} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} + m_FontSize: 11 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Seg +--- !u!1 &8070782122618241666 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8293850944137154726} + - component: {fileID: 8291402741917577798} + - component: {fileID: 8183216568357685022} + m_Layer: 5 + m_Name: Bg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &8293850944137154726 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8070782122618241666} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8295159174005021556} + m_Father: {fileID: 8293669221873235120} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -2, y: -2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8291402741917577798 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8070782122618241666} + m_CullTransparentMesh: 0 +--- !u!114 &8183216568357685022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8070782122618241666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!1 &8071369112533159026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8295159174005021556} + - component: {fileID: 8292046280268757934} + - component: {fileID: 8183135098847977450} + m_Layer: 5 + m_Name: Segmentation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &8295159174005021556 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8071369112533159026} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8504175065375550335} + m_Father: {fileID: 8293850944137154726} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8292046280268757934 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8071369112533159026} + m_CullTransparentMesh: 0 +--- !u!114 &8183135098847977450 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8071369112533159026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 8400000, guid: c0062e72afb4348d9b9bb702fba6c398, type: 2} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!1 &8071466158123956510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8293669221873235120} + - component: {fileID: 8292064900722205828} + - component: {fileID: 8186948679077056998} + m_Layer: 5 + m_Name: CameraObsCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &8293669221873235120 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8071466158123956510} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8293850944137154726} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8292064900722205828 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8071466158123956510} + m_CullTransparentMesh: 0 +--- !u!114 &8186948679077056998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8071466158123956510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 diff --git a/Runtime/Prefabs/StatusDisplayer/CameraObsCanvas.prefab.meta b/Runtime/Prefabs/StatusDisplayer/CameraObsCanvas.prefab.meta new file mode 100644 index 000000000..3a774b8c6 --- /dev/null +++ b/Runtime/Prefabs/StatusDisplayer/CameraObsCanvas.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/StatusDisplayer/SampleButton.prefab b/Runtime/Prefabs/StatusDisplayer/SampleButton.prefab new file mode 100644 index 000000000..ed4ab7039 --- /dev/null +++ b/Runtime/Prefabs/StatusDisplayer/SampleButton.prefab @@ -0,0 +1,205 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3328354788587580818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3328354788587580821} + - component: {fileID: 3328354788587580822} + - component: {fileID: 3328354788587580823} + - component: {fileID: 3328354788587580820} + m_Layer: 10 + m_Name: SampleToggleButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3328354788587580821 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328354788587580818} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3328354789503584759} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20.75} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3328354788587580822 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328354788587580818} + m_CullTransparentMesh: 0 +--- !u!114 &3328354788587580823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328354788587580818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &3328354788587580820 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328354788587580818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3328354788587580823} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &3328354789503584756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3328354789503584759} + - component: {fileID: 3328354789503584745} + - component: {fileID: 3328354789503584758} + m_Layer: 10 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3328354789503584759 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328354789503584756} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3328354788587580821} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3328354789503584745 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328354789503584756} + m_CullTransparentMesh: 0 +--- !u!114 &3328354789503584758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328354789503584756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Button diff --git a/Runtime/Prefabs/StatusDisplayer/SampleButton.prefab.meta b/Runtime/Prefabs/StatusDisplayer/SampleButton.prefab.meta new file mode 100644 index 000000000..9b0bb7e08 --- /dev/null +++ b/Runtime/Prefabs/StatusDisplayer/SampleButton.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c6695ed111e7e6ae2ad2ea4df4a7f88a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/StatusDisplayer/SampleToggle.prefab b/Runtime/Prefabs/StatusDisplayer/SampleToggle.prefab new file mode 100644 index 000000000..9e7f560ab --- /dev/null +++ b/Runtime/Prefabs/StatusDisplayer/SampleToggle.prefab @@ -0,0 +1,397 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1272509146852580863 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272509146852580862} + - component: {fileID: 1272509146852580737} + m_Layer: 10 + m_Name: SampleToggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1272509146852580862 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509146852580863} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 9120844678948684158} + - {fileID: 1272509147311631360} + - {fileID: 1272509147220362460} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1272509146852580737 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509146852580863} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1272509147311631363} + toggleTransition: 1 + graphic: {fileID: 1272509147966900187} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 1 +--- !u!1 &1272509147220362461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272509147220362460} + - component: {fileID: 1272509147220362462} + - component: {fileID: 1272509147220362463} + m_Layer: 10 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1272509147220362460 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147220362461} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1272509146852580862} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9, y: -0.5} + m_SizeDelta: {x: -28, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1272509147220362462 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147220362461} + m_CullTransparentMesh: 0 +--- !u!114 &1272509147220362463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147220362461} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Toggle +--- !u!1 &1272509147311631361 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272509147311631360} + - component: {fileID: 1272509147311631362} + - component: {fileID: 1272509147311631363} + m_Layer: 10 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1272509147311631360 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147311631361} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1272509147966900184} + m_Father: {fileID: 1272509146852580862} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1272509147311631362 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147311631361} + m_CullTransparentMesh: 0 +--- !u!114 &1272509147311631363 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147311631361} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!1 &1272509147966900185 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272509147966900184} + - component: {fileID: 1272509147966900186} + - component: {fileID: 1272509147966900187} + m_Layer: 10 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1272509147966900184 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147966900185} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1272509147311631360} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1272509147966900186 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147966900185} + m_CullTransparentMesh: 0 +--- !u!114 &1272509147966900187 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272509147966900185} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!1 &1470908606170247292 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9120844678948684158} + - component: {fileID: 2104099614920365305} + - component: {fileID: 4959266988508485273} + m_Layer: 10 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &9120844678948684158 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470908606170247292} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1272509146852580862} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2104099614920365305 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470908606170247292} + m_CullTransparentMesh: 0 +--- !u!114 &4959266988508485273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470908606170247292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.39215687} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 diff --git a/Runtime/Prefabs/StatusDisplayer/SampleToggle.prefab.meta b/Runtime/Prefabs/StatusDisplayer/SampleToggle.prefab.meta new file mode 100644 index 000000000..316aa6ce7 --- /dev/null +++ b/Runtime/Prefabs/StatusDisplayer/SampleToggle.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f41929f2d5e78818fb970acf42bc6eb2 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/StatusDisplayer/StatusDisplayer.prefab b/Runtime/Prefabs/StatusDisplayer/StatusDisplayer.prefab new file mode 100644 index 000000000..a81d61856 --- /dev/null +++ b/Runtime/Prefabs/StatusDisplayer/StatusDisplayer.prefab @@ -0,0 +1,8675 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &413886292 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 413886293} + m_Layer: 10 + m_Name: Footer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &413886293 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413886292} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1233811812} + m_Father: {fileID: 224234215991166828} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &684732059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 684732060} + - component: {fileID: 684732061} + - component: {fileID: 684732062} + - component: {fileID: 684732064} + m_Layer: 10 + m_Name: List + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &684732060 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 684732059} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1536810263} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &684732061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 684732059} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 2 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &684732062 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 684732059} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2c14b16833cca3c66adaa5d654305c83, type: 3} + m_Name: + m_EditorClassIdentifier: + _sample_toggle_button_prefab: {fileID: 1272509146852580737, guid: f41929f2d5e78818fb970acf42bc6eb2, + type: 3} +--- !u!222 &684732064 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 684732059} + m_CullTransparentMesh: 0 +--- !u!1 &1233811811 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1233811812} + - component: {fileID: 1233811814} + - component: {fileID: 1233811813} + m_Layer: 10 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1233811812 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1233811811} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 413886293} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -10, y: 10} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 1, y: 0} +--- !u!222 &1233811814 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1233811811} + m_CullTransparentMesh: 0 +--- !u!114 &1233811813 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1233811811} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 2800000, guid: 6004d2024e728b538a96d522d5b00856, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!1 &1244767256 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1244767257} + - component: {fileID: 1244767259} + - component: {fileID: 1244767258} + m_Layer: 10 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1244767257 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1244767256} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224293318527779910} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1244767259 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1244767256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!114 &1244767258 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1244767256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!1 &1536810262 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1536810263} + - component: {fileID: 1536810265} + - component: {fileID: 1536810264} + - component: {fileID: 1536810266} + m_Layer: 10 + m_Name: ConfigurableSampleToggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1536810263 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536810262} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 684732060} + m_Father: {fileID: 224402646093801010} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 186, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &1536810265 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536810262} + m_CullTransparentMesh: 0 +--- !u!114 &1536810264 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536810262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1536810266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536810262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 1 +--- !u!1 &1012414855387826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224349984539309466} + - component: {fileID: 222810166945352498} + - component: {fileID: 114286341486749746} + - component: {fileID: 114152215923272706} + m_Layer: 10 + m_Name: ResetButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224349984539309466 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1012414855387826} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224899560526562194} + m_Father: {fileID: 224402646093801010} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 8} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &222810166945352498 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1012414855387826} + m_CullTransparentMesh: 0 +--- !u!114 &114286341486749746 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1012414855387826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114152215923272706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1012414855387826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114286341486749746} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: ResetAllEnvironments + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &1019346069955308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224701342121933384} + - component: {fileID: 968355717} + - component: {fileID: 690172744} + m_Layer: 10 + m_Name: RenderTextures + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224701342121933384 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019346069955308} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5030239470511228131} + - {fileID: 8293669222486126511} + - {fileID: 8293669221953491596} + - {fileID: 8293669222328113023} + - {fileID: 7403032497129149527} + - {fileID: 333616275261260285} + - {fileID: 8962979067187194969} + - {fileID: 8293669221498214884} + - {fileID: 8980935159065295902} + - {fileID: 6702172878384392205} + - {fileID: 8293669221951400078} + - {fileID: 8293669222587842520} + - {fileID: 8293669222196084695} + - {fileID: 8293669222032376476} + - {fileID: 8293669221442587418} + - {fileID: 8293669221651150085} + - {fileID: 6780299134410746973} + - {fileID: 224196915908625750} + - {fileID: 8293669221948584488} + - {fileID: 8293669221749201559} + m_Father: {fileID: 224015848551928794} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 378.5, y: 128} + m_SizeDelta: {x: -464, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &968355717 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019346069955308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 100 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 +--- !u!114 &690172744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019346069955308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 1 + m_VerticalFit: 1 +--- !u!1 &1066881072510320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224581161150068072} + - component: {fileID: 222297452545660146} + - component: {fileID: 114813592669122650} + m_Layer: 10 + m_Name: SignalLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224581161150068072 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066881072510320} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224259966808611590} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 180, y: 26} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222297452545660146 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066881072510320} + m_CullTransparentMesh: 0 +--- !u!114 &114813592669122650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066881072510320} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Signal:' +--- !u!1 &1080499059968056 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224470425125242612} + - component: {fileID: 222569720873571916} + - component: {fileID: 114112702081801098} + m_Layer: 10 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224470425125242612 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080499059968056} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224675873480807500} + m_Father: {fileID: 224538654709879808} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 8, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222569720873571916 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080499059968056} + m_CullTransparentMesh: 0 +--- !u!114 &114112702081801098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080499059968056} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1094054334784862 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224582703667719680} + - component: {fileID: 222525060268950548} + - component: {fileID: 114742776673127912} + m_Layer: 10 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224582703667719680 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094054334784862} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224267042087391786} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222525060268950548 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094054334784862} + m_CullTransparentMesh: 0 +--- !u!114 &114742776673127912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094054334784862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1094593375121814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224482607053254736} + - component: {fileID: 222529654146109258} + m_Layer: 10 + m_Name: Info + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224482607053254736 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094593375121814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224984678386874610} + - {fileID: 224279774314885746} + - {fileID: 224537146899461920} + - {fileID: 224259966808611590} + - {fileID: 224816755305354502} + - {fileID: 224709051787829256} + m_Father: {fileID: 224234215991166828} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 4, y: -4} + m_SizeDelta: {x: 188, y: 188} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222529654146109258 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094593375121814} + m_CullTransparentMesh: 0 +--- !u!1 &1102776736730362 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224869762628237466} + - component: {fileID: 222569146989154506} + - component: {fileID: 114369306892687116} + - component: {fileID: 114988635351345222} + m_Layer: 10 + m_Name: EnvironmentText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224869762628237466 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102776736730362} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224279774314885746} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 16, y: 0} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222569146989154506 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102776736730362} + m_CullTransparentMesh: 0 +--- !u!114 &114369306892687116 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102776736730362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: APrototypingEnvironment +--- !u!114 &114988635351345222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102776736730362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} + m_Name: + m_EditorClassIdentifier: + _poll_event: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: IdentifierString + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 114988635351345222} + m_ObjectArgumentAssemblyTypeName: droid.Runtime.GameObjects.StatusDisplayer.EventRecipients.TextUpdater, + Neodroid.Runtime + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + _invoke_on_validate: 0 + _text: {fileID: 114369306892687116} +--- !u!1 &1106671700701944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224984678386874610} + - component: {fileID: 222718928603090646} + - component: {fileID: 114464345980292760} + m_Layer: 10 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224984678386874610 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1106671700701944} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224967770781076552} + m_Father: {fileID: 224482607053254736} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222718928603090646 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1106671700701944} + m_CullTransparentMesh: 0 +--- !u!114 &114464345980292760 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1106671700701944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.39215687} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1115824818896674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224758081212739480} + - component: {fileID: 222622810513617534} + - component: {fileID: 114181271829786234} + - component: {fileID: 114501781773825270} + m_Layer: 10 + m_Name: EpisodeText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224758081212739480 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115824818896674} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1671616627706562109} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222622810513617534 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115824818896674} + m_CullTransparentMesh: 0 +--- !u!114 &114181271829786234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115824818896674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 100 +--- !u!114 &114501781773825270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115824818896674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} + m_Name: + m_EditorClassIdentifier: + _poll_event: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: FrameString + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 114501781773825270} + m_ObjectArgumentAssemblyTypeName: droid.Runtime.GameObjects.StatusDisplayer.EventRecipients.TextUpdater, + Neodroid.Runtime + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + _invoke_on_validate: 0 + _text: {fileID: 114181271829786234} +--- !u!1 &1148135381051552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224538654709879808} + m_Layer: 10 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224538654709879808 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148135381051552} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224470425125242612} + m_Father: {fileID: 224816755305354502} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 16, y: 0} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!1 &1190758182245004 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224293318527779910} + - component: {fileID: 114209461203926368} + - component: {fileID: 223697436474172148} + - component: {fileID: 114606204937279818} + - component: {fileID: 114712140726527296} + - component: {fileID: 114905969786602410} + m_Layer: 10 + m_Name: StatusDisplayer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224293318527779910 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190758182245004} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224234215991166828} + - {fileID: 1244767257} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &114209461203926368 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190758182245004} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d40864cd9d964cb7bf5197b12f20ca6, type: 3} + m_Name: + m_EditorClassIdentifier: + _game_object: {fileID: 0} + _key: 0 +--- !u!223 &223697436474172148 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190758182245004} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 2 + m_TargetDisplay: 0 +--- !u!114 &114606204937279818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190758182245004} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114712140726527296 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190758182245004} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 1 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114905969786602410 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190758182245004} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d210b7b3a3a8cea468d3dbe25e1391bf, type: 3} + m_Name: + m_EditorClassIdentifier: + _clean_empty_no_target_events: 1 + _environment: {fileID: 0} + _environment_frame: {fileID: 236015409021998999} + _environment_obs: {fileID: 114002950248132940} + _environment_text: {fileID: 114988635351345222} + _evaluation_function: {fileID: 0} + _manager: {fileID: 0} + _reset_button: {fileID: 114152215923272706} + _signal: {fileID: 114088500222901950} + _episode_length: {fileID: 114501781773825270} + _status_text: {fileID: 114790955924512488} + _terminated: {fileID: 114221796099513398} + _testing_toggle: {fileID: 114543584020609536} + _unity_event_call_state: 2 + _debugging: 0 +--- !u!1 &1251070856853632 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224868116962371652} + - component: {fileID: 222631966392680386} + m_Layer: 10 + m_Name: StatusBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224868116962371652 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1251070856853632} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224112667425157172} + - {fileID: 224961567739092654} + m_Father: {fileID: 224402646093801010} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 8, y: 0} + m_SizeDelta: {x: 180, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222631966392680386 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1251070856853632} + m_CullTransparentMesh: 0 +--- !u!1 &1261835905664662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224899560526562194} + - component: {fileID: 222269652196049820} + - component: {fileID: 114602368234537698} + m_Layer: 10 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224899560526562194 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261835905664662} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224349984539309466} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222269652196049820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261835905664662} + m_CullTransparentMesh: 0 +--- !u!114 &114602368234537698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261835905664662} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Reset +--- !u!1 &1271671388150976 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224001375150637708} + - component: {fileID: 114899035287920212} + - component: {fileID: 222274372351021572} + - component: {fileID: 114484429963385544} + m_Layer: 10 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224001375150637708 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1271671388150976} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224267871597078786} + m_Father: {fileID: 224709051787829256} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114899035287920212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1271671388150976} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!222 &222274372351021572 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1271671388150976} + m_CullTransparentMesh: 0 +--- !u!114 &114484429963385544 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1271671388150976} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1275934059412194 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224015848551928794} + - component: {fileID: 114596287562862582} + - component: {fileID: 222456520692148974} + - component: {fileID: 114644325594984608} + m_Layer: 10 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224015848551928794 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275934059412194} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224701342121933384} + m_Father: {fileID: 224133478466665168} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: -2} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114596287562862582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275934059412194} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!222 &222456520692148974 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275934059412194} + m_CullTransparentMesh: 0 +--- !u!114 &114644325594984608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275934059412194} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1283009169310736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224151899924162434} + - component: {fileID: 222766122359764956} + - component: {fileID: 114729435358129664} + m_Layer: 10 + m_Name: CenterDot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 0 +--- !u!224 &224151899924162434 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1283009169310736} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224234215991166828} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 3, y: 3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222766122359764956 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1283009169310736} + m_CullTransparentMesh: 0 +--- !u!114 &114729435358129664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1283009169310736} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1295270975088138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224439380182749184} + - component: {fileID: 222940735172102760} + - component: {fileID: 114912175106822934} + m_Layer: 10 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224439380182749184 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295270975088138} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224161602068173376} + m_Father: {fileID: 224402646093801010} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222940735172102760 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295270975088138} + m_CullTransparentMesh: 0 +--- !u!114 &114912175106822934 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295270975088138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.39215687} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1315007209662002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224234215991166828} + m_Layer: 10 + m_Name: Group + m_TagString: New tag + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224234215991166828 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315007209662002} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1899299443356989376} + - {fileID: 224133478466665168} + - {fileID: 224151899924162434} + - {fileID: 224402646093801010} + - {fileID: 224482607053254736} + - {fileID: 413886293} + m_Father: {fileID: 224293318527779910} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1324439920442932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224110368661715722} + - component: {fileID: 222183915738499198} + - component: {fileID: 114942717479311642} + m_Layer: 10 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224110368661715722 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324439920442932} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224279112397338844} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.526875, y: 1} + m_AnchoredPosition: {x: 1649.5, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222183915738499198 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324439920442932} + m_CullTransparentMesh: 0 +--- !u!114 &114942717479311642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324439920442932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1347674986760772 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224161690365559448} + - component: {fileID: 222004966743260960} + - component: {fileID: 114702938980033506} + - component: {fileID: 114088500222901950} + m_Layer: 10 + m_Name: SignalText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224161690365559448 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347674986760772} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224259966808611590} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 16, y: 0} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222004966743260960 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347674986760772} + m_CullTransparentMesh: 0 +--- !u!114 &114702938980033506 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347674986760772} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0, 0 +--- !u!114 &114088500222901950 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347674986760772} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} + m_Name: + m_EditorClassIdentifier: + _poll_event: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: SignalString + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 114088500222901950} + m_ObjectArgumentAssemblyTypeName: droid.Runtime.GameObjects.StatusDisplayer.EventRecipients.TextUpdater, + Neodroid.Runtime + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + _invoke_on_validate: 0 + _text: {fileID: 114702938980033506} +--- !u!1 &1401723155215048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224161602068173376} + - component: {fileID: 222469039663593504} + - component: {fileID: 114859067752077540} + m_Layer: 10 + m_Name: Border + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224161602068173376 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401723155215048} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224439380182749184} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222469039663593504 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401723155215048} + m_CullTransparentMesh: 0 +--- !u!114 &114859067752077540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401723155215048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 400a66016a26d45479b1ba3aaf1e6ef8, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1425110498396586 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224402646093801010} + m_Layer: 10 + m_Name: Menu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224402646093801010 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1425110498396586} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224439380182749184} + - {fileID: 224868116962371652} + - {fileID: 224981408229622084} + - {fileID: 224532449799468524} + - {fileID: 224736680352827420} + - {fileID: 224349984539309466} + - {fileID: 1536810263} + m_Father: {fileID: 224234215991166828} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -4, y: -4} + m_SizeDelta: {x: 188, y: 188} + m_Pivot: {x: 1, y: 1} +--- !u!1 &1436566014300684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224133478466665168} + - component: {fileID: 114946902466635962} + - component: {fileID: 222863937180506048} + - component: {fileID: 114779388325010268} + m_Layer: 10 + m_Name: 'CameraScrollView ' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 0 +--- !u!224 &224133478466665168 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1436566014300684} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224015848551928794} + - {fileID: 224190067178417906} + m_Father: {fileID: 224234215991166828} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 128} + m_SizeDelta: {x: 0, y: 258} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114946902466635962 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1436566014300684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224701342121933384} + m_Horizontal: 1 + m_Vertical: 0 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 224015848551928794} + m_HorizontalScrollbar: {fileID: 114837088913221662} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &222863937180506048 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1436566014300684} + m_CullTransparentMesh: 0 +--- !u!114 &114779388325010268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1436566014300684} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1442127883994938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224736680352827420} + - component: {fileID: 114375385855601744} + m_Layer: 10 + m_Name: CenterDotToggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224736680352827420 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442127883994938} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224234345433003480} + - {fileID: 224856044140865628} + m_Father: {fileID: 224402646093801010} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 8, y: -100} + m_SizeDelta: {x: 180, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114375385855601744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442127883994938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114649358254167946} + toggleTransition: 1 + graphic: {fileID: 114355468487659540} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1283009169310736} + m_MethodName: SetActive + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_IsOn: 0 +--- !u!1 &1446672015267520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224259966808611590} + - component: {fileID: 222153686209723410} + m_Layer: 10 + m_Name: SignalBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224259966808611590 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446672015267520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224581161150068072} + - {fileID: 224161690365559448} + m_Father: {fileID: 224482607053254736} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 4, y: -90} + m_SizeDelta: {x: 180, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222153686209723410 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446672015267520} + m_CullTransparentMesh: 0 +--- !u!1 &1451997379932040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224219095199356408} + - component: {fileID: 222297974720063954} + - component: {fileID: 114312150337642752} + m_Layer: 10 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224219095199356408 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451997379932040} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224616556132205068} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222297974720063954 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451997379932040} + m_CullTransparentMesh: 0 +--- !u!114 &114312150337642752 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451997379932040} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1468739506957472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224708962364915846} + - component: {fileID: 222679968395521688} + - component: {fileID: 114363195186259392} + m_Layer: 10 + m_Name: EnvironmentLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224708962364915846 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468739506957472} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224279774314885746} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 180, y: 26} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222679968395521688 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468739506957472} + m_CullTransparentMesh: 0 +--- !u!114 &114363195186259392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468739506957472} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Environment:' +--- !u!1 &1477631225134320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224346626108647524} + - component: {fileID: 222336697726680772} + - component: {fileID: 114555492544437722} + m_Layer: 10 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224346626108647524 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1477631225134320} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224676111182267588} + m_Father: {fileID: 224981408229622084} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222336697726680772 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1477631225134320} + m_CullTransparentMesh: 0 +--- !u!114 &114555492544437722 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1477631225134320} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1483751349519466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224400783559291254} + - component: {fileID: 222278883706641706} + - component: {fileID: 114773818650062018} + m_Layer: 10 + m_Name: FrameLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224400783559291254 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483751349519466} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224537146899461920} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 180, y: 26} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222278883706641706 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483751349519466} + m_CullTransparentMesh: 0 +--- !u!114 &114773818650062018 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483751349519466} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Frame:' +--- !u!1 &1495280887321080 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224816755305354502} + - component: {fileID: 114559782006378406} + - component: {fileID: 114221796099513398} + m_Layer: 10 + m_Name: TerminatedToggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224816755305354502 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495280887321080} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224953985537205222} + - {fileID: 224538654709879808} + m_Father: {fileID: 224482607053254736} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 4, y: -130} + m_SizeDelta: {x: 180, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114559782006378406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495280887321080} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 114112702081801098} + toggleTransition: 1 + graphic: {fileID: 114045521679516650} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 0 +--- !u!114 &114221796099513398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495280887321080} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb23d22b856f4a6e862c42f26baab546, type: 3} + m_Name: + m_EditorClassIdentifier: + _poll_event: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: TerminatedBoolean + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 114221796099513398} + m_ObjectArgumentAssemblyTypeName: droid.Runtime.GameObjects.StatusDisplayer.EventRecipients.ToggleUpdater, + Neodroid.Runtime + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + _invoke_on_validate: 0 + _toggle: {fileID: 114559782006378406} +--- !u!1 &1505478141713430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224532449799468524} + - component: {fileID: 114464697478342806} + m_Layer: 10 + m_Name: ViewsToggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224532449799468524 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505478141713430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224083395972142038} + - {fileID: 224844274684147976} + m_Father: {fileID: 224402646093801010} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 8, y: -70} + m_SizeDelta: {x: 180, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114464697478342806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505478141713430} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114925812254480488} + toggleTransition: 1 + graphic: {fileID: 114909405547853270} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1436566014300684} + m_MethodName: SetActive + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 1 + m_IsOn: 0 +--- !u!1 &1553469427675754 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224190067178417906} + - component: {fileID: 222610976823379756} + - component: {fileID: 114499393921955320} + - component: {fileID: 114837088913221662} + m_Layer: 10 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224190067178417906 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553469427675754} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224279112397338844} + m_Father: {fileID: 224133478466665168} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 2344, y: 0} + m_SizeDelta: {x: 0, y: 5} + m_Pivot: {x: 0, y: 0} +--- !u!222 &222610976823379756 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553469427675754} + m_CullTransparentMesh: 0 +--- !u!114 &114499393921955320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553469427675754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114837088913221662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553469427675754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 1 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114942717479311642} + m_HandleRect: {fileID: 224110368661715722} + m_Direction: 0 + m_Value: 0.5 + m_Size: 0.2327431 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1559866516279090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224961567739092654} + - component: {fileID: 222291027818222050} + - component: {fileID: 114992145804104380} + - component: {fileID: 114790955924512488} + m_Layer: 10 + m_Name: StatusText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224961567739092654 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1559866516279090} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224868116962371652} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 16, y: -20} + m_SizeDelta: {x: 172, y: 26} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222291027818222050 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1559866516279090} + m_CullTransparentMesh: 0 +--- !u!114 &114992145804104380 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1559866516279090} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Not Connected +--- !u!114 &114790955924512488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1559866516279090} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} + m_Name: + m_EditorClassIdentifier: + _poll_event: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: StatusString + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 114790955924512488} + m_ObjectArgumentAssemblyTypeName: droid.Runtime.GameObjects.StatusDisplayer.EventRecipients.TextUpdater, + Neodroid.Runtime + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + _invoke_on_validate: 0 + _text: {fileID: 114992145804104380} +--- !u!1 &1563356267366460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224676111182267588} + - component: {fileID: 222209697532708656} + - component: {fileID: 114364188900800728} + m_Layer: 10 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224676111182267588 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563356267366460} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224346626108647524} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222209697532708656 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563356267366460} + m_CullTransparentMesh: 0 +--- !u!114 &114364188900800728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563356267366460} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1566480878314652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224279774314885746} + - component: {fileID: 222376727753427890} + m_Layer: 10 + m_Name: EnvironmentBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224279774314885746 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566480878314652} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224708962364915846} + - {fileID: 224869762628237466} + m_Father: {fileID: 224482607053254736} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 4, y: -6} + m_SizeDelta: {x: 180, y: 24} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222376727753427890 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566480878314652} + m_CullTransparentMesh: 0 +--- !u!1 &1617461140317354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224022790003590410} + - component: {fileID: 222509568372407010} + - component: {fileID: 114090866412346492} + - component: {fileID: 114360142959021996} + m_Layer: 10 + m_Name: VerticalScrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224022790003590410 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617461140317354} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224267042087391786} + m_Father: {fileID: 224709051787829256} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!222 &222509568372407010 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617461140317354} + m_CullTransparentMesh: 0 +--- !u!114 &114090866412346492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617461140317354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114360142959021996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1617461140317354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114742776673127912} + m_HandleRect: {fileID: 224582703667719680} + m_Direction: 2 + m_Value: 1 + m_Size: 0.24955909 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1624603439447724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224537146899461920} + - component: {fileID: 222828554972263622} + m_Layer: 10 + m_Name: FrameBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224537146899461920 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624603439447724} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224400783559291254} + - {fileID: 1671616627706562109} + m_Father: {fileID: 224482607053254736} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 4, y: -50} + m_SizeDelta: {x: 180, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222828554972263622 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624603439447724} + m_CullTransparentMesh: 0 +--- !u!1 &1634853657455818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224856044140865628} + - component: {fileID: 222555089731765534} + - component: {fileID: 114712434871820202} + m_Layer: 10 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224856044140865628 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634853657455818} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224736680352827420} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 40, y: 0} + m_SizeDelta: {x: 131, y: 22} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222555089731765534 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634853657455818} + m_CullTransparentMesh: 0 +--- !u!114 &114712434871820202 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634853657455818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Center Dot +--- !u!1 &1643575321949496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224616556132205068} + m_Layer: 10 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224616556132205068 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643575321949496} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224219095199356408} + m_Father: {fileID: 224241792838047938} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1647382701396918 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224112667425157172} + - component: {fileID: 222060317342258194} + - component: {fileID: 114923601699482010} + m_Layer: 10 + m_Name: StatusLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224112667425157172 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1647382701396918} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224868116962371652} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 180, y: 26} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222060317342258194 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1647382701396918} + m_CullTransparentMesh: 0 +--- !u!114 &114923601699482010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1647382701396918} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Status:' +--- !u!1 &1670592868546114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224234345433003480} + - component: {fileID: 222396942318584024} + - component: {fileID: 114649358254167946} + m_Layer: 10 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224234345433003480 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670592868546114} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224739625015266640} + m_Father: {fileID: 224736680352827420} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222396942318584024 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670592868546114} + m_CullTransparentMesh: 0 +--- !u!114 &114649358254167946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670592868546114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1672676918127502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224709051787829256} + - component: {fileID: 114332933053416176} + - component: {fileID: 222776020242416584} + - component: {fileID: 114621012137224014} + m_Layer: 10 + m_Name: 'ObservationsScrollView ' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224709051787829256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672676918127502} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224001375150637708} + - {fileID: 224241792838047938} + - {fileID: 224022790003590410} + m_Father: {fileID: 224482607053254736} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 186, y: 300} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &114332933053416176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672676918127502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224267871597078786} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 224001375150637708} + m_HorizontalScrollbar: {fileID: 114785673117026166} + m_VerticalScrollbar: {fileID: 114360142959021996} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &222776020242416584 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672676918127502} + m_CullTransparentMesh: 0 +--- !u!114 &114621012137224014 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672676918127502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1689838280500390 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224267042087391786} + m_Layer: 10 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224267042087391786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1689838280500390} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224582703667719680} + m_Father: {fileID: 224022790003590410} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1709914492231660 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224267871597078786} + - component: {fileID: 222785475415721572} + - component: {fileID: 114926636315371600} + - component: {fileID: 114002950248132940} + - component: {fileID: 114991657407947670} + m_Layer: 10 + m_Name: ObservationsText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224267871597078786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1709914492231660} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224001375150637708} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 141.49992} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222785475415721572 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1709914492231660} + m_CullTransparentMesh: 0 +--- !u!114 &114926636315371600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1709914492231660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 12 + m_MaxSize: 16 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: "CompressedDepthCameraObserver:\nEmpty FloatEnumerable\n\nDepthCameraObserver:\nEmpty + FloatEnumerable\n\nfanBoundingBox:\n{\"x\":0,\n\"y\":0,\n\"w\":0,\n\"h\":0}\n\nFlowCameraObserver:\nEmpty + FloatEnumerable\n\nInfraredShadowCameraObserver:\nEmpty FloatEnumerable\n\nLayerSegmentationCameraObserver:\nEmpty + FloatEnumerable\n\nLayerSegmentationSegmentationObserver:\n\n\nMaterialIdSegmentationCameraObserver:\nEmpty + FloatEnumerable\n\nMaterialIdSegmentationSegmentationObserver:\n\n\nNormalCameraObserver:\nEmpty + FloatEnumerable\n\nObjectIdInstanceSegmentationCameraObserver:\nEmpty FloatEnumerable\n\nObjectIdInstanceSegmentationSegmentationObserver:\n\n\nObjectSpaceCameraObserver:\nEmpty + FloatEnumerable\n\nOffsetCamera\x13:\nEmpty FloatEnumerable\n\nRGBCameraObserver:\nEmpty + FloatEnumerable\n\nSatelliteCameraObserver:\nEmpty FloatEnumerable\n\nTagSegmentationCameraObserver:\nEmpty + FloatEnumerable\n\nTagSegmentationSegmentationObserver:\n\n\nTangentsCameraObserver:\nEmpty + FloatEnumerable\n\nUsCameraObserver:\nEmpty FloatEnumerable\n\nUVsCameraObserver:\nEmpty + FloatEnumerable\n\nVsCameraObserver:\nEmpty FloatEnumerable\n\nWorldSpaceCameraObserver:\nEmpty + FloatEnumerable" +--- !u!114 &114002950248132940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1709914492231660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} + m_Name: + m_EditorClassIdentifier: + _poll_event: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: ObservationsString + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 114002950248132940} + m_ObjectArgumentAssemblyTypeName: droid.Runtime.GameObjects.StatusDisplayer.EventRecipients.TextUpdater, + Neodroid.Runtime + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + _invoke_on_validate: 0 + _text: {fileID: 114926636315371600} +--- !u!114 &114991657407947670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1709914492231660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &1729716153401794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224844274684147976} + - component: {fileID: 222002537981852362} + - component: {fileID: 114124835853976742} + m_Layer: 10 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224844274684147976 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729716153401794} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224532449799468524} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 40, y: 0} + m_SizeDelta: {x: 131, y: 22} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222002537981852362 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729716153401794} + m_CullTransparentMesh: 0 +--- !u!114 &114124835853976742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729716153401794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Camera Views +--- !u!1 &1733990776603050 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224967770781076552} + - component: {fileID: 222937350607279502} + - component: {fileID: 114284854106277020} + m_Layer: 10 + m_Name: Border + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224967770781076552 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733990776603050} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224984678386874610} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222937350607279502 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733990776603050} + m_CullTransparentMesh: 0 +--- !u!114 &114284854106277020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733990776603050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 400a66016a26d45479b1ba3aaf1e6ef8, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1738690579831682 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224675873480807500} + - component: {fileID: 222152646434772184} + - component: {fileID: 114045521679516650} + m_Layer: 10 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224675873480807500 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1738690579831682} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224470425125242612} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222152646434772184 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1738690579831682} + m_CullTransparentMesh: 0 +--- !u!114 &114045521679516650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1738690579831682} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1745468383708284 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224083395972142038} + - component: {fileID: 222789467974402670} + - component: {fileID: 114925812254480488} + m_Layer: 10 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224083395972142038 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745468383708284} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224339472726039552} + m_Father: {fileID: 224532449799468524} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222789467974402670 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745468383708284} + m_CullTransparentMesh: 0 +--- !u!114 &114925812254480488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745468383708284} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1748858491772888 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224981408229622084} + - component: {fileID: 114543584020609536} + m_Layer: 10 + m_Name: TestToggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224981408229622084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748858491772888} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224346626108647524} + - {fileID: 224809886157074576} + m_Father: {fileID: 224402646093801010} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 8, y: -40} + m_SizeDelta: {x: 180, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114543584020609536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748858491772888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114555492544437722} + toggleTransition: 1 + graphic: {fileID: 114364188900800728} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: SetTesting + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_IsOn: 0 +--- !u!1 &1761075696505018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224809886157074576} + - component: {fileID: 222080940038169356} + - component: {fileID: 114625923924919562} + m_Layer: 10 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224809886157074576 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1761075696505018} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224981408229622084} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 40, y: 0} + m_SizeDelta: {x: 131, y: 22} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222080940038169356 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1761075696505018} + m_CullTransparentMesh: 0 +--- !u!114 &114625923924919562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1761075696505018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Test Motors +--- !u!1 &1804760205061794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224953985537205222} + - component: {fileID: 222995404720874254} + - component: {fileID: 114672680113300006} + m_Layer: 10 + m_Name: TerminatedLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224953985537205222 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804760205061794} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224816755305354502} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 180, y: 26} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222995404720874254 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804760205061794} + m_CullTransparentMesh: 0 +--- !u!114 &114672680113300006 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804760205061794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Terminated:' +--- !u!1 &1856477320062506 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224241792838047938} + - component: {fileID: 222363114423404832} + - component: {fileID: 114555527998959226} + - component: {fileID: 114785673117026166} + m_Layer: 10 + m_Name: HorizontalScrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224241792838047938 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1856477320062506} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224616556132205068} + m_Father: {fileID: 224709051787829256} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0, y: 0} +--- !u!222 &222363114423404832 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1856477320062506} + m_CullTransparentMesh: 0 +--- !u!114 &114555527998959226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1856477320062506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114785673117026166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1856477320062506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114312150337642752} + m_HandleRect: {fileID: 224219095199356408} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1870303121723880 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224739625015266640} + - component: {fileID: 222611229899153576} + - component: {fileID: 114355468487659540} + m_Layer: 10 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224739625015266640 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870303121723880} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224234345433003480} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222611229899153576 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870303121723880} + m_CullTransparentMesh: 0 +--- !u!114 &114355468487659540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870303121723880} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1895783123601904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224279112397338844} + m_Layer: 10 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224279112397338844 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895783123601904} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224110368661715722} + m_Father: {fileID: 224190067178417906} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1983317495708126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224339472726039552} + - component: {fileID: 222153667607781724} + - component: {fileID: 114909405547853270} + m_Layer: 10 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &224339472726039552 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983317495708126} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224083395972142038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222153667607781724 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983317495708126} + m_CullTransparentMesh: 0 +--- !u!114 &114909405547853270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983317495708126} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &259889696532833647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2938622314860919015} + - component: {fileID: 6850565852958915336} + - component: {fileID: 1766109353594645998} + m_Layer: 10 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2938622314860919015 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 259889696532833647} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2090484622070988110} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 30, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6850565852958915336 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 259889696532833647} + m_CullTransparentMesh: 0 +--- !u!114 &1766109353594645998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 259889696532833647} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 2800000, guid: 7e66b4120a7284a649e009e852d59b8a, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!1 &1386113342247762132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2781838355218030142} + - component: {fileID: 4119333744992309790} + - component: {fileID: 4284958935246610444} + - component: {fileID: 236015409021998999} + m_Layer: 10 + m_Name: FrameText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &2781838355218030142 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386113342247762132} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1671616627706562109} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &4119333744992309790 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386113342247762132} + m_CullTransparentMesh: 0 +--- !u!114 &4284958935246610444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386113342247762132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &236015409021998999 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386113342247762132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56d83611e7d9c4f0b9c3944fc5ccb50b, type: 3} + m_Name: + m_EditorClassIdentifier: + _poll_event: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: FrameString + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 236015409021998999} + m_ObjectArgumentAssemblyTypeName: droid.Runtime.GameObjects.StatusDisplayer.EventRecipients.TextUpdater, + Neodroid.Runtime + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + _invoke_on_validate: 0 + _text: {fileID: 4284958935246610444} +--- !u!1 &1938873609180353239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6022377031092913930} + - component: {fileID: 2443564568750322247} + - component: {fileID: 1696136106658335905} + m_Layer: 10 + m_Name: SlashText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!224 &6022377031092913930 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938873609180353239} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1671616627706562109} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &2443564568750322247 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938873609180353239} + m_CullTransparentMesh: 0 +--- !u!114 &1696136106658335905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1938873609180353239} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: '/ + +' +--- !u!1 &2543941701583443857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1671616627706562109} + - component: {fileID: 7404932335981033130} + m_Layer: 10 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1671616627706562109 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2543941701583443857} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2781838355218030142} + - {fileID: 6022377031092913930} + - {fileID: 224758081212739480} + m_Father: {fileID: 224537146899461920} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 8, y: -10} + m_SizeDelta: {x: -16, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7404932335981033130 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2543941701583443857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 7 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 +--- !u!1 &3561783716214258938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2090484622070988110} + - component: {fileID: 7506639708356215377} + - component: {fileID: 5196514584770641970} + m_Layer: 10 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2090484622070988110 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561783716214258938} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2938622314860919015} + - {fileID: 33933563472136973} + m_Father: {fileID: 1899299443356989376} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7506639708356215377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561783716214258938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 1 + m_VerticalFit: 1 +--- !u!114 &5196514584770641970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3561783716214258938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &5910837029395654440 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 33933563472136973} + - component: {fileID: 163928792541179929} + - component: {fileID: 265594896396670589} + m_Layer: 10 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &33933563472136973 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5910837029395654440} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2090484622070988110} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 170, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &163928792541179929 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5910837029395654440} + m_CullTransparentMesh: 0 +--- !u!114 &265594896396670589 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5910837029395654440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 86f67715a99514458b7f89dccc934114, type: 3} + m_FontSize: 31 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: Neodroid +--- !u!1 &7887701342397033815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1899299443356989376} + - component: {fileID: 4303601925494746579} + m_Layer: 10 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1899299443356989376 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7887701342397033815} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2090484622070988110} + m_Father: {fileID: 224234215991166828} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &4303601925494746579 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7887701342397033815} + m_CullTransparentMesh: 0 +--- !u!1001 &145468967 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 19 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 6536 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: MaterialIdInstanceSegmentation + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: MaterialIdInstanceSegmentation + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: e52a2f56c9ffa187abf5021f3338228e, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: MatID + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669221749201559 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 145468967} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &256065973 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 5112 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: WorldSpace + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: WorldSpace + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 0a204b96270826992a5c81c531ea5dcf, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: WorldSpace + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669221651150085 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 256065973} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &428652076 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 4400 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Vs + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Vs + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 142c9eceec4ee3060b3550e1b2a64cbf, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Vs + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669222032376476 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 428652076} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &479053464 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 6180 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: ObjectIdInstanceSegmentation + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: ObjectIdInstanceSegmentation + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 280476064a32df4848434f9b38c2d744, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: ObjID + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669221948584488 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 479053464} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &492362814 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 3332 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Tangents + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Tangents + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 7ce5712ecfb6c0929a81d56be34c2333, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Tangents + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669221951400078 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 492362814} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &494462524 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 840 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: '90 + +' + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669221953491596 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 494462524} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &967175508 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 2264 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: CompressedDepth + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: CompressedDepth + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 65d4c1ba790a0b02b827d1bca779fd3d, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: CompDepth + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669221498214884 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 967175508} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &989151146 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 840 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: ObjectSpace + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: ObjectSpace + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 7ce5d7425e7fa3af69f9bdd316de2208, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: "ObjectSpace\x13" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669221442587418 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 989151146} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1731011535 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 1196 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: '180 + +' + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669222328113023 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 1731011535} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1875790695 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 4044 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Us + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Us + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: a2ed3a19ee4cfe303b28c87fca44a286, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Us + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669222196084695 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 1875790695} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1990724456 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 3688 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: UVs + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: UVs + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 43f8b57e2bee2bd6eb1df24b6c88ba79, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: UVs + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669222587842520 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 1990724456} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &2092440351 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 484 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: RGBOffset + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: RGBOffset + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: cc4e727fd2f685deea5ec6e4b44b5cc3, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: RGBOffset + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8293669222486126511 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 2092440351} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1115746803513055465 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 1908 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Depth + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Depth + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 5d9eca522a1944267b89beea11ffc58c, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Depth + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8962979067187194969 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 1115746803513055465} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1133702894386612398 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 2620 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Flow + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Flow + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: afc5604d79d0849129803e463fc07bca, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Flow + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &8980935159065295902 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 1133702894386612398} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1559884715708014823 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 1552 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Satellite + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Satellite + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: bc593ac7628a042ac93b20ca1c0101b6, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Satellite + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &7403032497129149527 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 1559884715708014823} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &3243011833449732333 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 16 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 5468 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Layer + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Layer + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 29bfbe75d2faa72cdbf597b2763205ab, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Layer + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &6780299134410746973 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 3243011833449732333} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &3322511443919887549 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 2976 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Normal + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Normal + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 63f7bf9c3a80b4d169b394696cbbd9ab, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Normal + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &6702172878384392205 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 3322511443919887549} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &3951354598758854739 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: RGB + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: RGB + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 4c7dcaf7e8ef74c11bd8ad06365ea216, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: RGB + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &5030239470511228131 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 3951354598758854739} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &8072009498306343398 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 17 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 5824 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Tag + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: Tag + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: 7355ca23a1b57891dafa75b44c2c5cc8, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Tag + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &224196915908625750 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 8072009498306343398} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &8626704507979740493 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 224701342121933384} + m_Modifications: + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 1011.1111 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -128 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.x + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_SizeDelta.y + value: 256 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: InfraredShadow + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071466158123956510, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8070782122618241666, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8071369112533159026, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Name + value: InfraredShadow + objectReference: {fileID: 0} + - target: {fileID: 8183135098847977450, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Texture + value: + objectReference: {fileID: 8400000, guid: b22ce111b5af44afe8b8f2f085799a5f, type: 2} + - target: {fileID: 1969176689723083494, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8070480531431438466, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Layer + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8183055892476026740, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + propertyPath: m_Text + value: Infrared + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, type: 3} +--- !u!224 &333616275261260285 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8293669221873235120, guid: fb5eb92b9dcbbe8b6b4bbcb7bb7955e7, + type: 3} + m_PrefabInstance: {fileID: 8626704507979740493} + m_PrefabAsset: {fileID: 0} diff --git a/Runtime/Prefabs/StatusDisplayer.prefab.meta b/Runtime/Prefabs/StatusDisplayer/StatusDisplayer.prefab.meta similarity index 100% rename from Runtime/Prefabs/StatusDisplayer.prefab.meta rename to Runtime/Prefabs/StatusDisplayer/StatusDisplayer.prefab.meta diff --git a/Runtime/Prefabs/World.meta b/Runtime/Prefabs/World.meta new file mode 100644 index 000000000..da883b8f0 --- /dev/null +++ b/Runtime/Prefabs/World.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d88fb85e7a0c22e6b8a4e966a8e6017 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prefabs/CubeFrame.prefab b/Runtime/Prefabs/World/CubeFrame.prefab similarity index 100% rename from Runtime/Prefabs/CubeFrame.prefab rename to Runtime/Prefabs/World/CubeFrame.prefab diff --git a/Runtime/Prefabs/CubeFrame.prefab.meta b/Runtime/Prefabs/World/CubeFrame.prefab.meta similarity index 100% rename from Runtime/Prefabs/CubeFrame.prefab.meta rename to Runtime/Prefabs/World/CubeFrame.prefab.meta diff --git a/Runtime/Prefabs/DaylightSky.prefab b/Runtime/Prefabs/World/DaylightSky.prefab similarity index 100% rename from Runtime/Prefabs/DaylightSky.prefab rename to Runtime/Prefabs/World/DaylightSky.prefab diff --git a/Runtime/Prefabs/DaylightSky.prefab.meta b/Runtime/Prefabs/World/DaylightSky.prefab.meta similarity index 100% rename from Runtime/Prefabs/DaylightSky.prefab.meta rename to Runtime/Prefabs/World/DaylightSky.prefab.meta diff --git a/Runtime/Prefabs/Room.prefab b/Runtime/Prefabs/World/Room.prefab similarity index 100% rename from Runtime/Prefabs/Room.prefab rename to Runtime/Prefabs/World/Room.prefab diff --git a/Runtime/Prefabs/Room.prefab.meta b/Runtime/Prefabs/World/Room.prefab.meta similarity index 100% rename from Runtime/Prefabs/Room.prefab.meta rename to Runtime/Prefabs/World/Room.prefab.meta diff --git a/Runtime/Properties/AssemblyInfo.cs b/Runtime/Properties/AssemblyInfo.cs index 725899a7f..cf1003ef6 100644 --- a/Runtime/Properties/AssemblyInfo.cs +++ b/Runtime/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly : AssemblyVersion("1.0.0.0")] -[assembly : AssemblyFileVersion("1.0.0.0")] \ No newline at end of file +[assembly : AssemblyFileVersion("1.0.0.0")] diff --git a/Runtime/Prototyping/Actors/Actor.cs b/Runtime/Prototyping/Actors/Actor.cs index 402871b95..262e6f847 100644 --- a/Runtime/Prototyping/Actors/Actor.cs +++ b/Runtime/Prototyping/Actors/Actor.cs @@ -1,38 +1,31 @@ using System.Collections.Generic; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.BoundingBoxes; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects; +using droid.Runtime.GameObjects.BoundingBoxes.Experimental; +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; using UnityEditor; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Actors { +namespace droid.Runtime.Prototyping.Actors { /// /// /// - [AddComponentMenu(ActorComponentMenuPath._ComponentMenuPath + "Vanilla" + ActorComponentMenuPath._Postfix), - ExecuteInEditMode] + [AddComponentMenu(ActorComponentMenuPath._ComponentMenuPath + "Base" + ActorComponentMenuPath._Postfix)] + [ExecuteInEditMode] public class Actor : PrototypingGameObject, - IHasRegister, - IActor - //IResetable - { + IActor { /// - /// /// [SerializeField] Bounds _bounds; /// - /// /// [SerializeField] - bool _draw_bounds; + bool _draw_bounds = false; /// - /// /// public Bounds ActorBounds { get { @@ -53,19 +46,80 @@ public Bounds ActorBounds { } } + SortedDictionary IActor.Actuators { get { return this._Actuators; } } + + public Transform Transform { get { return this.transform; } } + + /// + /// + /// + public virtual void ApplyMotion(IMotion motion) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Applying {motion} To {this.name}'s Actuators"); + } + #endif + + var motion_actuator_name = motion.ActuatorName; + if (this._Actuators.ContainsKey(motion_actuator_name) + && this._Actuators[motion_actuator_name] != null) { + this._Actuators[motion_actuator_name].ApplyMotion(motion); + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Could find not Actuator with the specified name: {motion_actuator_name} on actor {this.name}"); + } + #endif + } + } + + /// + /// + /// + public override void PrototypingReset() { + if (this._Actuators != null) { + foreach (var actuator in this._Actuators.Values) { + actuator?.PrototypingReset(); + } + } + } + + /// + /// + /// + /// + public void UnRegister(IActuator actuator, string identifier) { + if (this._Actuators != null) { + if (this._Actuators.ContainsKey(identifier)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Actor {this.name} unregistered Actuator {identifier}"); + } + #endif + + this._Actuators.Remove(identifier); + } + } + } + + + + /// + /// + /// + public void UnRegister(IActuator actuator) { this.UnRegister(actuator, actuator.Identifier); } + /// /// /// - protected override void Setup() { + public override void Setup() { #if UNITY_EDITOR if (!Application.isPlaying) { var manager_script = MonoScript.FromMonoBehaviour(this); if (MonoImporter.GetExecutionOrder(manager_script) != _script_execution_order) { - MonoImporter.SetExecutionOrder( - manager_script, - _script_execution_order); // Ensures that PreStep is called first, before all other scripts. - Debug.LogWarning( - "Execution Order changed, you will need to press play again to make everything function correctly!"); + MonoImporter.SetExecutionOrder(manager_script, + _script_execution_order); // Ensures that PreStep is called first, before all other scripts. + Debug.LogWarning("Execution Order changed, you will need to press play again to make everything function correctly!"); EditorApplication.isPlaying = false; //TODO: UnityEngine.Experimental.LowLevel.PlayerLoop.SetPlayerLoop(new UnityEngine.Experimental.LowLevel.PlayerLoopSystem()); } @@ -76,15 +130,13 @@ protected override void Setup() { /// /// /// - protected override void Clear() { this._Motors.Clear(); } + protected override void Clear() { this._Actuators.Clear(); } /// /// /// protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this.ParentEnvironment, - this); + this.ParentEnvironment = NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this); } /// @@ -93,130 +145,59 @@ protected override void RegisterComponent() { protected override void UnRegisterComponent() { this._environment?.UnRegister(this); } /// - /// /// void Update() { if (this._draw_bounds) { - var corners = Corners.ExtractCorners( - this.ActorBounds.center, - this.ActorBounds.extents, - this.transform); - - Corners.DrawBox( - corners[0], - corners[1], - corners[2], - corners[3], - corners[4], - corners[5], - corners[6], - corners[7], - Color.gray); - } - } - - Dictionary IActor.Motors { - get { return this._Motors; } - } - - public Transform Transform { - get { return this.transform; } - } - - /// - /// - /// - /// - public virtual void ApplyMotion(IMotorMotion motion) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + motion + " To " + this.name + "'s motors"); - } - #endif - - var motion_motor_name = motion.MotorName; - if (this._Motors.ContainsKey(motion_motor_name) && this._Motors[motion_motor_name] != null) { - this._Motors[motion_motor_name].ApplyMotion(motion); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Could find not motor with the specified name: " + motion_motor_name); - } - #endif + var corners = + Corners.ExtractCorners(this.ActorBounds.center, this.ActorBounds.extents, this.transform); + + Corners.DrawBox(corners[0], + corners[1], + corners[2], + corners[3], + corners[4], + corners[5], + corners[6], + corners[7], + Color.gray); } } /// - /// /// - /// + /// /// - public void RegisterMotor(IMotor motor, string identifier) { + public void RegisterActuator(IActuator actuator, string identifier) { #if NEODROID_DEBUG if (this.Debugging) { - Debug.Log("Actor " + this.name + " has motor " + identifier); + Debug.Log("Actor " + this.name + " has Actuator " + identifier); } #endif - if (!this._Motors.ContainsKey(identifier)) { - this._Motors.Add(identifier, motor); + if (!this._Actuators.ContainsKey(identifier)) { + this._Actuators.Add(identifier, actuator); } else { #if NEODROID_DEBUG if (this.Debugging) { - Debug.Log($"A motor with the identifier {identifier} is already registered"); + Debug.Log($"A Actuator with the identifier {identifier} is already registered"); } #endif } } - /// - /// - /// - /// - public void UnRegister(IMotor motor, string identifier) { - if (this._Motors != null) { - if (this._Motors.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Actor {this.name} unregistered motor {identifier}"); - } - #endif - - this._Motors.Remove(identifier); - } - } - } - - /// - /// - /// - /// - public void UnRegister(IMotor motor) { this.UnRegister(motor, motor.Identifier); } - - /// - /// - /// - public virtual void EnvironmentReset() { - if (this._Motors != null) { - foreach (var motor in this._Motors.Values) { - motor?.EnvironmentReset(); - } - } - } - #region Fields /// - /// /// - [Header("References", order = 99), SerializeField] - IPrototypingEnvironment _environment; + [Header("References", order = 99)] + [SerializeField] + ActorisedPrototypingEnvironment _environment; /// - /// /// - [Header("General", order = 101), SerializeField] - protected Dictionary _Motors = new Dictionary(); + [Header("General", order = 101)] + [SerializeField] + protected SortedDictionary _Actuators = new SortedDictionary(); #if UNITY_EDITOR const int _script_execution_order = -10; @@ -229,38 +210,33 @@ public virtual void EnvironmentReset() { /// /// /// - public override string PrototypingTypeName { - get { return "Actor"; } - } + public override string PrototypingTypeName { get { return "Actor"; } } - /// /// /// - /// - public void Register(IMotor motor) { this.RegisterMotor(motor, motor.Identifier); } + /// + public void Register(IActuator actuator) { this.RegisterActuator(actuator, actuator.Identifier); } /// /// /// - /// + /// /// - public void Register(IMotor motor, string identifier) { this.RegisterMotor(motor, identifier); } + public void Register(IActuator actuator, string identifier) { + this.RegisterActuator(actuator, identifier); + } /// - /// /// - public Dictionary Motors { - get { return this._Motors; } - } + public SortedDictionary Actuators { get { return this._Actuators; } } /// - /// /// - public IPrototypingEnvironment ParentEnvironment { + public ActorisedPrototypingEnvironment ParentEnvironment { get { return this._environment; } set { this._environment = value; } } #endregion } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Actors/ActorComponentMenuPath.cs b/Runtime/Prototyping/Actors/ActorComponentMenuPath.cs index c169de05e..51008478d 100644 --- a/Runtime/Prototyping/Actors/ActorComponentMenuPath.cs +++ b/Runtime/Prototyping/Actors/ActorComponentMenuPath.cs @@ -1,9 +1,15 @@ -namespace Neodroid.Runtime.Prototyping.Actors { +namespace droid.Runtime.Prototyping.Actors { /// - /// /// public static class ActorComponentMenuPath { + /// + /// + /// public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Actors/"; + + /// + /// + /// public const string _Postfix = "Actor"; } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Actors/KillableActor.cs b/Runtime/Prototyping/Actors/KillableActor.cs index d166c0511..133ded753 100644 --- a/Runtime/Prototyping/Actors/KillableActor.cs +++ b/Runtime/Prototyping/Actors/KillableActor.cs @@ -1,19 +1,29 @@ -using Neodroid.Runtime.Interfaces; +using droid.Runtime.Interfaces; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Actors { +namespace droid.Runtime.Prototyping.Actors { /// - /// /// [AddComponentMenu(ActorComponentMenuPath._ComponentMenuPath + "Killable" + ActorComponentMenuPath._Postfix)] public class KillableActor : Actor { [SerializeField] bool _is_alive = true; + + /// + /// + /// + public bool IsAlive { get { return this._is_alive; } } + + /// + /// + /// + public override string PrototypingTypeName { get { return "KillableActor"; } } + + /// + /// + /// public void Kill() { this._is_alive = false; } - public bool IsAlive { - get { return this._is_alive; } - } - public override void ApplyMotion(IMotorMotion motion) { + public override void ApplyMotion(IMotion motion) { if (this._is_alive) { base.ApplyMotion(motion); } else { @@ -25,14 +35,13 @@ public override void ApplyMotion(IMotorMotion motion) { } } - public override string PrototypingTypeName { - get { return "KillableActor"; } - } - - public override void EnvironmentReset() { - base.EnvironmentReset(); + /// + /// + /// + public override void PrototypingReset() { + base.PrototypingReset(); this._is_alive = true; } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Actors/README.md b/Runtime/Prototyping/Actors/README.md new file mode 100644 index 000000000..495803d30 --- /dev/null +++ b/Runtime/Prototyping/Actors/README.md @@ -0,0 +1,3 @@ +# Actors + +Actors offers a way to group together actuators in a single entity, they are only used in actorised environments though. Most environments would not need this functionality. diff --git a/Runtime/Prototyping/Actors/README.md.meta b/Runtime/Prototyping/Actors/README.md.meta new file mode 100644 index 000000000..b1cc1968c --- /dev/null +++ b/Runtime/Prototyping/Actors/README.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 566012a2be614be8aa82375ee7111176 +timeCreated: 1567897405 \ No newline at end of file diff --git a/Runtime/Prototyping/Actors/VirtualActor.cs b/Runtime/Prototyping/Actors/VirtualActor.cs new file mode 100644 index 000000000..86b4df6ba --- /dev/null +++ b/Runtime/Prototyping/Actors/VirtualActor.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actors { + public class VirtualActor : IActor { + public VirtualActor(SortedDictionary actuators) { this.Actuators = actuators; } + /// + /// + /// + public String Identifier { get; } + + + /// + /// + /// + public SortedDictionary Actuators { get; } + /// + /// + /// + public Transform Transform { get; } + + public void Tick() { throw new NotImplementedException(); } + + /// + /// + /// + /// + /// + public void Register(IActuator obj) { throw new NotImplementedException(); } + /// + /// + /// + /// + /// + /// + public void Register(IActuator obj, String identifier) { throw new NotImplementedException(); } + /// + /// + /// + /// + /// + public void UnRegister(IActuator obj) { throw new NotImplementedException(); } + /// + /// + /// + /// + /// + /// + public void UnRegister(IActuator t, String obj) { throw new NotImplementedException(); } + + + /// + /// + /// + /// + /// + public void ApplyMotion(IMotion motion) { throw new NotImplementedException(); } + /// + /// + /// + /// + public void PrototypingReset() { throw new NotImplementedException(); } + + public void PreSetup() { throw new NotImplementedException(); } + public void Setup() { throw new NotImplementedException(); } + + public void RemotePostSetup() { throw new NotImplementedException(); } + } +} diff --git a/Runtime/Prototyping/Actors/VirtualActor.cs.meta b/Runtime/Prototyping/Actors/VirtualActor.cs.meta new file mode 100644 index 000000000..2b45302ea --- /dev/null +++ b/Runtime/Prototyping/Actors/VirtualActor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96c381f6ba914c71af670132c533e38e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 3a15da2f85fce43b98f33177ba75233b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators.meta b/Runtime/Prototyping/Actuators.meta new file mode 100644 index 000000000..bee0f08c8 --- /dev/null +++ b/Runtime/Prototyping/Actuators.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a6379aa223ce4dc2b6329796ecd46dca +timeCreated: 1552375365 \ No newline at end of file diff --git a/Runtime/Prototyping/Actuators/Actuator.cs b/Runtime/Prototyping/Actuators/Actuator.cs new file mode 100644 index 000000000..1a16c3396 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Actuator.cs @@ -0,0 +1,101 @@ +using System; +using droid.Runtime.GameObjects; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [ExecuteInEditMode] + [Serializable] + public abstract class Actuator : PrototypingGameObject, + IActuator { + /// + /// + public IHasRegister Parent { get { return this._parent; } set { this._parent = value; } } + + + /// + /// + public override String PrototypingTypeName { get { return "Actuator"; } } + + /// + /// + /// + public void ApplyMotion(IMotion motion) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + motion + " To " + this.name); + } + #endif + + motion.Strength = this._motion_value_space._space.Reproject(motion.Strength); + + this.InnerApplyMotion(motion); + } + + public Space1 MotionSpace { + get { return this._motion_value_space._space; } + set { this._motion_value_space.Space = value; } + } + + /// + /// + /// + /// + public virtual float Sample() { return this._motion_value_space.Sample(); } + + /// + /// + /// + protected override void RegisterComponent() { + this._overriden = false; + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, this, true); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this._overriden) { + throw new NotImplementedException(); + } + + this._overriden = true; + this.Parent?.UnRegister(this); + } + + /// + /// + /// + protected abstract void InnerApplyMotion(IMotion motion); + + public abstract string[] InnerMotionNames { get; } + + /// + /// + /// + /// + public override string ToString() { return this.Identifier; } + + #region Fields + + [Header("References", order = 99)] + [SerializeField] + IHasRegister _parent; + + [Header("General", order = 101)] + [SerializeField] + SampleSpace1 _motion_value_space = new SampleSpace1 {_space = Space1.DiscreteMinusOneOne}; + + + bool _overriden = false; + + #endregion + } +} diff --git a/Runtime/Prototyping/Actuators/Actuator.cs.meta b/Runtime/Prototyping/Actuators/Actuator.cs.meta new file mode 100644 index 000000000..04e5ccd09 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Actuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23a8355049b44d2cbab939759a5b358a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/ActuatorComponentMenuPath.cs b/Runtime/Prototyping/Actuators/ActuatorComponentMenuPath.cs new file mode 100644 index 000000000..a504e609b --- /dev/null +++ b/Runtime/Prototyping/Actuators/ActuatorComponentMenuPath.cs @@ -0,0 +1,15 @@ +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + public static class ActuatorComponentMenuPath { + /// + /// + /// + public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Actuators/"; + + /// + /// + /// + public const string _Postfix = "Actuator"; + } +} diff --git a/Runtime/Prototyping/Actuators/ActuatorComponentMenuPath.cs.meta b/Runtime/Prototyping/Actuators/ActuatorComponentMenuPath.cs.meta new file mode 100644 index 000000000..c8a12b2b3 --- /dev/null +++ b/Runtime/Prototyping/Actuators/ActuatorComponentMenuPath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 076ddba2130442d18cb1fa5f4f00d747 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6bda13f59e43e406cae4afe9aad66823, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/BanditArmActuator.cs b/Runtime/Prototyping/Actuators/BanditArmActuator.cs new file mode 100644 index 000000000..e80da6648 --- /dev/null +++ b/Runtime/Prototyping/Actuators/BanditArmActuator.cs @@ -0,0 +1,68 @@ +using System; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "BanditArm" + + ActuatorComponentMenuPath._Postfix)] + public class BanditArmActuator : Actuator { + [SerializeField] Material _material; + + /// + /// + /// + public override string PrototypingTypeName { get { return "BanditArm"; } } + + /// + /// + public override void Setup() { + var renderr = this.GetComponent(); + if (renderr) { + this._material = renderr.sharedMaterial; + } else { + var rendr = this.GetComponent(); + if (rendr) { + this._material = rendr.GetMaterial(); + } + } + } + + /// + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + if (this._material) { + switch ((int)motion.Strength) { + case 1: + this._material.color = Color.blue; + break; + case 2: + this._material.color = Color.black; + break; + case 3: + this._material.color = Color.red; + break; + case 4: + this._material.color = Color.green; + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + public override string[] InnerMotionNames => + new[] { + "1", + "2", + "3", + "4" + }; + } +} diff --git a/Runtime/Prototyping/Actuators/BanditArmActuator.cs.meta b/Runtime/Prototyping/Actuators/BanditArmActuator.cs.meta new file mode 100644 index 000000000..379ebfe51 --- /dev/null +++ b/Runtime/Prototyping/Actuators/BanditArmActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7131fa0132842948bf7693d49f661d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/Discrete.meta b/Runtime/Prototyping/Actuators/Discrete.meta new file mode 100644 index 000000000..515f6726b --- /dev/null +++ b/Runtime/Prototyping/Actuators/Discrete.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 85c977d85ecc4a1e87ecab8c0336c431 +timeCreated: 1571060976 \ No newline at end of file diff --git a/Runtime/Prototyping/Actuators/Discrete/DiscreteRigidbodyMotionRegister.cs b/Runtime/Prototyping/Actuators/Discrete/DiscreteRigidbodyMotionRegister.cs new file mode 100644 index 000000000..3b3686bf8 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Discrete/DiscreteRigidbodyMotionRegister.cs @@ -0,0 +1,113 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators.Discrete { + /// + /// A register of functionality to performed on Rigidbodi + /// es + /// + [RequireComponent(typeof(Rigidbody))] + public class DiscreteRigidbodyMotionRegister : MonoBehaviour { + [SerializeField] float force_unit = 1; + [SerializeField] float torque_unit = 90; + + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + [SerializeField] protected ForceMode _force_mode = ForceMode.Acceleration; + + Rigidbody _rb; + + void Awake() { this._rb = this.GetComponent(); } + + void AddForce(Vector3 vec) { + if (this._rb) { + switch (this._Relative_To) { + case Space.World: + this._rb.AddForce(vec, this._force_mode); + break; + case Space.Self: + this._rb.AddRelativeForce(vec, this._force_mode); + break; + default: throw new ArgumentOutOfRangeException(); + } + } + } + + void AddTorque(Vector3 vec) { + if (this._rb) { + switch (this._Relative_To) { + case Space.World: + this._rb.AddTorque(vec, this._force_mode); + break; + case Space.Self: + this._rb.AddRelativeTorque(vec, this._force_mode); + break; + default: throw new ArgumentOutOfRangeException(); + } + } + } + + /// + /// Self explanatory + /// + public void AddUnitForceForward() { this.AddForce(Vector3.forward * this.force_unit); } + + /// + /// Self explanatory + /// + public void AddUnitForceBackward() { this.AddForce(Vector3.back * this.force_unit); } + + /// + /// Self explanatory + /// + public void AddUnitForceLeft() { this.AddForce(Vector3.left * this.force_unit); } + + /// + /// Self explanatory + /// + public void AddUnitForceRight() { this.AddForce(Vector3.right * this.force_unit); } + + /// + /// Self explanatory + /// + public void AddUnitForceUp() { this.AddForce(Vector3.up * this.force_unit); } + + /// + /// Self explanatory + /// + public void AddUnitForceDown() { this.AddForce(Vector3.down * this.force_unit); } + + /// + /// Self explanatory + /// + public void AddUnitTorqueYClockWise() { this.AddTorque(Vector3.up * this.torque_unit); } + + /// + /// Self explanatory + /// + public void AddUnitTorqueYAntiClockWise() { this.AddTorque(Vector3.up * -this.torque_unit); } + + /// + /// Self explanatory + /// + public void AddUnitTorqueXClockWise() { this.AddTorque(Vector3.left * this.torque_unit); } + + /// + /// Self explanatory + /// + public void AddUnitTorqueXAntiClockWise() { this.AddTorque(Vector3.left * -this.torque_unit); } + + /// + /// Self explanatory + /// + public void AddUnitTorqueZClockWise() { this.AddTorque(Vector3.forward * -this.torque_unit); } + + /// + /// Self explanatory + /// + public void AddUnitTorqueZAntiClockWise() { this.AddTorque(Vector3.forward * this.torque_unit); } + } +} diff --git a/Runtime/Prototyping/Actuators/Discrete/DiscreteRigidbodyMotionRegister.cs.meta b/Runtime/Prototyping/Actuators/Discrete/DiscreteRigidbodyMotionRegister.cs.meta new file mode 100644 index 000000000..756c01777 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Discrete/DiscreteRigidbodyMotionRegister.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20d8ccb0a9a2fc96d870c880ecf5ac9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/Discrete/DiscreteTransformMotionRegister.cs b/Runtime/Prototyping/Actuators/Discrete/DiscreteTransformMotionRegister.cs new file mode 100644 index 000000000..94c6be3c5 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Discrete/DiscreteTransformMotionRegister.cs @@ -0,0 +1,100 @@ +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators.Discrete { + /// + /// A register of functionality to performed on transforms + /// + public class DiscreteTransformMotionRegister : MonoBehaviour { + [SerializeField] float translation_unit = 1; + [SerializeField] float rotation_unit = 90; + + /// + /// + [SerializeField] + protected string _Layer_Mask = "Obstructions"; + + /// + /// + [SerializeField] + protected bool _No_Collisions = true; + + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + void CheckCollisionTranslate(Vector3 vec) { + var layer_mask = 1 << LayerMask.NameToLayer(this._Layer_Mask); + if (this._No_Collisions) { + if (!Physics.Raycast(this.transform.position, + this.transform.TransformDirection(vec.normalized), + Mathf.Abs(vec.magnitude), + layer_mask)) { + this.transform.Translate(vec, this._Relative_To); + } + } else { + this.transform.Translate(vec, this._Relative_To); + } + } + + /// + /// Self explanatory + /// + public void TranslateUnitForward() { this.CheckCollisionTranslate(Vector3.forward * this.translation_unit); } + + /// + /// Self explanatory + /// + public void TranslateUnitBackward() { this.CheckCollisionTranslate(Vector3.back * this.translation_unit); } + + /// + /// Self explanatory + /// + public void TranslateUnitLeft() { this.CheckCollisionTranslate(Vector3.left * this.translation_unit); } + + /// + /// Self explanatory + /// + public void TranslateUnitRight() { this.CheckCollisionTranslate(Vector3.right * this.translation_unit); } + + /// + /// Self explanatory + /// + public void TranslateUnitUp() { this.CheckCollisionTranslate(Vector3.up * this.translation_unit); } + + /// + /// Self explanatory + /// + public void TranslateUnitDown() { this.CheckCollisionTranslate(Vector3.down * this.translation_unit); } + + /// + /// Self explanatory + /// + public void RotateUnitYClockWise() { this.transform.Rotate(Vector3.up, this.rotation_unit); } + + /// + /// Self explanatory + /// + public void RotateUnitYAntiClockWise() { this.transform.Rotate(Vector3.up, -this.rotation_unit); } + + /// + /// Self explanatory + /// + public void RotateUnitXClockWise() { this.transform.Rotate(Vector3.left, this.rotation_unit); } + + /// + /// Self explanatory + /// + public void RotateUnitXAntiClockWise() { this.transform.Rotate(Vector3.left, -this.rotation_unit); } + + /// + /// Self explanatory + /// + public void RotateUnitZClockWise() { this.transform.Rotate(Vector3.forward, -this.rotation_unit); } + + /// + /// Self explanatory + /// + public void RotateUnitZAntiClockWise() { this.transform.Rotate(Vector3.forward, this.rotation_unit); } + } +} diff --git a/Runtime/Prototyping/Actuators/Discrete/DiscreteTransformMotionRegister.cs.meta b/Runtime/Prototyping/Actuators/Discrete/DiscreteTransformMotionRegister.cs.meta new file mode 100644 index 000000000..23c28c739 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Discrete/DiscreteTransformMotionRegister.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 186a402528ea02c5692d71c411291c58 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/Discrete/IndexedMotionActuator.cs b/Runtime/Prototyping/Actuators/Discrete/IndexedMotionActuator.cs new file mode 100644 index 000000000..043167daa --- /dev/null +++ b/Runtime/Prototyping/Actuators/Discrete/IndexedMotionActuator.cs @@ -0,0 +1,47 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; +using UnityEngine.Events; + +namespace droid.Runtime.Prototyping.Actuators.Discrete { + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "IndexedMotion" + + ActuatorComponentMenuPath._Postfix)] + public class IndexedMotionActuator : Actuator { + + + + [SerializeField] UnityEvent[] _events = { }; + + /// + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + var ind = (Int32)motion.Strength; + if (ind >= this._events.Length) { + return; + } + + this._events[ind].Invoke(); + } + + /// + /// + /// + public override void Setup() { + this.MotionSpace = new Space1 { + Min = 0, + Max = this._events.Length-1, + DecimalGranularity = 0 + }; + + } + + public override String[] InnerMotionNames { get; } + } +} diff --git a/Runtime/Prototyping/Actuators/Discrete/IndexedMotionActuator.cs.meta b/Runtime/Prototyping/Actuators/Discrete/IndexedMotionActuator.cs.meta new file mode 100644 index 000000000..6fa141008 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Discrete/IndexedMotionActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52319621d7344a488c923578af680fa1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/EulerTransform1DofActuator.cs b/Runtime/Prototyping/Actuators/EulerTransform1DofActuator.cs new file mode 100644 index 000000000..99b1182bb --- /dev/null +++ b/Runtime/Prototyping/Actuators/EulerTransform1DofActuator.cs @@ -0,0 +1,167 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; + +#endif + +namespace droid.Runtime.Prototyping.Actuators { + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "EulerTransformActuator1Dof" + + ActuatorComponentMenuPath._Postfix)] + public class EulerTransform1DofActuator : Actuator { + /// + /// + [SerializeField] + protected Axis _Axis_Of_Motion; + + /// + /// + /// + [SerializeField] + protected string _Layer_Mask = "Obstructions"; + + /// + /// + /// + [SerializeField] + protected bool _No_Collisions = true; + + /// + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + /// + /// + /// + public override string PrototypingTypeName { get { return "EulerTransform" + this._Axis_Of_Motion; } } + + /// + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + var layer_mask = 1 << LayerMask.NameToLayer(this._Layer_Mask); + var vec = Vector3.zero; + switch (this._Axis_Of_Motion) { + case Axis.X_: // Translational + vec = Vector3.right * motion.Strength; + break; + case Axis.Y_: // Translational + vec = -Vector3.up * motion.Strength; + break; + case Axis.Z_: // Translational + vec = -Vector3.forward * motion.Strength; + break; + case Axis.Rot_x_: // Rotational + this.transform.Rotate(Vector3.right, motion.Strength, this._Relative_To); + return; + case Axis.Rot_y_: // Rotational + this.transform.Rotate(Vector3.up, motion.Strength, this._Relative_To); + return; + case Axis.Rot_z_: // Rotational + this.transform.Rotate(Vector3.forward, motion.Strength, this._Relative_To); + return; + case Axis.Dir_x_: + this.transform.Rotate(Vector3.forward, motion.Strength, this._Relative_To); + return; + case Axis.Dir_y_: + this.transform.Rotate(Vector3.up, motion.Strength, this._Relative_To); + return; + case Axis.Dir_z_: + this.transform.Rotate(Vector3.right, motion.Strength, this._Relative_To); + return; + default: throw new ArgumentOutOfRangeException(); + } + + if (this._No_Collisions) { + if (!Physics.Raycast(this.transform.position, + vec, + Mathf.Abs(motion.Strength), + layer_mask)) { + this.transform.Translate(vec, this._Relative_To); + } + } else { + this.transform.Translate(vec, this._Relative_To); + } + } + #if UNITY_EDITOR + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + switch (this._Axis_Of_Motion) { + case Axis.X_: + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + break; + case Axis.Y_: + Debug.DrawLine(position, position + Vector3.up * 2, Color.green); + break; + case Axis.Z_: + Debug.DrawLine(position, position + Vector3.forward * 2, Color.green); + break; + case Axis.Rot_x_: + //Handles.DrawSolidArc + //Handles.DrawSolidDisc + + Handles.DrawWireArc(this.transform.position, + this.transform.right, + -this.transform.forward, + 180, + 2); + break; + case Axis.Rot_y_: + Handles.DrawWireArc(this.transform.position, + this.transform.up, + -this.transform.right, + 180, + 2); + break; + case Axis.Rot_z_: + Handles.DrawWireArc(this.transform.position, + this.transform.forward, + -this.transform.right, + 180, + 2); + break; + case Axis.Dir_x_: + Handles.DrawWireArc(this.transform.position, + this.transform.forward, + -this.transform.right, + 180, + 2); + break; + case Axis.Dir_y_: + Handles.DrawWireArc(this.transform.position, + this.transform.up, + -this.transform.right, + 180, + 2); + break; + case Axis.Dir_z_: + Handles.DrawWireArc(this.transform.position, + this.transform.right, + -this.transform.forward, + 180, + 2); + break; + default: + Gizmos.DrawIcon(position, "console.warnicon", true); + break; + } + } + } + + #endif + + /// + /// + /// + public override string[] InnerMotionNames { get { return new[] {this._Axis_Of_Motion.ToString()}; } } + } +} diff --git a/Runtime/Prototyping/Actuators/EulerTransform1DofActuator.cs.meta b/Runtime/Prototyping/Actuators/EulerTransform1DofActuator.cs.meta new file mode 100644 index 000000000..75de782d4 --- /dev/null +++ b/Runtime/Prototyping/Actuators/EulerTransform1DofActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80495a7725f549788944c6d480d8e9b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/EulerTransform3DofActuator.cs b/Runtime/Prototyping/Actuators/EulerTransform3DofActuator.cs new file mode 100644 index 000000000..6d4137c0d --- /dev/null +++ b/Runtime/Prototyping/Actuators/EulerTransform3DofActuator.cs @@ -0,0 +1,186 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; + +#endif + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "EulerTransform3Dof" + + ActuatorComponentMenuPath._Postfix)] + public class EulerTransform3DofActuator : Actuator { + /// + /// + [SerializeField] + protected string _Layer_Mask = "Obstructions"; + + /// + /// + [SerializeField] + protected bool _No_Collisions = true; + + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + /// + /// + [SerializeField] + protected bool _angular_Actuators; + + /// + /// + [SerializeField] + protected bool _Use_Mask = true; + + /// + /// XAxisIdentifier + /// + string _x; + + /// + /// YAxisIdentifier + /// + string _y; + + /// + /// ZAxisIdentifier + /// + string _z; + + /// + /// + public override string PrototypingTypeName { get { return "EulerTransform"; } } + + /// + /// + public override void Setup() { + if (!this._angular_Actuators) { + this._x = this.Identifier + "X_"; + this._y = this.Identifier + "Y_"; + this._z = this.Identifier + "Z_"; + } else { + this._x = this.Identifier + "RotX_"; + this._y = this.Identifier + "RotY_"; + this._z = this.Identifier + "RotZ_"; + } + } + + public override string[] InnerMotionNames => new[] {this._x, this._y, this._z}; + + /// + /// + protected override void RegisterComponent() { + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + this, + this._x); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + this, + this._y); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + this, + this._z); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + this.Parent?.UnRegister(this, this._x); + this.Parent?.UnRegister(this, this._y); + this.Parent?.UnRegister(this, this._z); + } + + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + var layer_mask = 1 << LayerMask.NameToLayer(this._Layer_Mask); + if (!this._angular_Actuators) { + if (motion.ActuatorName == this._x) { + var vec = Vector3.right * motion.Strength; + if (this._No_Collisions) { + if (!Physics.Raycast(this.transform.position, + vec, + Mathf.Abs(motion.Strength), + layer_mask)) { + this.transform.Translate(vec, this._Relative_To); + } + } else { + this.transform.Translate(vec, this._Relative_To); + } + } else if (motion.ActuatorName == this._y) { + var vec = -Vector3.up * motion.Strength; + if (this._No_Collisions) { + if (!Physics.Raycast(this.transform.position, + vec, + Mathf.Abs(motion.Strength), + layer_mask)) { + this.transform.Translate(vec, this._Relative_To); + } + } else { + this.transform.Translate(vec, this._Relative_To); + } + } else if (motion.ActuatorName == this._z) { + var vec = -Vector3.forward * motion.Strength; + if (this._No_Collisions) { + if (!Physics.Raycast(this.transform.position, + vec, + Mathf.Abs(motion.Strength), + layer_mask)) { + this.transform.Translate(vec, this._Relative_To); + } + } else { + this.transform.Translate(vec, this._Relative_To); + } + } + } else { + if (motion.ActuatorName == this._x) { + this.transform.Rotate(Vector3.right, motion.Strength, this._Relative_To); + } else if (motion.ActuatorName == this._y) { + this.transform.Rotate(Vector3.up, motion.Strength, this._Relative_To); + } else if (motion.ActuatorName == this._z) { + this.transform.Rotate(Vector3.forward, motion.Strength, this._Relative_To); + } + } + } + + #if UNITY_EDITOR + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + if (this._angular_Actuators) { + Handles.DrawWireArc(this.transform.position, + this.transform.right, + -this.transform.forward, + 180, + 2); + Handles.DrawWireArc(this.transform.position, + this.transform.up, + -this.transform.right, + 180, + 2); + Handles.DrawWireArc(this.transform.position, + this.transform.forward, + -this.transform.right, + 180, + 2); + } else { + Debug.DrawLine(position, position + Vector3.up * 2, Color.green); + Debug.DrawLine(position, position + Vector3.forward * 2, Color.green); + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + } + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Actuators/EulerTransform3DofActuator.cs.meta b/Runtime/Prototyping/Actuators/EulerTransform3DofActuator.cs.meta new file mode 100644 index 000000000..2c4649cfd --- /dev/null +++ b/Runtime/Prototyping/Actuators/EulerTransform3DofActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 769cd5e6864a4f1bb4755219c9eee359 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/EulerTransformActuator.cs b/Runtime/Prototyping/Actuators/EulerTransformActuator.cs new file mode 100644 index 000000000..b31e908cb --- /dev/null +++ b/Runtime/Prototyping/Actuators/EulerTransformActuator.cs @@ -0,0 +1,161 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; + +#endif + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "EulerTransform" + + ActuatorComponentMenuPath._Postfix)] + public class EulerTransformActuator : Actuator { + /// + /// + [SerializeField] + protected string _Layer_Mask = "Obstructions"; + + /// + /// + [SerializeField] + protected bool _No_Collisions = true; + + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + string _rot_x; + string _rot_y; + string _rot_z; + + string _x; + string _y; + string _z; + + /// + /// + /// + public override string PrototypingTypeName { get { return "EulerTransform"; } } + + /// + /// + /// + public override void Setup() { + this._x = this.Identifier + "X_"; + this._y = this.Identifier + "Y_"; + this._z = this.Identifier + "Z_"; + this._rot_x = this.Identifier + "RotX_"; + this._rot_y = this.Identifier + "RotY_"; + this._rot_z = this.Identifier + "RotZ_"; + } + + public override string[] InnerMotionNames => + new[] { + this._x, + this._y, + this._z, + this._rot_x, + this._rot_y, + this._rot_z + }; + + /// + /// + /// + protected override void RegisterComponent() { + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._x); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._y); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._z); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_x); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_y); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_z); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + this.Parent?.UnRegister(this, this._x); + this.Parent?.UnRegister(this, this._y); + this.Parent?.UnRegister(this, this._z); + this.Parent?.UnRegister(this, this._rot_x); + this.Parent?.UnRegister(this, this._rot_y); + this.Parent?.UnRegister(this, this._rot_z); + } + + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + if (motion.ActuatorName == this._x) { + this.transform.Translate(Vector3.right * motion.Strength, this._Relative_To); + } else if (motion.ActuatorName == this._y) { + this.transform.Translate(-Vector3.up * motion.Strength, this._Relative_To); + } else if (motion.ActuatorName == this._z) { + this.transform.Translate(-Vector3.forward * motion.Strength, this._Relative_To); + } else if (motion.ActuatorName == this._rot_x) { + this.transform.Rotate(Vector3.right, motion.Strength, this._Relative_To); + } else if (motion.ActuatorName == this._rot_y) { + this.transform.Rotate(Vector3.up, motion.Strength, this._Relative_To); + } else if (motion.ActuatorName == this._rot_z) { + this.transform.Rotate(Vector3.forward, motion.Strength, this._Relative_To); + } + } + + #if UNITY_EDITOR + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + + Handles.DrawWireArc(this.transform.position, + this.transform.right, + -this.transform.forward, + 180, + 2); + + Handles.DrawWireArc(this.transform.position, + this.transform.up, + -this.transform.right, + 180, + 2); + + Handles.DrawWireArc(this.transform.position, + this.transform.forward, + -this.transform.right, + 180, + 2); + + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + + Debug.DrawLine(position, position + Vector3.forward * 2, Color.green); + + Debug.DrawLine(position, position + Vector3.up * 2, Color.green); + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Actuators/EulerTransformActuator.cs.meta b/Runtime/Prototyping/Actuators/EulerTransformActuator.cs.meta new file mode 100644 index 000000000..afd610e35 --- /dev/null +++ b/Runtime/Prototyping/Actuators/EulerTransformActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c889bd92c12c450c92c171dbf0b4662b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/Experimental.meta b/Runtime/Prototyping/Actuators/Experimental.meta new file mode 100644 index 000000000..8b6c4140b --- /dev/null +++ b/Runtime/Prototyping/Actuators/Experimental.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0fa3a4870b324f88815972ff29acd3bd +timeCreated: 1565694596 \ No newline at end of file diff --git a/Runtime/Prototyping/Actuators/Experimental/CarControllerActuactor.cs b/Runtime/Prototyping/Actuators/Experimental/CarControllerActuactor.cs new file mode 100644 index 000000000..d48a982ee --- /dev/null +++ b/Runtime/Prototyping/Actuators/Experimental/CarControllerActuactor.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators.Experimental { + /// + /// + /// + public class CarControllerActuactor : MonoBehaviour { + // Start is called before the first frame update + void Start() { } + + // Update is called once per frame + void Update() { } + } +} diff --git a/Runtime/Prototyping/Actuators/Experimental/CarControllerActuactor.cs.meta b/Runtime/Prototyping/Actuators/Experimental/CarControllerActuactor.cs.meta new file mode 100644 index 000000000..7608566f2 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Experimental/CarControllerActuactor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 495097b6bd25542bfaba4244df396f6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/Particles.meta b/Runtime/Prototyping/Actuators/Particles.meta new file mode 100644 index 000000000..0af7d11a5 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Particles.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 66a9b00f75264288b27d19ed0875f789 +timeCreated: 1552375366 \ No newline at end of file diff --git a/Runtime/Prototyping/Actuators/Particles/RocketActuator.cs b/Runtime/Prototyping/Actuators/Particles/RocketActuator.cs new file mode 100644 index 000000000..7a0a3aceb --- /dev/null +++ b/Runtime/Prototyping/Actuators/Particles/RocketActuator.cs @@ -0,0 +1,124 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators.Particles { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "Particles/Rocket" + + ActuatorComponentMenuPath._Postfix)] + [RequireComponent(typeof(ParticleSystem))] + [RequireComponent(typeof(Rigidbody))] + public class RocketActuator : Rigidbody1DofActuator { + /// + /// + [SerializeField] + bool _fired_this_step; + + /// + /// + [SerializeField] + protected ParticleSystem _Particle_System; + + /// + /// + /// + public override string PrototypingTypeName { get { return "Rocket" + this._Axis_Of_Motion; } } + + /// + /// + /// + public override void Setup() { + this._Rigidbody = this.GetComponent(); + this._Particle_System = this.GetComponent(); + var valid_input = this.MotionSpace; + valid_input.Min = 0; + this.MotionSpace = valid_input; + } + + /// + /// + void LateUpdate() { + if (this._fired_this_step) { + if (!this._Particle_System.isPlaying) { + this._Particle_System.Play(true); + } + } else { + this._Particle_System.Stop(true); + } + + this._fired_this_step = false; + } + + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + if (motion.Strength < this.MotionSpace.Min || motion.Strength > this.MotionSpace.Max) { + Debug.Log($"It does not accept input {motion.Strength}, outside allowed range {this.MotionSpace.Min} to {this.MotionSpace.Max}"); + return; // Do nothing + } + + switch (this._Axis_Of_Motion) { + case Axis.X_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.right * motion.Strength); + } else { + this._Rigidbody.AddRelativeForce(Vector3.right * motion.Strength); + } + + break; + case Axis.Y_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.up * motion.Strength); + } else { + this._Rigidbody.AddRelativeForce(Vector3.up * motion.Strength); + } + + break; + case Axis.Z_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.forward * motion.Strength); + } else { + this._Rigidbody.AddRelativeForce(Vector3.forward * motion.Strength); + } + + break; + case Axis.Rot_x_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.right * motion.Strength); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.right * motion.Strength); + } + + break; + case Axis.Rot_y_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.up * motion.Strength); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.up * motion.Strength); + } + + break; + case Axis.Rot_z_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.forward * motion.Strength); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.forward * motion.Strength); + } + + break; + case Axis.Dir_x_: break; + case Axis.Dir_y_: break; + case Axis.Dir_z_: break; + default: throw new ArgumentOutOfRangeException(); + } + + this._fired_this_step = true; + } + } +} diff --git a/Runtime/Prototyping/Actuators/Particles/RocketActuator.cs.meta b/Runtime/Prototyping/Actuators/Particles/RocketActuator.cs.meta new file mode 100644 index 000000000..22a770b4b --- /dev/null +++ b/Runtime/Prototyping/Actuators/Particles/RocketActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 574d2d2d034d4f35a61724f8a1dedd1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/README.md b/Runtime/Prototyping/Actuators/README.md new file mode 100644 index 000000000..2b7cb5889 --- /dev/null +++ b/Runtime/Prototyping/Actuators/README.md @@ -0,0 +1,4 @@ +# Actuators + +Actuators offers the functionality of an agent being able to interact with the environment through applying forces of a varying strength to various actuators. + diff --git a/Runtime/Prototyping/Actuators/README.md.meta b/Runtime/Prototyping/Actuators/README.md.meta new file mode 100644 index 000000000..7d69e1499 --- /dev/null +++ b/Runtime/Prototyping/Actuators/README.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cd1ebf2fafff497da120a79a62ca4824 +timeCreated: 1567897385 \ No newline at end of file diff --git a/Runtime/Prototyping/Actuators/Rigidbody1DofActuator.cs b/Runtime/Prototyping/Actuators/Rigidbody1DofActuator.cs new file mode 100644 index 000000000..ab5c061a6 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Rigidbody1DofActuator.cs @@ -0,0 +1,158 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; + +#endif + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "Rigidbody1DofActuator" + + ActuatorComponentMenuPath._Postfix)] + [RequireComponent(typeof(Rigidbody))] + public class Rigidbody1DofActuator : Actuator { + /// + /// + [Header("General", order = 101)] + [SerializeField] + protected Axis _Axis_Of_Motion; + + /// + /// + [SerializeField] + protected ForceMode _ForceMode = ForceMode.Force; + + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + /// + /// + [SerializeField] + protected Rigidbody _Rigidbody; + + /// + /// + public override string PrototypingTypeName { get { return "Rigidbody" + this._Axis_Of_Motion; } } + + /// + /// + public override void Setup() { this._Rigidbody = this.GetComponent(); } + + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + switch (this._Axis_Of_Motion) { + case Axis.X_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.right * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeForce(Vector3.right * motion.Strength, this._ForceMode); + } + + break; + case Axis.Y_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.up * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeForce(Vector3.up * motion.Strength, this._ForceMode); + } + + break; + case Axis.Z_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.forward * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeForce(Vector3.forward * motion.Strength, this._ForceMode); + } + + break; + case Axis.Rot_x_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.right * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.right * motion.Strength, this._ForceMode); + } + + break; + case Axis.Rot_y_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.up * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.up * motion.Strength, this._ForceMode); + } + + break; + case Axis.Rot_z_: + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.forward * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.forward * motion.Strength, this._ForceMode); + } + + break; + case Axis.Dir_x_: break; + case Axis.Dir_y_: break; + case Axis.Dir_z_: break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public override string[] InnerMotionNames => new[] {this._Axis_Of_Motion.ToString()}; + + #if UNITY_EDITOR + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + switch (this._Axis_Of_Motion) { + case Axis.X_: + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + break; + case Axis.Y_: + Debug.DrawLine(position, position + Vector3.up * 2, Color.green); + break; + case Axis.Z_: + Debug.DrawLine(position, position + Vector3.forward * 2, Color.green); + break; + case Axis.Rot_x_: + Handles.DrawWireArc(this.transform.position, + this.transform.right, + -this.transform.forward, + 180, + 2); + break; + case Axis.Rot_y_: + Handles.DrawWireArc(this.transform.position, + this.transform.up, + -this.transform.right, + 180, + 2); + break; + case Axis.Rot_z_: + Handles.DrawWireArc(this.transform.position, + this.transform.forward, + -this.transform.right, + 180, + 2); + break; + case Axis.Dir_x_: break; + case Axis.Dir_y_: break; + case Axis.Dir_z_: break; + default: //TODO add the Direction cases + Gizmos.DrawIcon(position, "console.warnicon", true); + break; + } + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Actuators/Rigidbody1DofActuator.cs.meta b/Runtime/Prototyping/Actuators/Rigidbody1DofActuator.cs.meta new file mode 100644 index 000000000..a8b0130ad --- /dev/null +++ b/Runtime/Prototyping/Actuators/Rigidbody1DofActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 181641bd8bc7431780ff63c00a0abe0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/Rigidbody3DofActuator.cs b/Runtime/Prototyping/Actuators/Rigidbody3DofActuator.cs new file mode 100644 index 000000000..51a3efe74 --- /dev/null +++ b/Runtime/Prototyping/Actuators/Rigidbody3DofActuator.cs @@ -0,0 +1,178 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; + +#endif + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "Rigidbody3DofActuator" + + ActuatorComponentMenuPath._Postfix)] + [RequireComponent(typeof(Rigidbody))] + public class Rigidbody3DofActuator : Actuator { + /// + /// + [SerializeField] + protected bool _Angular_Actuators; + + /// + /// + [SerializeField] + protected ForceMode _ForceMode = ForceMode.Force; + + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + /// + /// + [SerializeField] + protected Rigidbody _Rigidbody; + + /// + /// + string _x; + + /// + /// + string _y; + + /// + /// + string _z; + + /// + /// + public override string PrototypingTypeName { get { return "Rigidbody"; } } + + /// + /// + /// + public override void Setup() { this._Rigidbody = this.GetComponent(); } + + /// + /// + /// + protected override void RegisterComponent() { + this._x = this.Identifier + "X_"; + this._y = this.Identifier + "Y_"; + this._z = this.Identifier + "Z_"; + if (this._Angular_Actuators) { + this._x = this.Identifier + "RotX_"; + this._y = this.Identifier + "RotY_"; + this._z = this.Identifier + "RotZ_"; + } + + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + this, + this._x); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + this, + this._y); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + this, + this._z); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + this.Parent?.UnRegister(this, this._x); + this.Parent?.UnRegister(this, this._y); + this.Parent?.UnRegister(this, this._z); + } + + public override string[] InnerMotionNames => new[] {this._x, this._y, this._z}; + + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + if (!this._Angular_Actuators) { + if (motion.ActuatorName == this._x) { + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.right * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeForce(Vector3.right * motion.Strength, this._ForceMode); + } + } else if (motion.ActuatorName == this._y) { + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.up * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeForce(Vector3.up * motion.Strength, this._ForceMode); + } + } else if (motion.ActuatorName == this._z) { + if (this._Relative_To == Space.World) { + this._Rigidbody.AddForce(Vector3.forward * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeForce(Vector3.forward * motion.Strength, this._ForceMode); + } + } + } else { + if (motion.ActuatorName == this._x) { + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.right * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.right * motion.Strength, this._ForceMode); + } + } else if (motion.ActuatorName == this._y) { + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.up * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.up * motion.Strength, this._ForceMode); + } + } else if (motion.ActuatorName == this._z) { + if (this._Relative_To == Space.World) { + this._Rigidbody.AddTorque(Vector3.forward * motion.Strength, this._ForceMode); + } else { + this._Rigidbody.AddRelativeTorque(Vector3.forward * motion.Strength, this._ForceMode); + } + } + } + } + + #if UNITY_EDITOR + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + if (this._Angular_Actuators) { + Handles.DrawWireArc(this.transform.position, + this.transform.right, + -this.transform.forward, + 180, + 2); + + Handles.DrawWireArc(this.transform.position, + this.transform.up, + -this.transform.right, + 180, + 2); + + Handles.DrawWireArc(this.transform.position, + this.transform.forward, + -this.transform.right, + 180, + 2); + } else { + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + + Debug.DrawLine(position, position + Vector3.forward * 2, Color.green); + + Debug.DrawLine(position, position + Vector3.up * 2, Color.green); + } + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Actuators/Rigidbody3DofActuator.cs.meta b/Runtime/Prototyping/Actuators/Rigidbody3DofActuator.cs.meta new file mode 100644 index 000000000..0b95e528d --- /dev/null +++ b/Runtime/Prototyping/Actuators/Rigidbody3DofActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68ce5bb2cd0b4c948c0487d79de52460 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/RigidbodyActuator.cs b/Runtime/Prototyping/Actuators/RigidbodyActuator.cs new file mode 100644 index 000000000..fc18a85bc --- /dev/null +++ b/Runtime/Prototyping/Actuators/RigidbodyActuator.cs @@ -0,0 +1,180 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; + +#endif + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "Rigidbody" + + ActuatorComponentMenuPath._Postfix)] + [RequireComponent(typeof(Rigidbody))] + public class RigidbodyActuator : Actuator { + /// + /// + [SerializeField] + protected ForceMode _ForceMode = ForceMode.Force; + + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + /// + /// + [SerializeField] + protected Rigidbody _Rigidbody; + + string _rot_x; + string _rot_y; + string _rot_z; + + string _x; + string _y; + string _z; + + public override string PrototypingTypeName { get { return "Rigidbody"; } } + + /// + /// + /// + public override void Setup() { + this._Rigidbody = this.GetComponent(); + + this._x = this.Identifier + "X_"; + this._y = this.Identifier + "Y_"; + this._z = this.Identifier + "Z_"; + this._rot_x = this.Identifier + "RotX_"; + this._rot_y = this.Identifier + "RotY_"; + this._rot_z = this.Identifier + "RotZ_"; + } + + public override string[] InnerMotionNames => + new[] { + this._x, + this._y, + this._z, + this._rot_x, + this._rot_y, + this._rot_z + }; + + /// + /// + protected override void RegisterComponent() { + //this.ParentActor = NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.ParentActor, (Actuator)this); + + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._x); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._y); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._z); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_x); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_y); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_z); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + this.Parent?.UnRegister(this, this._x); + this.Parent?.UnRegister(this, this._y); + this.Parent?.UnRegister(this, this._z); + + this.Parent?.UnRegister(this, this._rot_x); + this.Parent?.UnRegister(this, this._rot_y); + this.Parent?.UnRegister(this, this._rot_z); + } + + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + if (this._Relative_To == Space.World) { + if (motion.ActuatorName == this._x) { + this._Rigidbody.AddForce(Vector3.right * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._y) { + this._Rigidbody.AddForce(Vector3.up * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._z) { + this._Rigidbody.AddForce(Vector3.forward * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._rot_x) { + this._Rigidbody.AddTorque(Vector3.right * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._rot_y) { + this._Rigidbody.AddTorque(Vector3.up * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._rot_z) { + this._Rigidbody.AddTorque(Vector3.forward * motion.Strength, this._ForceMode); + } + } else if (this._Relative_To == Space.Self) { + if (motion.ActuatorName == this._x) { + this._Rigidbody.AddRelativeForce(Vector3.right * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._y) { + this._Rigidbody.AddRelativeForce(Vector3.up * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._z) { + this._Rigidbody.AddRelativeForce(Vector3.forward * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._rot_x) { + this._Rigidbody.AddRelativeTorque(Vector3.right * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._rot_y) { + this._Rigidbody.AddRelativeTorque(Vector3.up * motion.Strength, this._ForceMode); + } else if (motion.ActuatorName == this._rot_z) { + this._Rigidbody.AddRelativeTorque(Vector3.forward * motion.Strength, this._ForceMode); + } + } else { + Debug.LogWarning($"Not applying force in space {this._Relative_To}"); + } + } + + #if UNITY_EDITOR + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + + Handles.DrawWireArc(this.transform.position, + this.transform.right, + -this.transform.forward, + 180, + 2); + + Handles.DrawWireArc(this.transform.position, + this.transform.up, + -this.transform.right, + 180, + 2); + + Handles.DrawWireArc(this.transform.position, + this.transform.forward, + -this.transform.right, + 180, + 2); + + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + + Debug.DrawLine(position, position + Vector3.forward * 2, Color.green); + + Debug.DrawLine(position, position + Vector3.up * 2, Color.green); + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Actuators/RigidbodyActuator.cs.meta b/Runtime/Prototyping/Actuators/RigidbodyActuator.cs.meta new file mode 100644 index 000000000..4263e2061 --- /dev/null +++ b/Runtime/Prototyping/Actuators/RigidbodyActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b73191adc8ae4644a3d17be1efdeae8a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/RotationActuator.cs b/Runtime/Prototyping/Actuators/RotationActuator.cs new file mode 100644 index 000000000..3eac0af9a --- /dev/null +++ b/Runtime/Prototyping/Actuators/RotationActuator.cs @@ -0,0 +1,99 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "Rotation" + + ActuatorComponentMenuPath._Postfix)] + public class RotationActuator : Actuator { + /// + /// + [SerializeField] + protected Space _Relative_To = Space.Self; + + string _rot_x = "RotX"; + string _rot_y = "RotY"; + string _rot_z = "RotZ"; + + string _rot_w = "RotW"; + //new Space1 MotionSpace = Space1.ZeroOne; + + /// + /// + /// + public override string PrototypingTypeName { get { return "Rotation"; } } + + /// + /// + /// + public override void Setup() { + this._rot_x = this.Identifier + "RotX"; + this._rot_y = this.Identifier + "RotY"; + this._rot_z = this.Identifier + "RotZ"; + this._rot_w = this.Identifier + "RotW"; + } + + public override string[] InnerMotionNames => + new[] { + this._rot_x, + this._rot_y, + this._rot_z, + this._rot_w + }; + + /// + /// + /// + protected override void RegisterComponent() { + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_x); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_y); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_z); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._rot_w); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + this.Parent?.UnRegister(this, this._rot_x); + this.Parent?.UnRegister(this, this._rot_y); + this.Parent?.UnRegister(this, this._rot_z); + this.Parent?.UnRegister(this, this._rot_w); + } + + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + var transform_rotation = this.transform.rotation; + if (motion.ActuatorName == this._rot_x) { + transform_rotation.x = motion.Strength; + } else if (motion.ActuatorName == this._rot_y) { + transform_rotation.y = motion.Strength; + } else if (motion.ActuatorName == this._rot_z) { + transform_rotation.z = motion.Strength; + } else if (motion.ActuatorName == this._rot_w) { + transform_rotation.z = motion.Strength; + } + + this.transform.rotation = transform_rotation; + } + } +} diff --git a/Runtime/Prototyping/Actuators/RotationActuator.cs.meta b/Runtime/Prototyping/Actuators/RotationActuator.cs.meta new file mode 100644 index 000000000..7a4723d3b --- /dev/null +++ b/Runtime/Prototyping/Actuators/RotationActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46280c6dd9914d3db319940398fd8d22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/TargetRigidbodyActuator.cs b/Runtime/Prototyping/Actuators/TargetRigidbodyActuator.cs new file mode 100644 index 000000000..a2a818e0f --- /dev/null +++ b/Runtime/Prototyping/Actuators/TargetRigidbodyActuator.cs @@ -0,0 +1,104 @@ +using System; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "TargetRigidbody" + + ActuatorComponentMenuPath._Postfix)] + [RequireComponent(typeof(Rigidbody))] + public class TargetRigidbodyActuator : Actuator + { + string _movement; + AbstractSpatialPrototypingEnvironment _parent_environment; + + /// + /// + [SerializeField] + protected Rigidbody _Rigidbody; + + string _turn; + + /// + /// + /// + public override string PrototypingTypeName { get { return "TargetRigidbody"; } } + + /// + /// + /// + public Single MovementSpeed { get; set; } + + /// + /// + /// + public Single RotationSpeed { get; set; } + + /// + /// + /// + public override void Tick() { this.OnStep(); } + + + /// + /// + /// + public override void Setup() { + this._Rigidbody = this.GetComponent(); + + this._movement = this.Identifier + "Movement_"; + this._turn = this.Identifier + "Turn_"; + } + + public override string[] InnerMotionNames => new[] {this._movement, this._turn}; + + /// + /// + /// + protected override void RegisterComponent() { + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._movement); + this.Parent = + NeodroidRegistrationUtilities.RegisterComponent((IHasRegister)this.Parent, + (Actuator)this, + this._turn); + } + + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + if (motion.ActuatorName == this._movement) { + this.ApplyMovement(motion.Strength); + } else if (motion.ActuatorName == this._turn) { + this.ApplyRotation(motion.Strength); + } + } + + void ApplyRotation(float rotation_change = 0f) { this.RotationSpeed = rotation_change; } + + void ApplyMovement(float movement_change = 0f) { this.MovementSpeed = movement_change; } + + void OnStep() { + this._Rigidbody.velocity = Vector3.zero; + this._Rigidbody.angularVelocity = Vector3.zero; + + // Move + var movement = this.MovementSpeed * Time.deltaTime * this.transform.forward; + this._Rigidbody.MovePosition(this._Rigidbody.position + movement); + + // Turn + var turn = this.RotationSpeed * Time.deltaTime; + var turn_rotation = Quaternion.Euler(0f, turn, 0f); + this._Rigidbody.MoveRotation(this._Rigidbody.rotation * turn_rotation); + } + } +} diff --git a/Runtime/Prototyping/Actuators/TargetRigidbodyActuator.cs.meta b/Runtime/Prototyping/Actuators/TargetRigidbodyActuator.cs.meta new file mode 100644 index 000000000..17c16df00 --- /dev/null +++ b/Runtime/Prototyping/Actuators/TargetRigidbodyActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95615a2722e94ba89c3b10bbab5e4292 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/WheelColliderActuator.meta b/Runtime/Prototyping/Actuators/WheelColliderActuator.meta new file mode 100644 index 000000000..535ccdd0b --- /dev/null +++ b/Runtime/Prototyping/Actuators/WheelColliderActuator.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6a9b54b14e33412a9e794792eb964113 +timeCreated: 1552375366 \ No newline at end of file diff --git a/Runtime/Prototyping/Actuators/WheelColliderActuator/SteeringActuator.cs b/Runtime/Prototyping/Actuators/WheelColliderActuator/SteeringActuator.cs new file mode 100644 index 000000000..ba6e96173 --- /dev/null +++ b/Runtime/Prototyping/Actuators/WheelColliderActuator/SteeringActuator.cs @@ -0,0 +1,54 @@ +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators.WheelColliderActuator { + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "WheelCollider/Steering" + + ActuatorComponentMenuPath._Postfix)] + [RequireComponent(typeof(WheelCollider))] + public class SteeringActuator : Actuator { + /// + /// + [SerializeField] + WheelCollider _wheel_collider; + + /// + /// + public override string PrototypingTypeName { get { return "Steering"; } } + + /// + /// + public override void Setup() { this._wheel_collider = this.GetComponent(); } + + /// + /// + void FixedUpdate() { ApplyLocalPositionToVisuals(this._wheel_collider); } + + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + this._wheel_collider.steerAngle = motion.Strength; + } + + public override string[] InnerMotionNames => new[] {"steerAngle"}; + + /// + /// + /// + static void ApplyLocalPositionToVisuals(WheelCollider col) { + if (col.transform.childCount == 0) { + return; + } + + var visual_wheel = col.transform.GetChild(0); + + col.GetWorldPose(out var position, out var rotation); + + visual_wheel.transform.position = position; + visual_wheel.transform.rotation = rotation; + } + } +} diff --git a/Runtime/Prototyping/Actuators/WheelColliderActuator/SteeringActuator.cs.meta b/Runtime/Prototyping/Actuators/WheelColliderActuator/SteeringActuator.cs.meta new file mode 100644 index 000000000..906d78bd3 --- /dev/null +++ b/Runtime/Prototyping/Actuators/WheelColliderActuator/SteeringActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb7fcc438f304ef19e231326b2333482 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Actuators/WheelColliderActuator/TorqueActuator.cs b/Runtime/Prototyping/Actuators/WheelColliderActuator/TorqueActuator.cs new file mode 100644 index 000000000..cd79ec191 --- /dev/null +++ b/Runtime/Prototyping/Actuators/WheelColliderActuator/TorqueActuator.cs @@ -0,0 +1,51 @@ +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Actuators.WheelColliderActuator { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "WheelCollider/Torque" + + ActuatorComponentMenuPath._Postfix)] + [RequireComponent(typeof(WheelCollider))] + public class TorqueActuator : Actuator { + [SerializeField] WheelCollider _wheel_collider; + + /// + /// + /// + public override string PrototypingTypeName { get { return "Torque"; } } + + /// + /// + /// + public override void Setup() { this._wheel_collider = this.GetComponent(); } + + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + this._wheel_collider.motorTorque = motion.Strength; + } + + public override string[] InnerMotionNames => new[] {"motorTorque"}; + void FixedUpdate() { ApplyLocalPositionToVisuals(this._wheel_collider); } + + /// + /// + static void ApplyLocalPositionToVisuals(WheelCollider col) { + if (col.transform.childCount == 0) { + return; + } + + var visual_wheel = col.transform.GetChild(0); + + col.GetWorldPose(out var position, out var rotation); + + var transform1 = visual_wheel.transform; + transform1.position = position; + transform1.rotation = rotation; + } + } +} diff --git a/Runtime/Prototyping/Actuators/WheelColliderActuator/TorqueActuator.cs.meta b/Runtime/Prototyping/Actuators/WheelColliderActuator/TorqueActuator.cs.meta new file mode 100644 index 000000000..83a01cda1 --- /dev/null +++ b/Runtime/Prototyping/Actuators/WheelColliderActuator/TorqueActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc891576dbcd4bee9d6d2babcab28755 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/ColorConfigurable.cs b/Runtime/Prototyping/Configurables/ColorConfigurable.cs deleted file mode 100644 index 13e16251c..000000000 --- a/Runtime/Prototyping/Configurables/ColorConfigurable.cs +++ /dev/null @@ -1,127 +0,0 @@ -using System; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; -using Random = System.Random; - -namespace Neodroid.Runtime.Prototyping.Configurables { - /// - /// - /// - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath + "Color" + ConfigurableComponentMenuPath._Postfix), - RequireComponent(typeof(Renderer))] - public class ColorConfigurable : Configurable { - /// - /// Alpha - /// - string _a; - - /// - /// Blue - /// - string _b; - - /// - /// Green - /// - string _g; - - /// - /// Red - /// - string _r; - - /// - /// - /// - Renderer _renderer; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "ColorConfigurable"; } - } - - /// - /// - /// - protected override void PreSetup() { - this._r = this.Identifier + "R"; - this._g = this.Identifier + "G"; - this._b = this.Identifier + "B"; - this._a = this.Identifier + "A"; - - this._renderer = this.GetComponent(); - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._r); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._g); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._b); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._a); - } - - /// - /// - /// - protected override void UnRegisterComponent() { - if (this.ParentEnvironment == null) return; - this.ParentEnvironment.UnRegister(this, this._r); - this.ParentEnvironment.UnRegister(this, this._g); - this.ParentEnvironment.UnRegister(this, this._b); - this.ParentEnvironment.UnRegister(this, this._a); - } - - /// - /// - /// - /// - public override void ApplyConfiguration(IConfigurableConfiguration configuration) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + configuration + " To " + this.Identifier); - } - #endif - - foreach (var mat in this._renderer.materials) { - var c = mat.color; - - if (configuration.ConfigurableName == this._r) { - c.r = configuration.ConfigurableValue; - } else if (configuration.ConfigurableName == this._g) { - c.g = configuration.ConfigurableValue; - } else if (configuration.ConfigurableName == this._b) { - c.b = configuration.ConfigurableValue; - } else if (configuration.ConfigurableName == this._a) { - c.a = configuration.ConfigurableValue; - } - - mat.color = c; - } - } - - public override IConfigurableConfiguration SampleConfiguration(Random random_generator) { - return new Configuration(this._r,(float)random_generator.NextDouble()); - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Configurable.cs b/Runtime/Prototyping/Configurables/Configurable.cs index fa0f060f7..f1780a3d0 100644 --- a/Runtime/Prototyping/Configurables/Configurable.cs +++ b/Runtime/Prototyping/Configurables/Configurable.cs @@ -1,40 +1,30 @@ -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; +using droid.Runtime.Enums; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Utilities; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Configurables { +namespace droid.Runtime.Prototyping.Configurables { /// - /// - /// - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath + "Vanilla" + ConfigurableComponentMenuPath._Postfix)] + /// + /// [ExecuteInEditMode] public abstract class Configurable : PrototypingGameObject, IConfigurable { /// /// /// - public bool RelativeToExistingValue { - get { return this._relative_to_existing_value; } - } + public abstract ISamplable ConfigurableValueSpace { get; } - /* /// - /// /// - public ValueSpace ConfigurableValueSpace { - get { return this._configurable_value_space; } - set { this._configurable_value_space = value; } - }*/ + public override string PrototypingTypeName { get { return "Configurable"; } } /// - /// /// - public IPrototypingEnvironment ParentEnvironment { + public AbstractSpatialPrototypingEnvironment ParentEnvironment { get { return this._environment; } set { this._environment = value; } } @@ -42,73 +32,103 @@ public IPrototypingEnvironment ParentEnvironment { /// /// /// - public override string PrototypingTypeName { - get { return "Configurable"; } + public RandomSamplingMode RandomSamplingMode { + get { return this.random_sampling_mode; } + set { this.random_sampling_mode = value; } } /// - /// /// public virtual void UpdateCurrentConfiguration() { } + /// + /// + /// + /// public abstract void ApplyConfiguration(IConfigurableConfiguration configuration); - /// - /// - /// - protected sealed override void Setup() { - this.PreSetup(); - this.UpdateCurrentConfiguration(); + /// + /// + public override void PrototypingReset() { + if (this.random_sampling_mode == RandomSamplingMode.On_reset_ && Application.isPlaying) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Random reconfiguring {this} Reset"); + } + #endif + this.Randomise(); + } } /// - /// + /// /// - protected virtual void PreSetup() { } + public override void RemotePostSetup() { this.UpdateCurrentConfiguration(); } /// - /// /// - public void EnvironmentReset() { } + /// + /// + public virtual Configuration[] SampleConfigurations() { + return new[] {new Configuration(this.Identifier, this.ConfigurableValueSpace.Sample())}; + } /// - /// - /// + /// + /// protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this.ParentEnvironment, - this); + this.ParentEnvironment = NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this); } - /// /// + /// /// - protected override void UnRegisterComponent() { this.ParentEnvironment?.UnRegister(this); } + public override void Tick() { + if (this.RandomSamplingMode == RandomSamplingMode.On_tick_ && Application.isPlaying) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Random reconfiguring {this} Tick"); + } + #endif + this.Randomise(); + } + } - #region Fields + void Update() { + if (this.RandomSamplingMode == RandomSamplingMode.On_update_ && Application.isPlaying) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Random reconfiguring {this} Update"); + } + #endif + this.Randomise(); + } + } /// /// /// - [Header("References", order = 20), SerializeField] - IPrototypingEnvironment _environment; + protected virtual void Randomise() { + foreach (var v in this.SampleConfigurations()) { + this.ApplyConfiguration(v); + } + } + /// /// - /// /// - [Header("Configurable", order = 30), SerializeField] - bool _relative_to_existing_value; + protected override void UnRegisterComponent() { this.ParentEnvironment?.UnRegister(this); } - #endregion + #region Fields /// - /// /// - /// - /// - /// - public virtual IConfigurableConfiguration SampleConfiguration(System.Random random_generator) { - return new Configuration(this.Identifier,random_generator.Next()); - } + [Header("References", order = 20)] + [SerializeField] + AbstractSpatialPrototypingEnvironment _environment = null; + + [SerializeField] RandomSamplingMode random_sampling_mode = RandomSamplingMode.Disabled_; + + #endregion } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Configurables/ConfigurableComponentMenuPath.cs b/Runtime/Prototyping/Configurables/ConfigurableComponentMenuPath.cs index ecdeceb31..13d6961b7 100644 --- a/Runtime/Prototyping/Configurables/ConfigurableComponentMenuPath.cs +++ b/Runtime/Prototyping/Configurables/ConfigurableComponentMenuPath.cs @@ -1,17 +1,14 @@ -namespace Neodroid.Runtime.Prototyping.Configurables { +namespace droid.Runtime.Prototyping.Configurables { /// - /// /// public static class ConfigurableComponentMenuPath { /// - /// /// public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Configurables/"; /// - /// /// public const string _Postfix = "Configurable"; } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Configurables/DifficultyConfigurable.cs b/Runtime/Prototyping/Configurables/DifficultyConfigurable.cs deleted file mode 100644 index 9759d8648..000000000 --- a/Runtime/Prototyping/Configurables/DifficultyConfigurable.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using UnityEngine; -using Random = System.Random; - -namespace Neodroid.Runtime.Prototyping.Configurables { - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath - + "Difficulty" - + ConfigurableComponentMenuPath._Postfix)] - public class DifficultyConfigurable : Configurable { - public override void ApplyConfiguration(IConfigurableConfiguration configuration) { - if (Math.Abs(configuration.ConfigurableValue - 1) < double.Epsilon) { - //print ("Increased Difficulty"); - } else if (Math.Abs(configuration.ConfigurableValue - -1) < double.Epsilon) { - //print ("Decreased Difficulty"); - } - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "DifficultyConfigurable"; } - } - - - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/DomainRandomization.meta b/Runtime/Prototyping/Configurables/DomainRandomization.meta new file mode 100644 index 000000000..44f0f29ff --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9c541f216356430d92ba5ebe64015faa +timeCreated: 1567585702 \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/ColorConfigurable.cs b/Runtime/Prototyping/Configurables/DomainRandomization/ColorConfigurable.cs new file mode 100644 index 000000000..2def7d9c8 --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/ColorConfigurable.cs @@ -0,0 +1,188 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.DomainRandomization { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Color" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Renderer))] + public class ColorConfigurable : Configurable { + /// + /// Alpha + /// + const char _a = 'A'; + + /// + /// Blue + /// + const char _b = 'B'; + + /// + /// Green + /// + const char _g = 'G'; + + /// + /// Red + /// + const char _r = 'R'; + + string _r_id; + string _b_id; + string _g_id; + string _a_id; + + /// + /// + Renderer _renderer; + + [SerializeField] SampleSpace4 _space = new SampleSpace4 {_space = Space4.TwentyEighty}; + + [SerializeField] bool use_shared = false; + + /// + /// + /// + public override void PreSetup() { + this._r_id = this.Identifier + _r; + this._b_id = this.Identifier + _b; + this._g_id = this.Identifier + _g; + this._a_id = this.Identifier + _a; + + this._renderer = this.GetComponent(); + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._r_id); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._g_id); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._b_id); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._a_id); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._r_id); + this.ParentEnvironment.UnRegister(this, this._b_id); + this.ParentEnvironment.UnRegister(this, this._g_id); + this.ParentEnvironment.UnRegister(this, this._a_id); + } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { get { return this._space; } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + if (this.use_shared) { + foreach (var mat in this._renderer.sharedMaterials) { + var c = mat.color; + + switch (configuration.ConfigurableName[configuration.ConfigurableName.Length - 1]) { + case _r: + c.r = configuration.ConfigurableValue; + break; + case _g: + c.g = configuration.ConfigurableValue; + break; + case _b: + c.b = configuration.ConfigurableValue; + break; + case _a: + c.a = configuration.ConfigurableValue; + break; + } + + mat.color = c; + } + } else { + foreach (var mat in this._renderer.materials) { + var c = mat.color; + + switch (configuration.ConfigurableName[configuration.ConfigurableName.Length - 1]) { + case _r: + c.r = configuration.ConfigurableValue; + break; + case _g: + c.g = configuration.ConfigurableValue; + break; + case _b: + c.b = configuration.ConfigurableValue; + break; + case _a: + c.a = configuration.ConfigurableValue; + break; + } + + mat.color = c; + } + } + } + + /// + /// + /// + protected override void Randomise() { + if (this.use_shared) { + foreach (var mat in this._renderer.sharedMaterials) { + mat.color = this._space.Sample(); + } + } else { + foreach (var mat in this._renderer.materials) { + mat.color = this._space.Sample(); + } + } + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var v = this._space.Sample(); + + return new[] { + new Configuration(this._r_id, v.x), + new Configuration(this._g_id, v.y), + new Configuration(this._b_id, v.z), + new Configuration(this._a_id, v.w) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/ColorConfigurable.cs.meta b/Runtime/Prototyping/Configurables/DomainRandomization/ColorConfigurable.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/ColorConfigurable.cs.meta rename to Runtime/Prototyping/Configurables/DomainRandomization/ColorConfigurable.cs.meta diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/EnvironmentalLightConfigurable.cs b/Runtime/Prototyping/Configurables/DomainRandomization/EnvironmentalLightConfigurable.cs new file mode 100644 index 000000000..803e0a6d1 --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/EnvironmentalLightConfigurable.cs @@ -0,0 +1,148 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Sampling; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.DomainRandomization { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "EnvironmentalLight" + + ConfigurableComponentMenuPath._Postfix)] + [DisallowMultipleComponent] + public class EnvironmentalLightConfigurable : Configurable { + string _color_r; + string _color_g; + string _color_b; + string _intensity; + string _reflection_intensity; + + [SerializeField] + ISamplable _intensity_space = new SampleSpace2 { + Space = + new Space2 { + Min = Vector3.one * 0.0f, + Max = Vector3.one * 1f + }, + _distribution_sampler = + new DistributionSampler(DistributionEnum.Linear_) { + _factor + = -1 + } + }; + + [SerializeField] + ISamplable _color_space = new SampleSpace3 { + _space = new Space3 { + Min = Vector3.one * 0.6f, + Max = Vector3.one * 1f + } + }; + + /// + /// + /// + public override void PreSetup() { + this._color_r = this.Identifier + "ColorR"; + this._color_g = this.Identifier + "ColorG"; + this._color_b = this.Identifier + "ColorB"; + this._intensity = this.Identifier + "Intensity"; + this._reflection_intensity = this.Identifier + "ReflectionIntensity"; + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_r); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_b); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_g); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._intensity); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._reflection_intensity); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._color_r); + this.ParentEnvironment.UnRegister(this, this._color_g); + this.ParentEnvironment.UnRegister(this, this._color_b); + this.ParentEnvironment.UnRegister(this, this._intensity); + this.ParentEnvironment.UnRegister(this, this._reflection_intensity); + } + + public override ISamplable ConfigurableValueSpace { get; } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + var c = RenderSettings.ambientLight; + if (configuration.ConfigurableName == this._color_r) { + c.r = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._color_g) { + c.g = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._color_b) { + c.b = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._intensity) { + //c.a = configuration.ConfigurableValue; + RenderSettings.ambientIntensity = configuration.ConfigurableValue; + RenderSettings.reflectionIntensity = Mathf.Clamp01(configuration.ConfigurableValue); + //RenderSettings.skybox.SetFloat("_Exposure", configuration.ConfigurableValue); + } else if (configuration.ConfigurableName == this._reflection_intensity) { + //c.a = configuration.ConfigurableValue; +// RenderSettings.reflectionIntensity = configuration.ConfigurableValue; + //RenderSettings.skybox.SetFloat("_Exposure", configuration.ConfigurableValue); + } + + RenderSettings.ambientLight = c; + DynamicGI.UpdateEnvironment(); + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var o = this._intensity_space.Sample(); + var v = this._color_space.Sample(); + + return new[] { + new Configuration(this._color_r, v.x), + new Configuration(this._color_g, v.y), + new Configuration(this._color_b, v.z), + new Configuration(this._intensity, o.x), + new Configuration(this._reflection_intensity, o.y) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/EnvironmentalLightConfigurable.cs.meta b/Runtime/Prototyping/Configurables/DomainRandomization/EnvironmentalLightConfigurable.cs.meta new file mode 100644 index 000000000..c18f257d2 --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/EnvironmentalLightConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50221e22ab484c95bfeedf23cd6207f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/LightConfigurable.cs b/Runtime/Prototyping/Configurables/DomainRandomization/LightConfigurable.cs new file mode 100644 index 000000000..794dbde30 --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/LightConfigurable.cs @@ -0,0 +1,166 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Sampling; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.DomainRandomization { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Light" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Light))] + public class LightConfigurable : Configurable { + string _color_r; + string _color_g; + string _color_b; + string _shadow_strength; + string _intensity; + string _indirect_multiplier; + + Light _light; + + [SerializeField] + SampleSpace3 _color_space = new SampleSpace3 { + _space = new Space3 { + DecimalGranularity = 2, + Min = Vector3.one * 0.7f, + Max = Vector3.one * 1f + } + }; + + [SerializeField] + SampleSpace3 _int_ind_sha_space = new SampleSpace3 { + _space = + new Space3 { + DecimalGranularity = 2, + Min = Vector3.one * 0.7f, + Max = Vector3.one * 1f, + }, + DistributionSampler = + new DistributionSampler(DistributionEnum + .Linear_) { + _factor + = -1 + } + }; + + /// + /// + /// + public override void PreSetup() { + this._shadow_strength = this.Identifier + "ShadowStrength"; + this._color_r = this.Identifier + "ColorR"; + this._color_g = this.Identifier + "ColorG"; + this._color_b = this.Identifier + "ColorB"; + this._intensity = this.Identifier + "Intensity"; + this._indirect_multiplier = this.Identifier + "IndirectMultiplier"; + + this._light = this.GetComponent(); + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._shadow_strength); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_r); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_b); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_g); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._intensity); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._indirect_multiplier); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._shadow_strength); + this.ParentEnvironment.UnRegister(this, this._color_r); + this.ParentEnvironment.UnRegister(this, this._color_g); + this.ParentEnvironment.UnRegister(this, this._color_b); + this.ParentEnvironment.UnRegister(this, this._intensity); + this.ParentEnvironment.UnRegister(this, this._indirect_multiplier); + } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { get { return this._color_space; } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + if (configuration.ConfigurableName == this._shadow_strength) { + this._light.shadowStrength = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._color_r) { + var c = this._light.color; + c.r = configuration.ConfigurableValue; + this._light.color = c; + } else if (configuration.ConfigurableName == this._color_g) { + var c = this._light.color; + c.g = configuration.ConfigurableValue; + this._light.color = c; + } else if (configuration.ConfigurableName == this._color_b) { + var c = this._light.color; + c.b = configuration.ConfigurableValue; + this._light.color = c; + } else if (configuration.ConfigurableName == this._intensity) { + this._light.intensity = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._indirect_multiplier) { + this._light.bounceIntensity = configuration.ConfigurableValue; + } + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var o = this._int_ind_sha_space.Sample(); + var v = this._color_space.Sample(); + + return new[] { + new Configuration(this._color_r, v.x), + new Configuration(this._color_g, v.y), + new Configuration(this._color_b, v.z), + new Configuration(this._intensity, o.x), + new Configuration(this._indirect_multiplier, o.y), + new Configuration(this._shadow_strength, o.z) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/LightConfigurable.cs.meta b/Runtime/Prototyping/Configurables/DomainRandomization/LightConfigurable.cs.meta new file mode 100644 index 000000000..af07309e0 --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/LightConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f22c3fe68ce4d52a671c18d0680122e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/StandardShaderMaterialConfigurable.cs b/Runtime/Prototyping/Configurables/DomainRandomization/StandardShaderMaterialConfigurable.cs new file mode 100644 index 000000000..37fb27faa --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/StandardShaderMaterialConfigurable.cs @@ -0,0 +1,299 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.DomainRandomization { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "StandardShaderMaterial" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Renderer))] + public class StandardShaderMaterialConfigurable : Configurable, + IHasTArray { + string _reflection; + string _smoothness; + string _tiling_x; + string _tiling_y; + string _offset_x; + string _offset_y; + string _r; + string _g; + string _b; + string _a; + + [SerializeField] SampleSpace2 _tiling_space = new SampleSpace2 {Space = Space2.TwentyEighty}; + [SerializeField] SampleSpace2 _offset_space = new SampleSpace2 {Space = Space2.TwentyEighty}; + + [SerializeField] SampleSpace4 _color_space = new SampleSpace4 {Space = Space4.TwentyEighty}; + [SerializeField] SampleSpace1 _smoothness_space = new SampleSpace1 {Space = Space1.TwentyEighty}; + [SerializeField] SampleSpace1 _reflection_space = new SampleSpace1 {Space = Space1.TwentyEighty}; + + /// + /// + Renderer _renderer; + + [SerializeField] bool _use_shared = false; + + static readonly int _glossiness = Shader.PropertyToID("_Glossiness"); + static readonly int _glossy_reflections = Shader.PropertyToID("_GlossyReflections"); + static readonly int _main_tex = Shader.PropertyToID("_MainTex"); + + /// + /// + /// + public override void PreSetup() { + this._r = this.Identifier + "R"; + this._g = this.Identifier + "G"; + this._b = this.Identifier + "B"; + this._a = this.Identifier + "A"; + this._reflection = this.Identifier + "Reflection"; + this._smoothness = this.Identifier + "Smoothness"; + this._tiling_x = this.Identifier + "TilingX"; + this._tiling_y = this.Identifier + "TilingY"; + this._offset_x = this.Identifier + "OffsetX"; + this._offset_y = this.Identifier + "OffsetY"; + + this._renderer = this.GetComponent(); + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._r); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._g); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._b); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._a); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._reflection); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._smoothness); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._offset_x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._offset_y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._tiling_x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._tiling_y); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._r); + this.ParentEnvironment.UnRegister(this, this._g); + this.ParentEnvironment.UnRegister(this, this._b); + this.ParentEnvironment.UnRegister(this, this._a); + this.ParentEnvironment.UnRegister(this, this._reflection); + this.ParentEnvironment.UnRegister(this, this._smoothness); + this.ParentEnvironment.UnRegister(this, this._offset_x); + this.ParentEnvironment.UnRegister(this, this._offset_y); + this.ParentEnvironment.UnRegister(this, this._tiling_x); + this.ParentEnvironment.UnRegister(this, this._tiling_y); + } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { get { return this._tiling_space; } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + if (!this._use_shared) { + foreach (var mat in this._renderer.materials) { + var c = mat.color; + + if (configuration.ConfigurableName.Equals(this._r, StringComparison.Ordinal)) { + c.r = configuration.ConfigurableValue; + } else if (string.Equals(configuration.ConfigurableName, this._g, StringComparison.Ordinal)) { + c.g = configuration.ConfigurableValue; + } else if (string.Equals(configuration.ConfigurableName, this._b, StringComparison.Ordinal)) { + c.b = configuration.ConfigurableValue; + } else if (string.Equals(configuration.ConfigurableName, this._a, StringComparison.Ordinal)) { + c.a = configuration.ConfigurableValue; + } else if (string.Equals(configuration.ConfigurableName, + this._smoothness, + StringComparison.Ordinal)) { + mat.SetFloat(_glossiness, configuration.ConfigurableValue); + } else if (string.Equals(configuration.ConfigurableName, + this._reflection, + StringComparison.Ordinal)) { + mat.SetFloat(_glossy_reflections, configuration.ConfigurableValue); + } else if (string.Equals(configuration.ConfigurableName, + this._offset_x, + StringComparison.Ordinal)) { + var a = mat.GetTextureOffset(_main_tex); + a.x = configuration.ConfigurableValue; + mat.SetTextureOffset(_main_tex, a); + } else if (string.Equals(configuration.ConfigurableName, + this._offset_y, + StringComparison.Ordinal)) { + var a = mat.GetTextureOffset(_main_tex); + a.y = configuration.ConfigurableValue; + mat.SetTextureOffset(_main_tex, a); + } else if (string.Equals(configuration.ConfigurableName, + this._tiling_x, + StringComparison.Ordinal)) { + var a = mat.GetTextureScale(_main_tex); + a.x = configuration.ConfigurableValue; + mat.SetTextureScale(_main_tex, a); + } else if (string.Equals(configuration.ConfigurableName, + this._tiling_y, + StringComparison.Ordinal)) { + var a = mat.GetTextureScale(_main_tex); + a.y = configuration.ConfigurableValue; + mat.SetTextureScale(_main_tex, a); + } + + mat.color = c; + } + } else { + foreach (var mat in this._renderer.sharedMaterials) { + var c = mat.color; + + if (string.Equals(configuration.ConfigurableName, this._r, StringComparison.Ordinal)) { + c.r = configuration.ConfigurableValue; + } else if (string.Equals(configuration.ConfigurableName, this._g, StringComparison.Ordinal)) { + c.g = configuration.ConfigurableValue; + } else if (string.Equals(configuration.ConfigurableName, this._b, StringComparison.Ordinal)) { + c.b = configuration.ConfigurableValue; + } else if (string.Equals(configuration.ConfigurableName, this._a, StringComparison.Ordinal)) { + c.a = configuration.ConfigurableValue; + } else if (string.Equals(configuration.ConfigurableName, + this._smoothness, + StringComparison.Ordinal)) { + mat.SetFloat(_glossiness, configuration.ConfigurableValue); + } else if (string.Equals(configuration.ConfigurableName, + this._reflection, + StringComparison.Ordinal)) { + mat.SetFloat(_glossy_reflections, configuration.ConfigurableValue); + } else if (string.Equals(configuration.ConfigurableName, + this._offset_x, + StringComparison.Ordinal)) { + var a = mat.GetTextureOffset(_main_tex); + a.x = configuration.ConfigurableValue; + mat.SetTextureOffset(_main_tex, a); + } else if (string.Equals(configuration.ConfigurableName, + this._offset_y, + StringComparison.Ordinal)) { + var a = mat.GetTextureOffset(_main_tex); + a.y = configuration.ConfigurableValue; + mat.SetTextureOffset(_main_tex, a); + } else if (string.Equals(configuration.ConfigurableName, + this._tiling_x, + StringComparison.Ordinal)) { + var a = mat.GetTextureScale(_main_tex); + a.x = configuration.ConfigurableValue; + mat.SetTextureScale(_main_tex, a); + } else if (string.Equals(configuration.ConfigurableName, + this._tiling_y, + StringComparison.Ordinal)) { + var a = mat.GetTextureScale(_main_tex); + a.y = configuration.ConfigurableValue; + mat.SetTextureScale(_main_tex, a); + } + + mat.color = c; + } + } + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var cs1 = this._color_space.Sample(); + var tl1 = this._tiling_space.Sample(); + var os1 = this._offset_space.Sample(); + return new[] { + new Configuration(this._r, cs1.x), + new Configuration(this._g, cs1.y), + new Configuration(this._b, cs1.z), + new Configuration(this._a, cs1.w), + new Configuration(this._reflection, this._reflection_space.Sample()), + new Configuration(this._smoothness, this._smoothness_space.Sample()), + new Configuration(this._tiling_x, tl1.x), + new Configuration(this._tiling_y, tl1.y), + new Configuration(this._offset_x, os1.x), + new Configuration(this._offset_y, os1.y) + }; + } + + /// + /// + /// + protected override void Randomise() { + Material[] materials; + if (this._use_shared) { + materials = this._renderer.sharedMaterials; + } else { + materials = this._renderer.materials; + } + + foreach (var mat in materials) { + if (mat) { + mat.color = this._color_space.Sample(); + mat.SetTextureScale(_main_tex, this._tiling_space.Sample()); + mat.SetTextureOffset(_main_tex, this._offset_space.Sample()); + mat.SetFloat(_glossiness, this._smoothness_space.Sample()); + mat.SetFloat(_glossy_reflections, this._reflection_space.Sample()); + } + } + } + + /// + /// + /// + public dynamic[] ObservationArray { get { return new dynamic[] { }; } } + + /// + /// + /// + public ISpace[] ObservationSpace { get { return new ISpace[] {this._tiling_space.Space}; } } + } +} diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/StandardShaderMaterialConfigurable.cs.meta b/Runtime/Prototyping/Configurables/DomainRandomization/StandardShaderMaterialConfigurable.cs.meta new file mode 100644 index 000000000..44c1ccb87 --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/StandardShaderMaterialConfigurable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 429eddc2e17c50341b357a1de655ebf6 +timeCreated: 1513326185 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/TextureConfigurable.cs b/Runtime/Prototyping/Configurables/DomainRandomization/TextureConfigurable.cs new file mode 100644 index 000000000..4522b6052 --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/TextureConfigurable.cs @@ -0,0 +1,81 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.DomainRandomization { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Texture" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Renderer))] + public class TextureConfigurable : Configurable { + [SerializeField] Texture[] _textures = null; + [SerializeField] bool load_from_resources_if_empty = true; + [SerializeField] Texture _texture = null; + [SerializeField] Renderer _renderer = null; + [SerializeField] bool use_shared = false; + Material _mat; + [SerializeField] int _last_sample; + [SerializeField] string load_path = "Textures"; + static readonly int _main_tex = Shader.PropertyToID("_MainTex"); + + /// + /// + /// + public override void PreSetup() { + this._renderer = this.GetComponent(); + if (Application.isPlaying) { + if (this.use_shared) { + this._mat = this._renderer?.sharedMaterial; + } else { + this._mat = this._renderer?.material; + } + } + + if (this.load_from_resources_if_empty) { + if (this._textures == null || this._textures.Length == 0) { + this._textures = Resources.LoadAll(this.load_path); + } + } + } + + public override ISamplable ConfigurableValueSpace { get; } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + this._texture = this._textures[(int)configuration.ConfigurableValue]; + + this._mat.SetTexture(_main_tex, this._texture); + } + + /// + /// + /// + protected override void Randomise() { + this._texture = this._textures[Random.Range(0, this._textures.Length)]; + + this._mat.SetTexture(_main_tex, this._texture); + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + this._last_sample = Random.Range(0, this._textures.Length); + + return new[] {new Configuration(this.Identifier, this._last_sample)}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/DomainRandomization/TextureConfigurable.cs.meta b/Runtime/Prototyping/Configurables/DomainRandomization/TextureConfigurable.cs.meta new file mode 100644 index 000000000..25dc0a0cc --- /dev/null +++ b/Runtime/Prototyping/Configurables/DomainRandomization/TextureConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de609666bdf4489dbac2a6e84eaeb992 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/EulerTransformConfigurable.cs b/Runtime/Prototyping/Configurables/EulerTransformConfigurable.cs deleted file mode 100644 index c26f4cf4b..000000000 --- a/Runtime/Prototyping/Configurables/EulerTransformConfigurable.cs +++ /dev/null @@ -1,263 +0,0 @@ -using System; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Configurables { - /// - /// - /// - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath - + "EulerTransform" - + ConfigurableComponentMenuPath._Postfix)] - public class EulerTransformConfigurable : Configurable, - IHasEulerTransform { - string _dir_x; - string _dir_y; - string _dir_z; - - [SerializeField] Vector3 _direction; - - [Header("Observation", order = 103), SerializeField] - Vector3 _position; - - string _rot_x; - string _rot_y; - string _rot_z; - - [SerializeField] Vector3 _rotation; - - [SerializeField] bool _use_environments_space; - - string _x; - string _y; - string _z; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "EulerTransformConfigurable"; } - } - - /// - /// - /// - public Vector3 Position { - get { return this._position; } - set { this._position = value; } - } - - public Vector3 Direction { - get { return this._direction; } - set { this._direction = value; } - } - - public Vector3 Rotation { - get { return this._rotation; } - set { this._rotation = value; } - } - - public Space3 PositionSpace { get; } = new Space3(); - public Space3 DirectionSpace { get; } = new Space3(); - public Space3 RotationSpace { get; } = new Space3(); - - /// - /// - /// - public override void UpdateCurrentConfiguration() { - if (this._use_environments_space) { - this.Position = this.ParentEnvironment.TransformPosition(this.transform.position); - this.Direction = this.ParentEnvironment.TransformDirection(this.transform.forward); - this.Rotation = this.ParentEnvironment.TransformDirection(this.transform.up); - } else { - this.Position = this.transform.position; - this.Direction = this.transform.forward; - this.Rotation = this.transform.up; - } - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._x); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._y); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._z); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._dir_x); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._dir_y); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._dir_z); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._rot_x); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._rot_y); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._rot_z); - } - - /// - /// - /// - protected override void PreSetup() { - this._x = this.Identifier + "X_"; - this._y = this.Identifier + "Y_"; - this._z = this.Identifier + "Z_"; - this._dir_x = this.Identifier + "DirX_"; - this._dir_y = this.Identifier + "DirY_"; - this._dir_z = this.Identifier + "DirZ_"; - this._rot_x = this.Identifier + "RotX_"; - this._rot_y = this.Identifier + "RotY_"; - this._rot_z = this.Identifier + "RotZ_"; - } - - /// - /// - /// - protected override void UnRegisterComponent() { - if (this.ParentEnvironment == null) return; - this.ParentEnvironment.UnRegister(this, this._x); - this.ParentEnvironment.UnRegister(this, this._y); - this.ParentEnvironment.UnRegister(this, this._z); - this.ParentEnvironment.UnRegister(this, this._dir_x); - this.ParentEnvironment.UnRegister(this, this._dir_y); - this.ParentEnvironment.UnRegister(this, this._dir_z); - this.ParentEnvironment.UnRegister(this, this._rot_x); - this.ParentEnvironment.UnRegister(this, this._rot_y); - this.ParentEnvironment.UnRegister(this, this._rot_z); - } - - /// - /// - /// - /// - public override void ApplyConfiguration(IConfigurableConfiguration configuration) { - var pos = this.transform.position; - var dir = this.transform.forward; - var rot = this.transform.up; - if (this._use_environments_space) { - pos = this.ParentEnvironment.TransformPosition(pos); - dir = this.ParentEnvironment.TransformDirection(dir); - rot = this.ParentEnvironment.TransformDirection(rot); - } - - var v = configuration.ConfigurableValue; - if (this.PositionSpace._Decimal_Granularity >= 0) { - v = (int)Math.Round(v, this.PositionSpace._Decimal_Granularity); - } - - if (this.PositionSpace._Min_Values[0].CompareTo(this.PositionSpace._Max_Values[0]) != 0) { - //TODO NOT IMPLEMENTED CORRECTLY VelocitySpace should not be index but should check all pairwise values, PositionSpace._Min_Values == PositionSpace._Max_Values, and use other space aswell! - if (v < this.PositionSpace._Min_Values[0] || v > this.PositionSpace._Max_Values[0]) { - Debug.Log( - string.Format( - "Configurable does not accept input{2}, outside allowed range {0} to {1}", - this.PositionSpace._Min_Values[0], - this.PositionSpace._Max_Values[0], - v)); - return; // Do nothing - } - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + v + " To " + this.Identifier); - } - #endif - if (this.RelativeToExistingValue) { - if (configuration.ConfigurableName == this._x) { - pos.Set(v - pos.x, pos.y, pos.z); - } else if (configuration.ConfigurableName == this._y) { - pos.Set(pos.x, v - pos.y, pos.z); - } else if (configuration.ConfigurableName == this._z) { - pos.Set(pos.x, pos.y, v - pos.z); - } else if (configuration.ConfigurableName == this._dir_x) { - dir.Set(v - dir.x, dir.y, dir.z); - } else if (configuration.ConfigurableName == this._dir_y) { - dir.Set(dir.x, v - dir.y, dir.z); - } else if (configuration.ConfigurableName == this._dir_z) { - dir.Set(dir.x, dir.y, v - dir.z); - } else if (configuration.ConfigurableName == this._rot_x) { - rot.Set(v - rot.x, rot.y, rot.z); - } else if (configuration.ConfigurableName == this._rot_y) { - rot.Set(rot.x, v - rot.y, rot.z); - } else if (configuration.ConfigurableName == this._rot_z) { - rot.Set(rot.x, rot.y, v - rot.z); - } - } else { - if (configuration.ConfigurableName == this._x) { - pos.Set(v, pos.y, pos.z); - } else if (configuration.ConfigurableName == this._y) { - pos.Set(pos.x, v, pos.z); - } else if (configuration.ConfigurableName == this._z) { - pos.Set(pos.x, pos.y, v); - } else if (configuration.ConfigurableName == this._dir_x) { - dir.Set(v, dir.y, dir.z); - } else if (configuration.ConfigurableName == this._dir_y) { - dir.Set(dir.x, v, dir.z); - } else if (configuration.ConfigurableName == this._dir_z) { - dir.Set(dir.x, dir.y, v); - } else if (configuration.ConfigurableName == this._rot_x) { - rot.Set(v, rot.y, rot.z); - } else if (configuration.ConfigurableName == this._rot_y) { - rot.Set(rot.x, v, rot.z); - } else if (configuration.ConfigurableName == this._rot_z) { - rot.Set(rot.x, rot.y, v); - } - } - - var inv_pos = pos; - var inv_dir = dir; - var inv_rot = rot; - if (this._use_environments_space) { - inv_pos = this.ParentEnvironment.InverseTransformPosition(pos); - inv_dir = this.ParentEnvironment.InverseTransformDirection(dir); - inv_rot = this.ParentEnvironment.InverseTransformDirection(rot); - } - - this.transform.position = inv_pos; - this.transform.rotation = Quaternion.identity; - this.transform.rotation = Quaternion.LookRotation(inv_dir, inv_rot); - } - - /// - /// - /// - /// - /// - public override IConfigurableConfiguration SampleConfiguration(System.Random random_generator) { - return new Configuration(this._rot_x, random_generator.Next()); - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Experimental.meta b/Runtime/Prototyping/Configurables/Experimental.meta new file mode 100644 index 000000000..6251b9b1a --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c912ea65304f41b6b91c4453cefe7f98 +timeCreated: 1539595294 \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Experimental/CameraConfigurable.cs b/Runtime/Prototyping/Configurables/Experimental/CameraConfigurable.cs new file mode 100644 index 000000000..5729924e5 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/CameraConfigurable.cs @@ -0,0 +1,220 @@ +using System; +using droid.Runtime.GameObjects.NeodroidCamera; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace droid.Runtime.Prototyping.Configurables.Experimental { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Camera" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Camera))] + public class CameraConfigurable : Configurable { + /// + /// Red + /// + string _fov_str; + + /// + /// Red + /// + string _focal_str; + + /// + /// Red + /// + string _sensor_width_str; + + /// + /// + string _sensor_height_str; + + /// + /// + string _lens_shift_y_str; + + /// + /// + string _lens_shift_x_str; + + string _gate_fit_str; + + [SerializeField] Camera _camera; + [SerializeField] SynchroniseCameraProperties _syncer; + [SerializeField] SampleSpace1 _fov_space = new SampleSpace1 {_space = new Space1 {Min = 60f, Max = 90f}}; + [SerializeField] SampleSpace1 _focal_space = new SampleSpace1 {_space = new Space1 {Min = 2f, Max = 3f}}; + + [SerializeField] + SampleSpace2 _sensor_size_space = + new SampleSpace2 {_space = new Space2 {Min = new Vector2(2.5f, 2.5f), Max = new Vector2(5, 5)}}; + + [SerializeField] + SampleSpace2 _lens_shift_space = new SampleSpace2 { + _space = new Space2 { + Min = new Vector2(-0.1f, + -0.1f), + Max = new Vector2(0.1f, + 0.1f) + } + }; + + [SerializeField] + SampleSpace1 _gate_fit_space = new SampleSpace1 {_space = Space1.DiscreteZeroOne*4}; + + /// + /// + /// + public override void PreSetup() { + this._fov_str = this.Identifier + "Fov"; + this._focal_str = this.Identifier + "Focal"; + this._sensor_width_str = this.Identifier + "SensorWidth"; + this._sensor_height_str = this.Identifier + "SensorHeight"; + this._lens_shift_x_str = this.Identifier + "LensShiftX"; + this._lens_shift_y_str = this.Identifier + "LensShiftY"; + this._gate_fit_str = this.Identifier + "GateFit"; + if (!this._camera) { + this._camera = this.GetComponent(); + } + + if (!this._syncer) { + this._syncer = this.GetComponent(); + } + } + + /// + /// + /// + protected override void RegisterComponent() { + if (!this._camera.usePhysicalProperties) { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._fov_str); + } else { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._focal_str); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._sensor_width_str); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._sensor_height_str); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._lens_shift_x_str); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._lens_shift_y_str); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._gate_fit_str); + } + } + + /// + /// + /// n + protected override void UnRegisterComponent() { + if (!this._camera.usePhysicalProperties) { + this.ParentEnvironment?.UnRegister(this, this._fov_str); + } else { + this.ParentEnvironment?.UnRegister(this, this._focal_str); + this.ParentEnvironment?.UnRegister(this, this._sensor_width_str); + this.ParentEnvironment?.UnRegister(this, this._sensor_height_str); + this.ParentEnvironment?.UnRegister(this, this._lens_shift_x_str); + this.ParentEnvironment?.UnRegister(this, this._lens_shift_y_str); + this.ParentEnvironment?.UnRegister(this, this._gate_fit_str); + } + } + + public override ISamplable ConfigurableValueSpace { get { return this._sensor_size_space; } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + if (configuration.ConfigurableName == this._fov_str) { + this._camera.fieldOfView = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._focal_str) { + this._camera.focalLength = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._sensor_width_str) { + var a = this._camera.sensorSize; + a.x = configuration.ConfigurableValue; + this._camera.sensorSize = a; + } else if (configuration.ConfigurableName == this._sensor_height_str) { + var a = this._camera.sensorSize; + a.y = configuration.ConfigurableValue; + this._camera.sensorSize = a; + } else if (configuration.ConfigurableName == this._lens_shift_x_str) { + var a = this._camera.lensShift; + a.x = configuration.ConfigurableValue; + this._camera.lensShift = a; + } else if (configuration.ConfigurableName == this._lens_shift_y_str) { + var a = this._camera.lensShift; + a.y = configuration.ConfigurableValue; + this._camera.lensShift = a; + } else if (configuration.ConfigurableName == this._gate_fit_str) { + Enum.TryParse(((int)configuration.ConfigurableValue).ToString(), + out Camera.GateFitMode gate_fit_mode); + this._camera.gateFit = gate_fit_mode; + } + + if (this._syncer) { + this._syncer.Sync_Cameras(); + } + } + + /// + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + if (!this._camera.usePhysicalProperties) { + return new[] {new Configuration(this._fov_str, this._fov_space.Sample())}; + } + + var r = Random.Range(0, 6); + switch (r) { + case 0: + return new[] {new Configuration(this._focal_str, this._focal_space.Sample())}; + case 1: + return new[] {new Configuration(this._sensor_width_str, this._sensor_size_space.Sample().x)}; + + case 2: + return new[] {new Configuration(this._sensor_height_str, this._sensor_size_space.Sample().y)}; + + case 3: + return new[] {new Configuration(this._lens_shift_x_str, this._lens_shift_space.Sample().x)}; + + case 4: + return new[] {new Configuration(this._lens_shift_y_str, this._lens_shift_space.Sample().y)}; + + case 5: + return new[] {new Configuration(this._gate_fit_str, this._gate_fit_space.Sample())}; + default: + throw new IndexOutOfRangeException(); + } + } + } +} diff --git a/Runtime/Prototyping/Configurables/Experimental/CameraConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Experimental/CameraConfigurable.cs.meta new file mode 100644 index 000000000..fe7e0091d --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/CameraConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24436b5ac49af0dcaa5d2b405c48819d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Experimental/ExternalMeshConfigurable.cs b/Runtime/Prototyping/Configurables/Experimental/ExternalMeshConfigurable.cs new file mode 100644 index 000000000..2e9af084d --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/ExternalMeshConfigurable.cs @@ -0,0 +1,71 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Experimental { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "ExternalMesh" + + ConfigurableComponentMenuPath._Postfix)] + public class ExternalMeshConfigurable : Configurable { + /// + /// Red + /// + string _texture_str; + + [SerializeField] Texture _texture = null; + + /// + /// + /// + public override void PreSetup() { this._texture_str = this.Identifier + "Texture"; } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._texture_str); + } + + /// + /// + /// n + protected override void UnRegisterComponent() { + this.ParentEnvironment?.UnRegister(this, this._texture_str); + } + + public override ISamplable ConfigurableValueSpace { get { return new SampleSpace1(); } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + if (configuration.ConfigurableName == this._texture_str) { + if (this._texture) { + this._texture.anisoLevel = (int)configuration.ConfigurableValue; + } + } + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + return new[] {new Configuration(this._texture_str, this.ConfigurableValueSpace.Sample())}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Experimental/ExternalMeshConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Experimental/ExternalMeshConfigurable.cs.meta new file mode 100644 index 000000000..43ef83bee --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/ExternalMeshConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12428f7154d5125828288dd25821e93a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Experimental/ExternalTextureConfigurable.cs b/Runtime/Prototyping/Configurables/Experimental/ExternalTextureConfigurable.cs new file mode 100644 index 000000000..949ac44b6 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/ExternalTextureConfigurable.cs @@ -0,0 +1,71 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Experimental { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "ExternalTexture" + + ConfigurableComponentMenuPath._Postfix)] + public class ExternalTextureConfigurable : Configurable { + /// + /// Red + /// + string _texture_str; + + [SerializeField] Texture _texture = null; + + /// + /// + /// + public override void PreSetup() { this._texture_str = this.Identifier + "Texture"; } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._texture_str); + } + + /// + /// + /// n + protected override void UnRegisterComponent() { + this.ParentEnvironment?.UnRegister(this, this._texture_str); + } + + public override ISamplable ConfigurableValueSpace { get { return new SampleSpace1(); } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + if (configuration.ConfigurableName == this._texture_str) { + if (this._texture) { + this._texture.anisoLevel = (int)configuration.ConfigurableValue; + } + } + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + return new[] {new Configuration(this._texture_str, this.ConfigurableValueSpace.Sample())}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Experimental/ExternalTextureConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Experimental/ExternalTextureConfigurable.cs.meta new file mode 100644 index 000000000..b1623d252 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/ExternalTextureConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8c7a240fcb47d1cda5ac9de4abb1a26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Experimental/FlareConfigurable.cs b/Runtime/Prototyping/Configurables/Experimental/FlareConfigurable.cs new file mode 100644 index 000000000..887be0372 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/FlareConfigurable.cs @@ -0,0 +1,150 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Experimental { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Flare" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Light))] + public class FlareConfigurable : Configurable { + string _color_r; + string _color_g; + string _color_b; + string _shadow_strength; + string _intensity; + string _indirect_multiplier; + + Light _light; + Flare _flare; + + [SerializeField] + SampleSpace3 _color_space = new SampleSpace3 { + _space = new Space3 { + DecimalGranularity = 2, + Min = Vector3.one * 0.7f, + Max = Vector3.one * 1f + } + }; + + [SerializeField] + SampleSpace3 _int_ind_sha_space = new SampleSpace3 {_space = Space3.TwentyEighty + Vector3.one * 0.4f}; + + /// + /// + /// + public override void PreSetup() { + this._shadow_strength = this.Identifier + "ShadowStrength"; + this._color_r = this.Identifier + "ColorR"; + this._color_g = this.Identifier + "ColorG"; + this._color_b = this.Identifier + "ColorB"; + this._intensity = this.Identifier + "Intensity"; + this._indirect_multiplier = this.Identifier + "IndirectMultiplier"; + + this._light = this.GetComponent(); + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._shadow_strength); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_r); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_b); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._color_g); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._intensity); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._indirect_multiplier); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._shadow_strength); + this.ParentEnvironment.UnRegister(this, this._color_r); + this.ParentEnvironment.UnRegister(this, this._color_g); + this.ParentEnvironment.UnRegister(this, this._color_b); + this.ParentEnvironment.UnRegister(this, this._intensity); + this.ParentEnvironment.UnRegister(this, this._indirect_multiplier); + } + + public override ISamplable ConfigurableValueSpace { get { return this._color_space; } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + if (configuration.ConfigurableName == this._shadow_strength) { + this._light.shadowStrength = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._color_r) { + var c = this._light.color; + c.r = configuration.ConfigurableValue; + this._light.color = c; + } else if (configuration.ConfigurableName == this._color_g) { + var c = this._light.color; + c.g = configuration.ConfigurableValue; + this._light.color = c; + } else if (configuration.ConfigurableName == this._color_b) { + var c = this._light.color; + c.b = configuration.ConfigurableValue; + this._light.color = c; + } else if (configuration.ConfigurableName == this._intensity) { + this._light.intensity = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._indirect_multiplier) { + this._light.bounceIntensity = configuration.ConfigurableValue; + } + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var o = this._int_ind_sha_space.Sample(); + var v = this._color_space.Sample(); + + return new[] { + new Configuration(this._color_r, v.x), + new Configuration(this._color_g, v.y), + new Configuration(this._color_b, v.z), + new Configuration(this._intensity, o.x), + new Configuration(this._indirect_multiplier, o.y), + new Configuration(this._shadow_strength, o.z) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Experimental/FlareConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Experimental/FlareConfigurable.cs.meta new file mode 100644 index 000000000..29fd6b1a9 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/FlareConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44f749fdd768449ebf061e70d8049091 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Experimental/MeshConfigurable.cs b/Runtime/Prototyping/Configurables/Experimental/MeshConfigurable.cs new file mode 100644 index 000000000..6f1111e43 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/MeshConfigurable.cs @@ -0,0 +1,118 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Sampling; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Experimental { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Mesh" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(MeshFilter))] + public class MeshConfigurable : Configurable { + string _mesh_str; + + Mesh _deforming_mesh = null; + Vector3[] _original_vertices = null, _displaced_vertices = null; + Perlin _noise = null; + float _speed = 1.0f; + + [SerializeField] Mesh[] _meshes = null; + [SerializeField] MeshFilter _mesh_filter = null; + [SerializeField] bool _displace_mesh = false; + + [SerializeField] + SampleSpace1 _deformation_space = new SampleSpace1 {_space = new Space1 {Min = 1f, Max = 5f}}; + + /// + /// + /// + public override void PreSetup() { + this._mesh_str = this.Identifier + "Mesh"; + this._mesh_filter = this.GetComponent(); + if (Application.isPlaying) { + this._deforming_mesh = this._mesh_filter.mesh; + this._original_vertices = this._deforming_mesh.vertices; + this._displaced_vertices = new Vector3[this._original_vertices.Length]; + for (var i = 0; i < this._original_vertices.Length; i++) { + this._displaced_vertices[i] = this._original_vertices[i]; + } + } + + this._noise = new Perlin(); + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._mesh_str); + } + + /// + /// + /// n + protected override void UnRegisterComponent() { + this.ParentEnvironment?.UnRegister(this, this._mesh_str); + } + + public override ISamplable ConfigurableValueSpace { get { return this._deformation_space; } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + #endif + + if (configuration.ConfigurableName == this._mesh_str) { + if (this._displace_mesh) { + if (this._deforming_mesh) { + var time_x = Time.time * this._speed + 0.1365143f; + var time_y = Time.time * this._speed + 1.21688f; + var time_z = Time.time * this._speed + 2.5564f; + + for (var i = 0; i < this._displaced_vertices.Length; i++) { + var orig = this._original_vertices[i]; + //orig.y = orig.y * (1+(float)Math.Cos(Time.deltaTime))*(configuration.ConfigurableValue); + //orig.x = orig.x * (1+(float)Math.Sin(Time.deltaTime))*(configuration.ConfigurableValue); + + orig.x += this._noise.Noise(time_x + orig.x, time_x + orig.y, time_x + orig.z) + * configuration.ConfigurableValue; + orig.y += this._noise.Noise(time_y + orig.x, time_y + orig.y, time_y + orig.z) + * configuration.ConfigurableValue; + orig.z += this._noise.Noise(time_z + orig.x, time_z + orig.y, time_z + orig.z) + * configuration.ConfigurableValue; + + this._displaced_vertices[i] = orig; + } + + this._deforming_mesh.vertices = this._displaced_vertices; + + this._deforming_mesh.RecalculateNormals(); + } + } else if (this._meshes.Length > 0) { + var idx = (int)(configuration.ConfigurableValue * this._meshes.Length); + this._mesh_filter.mesh = this._meshes[idx]; + } + } + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + return new[] {new Configuration(this._mesh_str, this._deformation_space.Sample())}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Experimental/MeshConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Experimental/MeshConfigurable.cs.meta new file mode 100644 index 000000000..f4b110f66 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/MeshConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f63cc5c4bf1b4119864ae76037fbfce7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Experimental/NormalMapConfigurable.cs b/Runtime/Prototyping/Configurables/Experimental/NormalMapConfigurable.cs new file mode 100644 index 000000000..f98614736 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/NormalMapConfigurable.cs @@ -0,0 +1,74 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace droid.Runtime.Prototyping.Configurables.Experimental { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "NormalMap" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Renderer))] + public class NormalMapConfigurable : Configurable { + [SerializeField] Texture[] _textures = null; + [SerializeField] bool load_from_resources_if_empty = true; + [SerializeField] Texture _texture = null; + [SerializeField] Renderer _renderer = null; + [SerializeField] bool use_shared = false; + [SerializeField] Material _mat; + [SerializeField] int _last_sample; + static readonly Int32 _main_tex = Shader.PropertyToID("_BumpMap"); + + /// + /// + /// + public override void PreSetup() { + this._renderer = this.GetComponent(); + if (Application.isPlaying) { + if (this.use_shared) { + this._mat = this._renderer?.sharedMaterial; + } else { + this._mat = this._renderer?.material; + } + } + + if (this.load_from_resources_if_empty) { + if (this._textures == null || this._textures.Length == 0) { + this._textures = Resources.LoadAll("Textures"); + } + } + } + + public override ISamplable ConfigurableValueSpace { get { return new SampleSpace1(); } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + this._texture = this._textures[(int)configuration.ConfigurableValue]; + + this._mat.SetTexture(_main_tex, this._texture); + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + this._last_sample = int.Parse(Random.Range(0, this._textures.Length).ToString()); + + return new[] {new Configuration(this.Identifier, this._last_sample)}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Experimental/NormalMapConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Experimental/NormalMapConfigurable.cs.meta new file mode 100644 index 000000000..c5fb79357 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/NormalMapConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45d508f71d53d8dd5b28c2feb0bdf058 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Experimental/ScreenSpaceOcclusionConfigurable.cs b/Runtime/Prototyping/Configurables/Experimental/ScreenSpaceOcclusionConfigurable.cs new file mode 100644 index 000000000..daf1b7f26 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/ScreenSpaceOcclusionConfigurable.cs @@ -0,0 +1,182 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Experimental { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "ScreenSpaceOcclusion" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Renderer))] + public class ScreenSpaceOcclusionConfigurable : Configurable { + /// + /// Alpha + /// + string _a; + + /// + /// Blue + /// + string _b; + + /// + /// Green + /// + string _g; + + /// + /// Red + /// + string _r; + + [SerializeField] SampleSpace4 rot_space = new SampleSpace4 {_space = Space4.ZeroOne}; + + [SerializeField] SampleSpace2 xy_space2 = new SampleSpace2 {_space = Space2.ZeroOne}; + + [SerializeField] SampleSpace1 depth_space1 = new SampleSpace1 {_space = Space1.ZeroOne}; + [SerializeField] SampleSpace3 size_space = new SampleSpace3 {_space = Space3.ZeroOne}; + + /// + /// + [SerializeField] + Camera _camera = null; + + [SerializeField] GameObject[] _prefabs = null; + List _spawned = new List(); + bool _once_pre_setup = true; + [SerializeField] int num_occlusions = 10; + + /// + /// + /// + public override void PreSetup() { + this._r = this.Identifier + "R"; + this._g = this.Identifier + "G"; + this._b = this.Identifier + "B"; + this._a = this.Identifier + "A"; + + var s = new SampleSpace1 {_space = Space1.ZeroOne}; + + if (Application.isPlaying && this._once_pre_setup) { + if (this._prefabs != null && this._prefabs.Length > 0 && this._camera) { + for (var i = 0; i < this.num_occlusions; i++) { + var prefab = this._prefabs[(int)(s.Sample() * this._prefabs.Length)]; + + var xy = this.xy_space2.Sample(); + var z = this._camera.nearClipPlane + this.depth_space1.Sample() * this._camera.farClipPlane; + + var a = new Vector3(xy.x, xy.y, z); + + var c = this._camera.ViewportToWorldPoint(a); + + var rot = this.rot_space.Sample(); + var b = new Quaternion(rot.x, + rot.y, + rot.z, + rot.w); + + var d = Instantiate(prefab, + c, + b, + this.transform); + d.transform.localScale = this.size_space.Sample(); + + this._spawned.Add(d); + } + } + + this._once_pre_setup = false; + } + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._r); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._g); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._b); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._a); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._r); + this.ParentEnvironment.UnRegister(this, this._g); + this.ParentEnvironment.UnRegister(this, this._b); + this.ParentEnvironment.UnRegister(this, this._a); + } + + public override ISamplable ConfigurableValueSpace { get { return new SampleSpace1(); } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + var aa = Random.Range(0, this._spawned.Count); + foreach (var bb in this._spawned) { + var xy = this.xy_space2.Sample(); + var z = this._camera.nearClipPlane + this.depth_space1.Sample() * this._camera.farClipPlane; + + var a = new Vector3(xy.x, xy.y, z); + + var c = this._camera.ViewportToWorldPoint(a); + + var rot = this.rot_space.Sample(); + var b = new Quaternion(rot.x, + rot.y, + rot.z, + rot.w); + + bb.transform.localScale = this.size_space.Sample(); + + bb.transform.position = c; + + bb.transform.rotation = b; + } + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var s = this.size_space.Sample(); + + return new[] { + new Configuration(this._r, s.x), + new Configuration(this._b, s.y), + new Configuration(this._g, s.z) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Experimental/ScreenSpaceOcclusionConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Experimental/ScreenSpaceOcclusionConfigurable.cs.meta new file mode 100644 index 000000000..42903d9df --- /dev/null +++ b/Runtime/Prototyping/Configurables/Experimental/ScreenSpaceOcclusionConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5fcb765436941c2812c8ce404221417 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/ObjectSpawnerConfigurable.cs b/Runtime/Prototyping/Configurables/ObjectSpawnerConfigurable.cs deleted file mode 100644 index 2776e8197..000000000 --- a/Runtime/Prototyping/Configurables/ObjectSpawnerConfigurable.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Enums; -using UnityEngine; -using Random = System.Random; - -namespace Neodroid.Runtime.Prototyping.Configurables { - /// - /// - /// - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath - + "ObjectSpawner" - + ConfigurableComponentMenuPath._Postfix)] - public class ObjectSpawnerConfigurable : Configurable { - [SerializeField] int _amount; - - [SerializeField] Axis _axis; - - [SerializeField] GameObject _object_to_spawn; - - List _spawned_objects; - - protected override void PreSetup() { - this.DestroyObjects(); - this._spawned_objects = new List(); - this.SpawnObjects(); - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "ObjectSpawnerConfigurable"; } - } - - void DestroyObjects() { - if (this._spawned_objects != null) { - foreach (var o in this._spawned_objects) { - Destroy(o); - } - } - - foreach (Transform c in this.transform) { - Destroy(c.gameObject); - } - } - - void SpawnObjects() { - if (this._object_to_spawn) { - var dir = Vector3.up; - if (this._axis == Axis.X_) { - dir = Vector3.right; - } else if (this._axis == Axis.Z_) { - dir = Vector3.forward; - } - - for (var i = 0; i < this._amount; i++) { - this._spawned_objects.Add( - Instantiate( - this._object_to_spawn, - this.transform.position + dir * i, - UnityEngine.Random.rotation, - this.transform)); - } - } - } - - void OnApplicationQuit() { this.DestroyObjects(); } - - public override void ApplyConfiguration(IConfigurableConfiguration obj) { - if (this._spawned_objects.Count < obj.ConfigurableValue) { - var go = Instantiate(this._object_to_spawn, this.transform); - this._spawned_objects.Add(go); - }else if (this._spawned_objects.Count > obj.ConfigurableValue) { - if(this._spawned_objects.Count>0) { - this._spawned_objects.RemoveAt(this._spawned_objects.Count-1); - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/PositionConfigurable.cs b/Runtime/Prototyping/Configurables/PositionConfigurable.cs deleted file mode 100644 index 3f8079d37..000000000 --- a/Runtime/Prototyping/Configurables/PositionConfigurable.cs +++ /dev/null @@ -1,153 +0,0 @@ -using System; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; -using Random = System.Random; - -namespace Neodroid.Runtime.Prototyping.Configurables { - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath + "Position" + ConfigurableComponentMenuPath._Postfix)] - public class PositionConfigurable : Configurable, - IHasTriple { - [Header("Observation", order = 103), SerializeField] - Vector3 _position; - - [SerializeField] bool _use_environments_space; - - /// - /// - /// - string _x; - - /// - /// - /// - string _y; - - /// - /// - /// - string _z; - - protected override void PreSetup() { - this._x = this.Identifier + "X_"; - this._y = this.Identifier + "Y_"; - this._z = this.Identifier + "Z_"; - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "PositionConfigurable"; } - } - - /// - /// - /// - public Vector3 ObservationValue { - get { return this._position; } - } - - public Space3 TripleSpace { get; } = new Space3(); - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._x); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._y); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._z); - } - - protected override void UnRegisterComponent() { - if (this.ParentEnvironment == null) return; - this.ParentEnvironment.UnRegister(this); - this.ParentEnvironment.UnRegister(this, this._x); - this.ParentEnvironment.UnRegister(this, this._y); - this.ParentEnvironment.UnRegister(this, this._z); - } - - public override void UpdateCurrentConfiguration() { - if (this._use_environments_space) { - this._position = this.ParentEnvironment.TransformPosition(this.transform.position); - } else { - this._position = this.transform.position; - } - } - - public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { - var pos = this.transform.position; - if (this._use_environments_space) { - pos = this.ParentEnvironment.TransformPosition(this.transform.position); - } - - var v = simulator_configuration.ConfigurableValue; - if (this.TripleSpace._Decimal_Granularity >= 0) { - v = (int)Math.Round(v, this.TripleSpace._Decimal_Granularity); - } - - if (this.TripleSpace._Min_Values[0].CompareTo(this.TripleSpace._Max_Values[0]) != 0) { - //TODO NOT IMPLEMENTED CORRECTLY VelocitySpace should not be index but should check all pairwise values, TripleSpace._Min_Values == TripleSpace._Max_Values - if (v < this.TripleSpace._Min_Values[0] || v > this.TripleSpace._Max_Values[0]) { - Debug.Log( - $"Configurable does not accept input{v}, outside allowed range {this.TripleSpace._Min_Values[0]} to {this.TripleSpace._Max_Values[0]}"); - return; // Do nothing - } - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Applying {v} to {simulator_configuration.ConfigurableName} configurable"); - } - #endif - - if (this.RelativeToExistingValue) { - if (simulator_configuration.ConfigurableName == this._x) { - pos.Set(v - pos.x, pos.y, pos.z); - } else if (simulator_configuration.ConfigurableName == this._y) { - pos.Set(pos.x, v - pos.y, pos.z); - } else if (simulator_configuration.ConfigurableName == this._z) { - pos.Set(pos.x, pos.y, v - pos.z); - } - } else { - if (simulator_configuration.ConfigurableName == this._x) { - pos.Set(v, pos.y, pos.z); - } else if (simulator_configuration.ConfigurableName == this._y) { - pos.Set(pos.x, v, pos.z); - } else if (simulator_configuration.ConfigurableName == this._z) { - pos.Set(pos.x, pos.y, v); - } - } - - var inv_pos = pos; - if (this._use_environments_space) { - inv_pos = this.ParentEnvironment.InverseTransformPosition(inv_pos); - } - - this.transform.position = inv_pos; - } - - public override IConfigurableConfiguration SampleConfiguration(Random random_generator) { - var random_vector3 = this.TripleSpace.RandomVector3(); - - return new Configuration(this._x, random_vector3.x); - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/QuaternionTransformConfigurable.cs b/Runtime/Prototyping/Configurables/QuaternionTransformConfigurable.cs deleted file mode 100644 index 3f147a0da..000000000 --- a/Runtime/Prototyping/Configurables/QuaternionTransformConfigurable.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using UnityEngine; -using Random = System.Random; - -namespace Neodroid.Runtime.Prototyping.Configurables { - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath - + "QuaternionTransform" - + ConfigurableComponentMenuPath._Postfix)] - public class QuaternionTransformConfigurable : Configurable, - IHasQuaternionTransform { - [Header("Specific", order = 102), SerializeField] - Vector3 _position; - - [SerializeField] Quaternion _rotation; - - [SerializeField] string _pos_x = "pos_x"; - - [SerializeField] string _pos_y = "pos_y"; - - [SerializeField] string _pos_z = "pos_z"; - - [SerializeField] string _rot_x = "rot_x"; - [SerializeField] string _rot_y = "rot_y"; - [SerializeField] string _rot_z = "rot_z"; - [SerializeField] string _rot_w = "row_w"; - - /// - /// - /// - public Quaternion Rotation { - get { return this._rotation; } - } - - /// - /// - /// - public Vector3 Position { - get { return this._position; } - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "QuaternionTransformConfigurable"; } - } - - protected override void PreSetup() { - this._pos_x =this.Identifier + "pos_x"; - - this._pos_y = this.Identifier +"pos_y"; - - this._pos_z = this.Identifier +"pos_z"; - - this._rot_x =this.Identifier + "rot_x"; - this._rot_y = this.Identifier +"rot_y"; - this._rot_z =this.Identifier + "rot_z"; - this._rot_w =this.Identifier + "row_w"; - } - - public override void ApplyConfiguration(IConfigurableConfiguration obj) { - if (obj.ConfigurableName==this._pos_x) { - - } else if(obj.ConfigurableName==this._pos_y) { - - } else if(obj.ConfigurableName==this._pos_z) { - } else if(obj.ConfigurableName==this._rot_x) { - } else if(obj.ConfigurableName==this._rot_y) { - } else if(obj.ConfigurableName==this._rot_z) { - } else if(obj.ConfigurableName==this._rot_w) { - - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Rigidbody.meta b/Runtime/Prototyping/Configurables/Rigidbody.meta new file mode 100644 index 000000000..18582539e --- /dev/null +++ b/Runtime/Prototyping/Configurables/Rigidbody.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 60c4b01833474eeea8f356077a99d09a +timeCreated: 1567585739 \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Rigidbody/FrictionConfigurable.cs b/Runtime/Prototyping/Configurables/Rigidbody/FrictionConfigurable.cs new file mode 100644 index 000000000..bca7929cd --- /dev/null +++ b/Runtime/Prototyping/Configurables/Rigidbody/FrictionConfigurable.cs @@ -0,0 +1,127 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Prototyping.Configurables.Transforms; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Rigidbody { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Friction" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(UnityEngine.Rigidbody))] + public class FrictionConfigurable : SpatialConfigurable, + IHasSingle { + /// + /// + ISamplable _friction_space = new SampleSpace1 {_space = Space1.ZeroOne}; + + /// + /// + string _vel_x; + + UnityEngine.Rigidbody _rigidbody; + + /// + /// + public override string PrototypingTypeName { get { return "RigidbodyConfigurable"; } } + + /// + /// + public float ObservationValue { get { return this._friction_space.Sample(); } } + + /// + /// + /// + public Space1 SingleSpace { get { return (Space1)this._friction_space.Space; } } + + public override ISamplable ConfigurableValueSpace { get; } + + /// + /// + public override void UpdateCurrentConfiguration() { + //this.Velocity = this._rigidbody.velocity; + } + + /// + /// + public override void PreSetup() { + this._rigidbody = this.GetComponent(); + this._vel_x = this.Identifier + "VelX"; + } + + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._vel_x); + } + + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._vel_x); + } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { + //var vel = this._rigidbody.velocity; + + var v = simulator_configuration.ConfigurableValue; + if (this.SingleSpace.DecimalGranularity >= 0) { + v = (int)Math.Round(v, this.SingleSpace.DecimalGranularity); + } + + if (this.SingleSpace.Min.CompareTo(this.SingleSpace.Max) != 0) { + //TODO NOT IMPLEMENTED CORRECTLY VelocitySpace should not be index but should check all pairwise values, VelocitySpace.MinValues == VelocitySpace.MaxValues + if (v < this.SingleSpace.Min || v > this.SingleSpace.Max) { + Debug.Log(string.Format("Configurable does not accept input{2}, outside allowed range {0} to {1}", + this.SingleSpace.Min, + this.SingleSpace.Max, + v)); + return; // Do nothing + } + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + v + " To " + this.Identifier); + } + #endif + + if (this.RelativeToExistingValue) { + if (simulator_configuration.ConfigurableName == this._vel_x) { + //vel.Set(v - vel.x, vel.y, vel.z); + } + } else { + if (simulator_configuration.ConfigurableName == this._vel_x) { + //vel.Set(v, vel.y, vel.z); + } + } + + //this._rigidbody.angularVelocity = ang; + } + + /// + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + return new[] {new Configuration(this._vel_x, this._friction_space.Sample())}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Rigidbody/FrictionConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Rigidbody/FrictionConfigurable.cs.meta new file mode 100644 index 000000000..3cce63da9 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Rigidbody/FrictionConfigurable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0c09aa3051354ac8680a45146693d716 +timeCreated: 1513326146 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Rigidbody/RigidbodyConfigurable.cs b/Runtime/Prototyping/Configurables/Rigidbody/RigidbodyConfigurable.cs new file mode 100644 index 000000000..482daf021 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Rigidbody/RigidbodyConfigurable.cs @@ -0,0 +1,224 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Prototyping.Configurables.Transforms; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Rigidbody { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Rigidbody" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(UnityEngine.Rigidbody))] + public class RigidbodyConfigurable : SpatialConfigurable, + IHasRigidbody { + /// + /// + string _ang_x; + + /// + /// + string _ang_y; + + /// + /// + string _ang_z; + + /// + /// + [SerializeField] + Vector3 _angular_velocity = Vector3.zero; + + /// + /// + [SerializeField] + SampleSpace3 _angular_velocity_space = new SampleSpace3 {_space = Space3.ZeroOne}; + + /// + /// + UnityEngine.Rigidbody _rigidbody = null; + + /// + /// + string _vel_x; + + /// + /// + string _vel_y; + + /// + /// + string _vel_z; + + /// + /// + [Header("Observation", order = 110)] + [SerializeField] + Vector3 _velocity = Vector3.zero; + + /// + /// + [SerializeField] + SampleSpace3 _velocity_space = new SampleSpace3 {_space = Space3.ZeroOne}; + + /// + /// + public override string PrototypingTypeName { get { return "RigidbodyConfigurable"; } } + + /// + /// + public Vector3 Velocity { get { return this._velocity; } set { this._velocity = value; } } + + /// + /// + public Vector3 AngularVelocity { + get { return this._angular_velocity; } + private set { this._angular_velocity = value; } + } + + public Space3 VelocitySpace { get { return this._velocity_space._space; } } + public Space3 AngularSpace { get { return this._angular_velocity_space._space; } } + + public override ISamplable ConfigurableValueSpace { get; } + + /// + /// + public override void UpdateCurrentConfiguration() { + this.Velocity = this._rigidbody.velocity; + this.AngularVelocity = this._rigidbody.angularVelocity; + } + + /// + /// + public override void PreSetup() { + this._rigidbody = this.GetComponent(); + this._vel_x = this.Identifier + "VelX"; + this._vel_y = this.Identifier + "VelY"; + this._vel_z = this.Identifier + "VelZ"; + this._ang_x = this.Identifier + "AngX"; + this._ang_y = this.Identifier + "AngY"; + this._ang_z = this.Identifier + "AngZ"; + } + + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._vel_x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._vel_y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._vel_z); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._ang_x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._ang_y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._ang_z); + } + + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._vel_x); + this.ParentEnvironment.UnRegister(this, this._vel_y); + this.ParentEnvironment.UnRegister(this, this._vel_z); + this.ParentEnvironment.UnRegister(this, this._ang_x); + this.ParentEnvironment.UnRegister(this, this._ang_y); + this.ParentEnvironment.UnRegister(this, this._ang_z); + } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { + var vel = this._rigidbody.velocity; + var ang = this._rigidbody.velocity; + + var v = simulator_configuration.ConfigurableValue; + if (this.VelocitySpace.DecimalGranularity >= 0) { + v = (int)Math.Round(v, this.VelocitySpace.DecimalGranularity); + } + + if (this.VelocitySpace.Min[0].CompareTo(this.VelocitySpace.Max[0]) != 0) { + //TODO NOT IMPLEMENTED CORRECTLY VelocitySpace should not be index but should check all pairwise values, VelocitySpace.MinValues == VelocitySpace.MaxValues + if (v < this.VelocitySpace.Min[0] || v > this.VelocitySpace.Max[0]) { + Debug.Log(string.Format("Configurable does not accept input{2}, outside allowed range {0} to {1}", + this.VelocitySpace.Min[0], + this.VelocitySpace.Max[0], + v)); + return; // Do nothing + } + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + v + " To " + this.Identifier); + } + #endif + + if (this.RelativeToExistingValue) { + if (simulator_configuration.ConfigurableName == this._vel_x) { + vel.Set(v - vel.x, vel.y, vel.z); + } else if (simulator_configuration.ConfigurableName == this._vel_y) { + vel.Set(vel.x, v - vel.y, vel.z); + } else if (simulator_configuration.ConfigurableName == this._vel_z) { + vel.Set(vel.x, vel.y, v - vel.z); + } else if (simulator_configuration.ConfigurableName == this._ang_x) { + ang.Set(v - ang.x, ang.y, ang.z); + } else if (simulator_configuration.ConfigurableName == this._ang_y) { + ang.Set(ang.x, v - ang.y, ang.z); + } else if (simulator_configuration.ConfigurableName == this._ang_z) { + ang.Set(ang.x, ang.y, v - ang.z); + } + } else { + if (simulator_configuration.ConfigurableName == this._vel_x) { + vel.Set(v, vel.y, vel.z); + } else if (simulator_configuration.ConfigurableName == this._vel_y) { + vel.Set(vel.x, v, vel.z); + } else if (simulator_configuration.ConfigurableName == this._vel_z) { + vel.Set(vel.x, vel.y, v); + } else if (simulator_configuration.ConfigurableName == this._ang_x) { + ang.Set(v, ang.y, ang.z); + } else if (simulator_configuration.ConfigurableName == this._ang_y) { + ang.Set(ang.x, v, ang.z); + } else if (simulator_configuration.ConfigurableName == this._ang_z) { + ang.Set(ang.x, ang.y, v); + } + } + + this._rigidbody.velocity = vel; + this._rigidbody.angularVelocity = ang; + } + + /// + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + return new[] {new Configuration(this._ang_x, this._angular_velocity_space.Sample())}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/RigidbodyConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Rigidbody/RigidbodyConfigurable.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/RigidbodyConfigurable.cs.meta rename to Runtime/Prototyping/Configurables/Rigidbody/RigidbodyConfigurable.cs.meta diff --git a/Runtime/Prototyping/Configurables/RigidbodyConfigurable.cs b/Runtime/Prototyping/Configurables/RigidbodyConfigurable.cs deleted file mode 100644 index ad39271ab..000000000 --- a/Runtime/Prototyping/Configurables/RigidbodyConfigurable.cs +++ /dev/null @@ -1,258 +0,0 @@ -using System; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; -using Random = System.Random; - -namespace Neodroid.Runtime.Prototyping.Configurables { - /// - /// - /// - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath - + "Rigidbody" - + ConfigurableComponentMenuPath._Postfix), RequireComponent(typeof(Rigidbody))] - public class RigidbodyConfigurable : Configurable, - IHasRigidbody { - /// - /// - /// - Rigidbody _rigidbody; - - /// - /// - /// - string _ang_x; - - /// - /// - /// - string _ang_y; - - /// - /// - /// - string _ang_z; - - /// - /// - /// - string _vel_x; - - /// - /// - /// - string _vel_y; - - /// - /// - /// - string _vel_z; - - /// - /// - /// - [Header("Observation", order = 110), SerializeField] - Vector3 _velocity; - - /// - /// - /// - [SerializeField] - Space3 _velocity_space; - - /// - /// - /// - [SerializeField] - Vector3 _angular_velocity; - - /// - /// - /// - [SerializeField] - Space3 _angular_velocity_space; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "RigidbodyConfigurable"; } - } - - /// - /// - /// - public Vector3 Velocity { - get { return this._velocity; } - set { this._velocity = value; } - } - - /// - /// - /// - public Vector3 AngularVelocity { - get { return this._angular_velocity; } - private set { this._angular_velocity = value; } - } - - /// - /// - /// - public Space3 VelocitySpace { - get { return this._velocity_space; } - } - - /// - /// - /// - public Space3 AngularSpace { - get { return this._angular_velocity_space; } - } - - /// - /// - /// - public override void UpdateCurrentConfiguration() { - this.Velocity = this._rigidbody.velocity; - this.AngularVelocity = this._rigidbody.angularVelocity; - } - - /// - /// - /// - protected override void PreSetup() { - this._rigidbody = this.GetComponent(); - this.UpdateCurrentConfiguration(); - this._vel_x = this.Identifier + "VelX"; - this._vel_y = this.Identifier + "VelY"; - this._vel_z = this.Identifier + "VelZ"; - this._ang_x = this.Identifier + "AngX"; - this._ang_y = this.Identifier + "AngY"; - this._ang_z = this.Identifier + "AngZ"; - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._vel_x); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._vel_y); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._vel_z); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._ang_x); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._ang_y); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._ang_z); - } - - /// - /// - /// - protected override void UnRegisterComponent() { - if (this.ParentEnvironment == null) return; - this.ParentEnvironment.UnRegister(this, this._vel_x); - this.ParentEnvironment.UnRegister(this, this._vel_y); - this.ParentEnvironment.UnRegister(this, this._vel_z); - this.ParentEnvironment.UnRegister(this, this._ang_x); - this.ParentEnvironment.UnRegister(this, this._ang_y); - this.ParentEnvironment.UnRegister(this, this._ang_z); - } - - /// - /// - /// - /// - public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { - var vel = this._rigidbody.velocity; - var ang = this._rigidbody.velocity; - - var v = simulator_configuration.ConfigurableValue; - if (this.VelocitySpace._Decimal_Granularity >= 0) { - v = (int)Math.Round(v, this.VelocitySpace._Decimal_Granularity); - } - - if (this.VelocitySpace._Min_Values[0].CompareTo(this.VelocitySpace._Max_Values[0]) != 0) { - //TODO NOT IMPLEMENTED CORRECTLY VelocitySpace should not be index but should check all pairwise values, VelocitySpace._Min_Values == VelocitySpace._Max_Values - if (v < this.VelocitySpace._Min_Values[0] || v > this.VelocitySpace._Max_Values[0]) { - Debug.Log( - string.Format( - "Configurable does not accept input{2}, outside allowed range {0} to {1}", - this.VelocitySpace._Min_Values[0], - this.VelocitySpace._Max_Values[0], - v)); - return; // Do nothing - } - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + v + " To " + this.Identifier); - } - #endif - - if (this.RelativeToExistingValue) { - if (simulator_configuration.ConfigurableName == this._vel_x) { - vel.Set(v - vel.x, vel.y, vel.z); - } else if (simulator_configuration.ConfigurableName == this._vel_y) { - vel.Set(vel.x, v - vel.y, vel.z); - } else if (simulator_configuration.ConfigurableName == this._vel_z) { - vel.Set(vel.x, vel.y, v - vel.z); - } else if (simulator_configuration.ConfigurableName == this._ang_x) { - ang.Set(v - ang.x, ang.y, ang.z); - } else if (simulator_configuration.ConfigurableName == this._ang_y) { - ang.Set(ang.x, v - ang.y, ang.z); - } else if (simulator_configuration.ConfigurableName == this._ang_z) { - ang.Set(ang.x, ang.y, v - ang.z); - } - } else { - if (simulator_configuration.ConfigurableName == this._vel_x) { - vel.Set(v, vel.y, vel.z); - } else if (simulator_configuration.ConfigurableName == this._vel_y) { - vel.Set(vel.x, v, vel.z); - } else if (simulator_configuration.ConfigurableName == this._vel_z) { - vel.Set(vel.x, vel.y, v); - } else if (simulator_configuration.ConfigurableName == this._ang_x) { - ang.Set(v, ang.y, ang.z); - } else if (simulator_configuration.ConfigurableName == this._ang_y) { - ang.Set(ang.x, v, ang.z); - } else if (simulator_configuration.ConfigurableName == this._ang_z) { - ang.Set(ang.x, ang.y, v); - } - } - - this._rigidbody.velocity = vel; - this._rigidbody.angularVelocity = ang; - } - - /// - /// - /// - /// - /// - /// - public override IConfigurableConfiguration SampleConfiguration(Random random_generator) { - return new Configuration(this._ang_x,random_generator.Next()); - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Selection.meta b/Runtime/Prototyping/Configurables/Selection.meta new file mode 100644 index 000000000..b00864888 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Selection.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a90861e1c5194ac09141dcd267a00d4a +timeCreated: 1567585772 \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Selection/ChildSelectorConfigurable.cs b/Runtime/Prototyping/Configurables/Selection/ChildSelectorConfigurable.cs new file mode 100644 index 000000000..b9b412286 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Selection/ChildSelectorConfigurable.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space.Sample; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Selection { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "ChildSelector" + + ConfigurableComponentMenuPath._Postfix)] + public class ChildSelectorConfigurable : Configurable, + ICategoryProvider { + [SerializeField] GameObject active; + [SerializeField] GameObject[] children; + [SerializeField] int len; + [SerializeField] SampleSpace1 _configurable_value_space = new SampleSpace1(); + + /// + /// + /// + public override void RemotePostSetup() { + if (!Application.isPlaying) { + return; + } + + var la = new List(); + foreach (Transform child in this.transform) { + var o = child.gameObject; + o.SetActive(false); + this.active = o; + la.Add(o); + } + + this.children = la.ToArray(); + + this.len = this.transform.childCount; + + if (this.active) { + this.active.SetActive(true); + } + } + + public override ISamplable ConfigurableValueSpace { get { return this._configurable_value_space; } } + + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + if (!Application.isPlaying) { + return; + } + + /*if (this.active) { + this.active.SetActive(false); + }*/ + foreach (var c in this.children) { + c.SetActive(false); + } + + + if (this.children != null && (int)configuration.ConfigurableValue < this.len) { + this.CurrentCategoryValue = (int)configuration.ConfigurableValue; + this.active = this.children[this.CurrentCategoryValue]; + } + + if (this.active) { + this.active.SetActive(true); + } + } + + public override Configuration[] SampleConfigurations() { + return new[] {new Configuration(this.Identifier, int.Parse(Random.Range(0, this.len).ToString()))}; + } + + public int CurrentCategoryValue { get; set; } + } +} diff --git a/Runtime/Prototyping/Configurables/Selection/ChildSelectorConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Selection/ChildSelectorConfigurable.cs.meta new file mode 100644 index 000000000..e058a626a --- /dev/null +++ b/Runtime/Prototyping/Configurables/Selection/ChildSelectorConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4d54d5134b1d2f139ec2579d1be571e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Selection/DifficultyConfigurable.cs b/Runtime/Prototyping/Configurables/Selection/DifficultyConfigurable.cs new file mode 100644 index 000000000..eb1997eeb --- /dev/null +++ b/Runtime/Prototyping/Configurables/Selection/DifficultyConfigurable.cs @@ -0,0 +1,25 @@ +using System; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Selection { + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Difficulty" + + ConfigurableComponentMenuPath._Postfix)] + public class DifficultyConfigurable : Configurable { + /// + /// + /// + public override string PrototypingTypeName { get { return "DifficultyConfigurable"; } } + + public override ISamplable ConfigurableValueSpace { get; } + + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + if (Math.Abs(configuration.ConfigurableValue - 1) < double.Epsilon) { + //print ("Increased Difficulty"); + } else if (Math.Abs(configuration.ConfigurableValue - -1) < double.Epsilon) { + //print ("Decreased Difficulty"); + } + } + } +} diff --git a/Runtime/Prototyping/Configurables/DifficultyConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Selection/DifficultyConfigurable.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/DifficultyConfigurable.cs.meta rename to Runtime/Prototyping/Configurables/Selection/DifficultyConfigurable.cs.meta diff --git a/Runtime/Prototyping/Configurables/Selection/ObjectSpawnerConfigurable.cs b/Runtime/Prototyping/Configurables/Selection/ObjectSpawnerConfigurable.cs new file mode 100644 index 000000000..47461273a --- /dev/null +++ b/Runtime/Prototyping/Configurables/Selection/ObjectSpawnerConfigurable.cs @@ -0,0 +1,82 @@ +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Selection { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "ObjectSpawner" + + ConfigurableComponentMenuPath._Postfix)] + public class ObjectSpawnerConfigurable : Configurable { + [SerializeField] int _amount = 0; + + [SerializeField] Axis _axis = Axis.X_; + + [SerializeField] GameObject _object_to_spawn = null; + + List _spawned_objects = null; + [SerializeField] SampleSpace1 _configurable_value_space = new SampleSpace1 {_space = Space1.TwentyEighty}; + + /// + /// + /// + public override string PrototypingTypeName { get { return "ObjectSpawnerConfigurable"; } } + + public override void PreSetup() { + this.DestroyObjects(); + this._spawned_objects = new List(); + this.SpawnObjects(); + } + + void DestroyObjects() { + if (this._spawned_objects != null) { + foreach (var o in this._spawned_objects) { + Destroy(o); + } + } + + foreach (Transform c in this.transform) { + Destroy(c.gameObject); + } + } + + void SpawnObjects() { + if (this._object_to_spawn) { + var dir = Vector3.up; + if (this._axis == Axis.X_) { + dir = Vector3.right; + } else if (this._axis == Axis.Z_) { + dir = Vector3.forward; + } + + var transform1 = this.transform; + for (var i = 0; i < this._amount; i++) { + this._spawned_objects.Add(Instantiate(this._object_to_spawn, + transform1.position + dir * i, + Random.rotation, + transform1)); + } + } + } + + void OnApplicationQuit() { this.DestroyObjects(); } + + public override ISamplable ConfigurableValueSpace { get { return this._configurable_value_space; } } + + public override void ApplyConfiguration(IConfigurableConfiguration obj) { + if (this._spawned_objects.Count < obj.ConfigurableValue) { + var go = Instantiate(this._object_to_spawn, this.transform); + this._spawned_objects.Add(go); + } else if (this._spawned_objects.Count > obj.ConfigurableValue) { + if (this._spawned_objects.Count > 0) { + this._spawned_objects.RemoveAt(this._spawned_objects.Count - 1); + } + } + } + } +} diff --git a/Runtime/Prototyping/Configurables/ObjectSpawnerConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Selection/ObjectSpawnerConfigurable.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/ObjectSpawnerConfigurable.cs.meta rename to Runtime/Prototyping/Configurables/Selection/ObjectSpawnerConfigurable.cs.meta diff --git a/Runtime/Prototyping/Configurables/Selection/SimulationConfigurable.cs b/Runtime/Prototyping/Configurables/Selection/SimulationConfigurable.cs new file mode 100644 index 000000000..adf1b173f --- /dev/null +++ b/Runtime/Prototyping/Configurables/Selection/SimulationConfigurable.cs @@ -0,0 +1,124 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Managers; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Selection { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Simulation" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(NeodroidManager))] + public class SimulationConfigurable : Configurable { + string _fullscreen; + string _height; + + string _quality_level; + string _target_frame_rate; + string _time_scale; + string _width; + + /// + /// + public override string PrototypingTypeName { get { return "SimulationConfigurable"; } } + + /// + /// + public override void PreSetup() { + this._quality_level = this.Identifier + "QualityLevel"; + this._target_frame_rate = this.Identifier + "TargetFrameRate"; + this._time_scale = this.Identifier + "TimeScale"; + this._width = this.Identifier + "Width"; + this._height = this.Identifier + "Height"; + this._fullscreen = this.Identifier + "Fullscreen"; + } + + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._quality_level); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._target_frame_rate); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._width); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._height); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._fullscreen); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._time_scale); + } + + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._quality_level); + this.ParentEnvironment.UnRegister(this, this._target_frame_rate); + this.ParentEnvironment.UnRegister(this, this._time_scale); + this.ParentEnvironment.UnRegister(this, this._width); + this.ParentEnvironment.UnRegister(this, this._height); + this.ParentEnvironment.UnRegister(this, this._fullscreen); + } + + public override ISamplable ConfigurableValueSpace { get; } + + /// + /// + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + simulator_configuration + " To " + this.Identifier); + } + #endif + + if (simulator_configuration.ConfigurableName == this._quality_level) { + QualitySettings.SetQualityLevel((int)simulator_configuration.ConfigurableValue, true); + } else if (simulator_configuration.ConfigurableName == this._target_frame_rate) { + Application.targetFrameRate = (int)simulator_configuration.ConfigurableValue; + } else if (simulator_configuration.ConfigurableName == this._width) { + Screen.SetResolution((int)simulator_configuration.ConfigurableValue, Screen.height, false); + } else if (simulator_configuration.ConfigurableName == this._height) { + Screen.SetResolution(Screen.width, (int)simulator_configuration.ConfigurableValue, false); + } else if (simulator_configuration.ConfigurableName == this._fullscreen) { + Screen.SetResolution(Screen.width, + Screen.height, + (int)simulator_configuration.ConfigurableValue != 0); + } else if (simulator_configuration.ConfigurableName == this._time_scale) { + Time.timeScale = simulator_configuration.ConfigurableValue; + } + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + return new[] {new Configuration(this._time_scale, this.ConfigurableValueSpace.Sample())}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/SimulationConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Selection/SimulationConfigurable.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/SimulationConfigurable.cs.meta rename to Runtime/Prototyping/Configurables/Selection/SimulationConfigurable.cs.meta diff --git a/Runtime/Prototyping/Configurables/SimulationConfigurable.cs b/Runtime/Prototyping/Configurables/SimulationConfigurable.cs deleted file mode 100644 index 234c0dc6d..000000000 --- a/Runtime/Prototyping/Configurables/SimulationConfigurable.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; -using Random = System.Random; - -namespace Neodroid.Runtime.Prototyping.Configurables { - /// - /// - /// - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath - + "Simulation" - + ConfigurableComponentMenuPath._Postfix), RequireComponent(typeof(PausableManager))] - public class SimulationConfigurable : Configurable { - string _fullscreen; - string _height; - - string _quality_level; - string _target_frame_rate; - string _time_scale; - string _width; - - /// - /// - /// - protected override void PreSetup() { - this._quality_level = this.Identifier + "QualityLevel"; - this._target_frame_rate = this.Identifier + "TargetFrameRate"; - this._time_scale = this.Identifier + "TimeScale"; - this._width = this.Identifier + "Width"; - this._height = this.Identifier + "Height"; - this._fullscreen = this.Identifier + "Fullscreen"; - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "SimulationConfigurable"; } - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._quality_level); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._target_frame_rate); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._width); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._height); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._fullscreen); - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterNamedComponent( - (PrototypingEnvironment)this.ParentEnvironment, - (Configurable)this, - this._time_scale); - } - - /// - /// - /// - protected override void UnRegisterComponent() { - if (this.ParentEnvironment == null) return; - this.ParentEnvironment.UnRegister(this, this._quality_level); - this.ParentEnvironment.UnRegister(this, this._target_frame_rate); - this.ParentEnvironment.UnRegister(this, this._time_scale); - this.ParentEnvironment.UnRegister(this, this._width); - this.ParentEnvironment.UnRegister(this, this._height); - this.ParentEnvironment.UnRegister(this, this._fullscreen); - } - - /// - /// - /// - /// - public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + simulator_configuration + " To " + this.Identifier); - } - #endif - - if (simulator_configuration.ConfigurableName == this._quality_level) { - QualitySettings.SetQualityLevel((int)simulator_configuration.ConfigurableValue, true); - } else if (simulator_configuration.ConfigurableName == this._target_frame_rate) { - Application.targetFrameRate = (int)simulator_configuration.ConfigurableValue; - } else if (simulator_configuration.ConfigurableName == this._width) { - Screen.SetResolution((int)simulator_configuration.ConfigurableValue, Screen.height, false); - } else if (simulator_configuration.ConfigurableName == this._height) { - Screen.SetResolution(Screen.width, (int)simulator_configuration.ConfigurableValue, false); - } else if (simulator_configuration.ConfigurableName == this._fullscreen) { - Screen.SetResolution(Screen.width, Screen.height, (int)simulator_configuration.ConfigurableValue != 0); - } else if (simulator_configuration.ConfigurableName == this._time_scale) { - Time.timeScale = simulator_configuration.ConfigurableValue; - } - } - - /// - /// - /// - /// - /// - /// - public override IConfigurableConfiguration SampleConfiguration(Random random_generator) { - return new Configuration(this._time_scale,(float)random_generator.NextDouble()); - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/TransformConfigurable1Dof.cs b/Runtime/Prototyping/Configurables/TransformConfigurable1Dof.cs deleted file mode 100644 index cfc295014..000000000 --- a/Runtime/Prototyping/Configurables/TransformConfigurable1Dof.cs +++ /dev/null @@ -1,226 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.BoundingBoxes; -using Neodroid.Runtime.Utilities.Enums; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; -using Random = System.Random; - -namespace Neodroid.Runtime.Prototyping.Configurables { - /// - /// - /// - [AddComponentMenu( - ConfigurableComponentMenuPath._ComponentMenuPath - + "TransformConfigurable1Dof" - + ConfigurableComponentMenuPath._Postfix)] - public class TransformConfigurable1Dof : Configurable, - IHasSingle { - /// - /// - /// - public override string PrototypingTypeName { - get { return "Transform" + this._axis_of_configuration + "Configurable"; } - } - - public float ObservationValue { - get { return this._observation_value; } - private set { this._observation_value = value; } - } - - [SerializeField] ValueSpace _single_value_space; - - /// - /// - /// - public ValueSpace SingleSpace { - get { return this._single_value_space; } - set { this._single_value_space = value; } - } - - public override void UpdateCurrentConfiguration() { - var pos = this.transform.position; - var dir = this.transform.forward; - var rot = this.transform.up; - if (this._use_environments_space) { - pos = this.ParentEnvironment.TransformPosition(pos); - dir = this.ParentEnvironment.TransformDirection(dir); - rot = this.ParentEnvironment.TransformDirection(rot); - } - - switch (this._axis_of_configuration) { - case Axis.X_: - this.ObservationValue = pos.x; - break; - case Axis.Y_: - this.ObservationValue = pos.y; - break; - case Axis.Z_: - this.ObservationValue = pos.z; - break; - case Axis.Dir_x_: - this.ObservationValue = dir.x; - break; - case Axis.Dir_y_: - this.ObservationValue = dir.y; - break; - case Axis.Dir_z_: - this.ObservationValue = dir.z; - break; - case Axis.Rot_x_: - this.ObservationValue = rot.x; - break; - case Axis.Rot_y_: - this.ObservationValue = rot.y; - break; - case Axis.Rot_z_: - this.ObservationValue = rot.z; - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - /// - /// - /// - protected override void PreSetup() { - if (this._use_bounding_box_for_range) { - if (this._bounding_box != null) { - var valid_input = new ValueSpace { - _Max_Value = Math.Min( - this._bounding_box.Bounds.size.x, - Math.Min(this._bounding_box.Bounds.size.y, this._bounding_box.Bounds.size.z)) - }; - valid_input._Min_Value = -valid_input._Max_Value; - this.SingleSpace = valid_input; - } - } - } - - public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { - if (simulator_configuration.ConfigurableValue < this.SingleSpace._Min_Value - || simulator_configuration.ConfigurableValue > this.SingleSpace._Max_Value) { - Debug.Log( - $"It does not accept input, outside allowed range {this.SingleSpace._Min_Value} to {this.SingleSpace._Max_Value}"); - return; // Do nothing - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + simulator_configuration + " To " + this.Identifier); - } - #endif - - var pos = this.transform.position; - var dir = this.transform.forward; - var rot = this.transform.up; - if (this._use_environments_space) { - pos = this.ParentEnvironment.TransformPosition(pos); - dir = this.ParentEnvironment.TransformDirection(dir); - rot = this.ParentEnvironment.TransformDirection(rot); - } - - switch (this._axis_of_configuration) { - case Axis.X_: - if (this.RelativeToExistingValue) { - pos.Set(simulator_configuration.ConfigurableValue - pos.x, pos.y, pos.z); - } else { - pos.Set(simulator_configuration.ConfigurableValue, pos.y, pos.z); - } - - break; - case Axis.Y_: - if (this.RelativeToExistingValue) { - pos.Set(pos.x, simulator_configuration.ConfigurableValue - pos.y, pos.z); - } else { - pos.Set(pos.x, simulator_configuration.ConfigurableValue, pos.z); - } - - break; - case Axis.Z_: - if (this.RelativeToExistingValue) { - pos.Set(pos.x, pos.y, simulator_configuration.ConfigurableValue - pos.z); - } else { - pos.Set(pos.x, pos.y, simulator_configuration.ConfigurableValue); - } - - break; - case Axis.Dir_x_: - if (this.RelativeToExistingValue) { - dir.Set(simulator_configuration.ConfigurableValue - dir.x, dir.y, dir.z); - } else { - dir.Set(simulator_configuration.ConfigurableValue, dir.y, dir.z); - } - - break; - case Axis.Dir_y_: - if (this.RelativeToExistingValue) { - dir.Set(dir.x, simulator_configuration.ConfigurableValue - dir.y, dir.z); - } else { - dir.Set(dir.x, simulator_configuration.ConfigurableValue, dir.z); - } - - break; - case Axis.Dir_z_: - if (this.RelativeToExistingValue) { - dir.Set(dir.x, dir.y, simulator_configuration.ConfigurableValue - dir.z); - } else { - dir.Set(dir.x, dir.y, simulator_configuration.ConfigurableValue); - } - - break; - case Axis.Rot_x_: - if (this.RelativeToExistingValue) { - rot.Set(simulator_configuration.ConfigurableValue - rot.x, rot.y, rot.z); - } else { - rot.Set(simulator_configuration.ConfigurableValue, rot.y, rot.z); - } - - break; - case Axis.Rot_y_: - if (this.RelativeToExistingValue) { - rot.Set(rot.x, simulator_configuration.ConfigurableValue - rot.y, rot.z); - } else { - rot.Set(rot.x, simulator_configuration.ConfigurableValue, rot.z); - } - - break; - case Axis.Rot_z_: - if (this.RelativeToExistingValue) { - rot.Set(rot.x, rot.y, simulator_configuration.ConfigurableValue - rot.z); - } else { - rot.Set(rot.x, rot.y, simulator_configuration.ConfigurableValue); - } - - break; - default: - throw new ArgumentOutOfRangeException(); - } - - var inv_pos = pos; - var inv_dir = dir; - var inv_rot = rot; - if (this._use_environments_space) { - inv_pos = this.ParentEnvironment.InverseTransformPosition(inv_pos); - inv_dir = this.ParentEnvironment.InverseTransformDirection(inv_dir); - inv_rot = this.ParentEnvironment.InverseTransformDirection(inv_rot); - } - - this.transform.position = inv_pos; - this.transform.rotation = Quaternion.identity; - this.transform.rotation = Quaternion.LookRotation(inv_dir, inv_rot); - } - - - #region Fields - - [SerializeField] Axis _axis_of_configuration; - [SerializeField] BoundingBox _bounding_box; - [SerializeField] bool _use_bounding_box_for_range; - [SerializeField] float _observation_value; - [SerializeField] bool _use_environments_space; - - #endregion - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Transforms.meta b/Runtime/Prototyping/Configurables/Transforms.meta new file mode 100644 index 000000000..155f9ea14 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f6c500f37a8f48a0a3fb508c9cd8951e +timeCreated: 1567585634 \ No newline at end of file diff --git a/Runtime/Prototyping/Configurables/Transforms/EulerRotationConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/EulerRotationConfigurable.cs new file mode 100644 index 000000000..0bc903bee --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/EulerRotationConfigurable.cs @@ -0,0 +1,209 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "EulerRotation" + + ConfigurableComponentMenuPath._Postfix)] + public class EulerRotationConfigurable : SpatialConfigurable, + IHasTriple { + [Header("Observation", order = 103)] + [SerializeField] + Quaternion _euler_rotation = Quaternion.identity; + + + + /// + /// + string _x; + + /// + /// + string _y; + + /// + /// + string _z; + + /// + /// + string _w; + + [SerializeField] + SampleSpace3 _euler_space = new SampleSpace3 { + _space = new Space3 { + Min = Vector3.zero, + Max = new Vector3(360f, + 360f, + 360f) + } + }; + + /// + /// + /// + public Space3 TripleSpace { get { return (Space3)this._euler_space.Space; } } + + /// + /// + /// + public override void PreSetup() { + this._x = this.Identifier + "X_"; + this._y = this.Identifier + "Y_"; + this._z = this.Identifier + "Z_"; + this._w = this.Identifier + "W_"; + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, (Configurable)this); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._z); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._w); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this); + this.ParentEnvironment.UnRegister(this, this._x); + this.ParentEnvironment.UnRegister(this, this._y); + this.ParentEnvironment.UnRegister(this, this._z); + this.ParentEnvironment.UnRegister(this, this._w); + } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { get { return this._euler_space; } } + + /// + /// + /// + public override void UpdateCurrentConfiguration() { + switch (this.coordinate_space) { + case CoordinateSpace.Environment_ when this.ParentEnvironment != null: this._euler_rotation = this.ParentEnvironment.TransformRotation(this.transform.rotation); + break; + case CoordinateSpace.Global_: + this._euler_rotation = this.transform.rotation; + break; + case CoordinateSpace.Local_: + this._euler_rotation = this.transform.localRotation; + break; + } + } + + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { + Quaternion rot; + if(this.coordinate_space==CoordinateSpace.Local_) { + rot = this.transform.localRotation; + } else { + rot = this.transform.rotation; + } + + if (this.coordinate_space == CoordinateSpace.Environment_) { + rot = this.ParentEnvironment.TransformRotation(this.transform.rotation); + } + + var v = simulator_configuration.ConfigurableValue; + if (this.TripleSpace.DecimalGranularity >= 0) { + v = (int)Math.Round(v, this.TripleSpace.DecimalGranularity); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Applying {v} to {simulator_configuration.ConfigurableName} configurable"); + } + #endif + var rote = rot.eulerAngles; + + if (this.RelativeToExistingValue) { + if (simulator_configuration.ConfigurableName == this._x) { + if (this.TripleSpace.Min[0].CompareTo(this.TripleSpace.Max[0]) != 0) { + #if NEODROID_DEBUG + if (v < this.TripleSpace.Min[0] || v > this.TripleSpace.Max[0]) { + Debug.Log($"Configurable does not accept input {v}, outside allowed range {this.TripleSpace.Min[0]} to {this.TripleSpace.Max[0]}"); + return; // Do nothing + } + #endif + } + + rot.eulerAngles = new Vector3(v + rote.x, rote.y, rote.z); + } else if (simulator_configuration.ConfigurableName == this._y) { + rot.eulerAngles = new Vector3(rote.x, v + rote.y, rote.z); + } else if (simulator_configuration.ConfigurableName == this._z) { + rot.eulerAngles = new Vector3(rote.x, rote.y, v + rote.z); + } + } else { + if (simulator_configuration.ConfigurableName == this._x) { + rot.eulerAngles = new Vector3(v, rote.y, rote.z); + } else if (simulator_configuration.ConfigurableName == this._y) { + rot.eulerAngles = new Vector3(rote.x, v, rote.z); + } else if (simulator_configuration.ConfigurableName == this._z) { + rot.eulerAngles = new Vector3(rote.x, rote.y, v); + } + } + + if (this.coordinate_space == CoordinateSpace.Environment_) { + rot = this.ParentEnvironment.InverseTransformRotation(rot); + } + + if(this.coordinate_space==CoordinateSpace.Local_) + this.transform.localRotation = rot; + else { + this.transform.rotation = rot; + } + + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var sample = this._euler_space.Sample(); + + return new[] { + new Configuration(this._x, sample.x), + new Configuration(this._y, sample.y), + new Configuration(this._z, sample.z) + }; + } + + Vector3 IHasTriple.ObservationValue { get { return this._euler_rotation.eulerAngles; } } + } +} diff --git a/Runtime/Prototyping/Configurables/Transforms/EulerRotationConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/EulerRotationConfigurable.cs.meta new file mode 100644 index 000000000..f69187055 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/EulerRotationConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 489900964b0743c68d066a11c76b9faf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Transforms/EulerTransformConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/EulerTransformConfigurable.cs new file mode 100644 index 000000000..e93f35934 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/EulerTransformConfigurable.cs @@ -0,0 +1,289 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "EulerTransform" + + ConfigurableComponentMenuPath._Postfix)] + public class EulerTransformConfigurable : SpatialConfigurable, + IHasEulerTransform { + string _dir_x; + string _dir_y; + string _dir_z; + + string _x; + string _y; + string _z; + + string _rot_x; + string _rot_y; + string _rot_z; + + [Header("Observation", order = 103)] + [SerializeField] + Vector3 _position; + + [SerializeField] Vector3 _direction; + [SerializeField] Vector3 _rotation; + + /// + /// + /// + public override string PrototypingTypeName { get { return "EulerTransformConfigurable"; } } + + /// + /// + public Vector3 Position { get { return this._position; } set { this._position = value; } } + + /// + /// + /// + public Vector3 Direction { get { return this._direction; } set { this._direction = value; } } + + /// + /// + /// + public Vector3 Rotation { get { return this._rotation; } set { this._rotation = value; } } + + [SerializeField]SampleSpace3 pos_space = new SampleSpace3(); + [SerializeField]SampleSpace3 dir_space = new SampleSpace3(); + [SerializeField]SampleSpace3 rot_space = new SampleSpace3(); + + /// + /// + /// + public Space3 PositionSpace { get { return (Space3)this.pos_space.Space; } } + + /// + /// + /// + public Space3 DirectionSpace { get { return (Space3)this.dir_space.Space; } } + + /// + /// + /// + public Space3 RotationSpace { get { return (Space3)this.rot_space.Space; } } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { + get { + return this.pos_space; + //return DirectionSpace; + //return RotationSpace; + } + } + + /// + /// + public override void UpdateCurrentConfiguration() { //TODO: IMPLEMENT LOCAL SPACE + if (this.coordinate_space == CoordinateSpace.Environment_) { + this.Position = this.ParentEnvironment.TransformPoint(this.transform.position); + this.Direction = this.ParentEnvironment.TransformDirection(this.transform.forward); + this.Rotation = this.ParentEnvironment.TransformDirection(this.transform.up); + } else { + var transform1 = this.transform; + this.Position = transform1.position; + this.Direction = transform1.forward; + this.Rotation = transform1.up; + } + } + + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._z); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._dir_x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._dir_y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._dir_z); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._rot_x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._rot_y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + this, + this._rot_z); + } + + /// + /// + /// + public override void PreSetup() { + //TODO: use envs bound extent if available for space + + this._x = this.Identifier + "X_"; + this._y = this.Identifier + "Y_"; + this._z = this.Identifier + "Z_"; + this._dir_x = this.Identifier + "DirX_"; + this._dir_y = this.Identifier + "DirY_"; + this._dir_z = this.Identifier + "DirZ_"; + this._rot_x = this.Identifier + "RotX_"; + this._rot_y = this.Identifier + "RotY_"; + this._rot_z = this.Identifier + "RotZ_"; + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._x); + this.ParentEnvironment.UnRegister(this, this._y); + this.ParentEnvironment.UnRegister(this, this._z); + this.ParentEnvironment.UnRegister(this, this._dir_x); + this.ParentEnvironment.UnRegister(this, this._dir_y); + this.ParentEnvironment.UnRegister(this, this._dir_z); + this.ParentEnvironment.UnRegister(this, this._rot_x); + this.ParentEnvironment.UnRegister(this, this._rot_y); + this.ParentEnvironment.UnRegister(this, this._rot_z); + } + + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + //TODO: Denormalize configuration if space is marked as normalised + var transform1 = this.transform; + var pos = transform1.position; + var dir = transform1.forward; + var rot = transform1.up; + if (this.coordinate_space == CoordinateSpace.Environment_) { + pos = this.ParentEnvironment.TransformPoint(pos); + dir = this.ParentEnvironment.TransformDirection(dir); + rot = this.ParentEnvironment.TransformDirection(rot); + } + + var v = configuration.ConfigurableValue; + if (this.PositionSpace.DecimalGranularity >= 0) { + v = (int)Math.Round(v, this.PositionSpace.DecimalGranularity); + } + + if (this.PositionSpace.Min[0].CompareTo(this.PositionSpace.Max[0]) != 0) { + //TODO NOT IMPLEMENTED CORRECTLY VelocitySpace should not be index but should check all pairwise values, PositionSpace.MinValues == PositionSpace.MaxValues, and use other space aswell! + if (v < this.PositionSpace.Min[0] || v > this.PositionSpace.Max[0]) { + Debug.Log(string.Format("Configurable does not accept input{2}, outside allowed range {0} to {1}", + this.PositionSpace.Min[0], + this.PositionSpace.Max[0], + v)); + return; // Do nothing + } + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + v + " To " + this.Identifier); + } + #endif + if (this.RelativeToExistingValue) { + if (configuration.ConfigurableName == this._x) { + pos.Set(v - pos.x, pos.y, pos.z); + } else if (configuration.ConfigurableName == this._y) { + pos.Set(pos.x, v - pos.y, pos.z); + } else if (configuration.ConfigurableName == this._z) { + pos.Set(pos.x, pos.y, v - pos.z); + } else if (configuration.ConfigurableName == this._dir_x) { + dir.Set(v - dir.x, dir.y, dir.z); + } else if (configuration.ConfigurableName == this._dir_y) { + dir.Set(dir.x, v - dir.y, dir.z); + } else if (configuration.ConfigurableName == this._dir_z) { + dir.Set(dir.x, dir.y, v - dir.z); + } else if (configuration.ConfigurableName == this._rot_x) { + rot.Set(v - rot.x, rot.y, rot.z); + } else if (configuration.ConfigurableName == this._rot_y) { + rot.Set(rot.x, v - rot.y, rot.z); + } else if (configuration.ConfigurableName == this._rot_z) { + rot.Set(rot.x, rot.y, v - rot.z); + } + } else { + if (configuration.ConfigurableName == this._x) { + pos.Set(v, pos.y, pos.z); + } else if (configuration.ConfigurableName == this._y) { + pos.Set(pos.x, v, pos.z); + } else if (configuration.ConfigurableName == this._z) { + pos.Set(pos.x, pos.y, v); + } else if (configuration.ConfigurableName == this._dir_x) { + dir.Set(v, dir.y, dir.z); + } else if (configuration.ConfigurableName == this._dir_y) { + dir.Set(dir.x, v, dir.z); + } else if (configuration.ConfigurableName == this._dir_z) { + dir.Set(dir.x, dir.y, v); + } else if (configuration.ConfigurableName == this._rot_x) { + rot.Set(v, rot.y, rot.z); + } else if (configuration.ConfigurableName == this._rot_y) { + rot.Set(rot.x, v, rot.z); + } else if (configuration.ConfigurableName == this._rot_z) { + rot.Set(rot.x, rot.y, v); + } + } + + var inv_pos = pos; + var inv_dir = dir; + var inv_rot = rot; + if (this.coordinate_space == CoordinateSpace.Environment_) { + inv_pos = this.ParentEnvironment.InverseTransformPoint(pos); + inv_dir = this.ParentEnvironment.InverseTransformDirection(dir); + inv_rot = this.ParentEnvironment.InverseTransformDirection(rot); + } + + this.transform.position = inv_pos; + this.transform.rotation = Quaternion.identity; + this.transform.rotation = Quaternion.LookRotation(inv_dir, inv_rot); + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var sample = this.pos_space.Sample(); + var sample1 = this.rot_space.Sample(); + return new[] { + new Configuration(this._x, sample.x), + new Configuration(this._y, sample.y), + new Configuration(this._z, sample.z), + new Configuration(this._rot_x, sample1.x), + new Configuration(this._rot_y, sample1.y), + new Configuration(this._rot_z, sample1.z) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/EulerTransformConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/EulerTransformConfigurable.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/EulerTransformConfigurable.cs.meta rename to Runtime/Prototyping/Configurables/Transforms/EulerTransformConfigurable.cs.meta diff --git a/Runtime/Prototyping/Configurables/Transforms/PositionConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/PositionConfigurable.cs new file mode 100644 index 000000000..e208729f8 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/PositionConfigurable.cs @@ -0,0 +1,209 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Position" + + ConfigurableComponentMenuPath._Postfix)] + public class PositionConfigurable : SpatialConfigurable, + IHasTriple { + #region Fields + + [SerializeField] Vector3 _position = Vector3.zero; + [SerializeField] bool fetch_env_bounds = true; + [SerializeField] SampleSpace3 _pos_space = new SampleSpace3 {Space = Space3.ZeroOne}; + + #endregion + + /// + /// + string _x; + + /// + /// + string _y; + + /// + /// + string _z; + + /// + /// + /// + public Vector3 ObservationValue { get { return this._position; } } + + /// + /// + /// + public Space3 TripleSpace { get { return this._pos_space._space; } } + + /// + /// + /// + public override void RemotePostSetup() { + if (this.fetch_env_bounds) { + if (this.ParentEnvironment?.PlayableArea) { + var dec_gran = 4; + if (this._pos_space.Space != null) { + dec_gran = this._pos_space.Space.DecimalGranularity; + } + + this._pos_space.Space = Space3.FromCenterExtents(this.ParentEnvironment.PlayableArea.Bounds.extents, + decimal_granularity : dec_gran); + } + } + } + + /// + /// + /// + public override void PreSetup() { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("PreSetup"); + } + #endif + + this._x = this.Identifier + "X_"; + this._y = this.Identifier + "Y_"; + this._z = this.Identifier + "Z_"; + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this, this._x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this, this._y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this, this._z); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._x); + this.ParentEnvironment.UnRegister(this, this._y); + this.ParentEnvironment.UnRegister(this, this._z); + } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { get { return this._pos_space; } } + + /// + /// + /// + public override void UpdateCurrentConfiguration() { + switch(this.coordinate_space){ + case CoordinateSpace.Environment_: this._position = this.ParentEnvironment.TransformPoint(this.transform + .position); + break;; + case CoordinateSpace.Global_: this._position = this.transform.position; + break;; + case CoordinateSpace.Local_: this._position = this.transform.localPosition; + break;; + } + } + + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { //TODO: IMPLEMENT LOCAL SPACE + Vector3 pos; + if (this.coordinate_space == CoordinateSpace.Local_) { + pos = this.transform.localPosition; + } else { + pos = this.transform.position; + } + + if (this.coordinate_space==CoordinateSpace.Environment_) { + pos = this.ParentEnvironment.TransformPoint(this.transform.position); + } + + float v; + + if (simulator_configuration.ConfigurableName == this._x) { + v = this._pos_space._space.Xspace.Project(simulator_configuration.ConfigurableValue); + } else if (simulator_configuration.ConfigurableName == this._y) { + v = this._pos_space._space.Yspace.Project(simulator_configuration.ConfigurableValue); + } else { + v = this._pos_space._space.Zspace.Project(simulator_configuration.ConfigurableValue); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Applying {v} to {simulator_configuration.ConfigurableName} configurable"); + } + #endif + + if (this.RelativeToExistingValue) { + if (simulator_configuration.ConfigurableName == this._x) { + pos.Set(v + pos.x, pos.y, pos.z); + } else if (simulator_configuration.ConfigurableName == this._y) { + pos.Set(pos.x, v + pos.y, pos.z); + } else if (simulator_configuration.ConfigurableName == this._z) { + pos.Set(pos.x, pos.y, v + pos.z); + } + } else { + if (simulator_configuration.ConfigurableName == this._x) { + pos.Set(v, pos.y, pos.z); + } else if (simulator_configuration.ConfigurableName == this._y) { + pos.Set(pos.x, v, pos.z); + } else if (simulator_configuration.ConfigurableName == this._z) { + pos.Set(pos.x, pos.y, v); + } + } + + var inv_pos = pos; + if (this.coordinate_space==CoordinateSpace.Environment_) { + inv_pos = this.ParentEnvironment.InverseTransformPoint(inv_pos); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Setting pos of {this} to {inv_pos}, from {pos} and r {simulator_configuration.ConfigurableValue}"); + } + #endif + + if (this.coordinate_space == CoordinateSpace.Local_) { + this.transform.localPosition=inv_pos; + } else { + this.transform.position = inv_pos; + } + + + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var sample = this._pos_space.Sample(); + return new[] { + new Configuration(this._x, sample.x), + new Configuration(this._y, sample.y), + new Configuration(this._z, sample.z) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/PositionConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/PositionConfigurable.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/PositionConfigurable.cs.meta rename to Runtime/Prototyping/Configurables/Transforms/PositionConfigurable.cs.meta diff --git a/Runtime/Prototyping/Configurables/Transforms/QuaternionTransformConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/QuaternionTransformConfigurable.cs new file mode 100644 index 000000000..27a17e68b --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/QuaternionTransformConfigurable.cs @@ -0,0 +1,100 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "QuaternionTransform" + + ConfigurableComponentMenuPath._Postfix)] + public class QuaternionTransformConfigurable : Configurable, + IHasQuaternionTransform { + [Header("Specific", order = 102)] + [SerializeField] + Vector3 _position; + + [SerializeField] Quaternion _rotation; + + string _pos_x = "pos_x"; + string _pos_y = "pos_y"; + string _pos_z = "pos_z"; + + string _rot_w = "row_w"; + string _rot_x = "rot_x"; + string _rot_y = "rot_y"; + string _rot_z = "rot_z"; + + /// + /// + public Quaternion Rotation { get { return this._rotation; } } + + public Space1 PositionSpace { get; } //TODO: Implement + public Space1 RotationSpace { get; } //TODO: Implement + + /// + /// + public Vector3 Position { get { return this._position; } } + + /// + /// + /// + public override void PreSetup() { + //TODO: use envs bound extent if available for space + + this._pos_x = this.Identifier + "pos_x"; + this._pos_y = this.Identifier + "pos_y"; + this._pos_z = this.Identifier + "pos_z"; + + this._rot_x = this.Identifier + "rot_x"; + this._rot_y = this.Identifier + "rot_y"; + this._rot_z = this.Identifier + "rot_z"; + this._rot_w = this.Identifier + "row_w"; + } + + /// + /// + /// + protected override void RegisterComponent() { throw new NotImplementedException();} + + + /// + /// + /// + protected override void UnRegisterComponent() { throw new NotImplementedException();} + + public override void PrototypingReset() { + base.PrototypingReset(); + var transform1 = this.transform; + transform1.position = this._position; + transform1.rotation = this._rotation; + } + + public override ISamplable ConfigurableValueSpace { get; } + + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration obj) { + //TODO: Denormalize configuration if space is marked as normalised + + if (obj.ConfigurableName == this._pos_x) { + this._position.x = obj.ConfigurableValue; + } else if (obj.ConfigurableName == this._pos_y) { + this._position.y = obj.ConfigurableValue; + } else if (obj.ConfigurableName == this._pos_z) { + this._position.z = obj.ConfigurableValue; + } else if (obj.ConfigurableName == this._rot_x) { + this._rotation.x = obj.ConfigurableValue; + } else if (obj.ConfigurableName == this._rot_y) { + this._rotation.y = obj.ConfigurableValue; + } else if (obj.ConfigurableName == this._rot_z) { + this._rotation.z = obj.ConfigurableValue; + } else if (obj.ConfigurableName == this._rot_w) { + this._rotation.w = obj.ConfigurableValue; + } + + this.PrototypingReset(); + } + } +} diff --git a/Runtime/Prototyping/Configurables/QuaternionTransformConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/QuaternionTransformConfigurable.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/QuaternionTransformConfigurable.cs.meta rename to Runtime/Prototyping/Configurables/Transforms/QuaternionTransformConfigurable.cs.meta diff --git a/Runtime/Prototyping/Configurables/Transforms/RotationConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/RotationConfigurable.cs new file mode 100644 index 000000000..72f0e8eb6 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/RotationConfigurable.cs @@ -0,0 +1,268 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Rotation" + + ConfigurableComponentMenuPath._Postfix)] + public class RotationConfigurable : SpatialConfigurable, + IHasQuadruple { + [SerializeField] SampleSpace4 _quad_space = new SampleSpace4 {_space = Space4.MinusOneOne}; + [SerializeField] bool _use_environments_space = false; + + [Header("Observation", order = 103)] + [SerializeField] + Quaternion observation_value = Quaternion.identity; + + /// + /// + string _x; + + /// + /// + string _y; + + /// + /// + string _z; + + /// + /// + string _w; + + /// + /// + /// + public Quaternion ObservationValue { get { return this.observation_value; } } + + public Space4 QuadSpace { get { return this._quad_space._space; } } + + /// + /// + /// + public override void PreSetup() { + this._x = this.Identifier + "X_"; + this._y = this.Identifier + "Y_"; + this._z = this.Identifier + "Z_"; + this._w = this.Identifier + "W_"; + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._z); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._w); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._x); + this.ParentEnvironment.UnRegister(this, this._y); + this.ParentEnvironment.UnRegister(this, this._z); + this.ParentEnvironment.UnRegister(this, this._w); + } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { get { return this._quad_space; } } + + /// + /// + /// + public override void UpdateCurrentConfiguration() { + if (this._use_environments_space && this.ParentEnvironment != null) { + this.observation_value = this.ParentEnvironment.TransformRotation(this.transform.rotation); + } else { + this.observation_value = this.transform.rotation; + } + } + + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { + //TODO: Denormalize configuration if space is marked as normalised + + var rot = this.transform.rotation; + if (this.ParentEnvironment && this._use_environments_space) { + rot = this.ParentEnvironment.TransformRotation(this.transform.rotation); + } + + var v = simulator_configuration.ConfigurableValue; + if (this.QuadSpace.DecimalGranularity >= 0) { + v = (int)Math.Round(v, this.QuadSpace.DecimalGranularity); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Applying {v} to {simulator_configuration.ConfigurableName} configurable"); + } + #endif + + if (this.RelativeToExistingValue) { + if (simulator_configuration.ConfigurableName == this._x) { + if (this.QuadSpace.Min.x.CompareTo(this.QuadSpace.Max.x) != 0) { + if (v < this.QuadSpace.Min.x || v > this.QuadSpace.Max.x) { + Debug.Log($"ConfigurableX does not accept input {v}, outside allowed range " + + $"{this.QuadSpace.Min.x} to {this.QuadSpace.Max.x}"); + return; // Do nothing + } + } + + rot.Set(rot.x - v, + rot.y, + rot.z, + rot.w); + } else if (simulator_configuration.ConfigurableName == this._y) { + if (this.QuadSpace.Min.y.CompareTo(this.QuadSpace.Max.y) != 0) { + if (v < this.QuadSpace.Min.y || v > this.QuadSpace.Max.y) { + Debug.Log($"ConfigurableY does not accept input {v}, outside allowed range " + + $"{this.QuadSpace.Min.y} to {this.QuadSpace.Max.y}"); + return; // Do nothing + } + } + + rot.Set(rot.x, + rot.y - v, + rot.z, + rot.w); + } else if (simulator_configuration.ConfigurableName == this._z) { + if (this.QuadSpace.Min.z.CompareTo(this.QuadSpace.Max.z) != 0) { + if (v < this.QuadSpace.Min.z || v > this.QuadSpace.Max.z) { + Debug.Log($"ConfigurableZ does not accept input {v}, outside allowed range " + + $"{this.QuadSpace.Min.z} to {this.QuadSpace.Max.z}"); + return; // Do nothing + } + } + + rot.Set(rot.x, + rot.y, + rot.z - v, + rot.w); + } else if (simulator_configuration.ConfigurableName == this._w) { + if (this.QuadSpace.Min.w.CompareTo(this.QuadSpace.Max.w) != 0) { + if (v < this.QuadSpace.Min.w || v > this.QuadSpace.Max.w) { + Debug.Log($"ConfigurableW does not accept input {v}, outside allowed range " + + $"{this.QuadSpace.Min.w} to {this.QuadSpace.Max.w}"); + return; // Do nothing + } + } + + rot.Set(rot.x, + rot.y, + rot.z, + rot.w - v); + } + } else { + if (simulator_configuration.ConfigurableName == this._x) { + if (this.QuadSpace.Min.x.CompareTo(this.QuadSpace.Max.x) != 0) { + if (v < this.QuadSpace.Min.x || v > this.QuadSpace.Max.x) { + Debug.Log($"ConfigurableX does not accept input {v}, outside allowed range " + + $"{this.QuadSpace.Min.x} to {this.QuadSpace.Max.x}"); + return; // Do nothing + } + } + + rot.Set(v, + rot.y, + rot.z, + rot.w); + //rot.x = v; + } else if (simulator_configuration.ConfigurableName == this._y) { + if (this.QuadSpace.Min.y.CompareTo(this.QuadSpace.Max.y) != 0) { + if (v < this.QuadSpace.Min.y || v > this.QuadSpace.Max.y) { + Debug.Log($"ConfigurableY does not accept input {v}, outside allowed range " + + $"{this.QuadSpace.Min.y} to {this.QuadSpace.Max.y}"); + return; // Do nothing + } + } + + rot.Set(rot.x, + v, + rot.z, + rot.w); + //rot.y = v; + } else if (simulator_configuration.ConfigurableName == this._z) { + if (this.QuadSpace.Min.z.CompareTo(this.QuadSpace.Max.z) != 0) { + if (v < this.QuadSpace.Min.z || v > this.QuadSpace.Max.z) { + Debug.Log($"ConfigurableZ does not accept input {v}, outside allowed range " + + $"{this.QuadSpace.Min.z} to {this.QuadSpace.Max.z}"); + return; // Do nothing + } + } + + rot.Set(rot.x, + rot.y, + v, + rot.w); + //rot.z = v; + } else if (simulator_configuration.ConfigurableName == this._w) { + if (this.QuadSpace.Min.w.CompareTo(this.QuadSpace.Max.w) != 0) { + if (v < this.QuadSpace.Min.w || v > this.QuadSpace.Max.w) { + Debug.Log($"ConfigurableW does not accept input {v}, outside allowed range " + + $"{this.QuadSpace.Min.w} to {this.QuadSpace.Max.w}"); + return; // Do nothing + } + } + + rot.Set(rot.x, + rot.y, + rot.z, + v); + //rot.w = v; + } + } + + if (this.ParentEnvironment && this._use_environments_space) { + rot = this.ParentEnvironment.InverseTransformRotation(rot); + } + + this.transform.rotation = rot; + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var sample = this._quad_space.Sample(); + return new[] { + new Configuration(this._x, sample.x), + new Configuration(this._y, sample.y), + new Configuration(this._z, sample.z), + new Configuration(this._w, sample.w) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Transforms/RotationConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/RotationConfigurable.cs.meta new file mode 100644 index 000000000..b3005ef5a --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/RotationConfigurable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: eb2d2dbc640a2184c989c7f4d0e2528e +timeCreated: 1513326115 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Transforms/ScreenSpacePositionConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/ScreenSpacePositionConfigurable.cs new file mode 100644 index 000000000..1e331c60d --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/ScreenSpacePositionConfigurable.cs @@ -0,0 +1,186 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "ScreenSpacePosition" + + ConfigurableComponentMenuPath._Postfix)] + [RequireComponent(typeof(Renderer))] + public class ScreenSpacePositionConfigurable : Configurable { + string _x; + string _y; + string _z; + string _rx; + string _ry; + string _rw; + string _rz; + + /// + /// + [SerializeField] + Camera _camera; + + [SerializeField] SampleSpace3 _configurable_value_space; + + /// + /// + /// + public override void PreSetup() { + this._x = this.Identifier + "X"; + this._y = this.Identifier + "Y"; + this._z = this.Identifier + "Z"; + this._rx = this.Identifier + "RX"; + this._ry = this.Identifier + "RY"; + this._rz = this.Identifier + "RZ"; + this._rw = this.Identifier + "RW"; + + if (!this._camera) { + this._camera = FindObjectOfType(); + } + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._z); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._rx); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._ry); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._rz); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._rw); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._x); + this.ParentEnvironment.UnRegister(this, this._y); + this.ParentEnvironment.UnRegister(this, this._z); + this.ParentEnvironment.UnRegister(this, this._rx); + this.ParentEnvironment.UnRegister(this, this._ry); + this.ParentEnvironment.UnRegister(this, this._rz); + this.ParentEnvironment.UnRegister(this, this._rw); + } + + public override ISamplable ConfigurableValueSpace { get { return this._configurable_value_space; } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + + var cv = this._configurable_value_space.Space.Reproject(configuration.ConfigurableValue); + + + + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + + var pos = this.transform.position; + var rot = this.transform.rotation; + + if (configuration.ConfigurableName == this._x) { + pos.x = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._y) { + pos.y = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._z) { + pos.z = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._rx) { + rot.x = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._ry) { + rot.y = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._rz) { + rot.z = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._rw) { + rot.w = configuration.ConfigurableValue; + } + + this.transform.position = pos; + this.transform.rotation = rot; + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var x = this.ConfigurableValueSpace.Sample(); + var y = this.ConfigurableValueSpace.Sample(); + + var a = new Vector2(x, y); + var bounded = Vector2.Min(Vector2.Max(a, new Vector2(0.2f, 0.2f)), new Vector2(0.8f, 0.8f)); + + //var z = Space1.ZeroOne.Sample() * this._camera.farClipPlane; + var z = this._camera.nearClipPlane + 2; + var bounded3 = new Vector3(bounded.x, bounded.y, z); + + var c = this._camera.ViewportToWorldPoint(bounded3); + + var b = new Quaternion(this.ConfigurableValueSpace.Sample(), + this.ConfigurableValueSpace.Sample(), + this.ConfigurableValueSpace.Sample(), + this.ConfigurableValueSpace.Sample()); + var sample1 = this.ConfigurableValueSpace.Sample(); + var sample = this.ConfigurableValueSpace.Sample(); + + if (sample1 > 0.5f) { + if (sample < .33f) { + return new[] {new Configuration(this._x, c.x)}; + } + + if (sample > .66f) { + return new[] {new Configuration(this._y, c.y)}; + } + + return new[] {new Configuration(this._z, c.z)}; + } + + if (sample < .33f) { + return new[] {new Configuration(this._rx, b.x)}; + } + + if (sample > .66f) { + return new[] {new Configuration(this._ry, b.y)}; + } + + return new[] {new Configuration(this._rz, b.z)}; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Transforms/ScreenSpacePositionConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/ScreenSpacePositionConfigurable.cs.meta new file mode 100644 index 000000000..e6447a469 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/ScreenSpacePositionConfigurable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 81a2022a6bd79b247a25c514f7070211 +timeCreated: 1513326185 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Transforms/SizeConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/SizeConfigurable.cs new file mode 100644 index 000000000..20a3e754b --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/SizeConfigurable.cs @@ -0,0 +1,113 @@ +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// Configurable for scaling + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Size" + + ConfigurableComponentMenuPath._Postfix)] + public class SizeConfigurable : Configurable { + /// + /// Alpha + /// + string _x; + + /// + /// Blue + /// + string _y; + + /// + /// Green + /// + string _z; + + [SerializeField] SampleSpace3 _space = new SampleSpace3 {Space = Space3.ZeroOne}; + + /// + /// + /// + public override void PreSetup() { + this._x = this.Identifier + "X"; + this._y = this.Identifier + "Y"; + this._z = this.Identifier + "Z"; + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._z); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this, this._x); + this.ParentEnvironment.UnRegister(this, this._y); + this.ParentEnvironment.UnRegister(this, this._z); + } + + public override ISamplable ConfigurableValueSpace { get { return this._space; } } + + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration configuration) { + //TODO: Denormalize configuration if space is marked as normalised + + #if NEODROID_DEBUG + if (this.Debugging) { + DebugPrinting.ApplyPrint(this.Debugging, configuration, this.Identifier); + } + #endif + var local_scale = this.transform.localScale; + if (configuration.ConfigurableName == this._x) { + local_scale.x = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._y) { + local_scale.y = configuration.ConfigurableValue; + } else if (configuration.ConfigurableName == this._z) { + local_scale.z = configuration.ConfigurableValue; + } + + this.transform.localScale = local_scale; + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var v = this._space.Sample(); + + return new[] { + new Configuration(this._x, v.x), + new Configuration(this._y, v.y), + new Configuration(this._z, v.z) + }; + } + } +} diff --git a/Runtime/Prototyping/Configurables/Transforms/SizeConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/SizeConfigurable.cs.meta new file mode 100644 index 000000000..1e8882fdc --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/SizeConfigurable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a22c41a371cb5014b955705c804c74aa +timeCreated: 1513326185 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Transforms/SpatialConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/SpatialConfigurable.cs new file mode 100644 index 000000000..edd4517f3 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/SpatialConfigurable.cs @@ -0,0 +1,28 @@ +using droid.Runtime.Enums; +using droid.Runtime.GameObjects; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "Spatial" + + ConfigurableComponentMenuPath._Postfix)] + public abstract class SpatialConfigurable : Configurable { + /// + /// + public bool RelativeToExistingValue { get { return this._relative_to_existing_value; } } + + #region Fields + + /// + /// + [Header("Configurable", order = 30)] + [SerializeField] + bool _relative_to_existing_value = false; + + [SerializeField] protected CoordinateSpace coordinate_space = CoordinateSpace.Environment_; + #endregion + } +} diff --git a/Runtime/Prototyping/Configurables/Transforms/SpatialConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/SpatialConfigurable.cs.meta new file mode 100644 index 000000000..0acfc43ee --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/SpatialConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b25592fe442410aa9694b0d30c5c6f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Transforms/SphericalCoordinateConfigurable.cs b/Runtime/Prototyping/Configurables/Transforms/SphericalCoordinateConfigurable.cs new file mode 100644 index 000000000..59b9a42b3 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/SphericalCoordinateConfigurable.cs @@ -0,0 +1,156 @@ +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "SphericalCoordinate" + + ConfigurableComponentMenuPath._Postfix)] + public class SphericalCoordinateConfigurable : SpatialConfigurable, + IHasTriple { + [Header("Observation", order = 103)] + + + /// + /// + string _x; + + /// + /// + string _y; + + /// + /// + string _z; + + [SerializeField] + SampleSpace3 _spherical_space = new SampleSpace3 { + _space = new Space3 { + Min = new Vector3(0, + Mathf.PI + * 0.01f, + 4f), + Max = new Vector3(Mathf.PI + * 2f, + Mathf.PI + * 0.5f, + 10f) + } + }; + + [SerializeField] SphericalSpace sc; + + /// + /// + /// + public Space3 TripleSpace { get { return (Space3)this._spherical_space.Space; } } + + /// + /// + /// + public override void PreSetup() { + this._x = this.Identifier + "Polar_"; + this._y = this.Identifier + "Elevation_"; + this._z = this.Identifier + "Radius_"; + + var reference_point = this.transform.position; + if (this.coordinate_space == CoordinateSpace.Environment_) { + reference_point = this.ParentEnvironment.TransformPoint(reference_point); + } + + this.sc = SphericalSpace.FromCartesian(reference_point, + this._spherical_space.Space.Min.z, + this._spherical_space.Space.Max.z, + this._spherical_space.Space.Min.x, + this._spherical_space.Space.Max.x, + this._spherical_space.Space.Min.y, + this._spherical_space.Space.Max.y); + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, (Configurable)this); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._x); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._y); + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, + (Configurable)this, + this._z); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + if (this.ParentEnvironment == null) { + return; + } + + this.ParentEnvironment.UnRegister(this); + this.ParentEnvironment.UnRegister(this, this._x); + this.ParentEnvironment.UnRegister(this, this._y); + this.ParentEnvironment.UnRegister(this, this._z); + } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { get { return this._spherical_space; } } + + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { //TODO: IMPLEMENT LOCAL SPACE + if (simulator_configuration.ConfigurableName == this._x) { + this.sc.Polar = simulator_configuration.ConfigurableValue; + } else if (simulator_configuration.ConfigurableName == this._y) { + this.sc.Elevation = simulator_configuration.ConfigurableValue; + } else if (simulator_configuration.ConfigurableName == this._z) { + this.sc.Radius = simulator_configuration.ConfigurableValue; + } + + var reference_point = this.sc.ToCartesian(); + + if (this.coordinate_space == CoordinateSpace.Environment_) { + reference_point = this.ParentEnvironment.InverseTransformPoint(reference_point); + } + + this.transform.position = reference_point; + + this.transform.LookAt(this.ParentEnvironment.CoordinateReferencePoint); + } + + /// + /// + /// + /// + public override Configuration[] SampleConfigurations() { + var sample = this._spherical_space.Sample(); + + return new[] { + new Configuration(this._x, sample.x), + new Configuration(this._y, sample.y), + new Configuration(this._z, sample.z) + }; + } + + Vector3 IHasTriple.ObservationValue { get { return this.sc.ToVector3; } } + } +} diff --git a/Runtime/Prototyping/Configurables/Transforms/SphericalCoordinateConfigurable.cs.meta b/Runtime/Prototyping/Configurables/Transforms/SphericalCoordinateConfigurable.cs.meta new file mode 100644 index 000000000..8fe3a2eb8 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/SphericalCoordinateConfigurable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de5dce082825ab3dbaf5920d17bf6f8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: eaaf4ae26ac344786bcd6df823cbe51b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Configurables/Transforms/TransformConfigurable1Dof.cs b/Runtime/Prototyping/Configurables/Transforms/TransformConfigurable1Dof.cs new file mode 100644 index 000000000..67109e3b4 --- /dev/null +++ b/Runtime/Prototyping/Configurables/Transforms/TransformConfigurable1Dof.cs @@ -0,0 +1,280 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using droid.Runtime.Structs.Space.Sample; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Configurables.Transforms { + /// + /// + /// + [AddComponentMenu(ConfigurableComponentMenuPath._ComponentMenuPath + + "TransformConfigurable1Dof" + + ConfigurableComponentMenuPath._Postfix)] + public class TransformConfigurable1Dof : SpatialConfigurable, + IHasSingle { + #region Fields + + [SerializeField] Axis _axis_of_configuration = Axis.X_; + [SerializeField] float _observation_value = 0; + [SerializeField] SampleSpace1 _single_value_space = new SampleSpace1 {_space = Space1.ZeroOne}; + [SerializeField] bool normalised_overwrite_space_if_env_bounds = true; + + #endregion + + /// + /// + /// + public override string PrototypingTypeName { + get { return "Transform" + this._axis_of_configuration + "Configurable"; } + } + + /// + /// + /// + public float ObservationValue { + get { return this._observation_value; } + private set { this._observation_value = value; } + } + + /// + /// + /// + public Space1 SingleSpace { + get { return (Space1)this._single_value_space.Space; } + set { this._single_value_space.Space = value; } + } + + /// + /// + /// + /// + public override void UpdateCurrentConfiguration() { + var transform1 = this.transform; + Vector3 pos; + if (this.coordinate_space == CoordinateSpace.Local_) { + pos = transform1.localPosition; + }else{ + pos = transform1.position; + } + var dir = transform1.forward; + var rot = transform1.up; + + if (this.coordinate_space == CoordinateSpace.Environment_) { + if (this.ParentEnvironment != null) { + pos = this.ParentEnvironment.TransformPoint(pos); + dir = this.ParentEnvironment.TransformDirection(dir); + rot = this.ParentEnvironment.TransformDirection(rot); + } else { + Debug.LogWarning("ParentEnvironment not found!"); + } + } + + switch (this._axis_of_configuration) { + case Axis.X_: + this._observation_value = pos.x; + break; + case Axis.Y_: + this._observation_value = pos.y; + break; + case Axis.Z_: + this._observation_value = pos.z; + break; + case Axis.Dir_x_: + this._observation_value = dir.x; + break; + case Axis.Dir_y_: + this._observation_value = dir.y; + break; + case Axis.Dir_z_: + this._observation_value = dir.z; + break; + case Axis.Rot_x_: + this._observation_value = rot.x; + break; + case Axis.Rot_y_: + this._observation_value = rot.y; + break; + case Axis.Rot_z_: + this._observation_value = rot.z; + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + /// + /// + public override void RemotePostSetup() { + if (this.normalised_overwrite_space_if_env_bounds) { + var dec_gran = 4; + if (this._single_value_space.Space != null && this.ParentEnvironment.PlayableArea) { + dec_gran = this._single_value_space.Space.DecimalGranularity; + } + + if (this.ParentEnvironment) { + switch (this._axis_of_configuration) { + case Axis.X_: + this.SingleSpace = + Space1.FromCenterExtent(this.ParentEnvironment.PlayableArea.Bounds.extents.x, + decimal_granularity : dec_gran); + break; + case Axis.Y_: + this.SingleSpace = + Space1.FromCenterExtent(this.ParentEnvironment.PlayableArea.Bounds.extents.y, + decimal_granularity : dec_gran); + break; + case Axis.Z_: + this.SingleSpace = + Space1.FromCenterExtent(this.ParentEnvironment.PlayableArea.Bounds.extents.z, + decimal_granularity : dec_gran); + break; + } + } + } + } + + /// + /// + /// + public override ISamplable ConfigurableValueSpace { get { return this._single_value_space; } } + + /// + /// + /// + /// + /// + public override void ApplyConfiguration(IConfigurableConfiguration simulator_configuration) { + float cv= this.SingleSpace.Reproject(simulator_configuration.ConfigurableValue); + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying " + simulator_configuration + " To " + this.Identifier); + } + #endif + + var transform1 = this.transform; + Vector3 pos; + if (this.coordinate_space == CoordinateSpace.Local_) { + pos = transform1.localPosition; + }else{ + pos = transform1.position; + } + var dir = transform1.forward; + var rot = transform1.up; + if (this.coordinate_space == CoordinateSpace.Environment_) { + if (this.ParentEnvironment != null) { + this.ParentEnvironment.TransformPoint(ref pos); + this.ParentEnvironment.TransformDirection(ref dir); + this.ParentEnvironment.TransformDirection(ref rot); + } else { + Debug.LogWarning("ParentEnvironment not found!"); + } + } + + switch (this._axis_of_configuration) { + case Axis.X_: + if (this.RelativeToExistingValue) { + pos.Set(cv + pos.x, pos.y, pos.z); + } else { + pos.Set(cv, pos.y, pos.z); + } + + break; + case Axis.Y_: + if (this.RelativeToExistingValue) { + pos.Set(pos.x, cv + pos.y, pos.z); + } else { + pos.Set(pos.x, cv, pos.z); + } + + break; + case Axis.Z_: + if (this.RelativeToExistingValue) { + pos.Set(pos.x, pos.y, cv + pos.z); + } else { + pos.Set(pos.x, pos.y, cv); + } + + break; + case Axis.Dir_x_: + if (this.RelativeToExistingValue) { + dir.Set(cv + dir.x, dir.y, dir.z); + } else { + dir.Set(cv, dir.y, dir.z); + } + + break; + case Axis.Dir_y_: + if (this.RelativeToExistingValue) { + dir.Set(dir.x, cv + dir.y, dir.z); + } else { + dir.Set(dir.x, cv, dir.z); + } + + break; + case Axis.Dir_z_: + if (this.RelativeToExistingValue) { + dir.Set(dir.x, dir.y, cv + dir.z); + } else { + dir.Set(dir.x, dir.y, cv); + } + + break; + case Axis.Rot_x_: + if (this.RelativeToExistingValue) { + rot.Set(cv + rot.x, rot.y, rot.z); + } else { + rot.Set(cv, rot.y, rot.z); + } + + break; + case Axis.Rot_y_: + if (this.RelativeToExistingValue) { + rot.Set(rot.x, cv + rot.y, rot.z); + } else { + rot.Set(rot.x, cv, rot.z); + } + + break; + case Axis.Rot_z_: + if (this.RelativeToExistingValue) { + rot.Set(rot.x, rot.y, cv + rot.z); + } else { + rot.Set(rot.x, rot.y, cv); + } + + break; + default: + throw new ArgumentOutOfRangeException(); + } + + var inv_pos = pos; + var inv_dir = dir; + var inv_rot = rot; + + + if (this.coordinate_space == CoordinateSpace.Environment_) { + if (this.ParentEnvironment != null) { + this.ParentEnvironment.InverseTransformPoint(ref inv_pos); + this.ParentEnvironment.InverseTransformDirection(ref inv_dir); + this.ParentEnvironment.InverseTransformDirection(ref inv_rot); + } else { + Debug.LogWarning("ParentEnvironment not found!"); + } + } + + + if (this.coordinate_space == CoordinateSpace.Local_) { + transform1.localPosition = inv_pos; + }else{ + this.transform.position = inv_pos; + } + + + this.transform.rotation = Quaternion.identity; + this.transform.rotation = Quaternion.LookRotation(inv_dir, inv_rot); + } + } +} diff --git a/Runtime/Prototyping/Configurables/TransformConfigurable1Dof.cs.meta b/Runtime/Prototyping/Configurables/Transforms/TransformConfigurable1Dof.cs.meta similarity index 100% rename from Runtime/Prototyping/Configurables/TransformConfigurable1Dof.cs.meta rename to Runtime/Prototyping/Configurables/Transforms/TransformConfigurable1Dof.cs.meta diff --git a/Runtime/Prototyping/Displayers/Canvas/CanvasBarDisplayer.cs b/Runtime/Prototyping/Displayers/Canvas/CanvasBarDisplayer.cs index be6c1bdc1..5e3d23058 100644 --- a/Runtime/Prototyping/Displayers/Canvas/CanvasBarDisplayer.cs +++ b/Runtime/Prototyping/Displayers/Canvas/CanvasBarDisplayer.cs @@ -1,23 +1,23 @@ using System; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; +using droid.Runtime.Utilities; using UnityEngine; using UnityEngine.UI; -namespace Neodroid.Runtime.Prototyping.Displayers.Canvas { +namespace droid.Runtime.Prototyping.Displayers.Canvas { /// /// /// - [ExecuteInEditMode, RequireComponent(typeof(Image)), - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath - + "Canvas/CanvasBar" - + DisplayerComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(Image))] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "Canvas/CanvasBar" + + DisplayerComponentMenuPath._Postfix)] public class CanvasBarDisplayer : Displayer { Image _image; - [SerializeField, Range(0.0f, 1.0f)] float _value; + [SerializeField] [Range(0.0f, 1.0f)] float _value; /// - /// /// public float Value { get { return this._value; } @@ -30,10 +30,9 @@ public float Value { /// /// /// - protected override void Setup() { this._image = this.GetComponent(); } + public override void Setup() { this._image = this.GetComponent(); } /// - /// /// /// public void SetFillAmount(float amount) { @@ -42,14 +41,14 @@ public void SetFillAmount(float amount) { } } + //public override void Display(Object o) { throw new NotImplementedException(); } + /// /// /// public override void Display(float value) { #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + value + " To " + this.name); - } + DebugPrinting.DisplayPrint(value, this.Identifier, this.Debugging); #endif this.SetFillAmount(value); @@ -60,9 +59,7 @@ public override void Display(float value) { /// public override void Display(Double value) { #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + value + " To " + this.name); - } + DebugPrinting.DisplayPrint(value, this.Identifier, this.Debugging); #endif this.SetFillAmount((float)value); @@ -71,7 +68,13 @@ public override void Display(Double value) { /// /// /// - public override void Display(float[] values) { throw new NotImplementedException(); } + public override void Display(float[] values) { + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(values[0], this.Identifier, this.Debugging); + #endif + + this.SetFillAmount(values[0]); + } /// /// @@ -110,4 +113,4 @@ public override void Display(Double value) { public override void PlotSeries(Points.ValuePoint[] points) { throw new NotImplementedException(); } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/Canvas/CanvasTextDisplayer.cs b/Runtime/Prototyping/Displayers/Canvas/CanvasTextDisplayer.cs index fcca2e973..860f07cd6 100644 --- a/Runtime/Prototyping/Displayers/Canvas/CanvasTextDisplayer.cs +++ b/Runtime/Prototyping/Displayers/Canvas/CanvasTextDisplayer.cs @@ -1,51 +1,60 @@ using System; using System.Globalization; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; +using droid.Runtime.Utilities; using UnityEngine; using UnityEngine.UI; -namespace Neodroid.Runtime.Prototyping.Displayers.Canvas { +namespace droid.Runtime.Prototyping.Displayers.Canvas { /// /// /// - [ExecuteInEditMode, RequireComponent(typeof(Text)), - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath - + "Canvas/CanvasText" - + DisplayerComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(Text))] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "Canvas/CanvasText" + + DisplayerComponentMenuPath._Postfix)] public class CanvasTextDisplayer : Displayer { Text _text_component; /// /// /// - protected override void Setup() { this._text_component = this.GetComponent(); } + public override void Setup() { this._text_component = this.GetComponent(); } + + //public override void Display(Object o) { throw new NotImplementedException(); } /// /// /// public override void Display(float value) { - if (this._text_component) { - this._text_component.text = value.ToString(CultureInfo.InvariantCulture); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(value, this.Identifier, this.Debugging); + #endif + + this.SetText(value.ToString(CultureInfo.InvariantCulture)); } /// /// /// public override void Display(Double value) { - if (this._text_component) { - this._text_component.text = value.ToString(CultureInfo.InvariantCulture); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(value, this.Identifier, this.Debugging); + #endif + + this.SetText(value.ToString(CultureInfo.InvariantCulture)); } /// /// /// public override void Display(float[] values) { - if (this._text_component) { - this._text_component.text = values.ToString(); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(values[0], this.Identifier, this.Debugging); + #endif + + this.SetText(values[0].ToString()); } /// @@ -53,9 +62,7 @@ public override void Display(float[] values) { /// public override void Display(String value) { #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + value + " To " + this.name); - } + DebugPrinting.DisplayPrint(value, this.Identifier, this.Debugging); #endif this.SetText(value); @@ -65,60 +72,77 @@ public override void Display(String value) { /// /// public override void Display(Vector3 value) { - if (this._text_component) { - this._text_component.text = value.ToString(); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(value, this.Identifier, this.Debugging); + #endif + + this.SetText(value.ToString()); } /// /// /// public override void Display(Vector3[] value) { - if (this._text_component) { - this._text_component.text = value.ToString(); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(value, this.Identifier, this.Debugging); + #endif + + this.SetText(value.ToString()); } /// /// /// public override void Display(Points.ValuePoint points) { - if (this._text_component) { - this._text_component.text = points.ToString(); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(points, this.Identifier, this.Debugging); + #endif + + this.SetText(points.ToString()); } /// /// /// public override void Display(Points.ValuePoint[] points) { - if (this._text_component) { - this._text_component.text = points.ToString(); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(points, this.Identifier, this.Debugging); + #endif + + this.SetText(points.ToString()); } /// /// /// public override void Display(Points.StringPoint point) { - if (this._text_component) { - this._text_component.text = point.ToString(); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(point, this.Identifier, this.Debugging); + #endif + + this.SetText(point.ToString()); } /// /// /// public override void Display(Points.StringPoint[] points) { - if (this._text_component) { - this._text_component.text = points.ToString(); - } + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(points, this.Identifier, this.Debugging); + #endif + + this.SetText(points.ToString()); } - public override void PlotSeries(Points.ValuePoint[] points) { throw new NotImplementedException(); } + public override void PlotSeries(Points.ValuePoint[] points) { + #if NEODROID_DEBUG + DebugPrinting.DisplayPrint(points, this.Identifier, this.Debugging); + #endif + + this.SetText(points.ToString()); + } /// - /// /// /// public void SetText(string text) { @@ -127,4 +151,4 @@ public void SetText(string text) { } } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/Canvas/DistributionDisplayer.cs b/Runtime/Prototyping/Displayers/Canvas/DistributionDisplayer.cs index c5a2bc243..0e846624d 100644 --- a/Runtime/Prototyping/Displayers/Canvas/DistributionDisplayer.cs +++ b/Runtime/Prototyping/Displayers/Canvas/DistributionDisplayer.cs @@ -1,23 +1,21 @@ using System; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; using UnityEngine; using UnityEngine.UI; -namespace Neodroid.Runtime.Prototyping.Displayers.Canvas { +namespace droid.Runtime.Prototyping.Displayers.Canvas { /// /// /// - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath - + "Canvas/CanvasBar" - + DisplayerComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "Canvas/CanvasBar" + + DisplayerComponentMenuPath._Postfix)] public class DistributionDisplayer : Displayer { [SerializeField] Image[] _images; - [SerializeField, Range(0.0f, 1.0f)] float _value; + [SerializeField] [Range(0.0f, 1.0f)] float _value; /// - /// /// public float Value { get { return this._value; } @@ -30,14 +28,13 @@ public float Value { /// /// /// - protected override void Setup() { + public override void Setup() { if (this._images == null || this._images.Length == 0) { this._images = this.GetComponentsInChildren(); } } /// - /// /// /// public void SetFillAmount(float amount) { @@ -52,6 +49,8 @@ public void SetFillAmount(float amount) { } } + //public override void Display(Object o) { throw new NotImplementedException(); } + /// /// /// @@ -124,4 +123,4 @@ public override void Display(Double value) { public override void PlotSeries(Points.ValuePoint[] points) { throw new NotImplementedException(); } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/Cells/HexCellDisplayer.cs b/Runtime/Prototyping/Displayers/Cells/HexCellDisplayer.cs index 7fd8db03c..3d4d51fef 100644 --- a/Runtime/Prototyping/Displayers/Cells/HexCellDisplayer.cs +++ b/Runtime/Prototyping/Displayers/Cells/HexCellDisplayer.cs @@ -1,27 +1,30 @@ using System; using System.Linq; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Plotting; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.GameObjects.Plotting; +using droid.Runtime.Structs; +using droid.Runtime.Utilities.Drawing; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers.Cells { +namespace droid.Runtime.Prototyping.Displayers.Cells { /// /// /// - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath + "VectorField" + DisplayerComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "VectorField" + + DisplayerComponentMenuPath._Postfix)] public class HexCellDisplayer : QuadCellDisplayer { - [SerializeField] float[] _values; + [SerializeField] bool _plot_random_series = false; [SerializeField] bool _retain_last_plot = true; - [SerializeField] bool _plot_random_series; - dynamic _vals; + + public Boolean PlotRandomSeries { + get { return this._plot_random_series; } + set { this._plot_random_series = value; } + } /// - /// /// - protected override void Setup() { } + public override void Setup() { } public override void Display(Double value) { } @@ -43,29 +46,28 @@ public override void Display(float values) { } void Update() { if (this._retain_last_plot) { - if (this._vals != null) { - PlotSeries(this._vals); + if (this._Values != null) { + PlotSeries(this._Values); } } } /// - /// /// /// public new void ScatterPlot(Vector3[] points) { } - /*public void PlotSeries(float[] points) { + /*public override void PlotSeries(float[] points) { }*/ #if UNITY_EDITOR void OnDrawGizmos() { if (this.enabled) { - if (this._values == null || this._values.Length == 0) { + if (this._Values == null || this._Values.Length == 0) { if (this._plot_random_series) { var vs = PlotFunctions.SampleRandomSeries(9); - this._values = vs.Select(v => v._Val).ToArray(); + this._Values = vs.Select(v => v._Val).ToArray(); this.PlotSeries(vs); } } @@ -74,7 +76,6 @@ void OnDrawGizmos() { #endif /// - /// /// /// public new void PlotSeries(Points.ValuePoint[] points) { @@ -84,31 +85,31 @@ void OnDrawGizmos() { } #endif - this._vals = points; + this._Values = points; foreach (var point in points) { //point._Size - switch ((int)(point._Val)) { + switch ((int)point._Val) { case 0: - DrawArrow.ForDebug(point._Pos, Vector3.forward, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.forward, Color.cyan); break; case 1: - DrawArrow.ForDebug(point._Pos, Vector3.back, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.back, Color.cyan); break; case 2: - DrawArrow.ForDebug(point._Pos, Vector3.up, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.up, Color.cyan); break; case 3: - DrawArrow.ForDebug(point._Pos, Vector3.down, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.down, Color.cyan); break; case 4: - DrawArrow.ForDebug(point._Pos, Vector3.left, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.left, Color.cyan); break; case 5: - DrawArrow.ForDebug(point._Pos, Vector3.right, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.right, Color.cyan); break; } } } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/Cells/QuadCellDisplayer.cs b/Runtime/Prototyping/Displayers/Cells/QuadCellDisplayer.cs index 1eba6cd89..84cbbfa82 100644 --- a/Runtime/Prototyping/Displayers/Cells/QuadCellDisplayer.cs +++ b/Runtime/Prototyping/Displayers/Cells/QuadCellDisplayer.cs @@ -1,28 +1,25 @@ using System; -using System.Linq; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Plotting; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; +using droid.Runtime.Utilities.Drawing; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers.Cells { +namespace droid.Runtime.Prototyping.Displayers.Cells { /// /// /// - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath + "VectorField" + DisplayerComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "VectorField" + + DisplayerComponentMenuPath._Postfix)] public class QuadCellDisplayer : Displayer { - - - - dynamic _vals; + /// + /// + public override void Setup() { } /// /// /// - protected override void Setup() { } - + /// public override void Display(Double value) { } public override void Display(float[] values) { } @@ -39,36 +36,19 @@ public override void Display(Points.ValuePoint[] points) { } public override void Display(Points.StringPoint point) { throw new NotImplementedException(); } public override void Display(Points.StringPoint[] points) { throw new NotImplementedException(); } + //public override void Display(Object o) { throw new NotImplementedException(); } public override void Display(float values) { } - - /// - /// /// /// public void ScatterPlot(Vector3[] points) { } - /*public void PlotSeries(float[] points) { + /*public override void PlotSeries(float[] points) { }*/ - #if UNITY_EDITOR - void OnDrawGizmos() { - if (this.enabled) { - if (this._values == null || this._values.Length == 0) { - if (this._PlotRandomSeries) { - var vs = PlotFunctions.SampleRandomSeries(9); - this._values = vs.Select(v => v._Val).ToArray(); - this.PlotSeries(vs); - } - } - } - } - #endif - /// - /// /// /// public override void PlotSeries(Points.ValuePoint[] points) { @@ -78,31 +58,31 @@ public override void PlotSeries(Points.ValuePoint[] points) { } #endif - this._vals = points; + this._Values = points; foreach (var point in points) { //point._Size - switch ((int)(point._Val)) { + switch ((int)point._Val) { case 0: - DrawArrow.ForDebug(point._Pos, Vector3.forward, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.forward, Color.cyan); break; case 1: - DrawArrow.ForDebug(point._Pos, Vector3.back, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.back, Color.cyan); break; case 2: - DrawArrow.ForDebug(point._Pos, Vector3.up, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.up, Color.cyan); break; case 3: - DrawArrow.ForDebug(point._Pos, Vector3.down, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.down, Color.cyan); break; case 4: - DrawArrow.ForDebug(point._Pos, Vector3.left, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.left, Color.cyan); break; case 5: - DrawArrow.ForDebug(point._Pos, Vector3.right, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.right, Color.cyan); break; } } } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/Displayer.cs b/Runtime/Prototyping/Displayers/Displayer.cs index 1c7cf6111..6b4557ea2 100644 --- a/Runtime/Prototyping/Displayers/Displayer.cs +++ b/Runtime/Prototyping/Displayers/Displayer.cs @@ -1,35 +1,51 @@ -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using Neodroid.Runtime.Utilities.Structs; +using System; +using System.Linq; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects; +using droid.Runtime.GameObjects.Plotting; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs; +using droid.Runtime.Utilities; +using UnityEditor; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers { +namespace droid.Runtime.Prototyping.Displayers { /// - /// - /// + /// + /// public abstract class Displayer : PrototypingGameObject, IDisplayer { + /// + /// + AbstractSpatialPrototypingEnvironment _environment = null; + /// /// /// - IPrototypingEnvironment _environment; + [SerializeField] + protected bool _RetainLastPlot = true; + + /// + /// + /// + protected dynamic _Values = null; + + [SerializeField] bool clean_all_children = true; + [SerializeField] bool clean_before_every_plot = true; #if UNITY_EDITOR /// - /// /// - protected bool _PlotRandomSeries; -#endif - - [SerializeField] protected bool _RetainLastPlot = true; - + [Header("OnGizmo")] + [SerializeField] + bool _PlotRandomSeries = false; + + [SerializeField] bool always_random_sample_new = true; + #endif + /// - /// /// - public IPrototypingEnvironment ParentEnvironment { + public AbstractSpatialPrototypingEnvironment ParentEnvironment { get { return this._environment; } set { this._environment = value; } } @@ -37,17 +53,13 @@ public IPrototypingEnvironment ParentEnvironment { /// /// /// - public override string PrototypingTypeName { - get { return "Displayer"; } - } + public override string PrototypingTypeName { get { return "Displayer"; } } /// /// /// protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this.ParentEnvironment, - this); + this.ParentEnvironment = NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this); } /// @@ -56,78 +68,132 @@ protected override void RegisterComponent() { protected override void UnRegisterComponent() { this.ParentEnvironment?.UnRegister(this); } /// - /// + /// + void Update() { + if (this._RetainLastPlot) { + if (this.clean_before_every_plot) { + this.Clean(); + } + + if (this._Values != null) { + PlotSeries(this._Values); + } + } + } + + #if UNITY_EDITOR + void OnDrawGizmosSelected() { + if (this.enabled && Selection.activeGameObject == this.gameObject) { + if (!this._PlotRandomSeries && !this._RetainLastPlot) { + this.Clean(); + } + + if (this._Values == null || this._Values.Length == 0 || this.always_random_sample_new) { + if (this._PlotRandomSeries) { + this.Clean(); + var vs = PlotFunctions.SampleRandomSeries(9); + this._Values = vs.Select(v => v._Val).ToArray(); + this.PlotSeries(vs); + } + } + } else { + this.Clean(); + } + } + + #endif + + /// + /// + /// + protected virtual void Clean() { + if (this.clean_all_children) { + foreach (Transform child in this.transform) { + if (Application.isPlaying) { + Destroy(child.gameObject); + } else { + DestroyImmediate(child.gameObject); + } + } + } + + if (this._RetainLastPlot) { + this._Values = null; + } + } + + void OnDestroy() { this.Clean(); } + + void OnDisable() { this.Clean(); } + + void OnEnable() { this.Clean(); } + + //void OnValidate() { this.Clean(); } + + /// + /// /// /// - public abstract void Display(float value); + public abstract void Display(Single value); /// - /// + /// /// /// - public abstract void Display(double value); + public abstract void Display(Double value); /// - /// + /// /// /// - public abstract void Display(float[] values); + public abstract void Display(Single[] values); /// - /// + /// /// /// - public abstract void Display(string value); + public abstract void Display(String value); /// - /// + /// /// /// public abstract void Display(Vector3 value); /// - /// + /// /// /// public abstract void Display(Vector3[] value); /// - /// + /// /// /// public abstract void Display(Points.ValuePoint point); /// - /// + /// /// /// public abstract void Display(Points.ValuePoint[] points); /// - /// + /// /// /// public abstract void Display(Points.StringPoint point); /// - /// + /// /// /// public abstract void Display(Points.StringPoint[] points); - public void Display(object o) { throw new System.NotImplementedException(); } - - protected dynamic _values; - - //public abstract void PlotSeries(dynamic points); + /// + /// + /// + /// public abstract void PlotSeries(Points.ValuePoint[] points); - - void Update() { - if (this._RetainLastPlot) { - if (this._values != null) { - PlotSeries(this._values); - } - } - } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/DisplayerComponentMenuPath.cs b/Runtime/Prototyping/Displayers/DisplayerComponentMenuPath.cs index a8e05d418..b33c9edbb 100644 --- a/Runtime/Prototyping/Displayers/DisplayerComponentMenuPath.cs +++ b/Runtime/Prototyping/Displayers/DisplayerComponentMenuPath.cs @@ -1,9 +1,15 @@ -namespace Neodroid.Runtime.Prototyping.Displayers { +namespace droid.Runtime.Prototyping.Displayers { /// - /// /// public static class DisplayerComponentMenuPath { + /// + /// + /// public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Displayer/"; + + /// + /// + /// public const string _Postfix = "Displayer"; } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/Experimental.meta b/Runtime/Prototyping/Displayers/Experimental.meta deleted file mode 100644 index d40d32312..000000000 --- a/Runtime/Prototyping/Displayers/Experimental.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b9c9f37f2a399490386aa7b546b805c6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Displayers/GridWorld/GridWorldVectorFieldDisplayer.cs b/Runtime/Prototyping/Displayers/GridWorld/GridWorldVectorFieldDisplayer.cs index c2256ebfb..51855c111 100644 --- a/Runtime/Prototyping/Displayers/GridWorld/GridWorldVectorFieldDisplayer.cs +++ b/Runtime/Prototyping/Displayers/GridWorld/GridWorldVectorFieldDisplayer.cs @@ -1,80 +1,103 @@ using System; -using System.Linq; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Plotting; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; +using droid.Runtime.Utilities.Drawing; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers.GridWorld { +namespace droid.Runtime.Prototyping.Displayers.GridWorld { /// /// /// - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath + "GridWorldVectorField" + DisplayerComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "GridWorldVectorField" + + DisplayerComponentMenuPath._Postfix)] public class GridWorldVectorFieldDisplayer : Displayer { - - - - dynamic _vals; - /// - /// /// - protected override void Setup() { } + public override void Setup() { } + /// + /// + /// + /// public override void Display(Double value) { } + /// + /// + /// + /// public override void Display(float[] values) { } + /// + /// + /// + /// public override void Display(String values) { } + /// + /// + /// + /// + /// public override void Display(Vector3 value) { throw new NotImplementedException(); } + + /// + /// + /// + /// public override void Display(Vector3[] value) { this.ScatterPlot(value); } + /// + /// + /// + /// public override void Display(Points.ValuePoint points) { this.PlotSeries(new[] {points}); } + /// + /// + /// + /// public override void Display(Points.ValuePoint[] points) { } + /// + /// + /// + /// + /// public override void Display(Points.StringPoint point) { throw new NotImplementedException(); } + + /// + /// + /// + /// + /// public override void Display(Points.StringPoint[] points) { throw new NotImplementedException(); } + //public override void Display(Object o) { throw new NotImplementedException(); } + /// + /// + /// + /// public override void Display(float values) { } void Update() { if (this._RetainLastPlot) { - if (this._vals != null) { - PlotSeries(this._vals); + if (this._Values != null) { + PlotSeries(this._Values); } } } /// - /// /// /// public void ScatterPlot(Vector3[] points) { } - /*public void PlotSeries(float[] points) { + /*public override void PlotSeries(float[] points) { }*/ - #if UNITY_EDITOR - void OnDrawGizmos() { - if (this.enabled) { - if (this._values == null || this._values.Length == 0) { - if (this._PlotRandomSeries) { - var vs = PlotFunctions.SampleRandomSeries(9); - this._values = vs.Select(v => v._Val).ToArray(); - this.PlotSeries(vs); - } - } - } - } - #endif - /// - /// /// /// public override void PlotSeries(Points.ValuePoint[] points) { @@ -84,31 +107,31 @@ public override void PlotSeries(Points.ValuePoint[] points) { } #endif - this._vals = points; + this._Values = points; foreach (var point in points) { //point._Size - switch ((int)(point._Val)) { + switch ((int)point._Val) { case 0: - DrawArrow.ForDebug(point._Pos, Vector3.forward, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.forward, Color.cyan); break; case 1: - DrawArrow.ForDebug(point._Pos, Vector3.back, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.back, Color.cyan); break; case 2: - DrawArrow.ForDebug(point._Pos, Vector3.up, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.up, Color.cyan); break; case 3: - DrawArrow.ForDebug(point._Pos, Vector3.down, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.down, Color.cyan); break; case 4: - DrawArrow.ForDebug(point._Pos, Vector3.left, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.left, Color.cyan); break; case 5: - DrawArrow.ForDebug(point._Pos, Vector3.right, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.right, Color.cyan); break; } } } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/ScatterPlots/GameObjectScatterPlotDisplayer.cs b/Runtime/Prototyping/Displayers/ScatterPlots/GameObjectScatterPlotDisplayer.cs index 2f19657ac..9d1b7b4a1 100644 --- a/Runtime/Prototyping/Displayers/ScatterPlots/GameObjectScatterPlotDisplayer.cs +++ b/Runtime/Prototyping/Displayers/ScatterPlots/GameObjectScatterPlotDisplayer.cs @@ -1,32 +1,30 @@ using System; using System.Collections.Generic; using System.Linq; -using Neodroid.Runtime.Utilities.Plotting; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers.ScatterPlots { - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath - + "GameObjectScatterPlotDisplayer" - + DisplayerComponentMenuPath._Postfix)] +namespace droid.Runtime.Prototyping.Displayers.ScatterPlots { + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "GameObjectScatterPlotDisplayer" + + DisplayerComponentMenuPath._Postfix)] public class GameObjectScatterPlotDisplayer : Displayer { + [SerializeField] Gradient _gradient; ParticleSystem _particle_system; + + ParticleSystem.MainModule _particle_system_main_module; ParticleSystemRenderer _particle_system_renderer; [SerializeField] ParticleSystemSimulationSpace _particle_system_simulation_space = ParticleSystemSimulationSpace.World; - ParticleSystem.MainModule _particle_system_main_module; ParticleSystem.Particle[] _particles; - - [SerializeField] Gradient _gradient; [SerializeField] float _size = 0.6f; - + List _vs = new List(); - protected override void Setup() { + public override void Setup() { this._particle_system = this.GetComponent(); var em = this._particle_system.emission; em.enabled = false; @@ -47,10 +45,11 @@ protected override void Setup() { if (this._gradient == null) { this._gradient = new Gradient { - colorKeys = new[] { - new GradientColorKey(new Color(1, 0, 0), 0f), new GradientColorKey(new Color(0, 1, 0), 1f) - } - }; + colorKeys = new[] { + new GradientColorKey(new Color(1, 0, 0), 0f), + new GradientColorKey(new Color(0, 1, 0), 1f) + } + }; } } @@ -61,8 +60,8 @@ public override void Display(Double value) { } #endif - this._values = new[] {(float)value}; - this.PlotSeries(this._values); + this._Values = new[] {(float)value}; + this.PlotSeries(this._Values); } public override void Display(float[] values) { @@ -76,7 +75,7 @@ public override void Display(float[] values) { Debug.Log("Applying the float array " + s + " To " + this.name); } #endif - this._values = values; + this._Values = values; this.PlotSeries(values); } @@ -92,8 +91,8 @@ public override void Display(String values) { this._vs.Add(float.Parse(value)); } - this._values = this._vs.ToArray(); - this.PlotSeries(this._values); + this._Values = this._vs.ToArray(); + this.PlotSeries(this._Values); } public override void Display(Vector3 value) { throw new NotImplementedException(); } @@ -108,9 +107,11 @@ public override void Display(Points.ValuePoint[] points) { #if NEODROID_DEBUG if (this.Debugging) { - var points_str = points.Aggregate( - "", - (current, point) => current + ($"({point._Pos.ToString()}, {point._Val},{point._Size})" + ", ")); + var points_str = points.Aggregate("", + (current, point) => + current + + $"({point._Pos.ToString()}, {point._Val},{point._Size})" + + ", "); Debug.Log("Applying the points " + points_str + " to " + this.name); } #endif @@ -131,6 +132,8 @@ public override void Display(Points.ValuePoint[] points) { public override void Display(Points.StringPoint point) { throw new NotImplementedException(); } public override void Display(Points.StringPoint[] points) { throw new NotImplementedException(); } + //public override void Display(Object o) { throw new NotImplementedException(); } + public override void Display(float values) { #if NEODROID_DEBUG if (this.Debugging) { @@ -138,12 +141,11 @@ public override void Display(float values) { } #endif - this._values = new[] {values}; - this.PlotSeries(this._values); + this._Values = new[] {values}; + this.PlotSeries(this._Values); } /// - /// /// /// public void ScatterPlot(Vector3[] points) { @@ -153,7 +155,7 @@ public void ScatterPlot(Vector3[] points) { #if NEODROID_DEBUG if (this.Debugging) { - var points_str = points.Aggregate("", (current, point) => current + (point.ToString() + ", ")); + var points_str = points.Aggregate("", (current, point) => current + point.ToString() + ", "); Debug.Log("Applying the points " + points_str + " To " + this.name); } #endif @@ -165,7 +167,7 @@ public void ScatterPlot(Vector3[] points) { this._particles[i].position = point; var clamped = Math.Min(Math.Max(0.0f, i / l), 1.0f); this._particles[i].startColor = this._gradient.Evaluate(clamped); - this._particles[i].startSize = 1f; + this._particles[i].startSize = this._size; i++; } @@ -189,25 +191,14 @@ public void PlotSeries(float[] points) { this._particles[i].position = Vector3.one * i; var clamped = Math.Min(Math.Max(0.0f, point), 1.0f); this._particles[i].startColor = this._gradient.Evaluate(clamped); - this._particles[i].startSize = 1f; + this._particles[i].startSize = this._size; i++; } this._particle_system.SetParticles(this._particles, points.Length); } - #if UNITY_EDITOR - void OnDrawGizmos() { - if (this.enabled) { - if (this._PlotRandomSeries) { - this.PlotSeries(PlotFunctions.SampleRandomSeries(1)); - } - } - } - #endif - /// - /// /// /// public override void PlotSeries(Points.ValuePoint[] points) { @@ -228,4 +219,4 @@ public override void PlotSeries(Points.ValuePoint[] points) { this._particle_system.SetParticles(this._particles, points.Length); } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/ScatterPlots/IndexedScatterPlotDisplayer.cs b/Runtime/Prototyping/Displayers/ScatterPlots/IndexedScatterPlotDisplayer.cs index c86eba3d6..8be560f7e 100644 --- a/Runtime/Prototyping/Displayers/ScatterPlots/IndexedScatterPlotDisplayer.cs +++ b/Runtime/Prototyping/Displayers/ScatterPlots/IndexedScatterPlotDisplayer.cs @@ -1,33 +1,29 @@ using System; using System.Collections.Generic; -using System.Linq; -using Neodroid.Runtime.Utilities.Plotting; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers.ScatterPlots { +namespace droid.Runtime.Prototyping.Displayers.ScatterPlots { /// /// /// - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath - + "IndexedScatterPlot" - + DisplayerComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "IndexedScatterPlot" + + DisplayerComponentMenuPath._Postfix)] public class IndexedScatterPlotDisplayer : Displayer { - - - - dynamic _vals; - - [SerializeField] GameObject[] _designs; - [SerializeField] List _instances; + [SerializeField] GameObject[] _designs = null; + [SerializeField] List _instances = null; + /// /// - /// /// - protected override void Setup() { } + public override void Setup() { } + /// + /// + /// + /// public override void Display(Double value) { } public override void Display(float[] values) { } @@ -44,58 +40,52 @@ public override void Display(Points.ValuePoint[] points) { } public override void Display(Points.StringPoint point) { throw new NotImplementedException(); } public override void Display(Points.StringPoint[] points) { throw new NotImplementedException(); } + //public override void Display(Object o) { throw new NotImplementedException(); } public override void Display(float values) { } void Update() { if (this._RetainLastPlot) { - if (this._vals != null) { - PlotSeries(this._vals); + if (this._Values != null) { + PlotSeries(this._Values); } } } - void SpawnDesign(GameObject design, Vector3 position, Quaternion rotation = default(Quaternion)) { + void SpawnDesign(GameObject design, Vector3 position, Quaternion rotation) { //var go = Instantiate(design, position, rotation,this.transform); - var go = Instantiate(design, position, design.transform.rotation, this.transform); + var go = Instantiate(design, + position, + design.transform.rotation, + this.transform); this._instances.Add(go); } - void DestroyInstances(bool immediately = false) { - if (!immediately) { + /// + /// + /// + /// + protected override void Clean() { + if (Application.isPlaying) { this._instances.ForEach(Destroy); } else { this._instances.ForEach(DestroyImmediate); } this._instances.Clear(); + + base.Clean(); } /// - /// /// /// public void ScatterPlot(Vector3[] points) { } - /*public void PlotSeries(float[] points) { + /*public override void PlotSeries(float[] points) { }*/ - #if UNITY_EDITOR - void OnDrawGizmos() { - if (this.enabled) { - if (this._values == null || this._values.Length == 0) { - if (this._PlotRandomSeries) { - var vs = PlotFunctions.SampleRandomSeries(9); - this._values = vs.Select(v => v._Val).ToArray(); - this.PlotSeries(vs); - } - } - } - } - #endif - /// - /// /// /// public override void PlotSeries(Points.ValuePoint[] points) { @@ -105,8 +95,8 @@ public override void PlotSeries(Points.ValuePoint[] points) { } #endif - this._vals = points; - this.DestroyInstances(true); + this._Values = points; + this.Clean(); foreach (var point in points) { var game_objects = this._designs; @@ -114,16 +104,8 @@ public override void PlotSeries(Points.ValuePoint[] points) { continue; } - this.SpawnDesign(this._designs[(int)(point._Val)], point._Pos); + this.SpawnDesign(this._designs[(int)point._Val], point._Pos, Quaternion.identity); } } - - void OnDestroy() { this.DestroyInstances(true); } - - void OnDisable() { this.DestroyInstances(true); } - - void OnEnable() { this.DestroyInstances(true); } - - void OnValidate() { this.DestroyInstances(); } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/ScatterPlots/ScatterPlotDisplayer.cs b/Runtime/Prototyping/Displayers/ScatterPlots/ScatterPlotDisplayer.cs index 87e989b28..f62268a4e 100644 --- a/Runtime/Prototyping/Displayers/ScatterPlots/ScatterPlotDisplayer.cs +++ b/Runtime/Prototyping/Displayers/ScatterPlots/ScatterPlotDisplayer.cs @@ -1,31 +1,38 @@ using System; using System.Collections.Generic; using System.Linq; -using Neodroid.Runtime.Utilities.Plotting; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; +using droid.Runtime.Utilities.Extensions; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers.ScatterPlots { - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath + "ScatterPlot" + DisplayerComponentMenuPath._Postfix), - RequireComponent(typeof(ParticleSystem))] +namespace droid.Runtime.Prototyping.Displayers.ScatterPlots { + /// + /// + /// + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "ScatterPlot" + + DisplayerComponentMenuPath._Postfix)] + [RequireComponent(typeof(ParticleSystem))] public class ScatterPlotDisplayer : Displayer { + [SerializeField] Gradient _gradient; ParticleSystem _particle_system; + + ParticleSystem.MainModule _particle_system_main_module; ParticleSystemRenderer _particle_system_renderer; [SerializeField] ParticleSystemSimulationSpace _particle_system_simulation_space = ParticleSystemSimulationSpace.World; - ParticleSystem.MainModule _particle_system_main_module; ParticleSystem.Particle[] _particles; - - [SerializeField] Gradient _gradient; - [SerializeField] float _size = 0.6f; - + [SerializeField] float _default_start_size = 0.6f; + List _vs = new List(); - protected override void Setup() { + /// + /// + /// + public override void Setup() { this._particle_system = this.GetComponent(); var em = this._particle_system.emission; em.enabled = false; @@ -38,7 +45,7 @@ protected override void Setup() { this._particle_system_main_module.playOnAwake = false; this._particle_system_main_module.simulationSpace = this._particle_system_simulation_space; this._particle_system_main_module.simulationSpeed = 0; - this._particle_system_main_module.startSize = this._size; + this._particle_system_main_module.startSize = this._default_start_size; this._particle_system_renderer = this.GetComponent(); //this._particle_system_renderer.renderMode = ParticleSystemRenderMode.Mesh; @@ -46,10 +53,11 @@ protected override void Setup() { if (this._gradient == null) { this._gradient = new Gradient { - colorKeys = new[] { - new GradientColorKey(new Color(1, 0, 0), 0f), new GradientColorKey(new Color(0, 1, 0), 1f) - } - }; + colorKeys = new[] { + new GradientColorKey(new Color(1, 0, 0), 0f), + new GradientColorKey(new Color(0, 1, 0), 1f) + } + }; } } @@ -60,8 +68,8 @@ public override void Display(Double value) { } #endif - this._values = new[] {(float)value}; - this.PlotSeries(this._values); + this._Values = new[] {(float)value}; + this.PlotSeries(this._Values); } public override void Display(float[] values) { @@ -75,7 +83,7 @@ public override void Display(float[] values) { Debug.Log("Applying the float array " + s + " To " + this.name); } #endif - this._values = values; + this._Values = values; this.PlotSeries(values); } @@ -91,8 +99,8 @@ public override void Display(String values) { this._vs.Add(float.Parse(value)); } - this._values = this._vs.ToArray(); - this.PlotSeries(this._values); + this._Values = this._vs.ToArray(); + this.PlotSeries(this._Values); } public override void Display(Vector3 value) { throw new NotImplementedException(); } @@ -107,9 +115,11 @@ public override void Display(Points.ValuePoint[] points) { #if NEODROID_DEBUG if (this.Debugging) { - var points_str = points.Aggregate( - "", - (current, point) => current + ($"({point._Pos.ToString()}, {point._Val},{point._Size})" + ", ")); + var points_str = points.Aggregate("", + (current, point) => + current + + $"({point._Pos.ToString()}, {point._Val},{point._Size})" + + ", "); Debug.Log("Applying the points " + points_str + " to " + this.name); } #endif @@ -121,6 +131,7 @@ public override void Display(Points.ValuePoint[] points) { var clamped = Math.Min(Math.Max(0.0f, point._Val), 1.0f); this._particles[i].startColor = this._gradient.Evaluate(clamped); this._particles[i].startSize = point._Size; + this._particles[i].startSize3D = this._default_start_size.BroadcastVector3(); i++; } @@ -130,6 +141,12 @@ public override void Display(Points.ValuePoint[] points) { public override void Display(Points.StringPoint point) { throw new NotImplementedException(); } public override void Display(Points.StringPoint[] points) { throw new NotImplementedException(); } + //public override void Display(Object o) { throw new NotImplementedException(); } + + /// + /// + /// + /// public override void Display(float values) { #if NEODROID_DEBUG if (this.Debugging) { @@ -137,12 +154,11 @@ public override void Display(float values) { } #endif - this._values = new[] {values}; - this.PlotSeries(this._values); + this._Values = new[] {values}; + this.PlotSeries(this._Values); } /// - /// /// /// public void ScatterPlot(Vector3[] points) { @@ -152,7 +168,7 @@ public void ScatterPlot(Vector3[] points) { #if NEODROID_DEBUG if (this.Debugging) { - var points_str = points.Aggregate("", (current, point) => current + (point.ToString() + ", ")); + var points_str = points.Aggregate("", (current, point) => current + point.ToString() + ", "); Debug.Log("Applying the points " + points_str + " To " + this.name); } #endif @@ -164,7 +180,8 @@ public void ScatterPlot(Vector3[] points) { this._particles[i].position = point; var clamped = Math.Min(Math.Max(0.0f, i / l), 1.0f); this._particles[i].startColor = this._gradient.Evaluate(clamped); - this._particles[i].startSize = 1f; + this._particles[i].startSize = this._default_start_size; + this._particles[i].startSize3D = this._default_start_size.BroadcastVector3(); i++; } @@ -172,6 +189,10 @@ public void ScatterPlot(Vector3[] points) { } public void PlotSeries(float[] points) { + if (!this._particle_system) { + return; + } + if (this._particles == null || this._particles.Length != points.Length) { this._particles = new ParticleSystem.Particle[points.Length]; } @@ -188,28 +209,44 @@ public void PlotSeries(float[] points) { this._particles[i].position = Vector3.one * i; var clamped = Math.Min(Math.Max(0.0f, point), 1.0f); this._particles[i].startColor = this._gradient.Evaluate(clamped); - this._particles[i].startSize = 1f; + this._particles[i].startSize = this._default_start_size; + this._particles[i].startSize3D = this._default_start_size.BroadcastVector3(); i++; } this._particle_system.SetParticles(this._particles, points.Length); } - #if UNITY_EDITOR - void OnDrawGizmos() { - if (this.enabled) { - if (this._PlotRandomSeries) { - this.PlotSeries(PlotFunctions.SampleRandomSeries(1)); + /// + /// + /// + protected override void Clean() { + if (!this._RetainLastPlot) { + if (this._particle_system) { + this._particle_system.Clear(true); } } + + base.Clean(); } - #endif /// - /// /// /// public override void PlotSeries(Points.ValuePoint[] points) { + if (!this._particle_system) { + return; + } + + if (this._particles == null || this._particles.Length != points.Length) { + this._particles = new ParticleSystem.Particle[points.Length]; + } + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Applying the series " + points + " To " + this.name); + } + #endif + var alive = this._particle_system.GetParticles(this._particles); if (alive < points.Length) { this._particles = new ParticleSystem.Particle[points.Length]; @@ -221,10 +258,11 @@ public override void PlotSeries(Points.ValuePoint[] points) { this._particles[i].position = point._Pos; this._particles[i].startColor = this._gradient.Evaluate(point._Val); this._particles[i].startSize = point._Size; + this._particles[i].startSize3D = point._Size.BroadcastVector3(); i++; } this._particle_system.SetParticles(this._particles, points.Length); } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/ScatterPlots/TextScatterPlotDisplayer.cs b/Runtime/Prototyping/Displayers/ScatterPlots/TextScatterPlotDisplayer.cs index 7cd5089d5..a3c975a87 100644 --- a/Runtime/Prototyping/Displayers/ScatterPlots/TextScatterPlotDisplayer.cs +++ b/Runtime/Prototyping/Displayers/ScatterPlots/TextScatterPlotDisplayer.cs @@ -2,34 +2,33 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; -using Neodroid.Runtime.Utilities.Plotting; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers.ScatterPlots { +namespace droid.Runtime.Prototyping.Displayers.ScatterPlots { /// - /// /// - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath + "ScatterPlot" + DisplayerComponentMenuPath._Postfix), - RequireComponent(typeof(ParticleSystem))] + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "ScatterPlot" + + DisplayerComponentMenuPath._Postfix)] + [RequireComponent(typeof(ParticleSystem))] public class TextScatterPlotDisplayer : Displayer { + [SerializeField] Gradient _gradient; ParticleSystem _particle_system; + + ParticleSystem.MainModule _particle_system_main_module; ParticleSystemRenderer _particle_system_renderer; [SerializeField] ParticleSystemSimulationSpace _particle_system_simulation_space = ParticleSystemSimulationSpace.World; - ParticleSystem.MainModule _particle_system_main_module; ParticleSystem.Particle[] _particles; - - [SerializeField] Gradient _gradient; [SerializeField] float _size = 0.6f; - + List _vs = new List(); - protected override void Setup() { + public override void Setup() { this._particle_system = this.GetComponent(); var em = this._particle_system.emission; em.enabled = false; @@ -50,10 +49,11 @@ protected override void Setup() { if (this._gradient == null) { this._gradient = new Gradient { - colorKeys = new[] { - new GradientColorKey(new Color(1, 0, 0), 0f), new GradientColorKey(new Color(0, 1, 0), 1f) - } - }; + colorKeys = new[] { + new GradientColorKey(new Color(1, 0, 0), 0f), + new GradientColorKey(new Color(0, 1, 0), 1f) + } + }; } } @@ -64,8 +64,8 @@ public override void Display(Double value) { } #endif - this._values = new[] {value.ToString(CultureInfo.InvariantCulture)}; - this.PlotSeries(this._values); + this._Values = new[] {value.ToString(CultureInfo.InvariantCulture)}; + this.PlotSeries(this._Values); } public override void Display(float[] values) { @@ -79,7 +79,7 @@ public override void Display(float[] values) { Debug.Log("Applying the float array " + s + " To " + this.name); } #endif - this._values = values.Select(v => v.ToString(CultureInfo.InvariantCulture)).ToArray(); + this._Values = values.Select(v => v.ToString(CultureInfo.InvariantCulture)).ToArray(); this.PlotSeries(values); } @@ -95,8 +95,8 @@ public override void Display(String values) { this._vs.Add(value); } - this._values = this._vs.ToArray(); - this.PlotSeries(this._values); + this._Values = this._vs.ToArray(); + this.PlotSeries(this._Values); } public override void Display(Vector3 value) { throw new NotImplementedException(); } @@ -111,9 +111,11 @@ public override void Display(Points.ValuePoint[] points) { #if NEODROID_DEBUG if (this.Debugging) { - var points_str = points.Aggregate( - "", - (current, point) => current + ($"({point._Pos.ToString()}, {point._Val},{point._Size})" + ", ")); + var points_str = points.Aggregate("", + (current, point) => + current + + $"({point._Pos.ToString()}, {point._Val},{point._Size})" + + ", "); Debug.Log("Applying the points " + points_str + " to " + this.name); } #endif @@ -134,6 +136,8 @@ public override void Display(Points.ValuePoint[] points) { public override void Display(Points.StringPoint point) { throw new NotImplementedException(); } public override void Display(Points.StringPoint[] points) { throw new NotImplementedException(); } + //public override void Display(Object o) { throw new NotImplementedException(); } + public override void Display(float values) { #if NEODROID_DEBUG if (this.Debugging) { @@ -141,12 +145,11 @@ public override void Display(float values) { } #endif - this._values = new[] {values.ToString(CultureInfo.InvariantCulture)}; - this.PlotSeries(this._values); + this._Values = new[] {values.ToString(CultureInfo.InvariantCulture)}; + this.PlotSeries(this._Values); } /// - /// /// /// public void ScatterPlot(Vector3[] points) { @@ -156,7 +159,7 @@ public void ScatterPlot(Vector3[] points) { #if NEODROID_DEBUG if (this.Debugging) { - var points_str = points.Aggregate("", (current, point) => current + (point.ToString() + ", ")); + var points_str = points.Aggregate("", (current, point) => current + point.ToString() + ", "); Debug.Log("Applying the points " + points_str + " To " + this.name); } #endif @@ -221,18 +224,7 @@ public void PlotSeries(string[] points) { this._particle_system.SetParticles(this._particles, points.Length); } - #if UNITY_EDITOR - void OnDrawGizmos() { - if (this.enabled) { - if (this._PlotRandomSeries) { - this.PlotSeries(PlotFunctions.SampleRandomSeries(1)); - } - } - } - #endif - /// - /// /// /// public override void PlotSeries(Points.ValuePoint[] points) { @@ -253,4 +245,4 @@ public override void PlotSeries(Points.ValuePoint[] points) { this._particle_system.SetParticles(this._particles, points.Length); } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/ScatterPlots/VectorFieldDisplayer.cs b/Runtime/Prototyping/Displayers/ScatterPlots/VectorFieldDisplayer.cs index 2102bcf8b..fbc7c7585 100644 --- a/Runtime/Prototyping/Displayers/ScatterPlots/VectorFieldDisplayer.cs +++ b/Runtime/Prototyping/Displayers/ScatterPlots/VectorFieldDisplayer.cs @@ -1,27 +1,21 @@ using System; -using System.Linq; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Plotting; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; +using droid.Runtime.Utilities.Drawing; using UnityEngine; -namespace Neodroid.Runtime.Prototyping.Displayers.ScatterPlots { +namespace droid.Runtime.Prototyping.Displayers.ScatterPlots { /// /// /// - [ExecuteInEditMode, - AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath + "VectorField" + DisplayerComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "VectorField" + + DisplayerComponentMenuPath._Postfix)] public class VectorFieldDisplayer : Displayer { - - - - dynamic _vals; - /// /// /// - protected override void Setup() { } + public override void Setup() { } public override void Display(Double value) { } @@ -39,42 +33,27 @@ public override void Display(Points.ValuePoint[] points) { } public override void Display(Points.StringPoint point) { throw new NotImplementedException(); } public override void Display(Points.StringPoint[] points) { throw new NotImplementedException(); } + //public override void Display(Object o) { throw new NotImplementedException(); } public override void Display(float values) { } void Update() { if (this._RetainLastPlot) { - if (this._vals != null) { - PlotSeries(this._vals); + if (this._Values != null) { + PlotSeries(this._Values); } } } /// - /// /// /// public void ScatterPlot(Vector3[] points) { } - /*public void PlotSeries(float[] points) { + /*public override void PlotSeries(float[] points) { }*/ - #if UNITY_EDITOR - void OnDrawGizmos() { - if (this.enabled) { - if (this._values == null || this._values.Length == 0) { - if (this._PlotRandomSeries) { - var vs = PlotFunctions.SampleRandomSeries(9); - this._values = vs.Select(v => v._Val).ToArray(); - this.PlotSeries(vs); - } - } - } - } - #endif - /// - /// /// /// public override void PlotSeries(Points.ValuePoint[] points) { @@ -84,31 +63,31 @@ public override void PlotSeries(Points.ValuePoint[] points) { } #endif - this._vals = points; + this._Values = points; foreach (var point in points) { //point._Size - switch ((int)(point._Val)) { + switch ((int)point._Val) { case 0: - DrawArrow.ForDebug(point._Pos, Vector3.forward, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.forward, Color.cyan); break; case 1: - DrawArrow.ForDebug(point._Pos, Vector3.back, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.back, Color.cyan); break; case 2: - DrawArrow.ForDebug(point._Pos, Vector3.up, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.up, Color.cyan); break; case 3: - DrawArrow.ForDebug(point._Pos, Vector3.down, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.down, Color.cyan); break; case 4: - DrawArrow.ForDebug(point._Pos, Vector3.left, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.left, Color.cyan); break; case 5: - DrawArrow.ForDebug(point._Pos, Vector3.right, Color.cyan); + NeodroidDrawingUtilities.ForDebug(point._Pos, Vector3.right, Color.cyan); break; } } } } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/Displayers/TextMeshDisplayer.cs b/Runtime/Prototyping/Displayers/TextMeshDisplayer.cs index e8b2d9ec4..f12579d5e 100644 --- a/Runtime/Prototyping/Displayers/TextMeshDisplayer.cs +++ b/Runtime/Prototyping/Displayers/TextMeshDisplayer.cs @@ -1,5 +1,5 @@ using System; -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs; using UnityEngine; #if TEXT_MESH_PRO_EXISTS @@ -74,20 +74,18 @@ public override void Display(String value) { } } #else -namespace Neodroid.Runtime.Prototyping.Displayers { +namespace droid.Runtime.Prototyping.Displayers { /// - /// /// - [ExecuteInEditMode, AddComponentMenu("Neodroid/Displayers/TextMesh")] + [ExecuteInEditMode] + [AddComponentMenu("Neodroid/Displayers/TextMesh")] public class TextMeshDisplayer : Displayer { /// - protected override void Setup() { - Debug.Log( - "TextMeshPro is not defined in project, add 'TEXT_MESH_PRO_EXISTS' to your unity projects 'define symbols' under the player settings or '-define:TEXT_MESH_PRO_EXISTS' in mcs.rsp to enable TextMeshPro displayer integration"); + public override void Setup() { + Debug.Log("TextMeshPro is not defined in project, add 'TEXT_MESH_PRO_EXISTS' to your unity projects 'define symbols' under the player settings or '-define:TEXT_MESH_PRO_EXISTS' in mcs.rsp to enable TextMeshPro displayer integration"); } /// - /// /// /// public void SetText(string text) { @@ -98,29 +96,27 @@ public void SetText(string text) { #endif } + //public override void Display(Object o) { throw new NotImplementedException(); } + /// - /// /// /// /// public override void Display(float value) { throw new NotImplementedException(); } /// - /// /// /// /// public override void Display(Double value) { throw new NotImplementedException(); } /// - /// /// /// /// public override void Display(float[] values) { throw new NotImplementedException(); } /// - /// /// /// public override void Display(String value) { @@ -144,4 +140,4 @@ public override void Display(String value) { public override void PlotSeries(Points.ValuePoint[] points) { throw new NotImplementedException(); } } } -#endif \ No newline at end of file +#endif diff --git a/Runtime/Prototyping/Evaluation/AngularVelocityEvaluation.cs b/Runtime/Prototyping/Evaluation/AngularVelocityEvaluation.cs deleted file mode 100644 index 30bbdeb75..000000000 --- a/Runtime/Prototyping/Evaluation/AngularVelocityEvaluation.cs +++ /dev/null @@ -1,41 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - [AddComponentMenu( - EvaluationComponentMenuPath._ComponentMenuPath - + "AngularVelocity" - + EvaluationComponentMenuPath._Postfix)] - public class AngularVelocityEvaluation : ObjectiveFunction { - [SerializeField] bool _penalty; - [SerializeField] Rigidbody _rigidbody; - - /// - /// - /// - /// - public override float InternalEvaluate() { - if (this._penalty) { - if (this._rigidbody) { - return -this._rigidbody.angularVelocity.magnitude; - } - } - - if (this._rigidbody) { - return 1 / (this._rigidbody.angularVelocity.magnitude + 1); - } - - return 0; - } - - /// - /// - /// - public override void InternalReset() { } - - protected override void PostSetup() { - if (this._rigidbody == null) { - this._rigidbody = FindObjectOfType(); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/EuclideanDistance.cs b/Runtime/Prototyping/Evaluation/EuclideanDistance.cs deleted file mode 100644 index 7a2230332..000000000 --- a/Runtime/Prototyping/Evaluation/EuclideanDistance.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Neodroid.Runtime.Prototyping.Actors; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - [AddComponentMenu( - EvaluationComponentMenuPath._ComponentMenuPath - + "EuclideanDistance" - + EvaluationComponentMenuPath._Postfix)] - class EuclideanDistance : ObjectiveFunction { - [SerializeField] Transform _g1; - [SerializeField] Transform _g2; - - public override void InternalReset() { } - - public override float InternalEvaluate() { - return Vector3.Distance(this._g1.position, this._g2.position); - } - - protected override void PostSetup() { - if (this._g1 == null) { - this._g1 = FindObjectOfType().transform; - } - - if (this._g2 == null) { - this._g2 = this.transform; - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/EvaluationComponentMenuPath.cs b/Runtime/Prototyping/Evaluation/EvaluationComponentMenuPath.cs deleted file mode 100644 index c2c301633..000000000 --- a/Runtime/Prototyping/Evaluation/EvaluationComponentMenuPath.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Neodroid.Runtime.Prototyping.Evaluation { - /// - /// - /// - public static class EvaluationComponentMenuPath { - public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Evaluation/"; - public const string _Postfix = "Evaluation"; - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/ObjectiveFunction.cs b/Runtime/Prototyping/Evaluation/ObjectiveFunction.cs deleted file mode 100644 index 58e81de9a..000000000 --- a/Runtime/Prototyping/Evaluation/ObjectiveFunction.cs +++ /dev/null @@ -1,247 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Evaluation.Terms; -using Neodroid.Runtime.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted; -using Neodroid.Runtime.Utilities.GameObjects; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - /// - /// - /// - [Serializable] - public abstract class ObjectiveFunction : PrototypingGameObject, - IHasRegister, - //IResetable, - IObjective { - /// - /// - /// - public float SolvedThreshold { - get { return this._solved_threshold; } - set { this._solved_threshold = value; } - } - - /// - /// - /// - public override String PrototypingTypeName { - get { return ""; } - } - - /// - /// - /// - public IPrototypingEnvironment ParentEnvironment { - get { return this._environment; } - set { this._environment = (PrototypingEnvironment)value; } - } - - /// - /// - /// - /// - public virtual void Register(Term term) { this.Register(term, term.Identifier); } - - /// - /// - /// - /// - /// - public void Register(Term term, string identifier) { - if (!this._Extra_Terms_Dict.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"ObjectiveFunction {this.name} has registered term {identifier}"); - } - #endif - - this._Extra_Terms_Dict.Add(identifier, term); - this._Extra_Term_Weights.Add(term, 1); - } else { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"WARNING! Please check for duplicates, ObjectiveFunction {this.name} already has term {identifier} registered"); - } - #endif - } - } - - /// - /// - /// - /// - /// - public void UnRegister(Term term, string identifier) { - if (this._Extra_Terms_Dict.ContainsKey(identifier)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"ObjectiveFunction {this.name} unregistered term {identifier}"); - } - #endif - - this._Extra_Term_Weights.Remove(this._Extra_Terms_Dict[identifier]); - this._Extra_Terms_Dict.Remove(identifier); - } - } - - /// - /// - /// - protected override void Clear() { - this._Extra_Term_Weights.Clear(); - this._Extra_Terms_Dict.Clear(); - } - - /// - /// - /// - /// - public void UnRegister(Term term) { this.UnRegister(term, term.Identifier); } - - /// - /// - /// - protected sealed override void Setup() { - //foreach (var go in this._extra_terms_external) - // this.Register(go); - - if (this.ParentEnvironment == null) { - this.ParentEnvironment = FindObjectOfType(); - } - - this.PostSetup(); - } - - /// - /// - /// - protected virtual void PostSetup() { } - - /// - /// - /// - /// - public void SignalString(DataPoller recipient) { - recipient.PollData( - $"{this._last_signal.ToString(CultureInfo.InvariantCulture)}, {this._Episode_Return}"); - } - - /// - /// - /// - [SerializeField] - public float _Episode_Return; - - /// - /// - /// - protected override void RegisterComponent() { } - - /// - /// - /// - protected override void UnRegisterComponent() { } - - /// - /// - /// - /// - public abstract float InternalEvaluate(); - - /// - /// - /// - /// - public float Evaluate() { - var signal = 0.0f; - signal += this.InternalEvaluate(); - signal += this.EvaluateExtraTerms(); - - //signal = signal * Mathf.Pow(this._internal_discount_factor, this._environment.CurrentFrameNumber); - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log(signal); - } - #endif - - this._last_signal = signal; - - this._Episode_Return += signal; - - return signal; - } - - /// - /// - public void EnvironmentReset() { - this._last_signal = 0; - this._Episode_Return = 0; - this.InternalReset(); - } - - /// - /// - /// - public abstract void InternalReset(); - - /// - /// - /// - /// - /// - public virtual void AdjustExtraTermsWeights(Term term, float new_weight) { - if (this._Extra_Term_Weights.ContainsKey(term)) { - this._Extra_Term_Weights[term] = new_weight; - } - } - - /// - /// - /// - /// - public virtual float EvaluateExtraTerms() { - float extra_terms_output = 0; - foreach (var term in this._Extra_Terms_Dict.Values) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Extra term: {term}"); - } - #endif - - extra_terms_output += this._Extra_Term_Weights[term] * term.Evaluate(); - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Extra terms signal: {extra_terms_output}"); - } - #endif - return extra_terms_output; - } - - #region Fields - - [Header("References", order = 100), SerializeField] - //[SerializeField]float _internal_discount_factor = 1.0f; - PrototypingEnvironment _environment; - - //[SerializeField] Term[] _extra_terms_external; - - [SerializeField] protected Dictionary _Extra_Terms_Dict = new Dictionary(); - - [SerializeField] protected Dictionary _Extra_Term_Weights = new Dictionary(); - - [Header("General", order = 101), SerializeField] - float _solved_threshold; - - [SerializeField] float _last_signal; - - #endregion - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/PoseDeviance.cs b/Runtime/Prototyping/Evaluation/PoseDeviance.cs deleted file mode 100644 index 9dd3e7123..000000000 --- a/Runtime/Prototyping/Evaluation/PoseDeviance.cs +++ /dev/null @@ -1,147 +0,0 @@ -using System; -using Neodroid.Runtime.Utilities.BoundingBoxes; -using Neodroid.Runtime.Utilities.Misc.Extensions; -using UnityEngine; -using Object = System.Object; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - /// - /// - /// - [AddComponentMenu( - EvaluationComponentMenuPath._ComponentMenuPath + "PoseDeviance" + EvaluationComponentMenuPath._Postfix)] - public class PoseDeviance : ObjectiveFunction { - /// - /// - /// - /// - public override float InternalEvaluate() { - var reward = this._default_reward; - - /*if (this._playable_area != null && !this._playable_area.Bounds.Intersects(this._actor_transform.ActorBounds)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Outside playable area"); - } - #endif - this.ParentEnvironment.Terminate("Outside playable area"); - }*/ - - var distance = Mathf.Abs( - Vector3.Distance(this._goal.transform.position, this._actor_transform.transform.position)); - var angle = Quaternion.Angle(this._goal.transform.rotation, this._actor_transform.transform.rotation); - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"Distance: {distance}"); - Debug.Log($"Angle: {angle}"); - } - #endif - - if (!this._sparse) { - reward += this._distance_nominator / (Mathf.Pow(this._distance_base, distance) + float.Epsilon); - reward += this._angle_nominator / (Mathf.Pow(this._angle_base, angle) + float.Epsilon); - - if (this._state_full) { - if (reward <= this._peak_reward) { - reward = 0.0f; - } else { - this._peak_reward = reward; - } - } - } - - - if (distance < this._goal_reached_radius) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Within range of goal"); - } - #endif - - reward += this._solved_reward; - if(this._terminate_on_goal_reached) { - this.ParentEnvironment?.Terminate("Within range of goal"); - } - } - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log( - $"Frame Number: {this.ParentEnvironment?.CurrentFrameNumber}, " - + $"Terminated: {this.ParentEnvironment?.Terminated}, " - + $"Last Reason: {this.ParentEnvironment?.LastTerminationReason}, " - + $"Internal Feedback Signal: {reward}, " - + $"Distance: {distance}"); - } - #endif - - return reward; - } - - /// - /// - /// - public override void InternalReset() { this._peak_reward = 0.0f; } - - /// - /// - /// - protected override void PostSetup() { - if (!this._goal) { - this._goal = FindObjectOfType(); - } - - if (!this._actor_transform) { - this._actor_transform = FindObjectOfType(); - } - - if (this._obstructions ==null|| this._obstructions.Length <= 0) { - this._obstructions = FindObjectsOfType(); - } - - if (!this._playable_area) { - this._playable_area = FindObjectOfType(); - } - } - - #region Fields - - [Header("Specific", order = 102), SerializeField] - float _peak_reward; - - [SerializeField, Range(0.1f, 10f)] float _distance_base = 2f; - [SerializeField, Range(0.1f, 10f)] float _distance_nominator = 5f; - [SerializeField, Range(0.1f, 10f)] float _angle_base = 6f; - [SerializeField, Range(0.1f, 10f)] float _angle_nominator = 3f; - - [SerializeField] bool _sparse = true; - - [SerializeField] Transform _goal; - - [SerializeField] Transform _actor_transform; - - [SerializeField] BoundingBox _playable_area; - - [SerializeField] Obstruction[] _obstructions; - - [SerializeField] bool _state_full; - [SerializeField] float _goal_reached_radius = 0.01f; // Equivalent to 1 cm. - - /// - /// - /// - [SerializeField] - float _solved_reward = 1000.0f; - - /// - /// - /// - [SerializeField] - float _default_reward = -0.01f; - - [SerializeField] bool _terminate_on_obstruction_collision; //TODO: implement - [SerializeField] bool _terminate_on_goal_reached=true; - - #endregion - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/PunishmentFunction.cs b/Runtime/Prototyping/Evaluation/PunishmentFunction.cs deleted file mode 100644 index f9d979d37..000000000 --- a/Runtime/Prototyping/Evaluation/PunishmentFunction.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Neodroid.Runtime.Utilities.Misc.Extensions; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - /// - /// - /// - [AddComponentMenu( - EvaluationComponentMenuPath._ComponentMenuPath - + "PunishmentFunction" - + EvaluationComponentMenuPath._Postfix), RequireComponent(typeof(Rigidbody))] - public class PunishmentFunction : ObjectiveFunction { - [SerializeField] int _hits; - - //[SerializeField] LayerMask _layer_mask; - - [SerializeField] GameObject _player; - [SerializeField] string _avoid_tag = "balls"; - - // Use this for initialization - /// - /// - /// - protected override void PostSetup() { - this.ResetHits(); - - var tagged_gos = GameObject.FindGameObjectsWithTag(this._avoid_tag); - - foreach (var ball in tagged_gos) { - if (ball) { - var publisher = ball.AddComponent(); - publisher.CollisionDelegate = this.OnChildCollision; - } - } - } - - void OnChildCollision(Collision collision) { - if (collision.collider.name == this._player.name) { - this._hits += 1; - } - - if (true) { - Debug.Log(this._hits); - } - } - - void ResetHits() { this._hits = 0; } - - /// - /// - /// - public override void InternalReset() { this.ResetHits(); } - - /// - /// - /// - /// - public override float InternalEvaluate() { return this._hits * -1f; } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/ReachArea.cs b/Runtime/Prototyping/Evaluation/ReachArea.cs deleted file mode 100644 index 39d074001..000000000 --- a/Runtime/Prototyping/Evaluation/ReachArea.cs +++ /dev/null @@ -1,260 +0,0 @@ -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Prototyping.Observers; -using Neodroid.Runtime.Utilities.BoundingBoxes; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Extensions; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - enum ActorOverlapping { - Inside_area_, - Outside_area_ - } - - enum ActorColliding { - Not_colliding_, - Colliding_ - } - - //[RequireComponent (typeof(BoundingBox))] - //[RequireComponent (typeof(BoxCollider))] - [AddComponentMenu( - EvaluationComponentMenuPath._ComponentMenuPath + "ReachArea" + EvaluationComponentMenuPath._Postfix)] - public class ReachArea : ObjectiveFunction { - [SerializeField] Collider _actor; - - [SerializeField] Collider _area; - - [SerializeField] bool _based_on_tags; - [SerializeField] ActorColliding _colliding = ActorColliding.Not_colliding_; - - [SerializeField] Obstruction[] _obstructions; - - //Used for.. if outside playable area then reset - [SerializeField] ActorOverlapping _overlapping = ActorOverlapping.Outside_area_; - - [SerializeField] BoundingBox _playable_area; - - public override void InternalReset() { } - - public override float InternalEvaluate() { - /*var regularising_term = 0f; - - foreach (var ob in _obstructions) { - RaycastHit ray_hit; - Physics.Raycast (_actor.transform.position, (ob.transform.position - _actor.transform.position).normalized, out ray_hit, LayerMask.NameToLayer ("Obstruction")); - regularising_term += -Mathf.Abs (Vector3.Distance (ray_hit.point, _actor.transform.position)); - //regularising_term += -Mathf.Abs (Vector3.Distance (ob.transform.position, _actor.transform.position)); - } - - reward += 0.2 * regularising_term;*/ - - //reward += 1 / Mathf.Abs (Vector3.Distance (_area.transform.position, _actor.transform.position)); // Inversely porpotional to the absolute distance, closer higher reward - - if (this._overlapping == ActorOverlapping.Inside_area_) { - this.ParentEnvironment.Terminate("Inside goal area"); - return 1f; - } - - if (this._colliding == ActorColliding.Colliding_) { - this.ParentEnvironment.Terminate("Actor colliding with obstruction"); - } - - if (this._playable_area && this._actor) { - if (!this._playable_area.Bounds.Intersects(this._actor.GetComponent().bounds)) { - this.ParentEnvironment.Terminate("Actor is outside playable area"); - } - } - - return 0f; - } - - protected override void PostSetup() { - if (!this._area) { - this._area = FindObjectOfType().gameObject.GetComponent(); - } - - if (!this._actor) { - this._actor = FindObjectOfType().gameObject.GetComponent(); - } - - if (this._obstructions.Length <= 0) { - this._obstructions = FindObjectsOfType(); - } - - if (!this._playable_area) { - this._playable_area = FindObjectOfType(); - } - - NeodroidUtilities.RegisterCollisionTriggerCallbacksOnChildren( - this, - this._area.transform, - this.OnCollisionEnterChild, - this.OnTriggerEnterChild, - this.OnCollisionExitChild, - this.OnTriggerExitChild, - this.OnCollisionStayChild, - this.OnTriggerStayChild, - this.Debugging); - - NeodroidUtilities.RegisterCollisionTriggerCallbacksOnChildren( - this, - this._actor.transform, - this.OnCollisionEnterChild, - this.OnTriggerEnterChild, - this.OnCollisionExitChild, - this.OnTriggerExitChild, - this.OnCollisionStayChild, - this.OnTriggerStayChild, - this.Debugging); - } - - void OnTriggerEnterChild(GameObject child_game_object, Collider other_game_object) { - if (this._actor) { - if (this._based_on_tags) { - if (child_game_object.CompareTag(this._area.tag) && other_game_object.CompareTag(this._actor.tag)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is inside area"); - } - #endif - - this._overlapping = ActorOverlapping.Inside_area_; - } - - if (child_game_object.CompareTag(this._actor.tag) && other_game_object.CompareTag("Obstruction")) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is colliding"); - } - #endif - - this._colliding = ActorColliding.Colliding_; - } - } else { - if (child_game_object == this._area.gameObject - && other_game_object.gameObject == this._actor.gameObject) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is inside area"); - } - #endif - - this._overlapping = ActorOverlapping.Inside_area_; - } - - if (child_game_object == this._actor.gameObject && other_game_object.CompareTag("Obstruction")) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is colliding"); - } - #endif - - this._colliding = ActorColliding.Colliding_; - } - } - } - } - - void OnTriggerStayChild(GameObject child_game_object, Collider other_game_object) { - if (this._actor) { - if (this._based_on_tags) { - if (child_game_object.CompareTag(this._area.tag) && other_game_object.CompareTag(this._actor.tag)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is inside area"); - } - #endif - - this._overlapping = ActorOverlapping.Inside_area_; - } - - if (child_game_object.CompareTag(this._actor.tag) && other_game_object.CompareTag("Obstruction")) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is colliding"); - } - #endif - - this._colliding = ActorColliding.Colliding_; - } - } else { - if (child_game_object == this._area.gameObject - && other_game_object.gameObject == this._actor.gameObject) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is inside area"); - } - #endif - - this._overlapping = ActorOverlapping.Inside_area_; - } - - if (child_game_object == this._actor.gameObject && other_game_object.CompareTag("Obstruction")) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is colliding"); - } - #endif - - this._colliding = ActorColliding.Colliding_; - } - } - } - } - - void OnTriggerExitChild(GameObject child_game_object, Collider other_game_object) { - if (this._actor) { - if (this._based_on_tags) { - if (child_game_object.CompareTag(this._area.tag) && other_game_object.CompareTag(this._actor.tag)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is outside area"); - } - #endif - - this._overlapping = ActorOverlapping.Outside_area_; - } - - if (child_game_object.CompareTag(this._actor.tag) && other_game_object.CompareTag("Obstruction")) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is not colliding"); - } - #endif - - this._colliding = ActorColliding.Not_colliding_; - } - } else { - if (child_game_object == this._area.gameObject - && other_game_object.gameObject == this._actor.gameObject) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is outside area"); - } - #endif - - this._overlapping = ActorOverlapping.Outside_area_; - } - - if (child_game_object == this._actor.gameObject && other_game_object.CompareTag("Obstruction")) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is not colliding"); - } - #endif - - this._colliding = ActorColliding.Not_colliding_; - } - } - } - } - - void OnCollisionEnterChild(GameObject child_game_object, Collision collision) { } - - void OnCollisionStayChild(GameObject child_game_object, Collision collision) { } - - void OnCollisionExitChild(GameObject child_game_object, Collision collision) { } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/ReachGoal.cs b/Runtime/Prototyping/Evaluation/ReachGoal.cs deleted file mode 100644 index 8f24a67d4..000000000 --- a/Runtime/Prototyping/Evaluation/ReachGoal.cs +++ /dev/null @@ -1,112 +0,0 @@ -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using Neodroid.Runtime.Utilities.Misc.Grid; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - [AddComponentMenu( - EvaluationComponentMenuPath._ComponentMenuPath + "ReachGoal" + EvaluationComponentMenuPath._Postfix)] - public class ReachGoal : ObjectiveFunction { - [SerializeField] Actor _actor; - - [SerializeField] bool _based_on_tags; - - [SerializeField] EmptyCell _goal; - - //Used for.. if outside playable area then reset - [SerializeField] ActorOverlapping _overlapping = ActorOverlapping.Outside_area_; - - public override float InternalEvaluate() { - var distance = Mathf.Abs( - Vector3.Distance(this._goal.transform.position, this._actor.transform.position)); - - if (this._overlapping == ActorOverlapping.Inside_area_ || distance < 0.5f) { - this.ParentEnvironment.Terminate("Inside goal area"); - return 1f; - } - - return 0f; - } - - public override void InternalReset() { - this.Setup(); - this._overlapping = ActorOverlapping.Outside_area_; - } - - public void SetGoal(EmptyCell goal) { - this._goal = goal; - this.InternalReset(); - } - - protected override void PostSetup() { - if (!this._goal) { - this._goal = FindObjectOfType(); - } - - if (!this._actor) { - this._actor = FindObjectOfType(); - } - - if (this._goal) { - NeodroidUtilities.RegisterCollisionTriggerCallbacksOnChildren( - this, - this._goal.transform, - null, - this.OnTriggerEnterChild, - debug : this.Debugging); - } - - if (this._actor) { - NeodroidUtilities.RegisterCollisionTriggerCallbacksOnChildren( - this, - this._actor.transform, - null, - this.OnTriggerEnterChild, - debug : this.Debugging); - } - } - - void OnTriggerEnterChild(GameObject child_game_object, Collider other_game_object) { - Debug.Log("triggered"); - if (this._actor) { - if (this._based_on_tags) { - if (other_game_object.CompareTag(this._actor.tag)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is inside area"); - } - #endif - - this._overlapping = ActorOverlapping.Inside_area_; - } - } else { - if (child_game_object == this._goal.gameObject - && other_game_object.gameObject == this._actor.gameObject) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is inside area"); - } - #endif - this._overlapping = ActorOverlapping.Inside_area_; - } - } - } - } - - /// - /// - /// - enum ActorOverlapping { - /// - /// - /// - Inside_area_, - - /// - /// - /// - Outside_area_ - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/RestInArea.cs b/Runtime/Prototyping/Evaluation/RestInArea.cs deleted file mode 100644 index f0b05a2aa..000000000 --- a/Runtime/Prototyping/Evaluation/RestInArea.cs +++ /dev/null @@ -1,176 +0,0 @@ -using System.Collections; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Prototyping.Observers; -using Neodroid.Runtime.Utilities.BoundingBoxes; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Extensions; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - /// - /// - /// - [AddComponentMenu( - EvaluationComponentMenuPath._ComponentMenuPath + "RestInArea" + EvaluationComponentMenuPath._Postfix)] - public class RestInArea : ObjectiveFunction { - [SerializeField] float _resting_time = 3f; - [SerializeField] Actor _actor; - - [SerializeField] Collider _area; - [SerializeField] bool _is_resting; - - [SerializeField] Obstruction[] _obstructions; - - //Used for.. if outside playable area then reset - [SerializeField] ActorOverlapping _overlapping = ActorOverlapping.Outside_area_; - - [SerializeField] BoundingBox _playable_area; - [SerializeField] Coroutine _wait_for_resting; - [SerializeField] bool _sparse; - WaitForSeconds _wait_for_seconds = new WaitForSeconds(3f); - - /// - /// - /// - /// - public override float InternalEvaluate() { - var signal = 0f; - - if (this._overlapping == ActorOverlapping.Inside_area_ && this._is_resting) { - if (this._actor is KillableActor) { - if (((KillableActor)this._actor).IsAlive) { - this.ParentEnvironment.Terminate("Inside goal area"); - return 1f; - } - } else { - this.ParentEnvironment.Terminate("Inside goal area"); - return 1f; - } - } - - if (!this._sparse) { - signal += 1 / Vector3.Distance(this._actor.transform.position, this._area.transform.position); - } - - if (this._playable_area && this._actor) { - if (!this._playable_area.Bounds.Intersects(this._actor.GetComponent().bounds)) { - this.ParentEnvironment.Terminate("Actor is outside playable area"); - } - } - - return signal; - } - - /// - /// - /// - public override void InternalReset() { - if (this._wait_for_resting != null) { - this.StopCoroutine(this._wait_for_resting); - } - - this._is_resting = false; - } - - IEnumerator WaitForResting() { - yield return this._wait_for_seconds; - - this._is_resting = true; - } - - protected override void PostSetup() { - if (!this._area) { - this._area = FindObjectOfType().gameObject.GetComponent(); - } - - if (!this._actor) { - this._actor = FindObjectOfType(); - } - - if (this._obstructions.Length <= 0) { - this._obstructions = FindObjectsOfType(); - } - - if (!this._playable_area) { - this._playable_area = FindObjectOfType(); - } - - NeodroidUtilities.RegisterCollisionTriggerCallbacksOnChildren( - this, - this._area.transform, - null, - this.OnTriggerEnterChild, - null, - this.OnTriggerExitChild, - null, - this.OnTriggerStayChild, - this.Debugging); - - NeodroidUtilities.RegisterCollisionTriggerCallbacksOnChildren( - this, - this._actor.transform, - null, - this.OnTriggerEnterChild, - null, - this.OnTriggerExitChild, - null, - this.OnTriggerStayChild, - this.Debugging); - this._wait_for_seconds = new WaitForSeconds(this._resting_time); - } - - void OnTriggerEnterChild(GameObject child_game_object, Collider other_game_object) { - if (this._actor) { - if (child_game_object == this._area.gameObject - && other_game_object.gameObject == this._actor.gameObject) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is inside area"); - } - #endif - - this._overlapping = ActorOverlapping.Inside_area_; - if (this._wait_for_resting != null) { - this.StopCoroutine(this._wait_for_resting); - } - - this._wait_for_resting = this.StartCoroutine(this.WaitForResting()); - } - } - } - - void OnTriggerStayChild(GameObject child_game_object, Collider other_game_object) { - if (this._actor) { - if (child_game_object == this._area.gameObject - && other_game_object.gameObject == this._actor.gameObject) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is inside area"); - } - #endif - - this._overlapping = ActorOverlapping.Inside_area_; - } - } - } - - void OnTriggerExitChild(GameObject child_game_object, Collider other_game_object) { - if (this._actor) { - if (child_game_object == this._area.gameObject - && other_game_object.gameObject == this._actor.gameObject) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Actor is outside area"); - } - #endif - - this._overlapping = ActorOverlapping.Outside_area_; - if (this._wait_for_resting != null) { - this.StopCoroutine(this._wait_for_resting); - } - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/SeekAndAvoidEvaluation.cs b/Runtime/Prototyping/Evaluation/SeekAndAvoidEvaluation.cs deleted file mode 100644 index 207a8ebd3..000000000 --- a/Runtime/Prototyping/Evaluation/SeekAndAvoidEvaluation.cs +++ /dev/null @@ -1,180 +0,0 @@ -using System; -using System.Collections.Generic; -using Neodroid.Runtime.Utilities.Sensors; -using UnityEngine; -using Random = UnityEngine.Random; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - /// - /// - /// - public class SeekAndAvoidEvaluation : ObjectiveFunction { - [SerializeField] int _num_collectibles = 50; - [SerializeField] int _num_avoidables = 50; - [SerializeField] int _spawn_radius = 10; - [SerializeField] int _end_game_radius = 10; - [SerializeField] int _reward = 1; - [SerializeField] int _penalty = -1; - Vector3 _initial_actor_position; - - [SerializeField] Transform _actor; - [SerializeField] GameObject _collectible; - [SerializeField] GameObject _avoidable; - float _score; - List _spawned_locations; - List _collectibles; - List _avoidables; - - /// - /// - /// - /// - public override Single InternalEvaluate() { - // The game ends if the number of good balls is 0, or if the robot is too far from start - var actor = this._actor; - if (actor != null) { - var dist = Vector3.Distance(this._initial_actor_position, actor.position); - var game_objects = this._collectibles; - var is_over = game_objects != null && (game_objects.Count == 0 || dist > this._end_game_radius); - - if (is_over) { - this.ParentEnvironment.Terminate($"Ending Game: Dist {dist} radius {this._spawn_radius}"); - } - } - - return this._score; - } - - /// - /// - /// - public override void InternalReset() { - if (!Application.isPlaying) { - return; - } - - var actor = this._actor; - if (actor != null) { - this._initial_actor_position = actor.position; - var remote_sensor = this._actor.GetComponentInChildren(); - if (!remote_sensor) { - var col = this._actor.GetComponentInChildren(); - if (col) { - remote_sensor = col.gameObject.AddComponent(); - } - } - - if (remote_sensor) { - remote_sensor.Caller = this; - remote_sensor.OnTriggerEnterDelegate = this.OnChildTriggerEnter; - remote_sensor.OnCollisionEnterDelegate = this.OnChildTriggerEnter; - } - } - - this.ClearEnvironment(); - this.SpawnCollectibles(); - this.SpawnAvoidables(); - } - - void OnChildTriggerEnter(GameObject child_game_object, Collision collision) { - this.OnChildTriggerEnter(child_game_object, collision.collider); - } - - /// - /// - /// - public override String PrototypingTypeName { - get { return "SeekAndAvoidListener"; } - } - - void OnChildTriggerEnter(GameObject child_game_object, Collider collider1) { - #if NEODROID_DEBUG - if (this.Debugging) { - print($"{child_game_object} is colliding with {collider1}"); - } - #endif - - var collectible = this._collectible; - if (collectible != null && collider1.gameObject.name.Contains(collectible.name)) { - this._collectibles.Remove(collider1.gameObject); - Destroy(collider1.gameObject); - this._score += this._reward; - } - - var game_object = this._avoidable; - if (game_object != null && collider1.gameObject.name.Contains(game_object.name)) { - this._avoidables.Remove(collider1.gameObject); - this._score += this._penalty; - Destroy(collider1.gameObject); - } - } - - void SpawnCollectibles() { - for (var i = 0; i < this._num_collectibles; i++) { - var game_object = this._collectible; - if (game_object != null) { - var collectible = this.RandomSpawn(this._collectible, this._initial_actor_position); - this._collectibles.Add(collectible); - } - } - } - - void SpawnAvoidables() { - for (var i = 0; i < this._num_avoidables; i++) { - var game_object = this._avoidable; - if (game_object != null) { - var avoidable = this.RandomSpawn(this._avoidable, this._initial_actor_position); - this._avoidables.Add(avoidable); - } - } - } - - GameObject RandomSpawn(GameObject prefab, Vector3 position) { - this._spawned_locations.Add(position); - - if (prefab != null) { - Vector3 location; - do { - location = this._actor.transform.position; - location.x += Random.Range(-this._spawn_radius, this._spawn_radius); - location.y = position.y + 1f; - location.z += Random.Range(-this._spawn_radius, this._spawn_radius); - } while (this._spawned_locations.Contains(location)); - - this._spawned_locations.Add(location); - - return Instantiate(prefab, location, Quaternion.identity, this.ParentEnvironment.Transform); - } - - return null; - } - - void ClearEnvironment() { - if (this._spawned_locations != null) { - this._spawned_locations.Clear(); - } else { - this._spawned_locations = new List(); - } - - if (this._collectibles != null) { - foreach (var obj in this._collectibles) { - Destroy(obj); - } - - this._collectibles.Clear(); - } else { - this._collectibles = new List(); - } - - if (this._avoidables != null) { - foreach (var obj in this._avoidables) { - Destroy(obj); - } - - this._avoidables.Clear(); - } else { - this._avoidables = new List(); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/Tasks/TaskSequence.cs b/Runtime/Prototyping/Evaluation/Tasks/TaskSequence.cs deleted file mode 100644 index 236534982..000000000 --- a/Runtime/Prototyping/Evaluation/Tasks/TaskSequence.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using Neodroid.Runtime.Prototyping.Observers.Grid; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation.Tasks { - //[ExecuteInEditMode] - /// - /// - /// - public class TaskSequence : NeodroidTask { - [SerializeField] GoalCellObserver _current_goal_cell; - - [SerializeField] Stack _goal_stack; - - [SerializeField] GoalCellObserver[] _sequence; - - public GoalCellObserver CurrentGoalCell { - get { return this._current_goal_cell; } - private set { this._current_goal_cell = value; } - } - - void Start() { - if (this._sequence == null || this._sequence.Length == 0) { - this._sequence = FindObjectsOfType(); - Array.Sort(this._sequence, (g1, g2) => g1.OrderIndex.CompareTo(g2.OrderIndex)); - } - - Array.Reverse(this._sequence); - this._goal_stack = new Stack(this._sequence); - this.CurrentGoalCell = this.PopGoal(); - } - - public GoalCellObserver[] GetSequence() { return this._sequence; } - - public GoalCellObserver PopGoal() { - this.CurrentGoalCell = this._goal_stack.Pop(); - return this.CurrentGoalCell; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/Terms.meta b/Runtime/Prototyping/Evaluation/Terms.meta deleted file mode 100644 index d1dc35cbf..000000000 --- a/Runtime/Prototyping/Evaluation/Terms.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e74bcf9381bdc4d0db9f13f367894d72 -folderAsset: yes -timeCreated: 1519896799 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Evaluation/Terms/CollidersPunishmentTerm.cs b/Runtime/Prototyping/Evaluation/Terms/CollidersPunishmentTerm.cs deleted file mode 100644 index e8e271e05..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/CollidersPunishmentTerm.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Linq; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation.Terms { - /// - /// - /// - [AddComponentMenu( - TermComponentMenuPath._ComponentMenuPath + "CollidersPunishment" + TermComponentMenuPath._Postfix)] - public class CollidersPunishmentTerm : Term { - /// - /// - /// - [SerializeField] - Collider[] _avoid_collders; - - /// - /// - /// - [SerializeField] - Collider _subject_collider; - - /// - /// - /// - /// - public override float Evaluate() { - if (this._avoid_collders.Any(a => a.bounds.Intersects(this._subject_collider.bounds))) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Intersecting bounds"); - } - #endif - - return -1; - } - - return 0; - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "CollidersPunishment"; } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/Terms/CollidersPunishmentTerm.cs.meta b/Runtime/Prototyping/Evaluation/Terms/CollidersPunishmentTerm.cs.meta deleted file mode 100644 index 082e7e4b9..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/CollidersPunishmentTerm.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eaf0864c173dc49e99dc343bf5d70b44 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Evaluation/Terms/CollsionsPunishmentTerm.cs b/Runtime/Prototyping/Evaluation/Terms/CollsionsPunishmentTerm.cs deleted file mode 100644 index c32ad7a95..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/CollsionsPunishmentTerm.cs +++ /dev/null @@ -1,23 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation.Terms { - [AddComponentMenu( - TermComponentMenuPath._ComponentMenuPath + "CollisionPunishment" + TermComponentMenuPath._Postfix)] - public class CollsionsPunishmentTerm : Term { - [SerializeField] Collider _a; - - [SerializeField] Collider _b; - - public override float Evaluate() { - if (this._a.bounds.Intersects(this._b.bounds)) { - return -1; - } - - return 0; - } - - public override string PrototypingTypeName { - get { return "CollisionPunishment"; } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/Terms/CollsionsPunishmentTerm.cs.meta b/Runtime/Prototyping/Evaluation/Terms/CollsionsPunishmentTerm.cs.meta deleted file mode 100644 index 7a1af7b18..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/CollsionsPunishmentTerm.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e9b809464aba54f41823f3b373107de1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Evaluation/Terms/RushTerm.cs b/Runtime/Prototyping/Evaluation/Terms/RushTerm.cs deleted file mode 100644 index 3855c5885..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/RushTerm.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation.Terms { - [AddComponentMenu(TermComponentMenuPath._ComponentMenuPath + "Rush" + TermComponentMenuPath._Postfix)] - public class RushTerm : Term { - [SerializeField] float _penalty_size = 0.01f; - [SerializeField] IPrototypingEnvironment _env; - - /// - /// - /// - protected override void Setup() { - if (this._env == null) { - //this._env = FindObjectOfType(); - } - } - - /// - /// - /// - /// - public override float Evaluate() { - if (this._env != null) { - return -(1f / this._env.EpisodeLength); - } - - return -this._penalty_size; - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Rush"; } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/Terms/RushTerm.cs.meta b/Runtime/Prototyping/Evaluation/Terms/RushTerm.cs.meta deleted file mode 100644 index 2c6f955a2..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/RushTerm.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0fc16b1d967634df9b0e4b0b6bed04fd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Evaluation/Terms/Term.cs b/Runtime/Prototyping/Evaluation/Terms/Term.cs deleted file mode 100644 index a82e5bee9..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/Term.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; - -namespace Neodroid.Runtime.Prototyping.Evaluation.Terms { - /// - /// - /// - [Serializable] - public abstract class Term : PrototypingGameObject { - /// - /// - /// - /// - public abstract float Evaluate(); - - /// - /// - /// - public abstract override String PrototypingTypeName { get; } - - /// - /// - /// - ObjectiveFunction _objective_function; - - /// - /// - /// - protected override void RegisterComponent() { - this._objective_function = NeodroidUtilities.MaybeRegisterComponent(this._objective_function, this); - } - - /// - /// - /// - protected override void UnRegisterComponent() { - if (this._objective_function) { - this._objective_function.UnRegister(this); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/Terms/Term.cs.meta b/Runtime/Prototyping/Evaluation/Terms/Term.cs.meta deleted file mode 100644 index 3d0eb318d..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/Term.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 50d6744fe8e6041f282a882f00fe025e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Evaluation/Terms/TermComponentMenuPath.cs b/Runtime/Prototyping/Evaluation/Terms/TermComponentMenuPath.cs deleted file mode 100644 index aa89679e6..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/TermComponentMenuPath.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Neodroid.Runtime.Prototyping.Evaluation.Terms { - /// - /// - /// - public static class TermComponentMenuPath { - public const string _ComponentMenuPath = EvaluationComponentMenuPath._ComponentMenuPath + "Term/"; - public const string _Postfix = "Term"; - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Evaluation/Terms/TermComponentMenuPath.cs.meta b/Runtime/Prototyping/Evaluation/Terms/TermComponentMenuPath.cs.meta deleted file mode 100644 index 2c61cd31d..000000000 --- a/Runtime/Prototyping/Evaluation/Terms/TermComponentMenuPath.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4fdc3f94133d04d16897da53e4d2cec6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Evaluation/VelocityEvaluation.cs b/Runtime/Prototyping/Evaluation/VelocityEvaluation.cs deleted file mode 100644 index 297da6fc3..000000000 --- a/Runtime/Prototyping/Evaluation/VelocityEvaluation.cs +++ /dev/null @@ -1,54 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Evaluation { - /// - /// - /// - public class VelocityEvaluation : ObjectiveFunction { - /// - /// - /// - [SerializeField] - Rigidbody _rigidbody; - - /// - /// - /// - public override void InternalReset() { } - - /// - /// - /// - /// - public override float InternalEvaluate() { - var vel_mag = this._rigidbody.velocity.magnitude; - - this.IsOutsideBound(); - - return vel_mag; - } - - /// - /// - /// - void IsOutsideBound() { - if (this.ParentEnvironment.PlayableArea && this._rigidbody) { - var env_bounds = this.ParentEnvironment.PlayableArea.Bounds; - var rb_bounds = this._rigidbody.GetComponent().bounds; - var intersects = env_bounds.Intersects(rb_bounds); - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"{this.ParentEnvironment.Identifier} - {env_bounds}"); - Debug.Log($"{this._rigidbody.name} - {rb_bounds}"); - Debug.Log($"Is intersecting - {intersects}"); - } - #endif - - if (!intersects) { - this.ParentEnvironment.Terminate("Actor is outside playable area"); - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Internals/ActionCounter.cs b/Runtime/Prototyping/Internals/ActionCounter.cs deleted file mode 100644 index 8c42fc858..000000000 --- a/Runtime/Prototyping/Internals/ActionCounter.cs +++ /dev/null @@ -1,58 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Internals { - /// - /// - /// - public class ActionCounter : EnvironmentListener { - [SerializeField] IPrototypingEnvironment _environment; - - /// - /// - /// - public IPrototypingEnvironment ParentEnvironment { - get { return this._environment; } - set { this._environment = value; } - } - - /// - /// - /// - protected override void Clear() { - /*if (!this._environment) { - this._environment = this.GetComponent(); - }*/ - } - - /// - /// - /// - void HandleStep() { - var reaction = this._environment.LastReaction; - var motions = reaction.Motions; - } - - /// - /// - /// - public override void PreStep() { } - - /// - /// - /// - public override void Step() { this.HandleStep(); } - - /// - /// - /// - public override void PostStep() { } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "ActionCounter"; } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Internals/EnvironmentListener.cs b/Runtime/Prototyping/Internals/EnvironmentListener.cs deleted file mode 100644 index 9949dfe84..000000000 --- a/Runtime/Prototyping/Internals/EnvironmentListener.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Internals { - /// - /// - /// - [ExecuteInEditMode] - public abstract class EnvironmentListener : PrototypingGameObject, - IEnvironmentListener { - /// - /// - /// - public IPrototypingEnvironment _Parent_Environment; - - /// - /// - /// - protected override void RegisterComponent() { - this._Parent_Environment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this._Parent_Environment, - this); - - if (this._Parent_Environment != null) { - this._Parent_Environment.PreStepEvent += this.PreStep; - this._Parent_Environment.StepEvent += this.Step; - this._Parent_Environment.PostStepEvent += this.PostStep; - } - } - - /// - /// - /// - protected override void UnRegisterComponent() { this._Parent_Environment?.UnRegister(this); } - - /// - /// - /// - public abstract override String PrototypingTypeName { get; } - - /// - /// - /// - public virtual void PreStep() { } - - /// - /// - /// - public virtual void Step() { } - - /// - /// - /// - public virtual void PostStep() { } - - /// - /// - /// - public virtual void EnvironmentReset() { } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Internals/EnvironmentListener.cs.meta b/Runtime/Prototyping/Internals/EnvironmentListener.cs.meta deleted file mode 100644 index 903902f88..000000000 --- a/Runtime/Prototyping/Internals/EnvironmentListener.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9ef9a4ac2b4e64d6db733f9874d02199 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 4bfd1041a06a6422b877294800089c3f, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Internals/Resetable.cs b/Runtime/Prototyping/Internals/Resetable.cs deleted file mode 100644 index 2e3a3a50f..000000000 --- a/Runtime/Prototyping/Internals/Resetable.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Internals { - /// - /// - /// - [ExecuteInEditMode] - public abstract class Resetable : PrototypingGameObject, - IResetable { - /// - /// - /// - public IPrototypingEnvironment _Parent_Environment; - - /// - /// - /// - public abstract void EnvironmentReset(); - - /// - /// - /// - protected override void RegisterComponent() { - this._Parent_Environment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this._Parent_Environment, - this); - } - - /// - /// - /// - protected override void UnRegisterComponent() { - if (this._Parent_Environment != null) { - this._Parent_Environment.UnRegister(this); - } - } - - /// - /// - /// - public abstract override String PrototypingTypeName { get; } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Internals/ResetableComponentMenuPath.cs b/Runtime/Prototyping/Internals/ResetableComponentMenuPath.cs deleted file mode 100644 index ca6ab6f32..000000000 --- a/Runtime/Prototyping/Internals/ResetableComponentMenuPath.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace Neodroid.Runtime.Prototyping.Internals { - /// - /// - /// - public static class ResetableComponentMenuPath { - /// - /// - /// - public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Resetables/"; - - /// - /// - /// - public const string _Postfix = "Resetable"; - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Internals/StateValidation/EnsureValidState.cs b/Runtime/Prototyping/Internals/StateValidation/EnsureValidState.cs deleted file mode 100644 index 9e13ebec0..000000000 --- a/Runtime/Prototyping/Internals/StateValidation/EnsureValidState.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Utilities.BoundingBoxes; -using Neodroid.Runtime.Utilities.Misc.Extensions; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Internals.StateValidation { - /// - /// - /// - public class EnsureValidState : EnvironmentListener { - [SerializeField] Actor _actor; - - [SerializeField] PrototypingEnvironment _environment; - [SerializeField] Transform _goal; - - [SerializeField] Obstruction[] _obstructions; - - [SerializeField] BoundingBox _playable_area; - [SerializeField] bool _only_initial_state = true; - - /// - /// - /// - public PrototypingEnvironment ParentEnvironment { - get { return this._environment; } - set { this._environment = value; } - } - - /// - /// - /// - protected override void Clear() { - if (!this._goal) { - this._goal = FindObjectOfType(); - } - - if (!this._actor) { - this._actor = FindObjectOfType(); - } - - if (!this._environment) { - this._environment = FindObjectOfType(); - } - - if (this._obstructions.Length <= 0) { - this._obstructions = FindObjectsOfType(); - } - - if (!this._playable_area) { - this._playable_area = FindObjectOfType(); - } - } - - /// - /// - /// - void ValidateState() { - if (this._only_initial_state && this._environment.CurrentFrameNumber != 0) { - return; - } - - if (this._playable_area != null && !this._playable_area.Bounds.Intersects(this._actor.ActorBounds)) { - this._environment.Terminate("Actor outside playable area"); - } - - if (this._playable_area != null - && !this._playable_area.Bounds.Intersects(this._goal.GetComponent().bounds)) { - this._environment.Terminate("Goal outside playable area"); - } - - foreach (var obstruction in this._obstructions) { - if (obstruction != null - && obstruction.GetComponent().bounds.Intersects(this._actor.ActorBounds)) { - this._environment.Terminate("Actor overlapping obstruction"); - } - - if (obstruction != null - && obstruction.GetComponent().bounds - .Intersects(this._goal.GetComponent().bounds)) { - this._environment.Terminate("Goal overlapping obstruction"); - } - } - } - - /// - /// - /// - public override void PreStep() { this.ValidateState(); } - - /// - /// - /// - public override void Step() { this.ValidateState(); } - - /// - /// - /// - public override void PostStep() { this.ValidateState(); } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "ValidityChecker"; } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Internals/TransformResetable.cs b/Runtime/Prototyping/Internals/TransformResetable.cs deleted file mode 100644 index ec64f689a..000000000 --- a/Runtime/Prototyping/Internals/TransformResetable.cs +++ /dev/null @@ -1,43 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Internals { - /// - /// - /// - [AddComponentMenu( - ResetableComponentMenuPath._ComponentMenuPath + "Transform" + ResetableComponentMenuPath._Postfix)] - public class TransformResetable : Resetable { - /// - /// - /// - public override void EnvironmentReset() { - this.transform.position = this._original_position; - this.transform.rotation = this._original_rotation; - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Transform"; } - } - - /// - /// - /// - Vector3 _original_position; - - /// - /// - /// - Quaternion _original_rotation; - - /// - /// - /// - protected override void Setup() { - this._original_position = this.transform.position; - this._original_rotation = this.transform.rotation; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors.meta b/Runtime/Prototyping/Motors.meta deleted file mode 100644 index 4c97502de..000000000 --- a/Runtime/Prototyping/Motors.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a7a72d43a54784a01b30313ac6e58333 -folderAsset: yes -timeCreated: 1500626694 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/BanditArmMotor.cs b/Runtime/Prototyping/Motors/BanditArmMotor.cs deleted file mode 100644 index 66de98134..000000000 --- a/Runtime/Prototyping/Motors/BanditArmMotor.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "BanditArm" + MotorComponentMenuPath._Postfix)] - public class BanditArmMotor : Motor { - [SerializeField] Material _material; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "BanditArm"; } - } - - /// - /// - /// - protected override void Setup() { - var renderr = this.GetComponent(); - if (renderr) { - this._material = renderr.sharedMaterial; - } else { - var rendr = this.GetComponent(); - if (rendr) { - this._material = rendr.GetMaterial(); - } - } - } - - /// - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - if (this._material) { - switch ((int)motion.Strength) { - case 1: - this._material.color = Color.blue; - break; - case 2: - this._material.color = Color.black; - break; - case 3: - this._material.color = Color.red; - break; - case 4: - this._material.color = Color.green; - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/BanditArmMotor.cs.meta b/Runtime/Prototyping/Motors/BanditArmMotor.cs.meta deleted file mode 100644 index 8251377b1..000000000 --- a/Runtime/Prototyping/Motors/BanditArmMotor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cf71f1d9727f4f3f9eedf943f9fd494b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/EulerTransformMotor.cs b/Runtime/Prototyping/Motors/EulerTransformMotor.cs deleted file mode 100644 index 5424a4371..000000000 --- a/Runtime/Prototyping/Motors/EulerTransformMotor.cs +++ /dev/null @@ -1,109 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "EulerTransform" + MotorComponentMenuPath._Postfix)] - public class EulerTransformMotor : Motor { - /// - /// - /// - [SerializeField] - protected string _Layer_Mask = "Obstructions"; - - /// - /// - /// - [SerializeField] - protected bool _No_Collisions = true; - - /// - /// - /// - [SerializeField] - protected Space _Relative_To = Space.Self; - - string _rot_x; - string _rot_y; - string _rot_z; - - string _x; - string _y; - string _z; - - /// - /// - /// - protected override void Setup() { - this._x = this.Identifier + "X_"; - this._y = this.Identifier + "Y_"; - this._z = this.Identifier + "Z_"; - this._rot_x = this.Identifier + "RotX_"; - this._rot_y = this.Identifier + "RotY_"; - this._rot_z = this.Identifier + "RotZ_"; - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Transform"; } - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._x); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._y); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._z); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._rot_x); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._rot_y); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._rot_z); - } - - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - if (motion.MotorName == this._x) { - this.transform.Translate(Vector3.left * motion.Strength, this._Relative_To); - } else if (motion.MotorName == this._y) { - this.transform.Translate(-Vector3.up * motion.Strength, this._Relative_To); - } else if (motion.MotorName == this._z) { - this.transform.Translate(-Vector3.forward * motion.Strength, this._Relative_To); - } else if (motion.MotorName == this._rot_x) { - this.transform.Rotate(Vector3.left, motion.Strength, this._Relative_To); - } else if (motion.MotorName == this._rot_y) { - this.transform.Rotate(Vector3.up, motion.Strength, this._Relative_To); - } else if (motion.MotorName == this._rot_z) { - this.transform.Rotate(Vector3.forward, motion.Strength, this._Relative_To); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/EulerTransformMotor.cs.meta b/Runtime/Prototyping/Motors/EulerTransformMotor.cs.meta deleted file mode 100644 index d27f92a89..000000000 --- a/Runtime/Prototyping/Motors/EulerTransformMotor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 924e594e1cf56455386f8aea250dbf37 -timeCreated: 1513326752 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/EulerTransformMotor1Dof.cs b/Runtime/Prototyping/Motors/EulerTransformMotor1Dof.cs deleted file mode 100644 index da118976c..000000000 --- a/Runtime/Prototyping/Motors/EulerTransformMotor1Dof.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Enums; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath - + "EulerTransformMotor1Dof" - + MotorComponentMenuPath._Postfix)] - public class EulerTransformMotor1Dof : Motor { - /// - /// - [SerializeField] - protected Axis _Axis_Of_Motion; - - [SerializeField] protected string _Layer_Mask = "Obstructions"; - - [SerializeField] protected bool _No_Collisions = true; - - [SerializeField] protected Space _Relative_To = Space.Self; - - public override string PrototypingTypeName { - get { return "Transform" + this._Axis_Of_Motion; } - } - - protected override void InnerApplyMotion(IMotorMotion motion) { - var layer_mask = 1 << LayerMask.NameToLayer(this._Layer_Mask); - var vec = Vector3.zero; - switch (this._Axis_Of_Motion) { - case Axis.X_: // Translational - vec = Vector3.right * motion.Strength; - break; - case Axis.Y_: // Translational - vec = -Vector3.up * motion.Strength; - break; - case Axis.Z_: // Translational - vec = -Vector3.forward * motion.Strength; - break; - case Axis.Rot_x_: // Rotational - this.transform.Rotate(Vector3.left, motion.Strength, this._Relative_To); - break; - case Axis.Rot_y_: // Rotational - this.transform.Rotate(Vector3.up, motion.Strength, this._Relative_To); - break; - case Axis.Rot_z_: // Rotational - this.transform.Rotate(Vector3.forward, motion.Strength, this._Relative_To); - break; - case Axis.Dir_x_: break; - case Axis.Dir_y_: break; - case Axis.Dir_z_: break; - default: throw new ArgumentOutOfRangeException(); - } - - if (this._No_Collisions) { - if (!Physics.Raycast(this.transform.position, vec, Mathf.Abs(motion.Strength), layer_mask)) { - this.transform.Translate(vec, this._Relative_To); - } - } else { - this.transform.Translate(vec, this._Relative_To); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/EulerTransformMotor1Dof.cs.meta b/Runtime/Prototyping/Motors/EulerTransformMotor1Dof.cs.meta deleted file mode 100644 index 4326d5382..000000000 --- a/Runtime/Prototyping/Motors/EulerTransformMotor1Dof.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ca0428dcb93f94eb09ef9d30df376ade -timeCreated: 1513624850 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/EulerTransformMotor3Dof.cs b/Runtime/Prototyping/Motors/EulerTransformMotor3Dof.cs deleted file mode 100644 index 7d87c405f..000000000 --- a/Runtime/Prototyping/Motors/EulerTransformMotor3Dof.cs +++ /dev/null @@ -1,147 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath - + "EulerTransformMotor3Dof" - + MotorComponentMenuPath._Postfix)] - public class EulerTransformMotor3Dof : Motor { - /// - /// - /// - [SerializeField] - protected string _Layer_Mask = "Obstructions"; - - /// - /// - /// - [SerializeField] - protected bool _No_Collisions = true; - - /// - /// - /// - [SerializeField] - protected Space _Relative_To = Space.Self; - - /// - /// - /// - [SerializeField] - protected bool _Rotational_Motors; - - /// - /// - /// - [SerializeField] - protected bool _Use_Mask = true; - - /// - /// XAxisIdentifier - /// - string _x; - - /// - /// YAxisIdentifier - /// - string _y; - - /// - /// ZAxisIdentifier - /// - string _z; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Transform"; } - } - - /// - /// - /// - protected override void Setup() { - if (!this._Rotational_Motors) { - this._x = this.Identifier + "X_"; - this._y = this.Identifier + "Y_"; - this._z = this.Identifier + "Z_"; - } else { - this._x = this.Identifier + "RotX_"; - this._y = this.Identifier + "RotY_"; - this._z = this.Identifier + "RotZ_"; - } - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._x); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._y); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._z); - } - - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - var layer_mask = 1 << LayerMask.NameToLayer(this._Layer_Mask); - if (!this._Rotational_Motors) { - if (motion.MotorName == this._x) { - var vec = Vector3.right * motion.Strength; - if (this._No_Collisions) { - if (!Physics.Raycast(this.transform.position, vec, Mathf.Abs(motion.Strength), layer_mask)) { - this.transform.Translate(vec, this._Relative_To); - } - } else { - this.transform.Translate(vec, this._Relative_To); - } - } else if (motion.MotorName == this._y) { - var vec = -Vector3.up * motion.Strength; - if (this._No_Collisions) { - if (!Physics.Raycast(this.transform.position, vec, Mathf.Abs(motion.Strength), layer_mask)) { - this.transform.Translate(vec, this._Relative_To); - } - } else { - this.transform.Translate(vec, this._Relative_To); - } - } else if (motion.MotorName == this._z) { - var vec = -Vector3.forward * motion.Strength; - if (this._No_Collisions) { - if (!Physics.Raycast(this.transform.position, vec, Mathf.Abs(motion.Strength), layer_mask)) { - this.transform.Translate(vec, this._Relative_To); - } - } else { - this.transform.Translate(vec, this._Relative_To); - } - } - } else { - if (motion.MotorName == this._x) { - this.transform.Rotate(Vector3.left, motion.Strength, this._Relative_To); - } else if (motion.MotorName == this._y) { - this.transform.Rotate(Vector3.up, motion.Strength, this._Relative_To); - } else if (motion.MotorName == this._z) { - this.transform.Rotate(Vector3.forward, motion.Strength, this._Relative_To); - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/EulerTransformMotor3Dof.cs.meta b/Runtime/Prototyping/Motors/EulerTransformMotor3Dof.cs.meta deleted file mode 100644 index 4a6e35b3d..000000000 --- a/Runtime/Prototyping/Motors/EulerTransformMotor3Dof.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d70508e520cd84f69b7e0974dcbc5629 -timeCreated: 1513326681 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/IndexedMotionMotor.cs b/Runtime/Prototyping/Motors/IndexedMotionMotor.cs deleted file mode 100644 index ae06edfc6..000000000 --- a/Runtime/Prototyping/Motors/IndexedMotionMotor.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "IndexedMotion" + MotorComponentMenuPath._Postfix)] - public class IndexedMotionMotor : Motor { - /// - /// - /// - [SerializeField] - protected string _Layer_Mask = "Obstructions"; - - /// - /// - /// - [SerializeField] - protected bool _No_Collisions = true; - - /// - /// - /// - [SerializeField] - protected Space _Relative_To = Space.Self; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "IndexedMotion"; } - } - - protected override void InnerApplyMotion(IMotorMotion motion) { - var layer_mask = 1 << LayerMask.NameToLayer(this._Layer_Mask); - - Vector3 vec; - switch ((int)motion.Strength) { - case 1: - vec = Vector3.forward; - break; - case 2: - vec = Vector3.back; - break; - case 3: - vec = Vector3.left; - break; - case 4: - vec = Vector3.right; - break; - default: - throw new ArgumentOutOfRangeException(); - } - - if (this._No_Collisions) { - if (!Physics.Raycast(this.transform.position, vec, Mathf.Abs(motion.Strength), layer_mask)) { - this.transform.Translate(vec, this._Relative_To); - } - } else { - this.transform.Translate(vec, this._Relative_To); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/IndexedMotionMotor.cs.meta b/Runtime/Prototyping/Motors/IndexedMotionMotor.cs.meta deleted file mode 100644 index ac530ede4..000000000 --- a/Runtime/Prototyping/Motors/IndexedMotionMotor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 4f06edc4e9ce40958cd8abcbe05d59fe -timeCreated: 1517859364 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/Motor.cs b/Runtime/Prototyping/Motors/Motor.cs deleted file mode 100644 index 1e9877476..000000000 --- a/Runtime/Prototyping/Motors/Motor.cs +++ /dev/null @@ -1,140 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [ExecuteInEditMode, Serializable] - public abstract class Motor : PrototypingGameObject, - //IResetable, - IMotor { - /// - /// - /// - public IActor ParentActor { - get { return this._actor; } - set { this._actor = value; } - } - - /// - /// - /// - public float EnergySpendSinceReset { - get { return this._energy_spend_since_reset; } - set { this._energy_spend_since_reset = value; } - } - - /// - /// - /// - public float EnergyCost { - get { return this._energy_cost; } - set { this._energy_cost = value; } - } - - /// - /// - /// - public ValueSpace MotionValueSpace { - get { return this._motion_value_space; } - set { this._motion_value_space = value; } - } - - /// - /// - /// - public override String PrototypingTypeName { - get { return "Motor"; } - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentActor = NeodroidUtilities.MaybeRegisterComponent( - (Actor)this.ParentActor, - this, - only_parents : true); - } - - /// - /// - /// - protected override void UnRegisterComponent() { - if (this.ParentActor != null) { - this.ParentActor.UnRegister(this); - } - } - - /// - /// - /// - /// - public void ApplyMotion(IMotorMotion motion) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log("Applying " + motion + " To " + this.name); - } - #endif - - if (motion.Strength < this.MotionValueSpace._Min_Value - || motion.Strength > this.MotionValueSpace._Max_Value) { - Debug.LogWarning( - $"It does not accept input {motion.Strength}, outside the allowed range from {this.MotionValueSpace._Min_Value} to {this.MotionValueSpace._Max_Value}"); - return; // Do nothing - } - - motion.Strength = this._motion_value_space.Round(motion.Strength); - - this.InnerApplyMotion(motion); - this.EnergySpendSinceReset += Mathf.Abs(this.EnergyCost * motion.Strength); - } - - /// - /// - /// - /// - protected abstract void InnerApplyMotion(IMotorMotion motion); - - /// - /// - /// - /// - public virtual float GetEnergySpend() { return this._energy_spend_since_reset; } - - /// - /// - /// - /// - public override string ToString() { return this.Identifier; } - - /// - /// - /// - public void EnvironmentReset() { this._energy_spend_since_reset = 0; } - - #region Fields - - [Header("References", order = 99), SerializeField] - IActor _actor; - - [Header("General", order = 101), SerializeField] - ValueSpace _motion_value_space = - new ValueSpace {_Decimal_Granularity = 0, _Min_Value = -1, _Max_Value = 1}; - - [SerializeField] float _energy_spend_since_reset; - - [SerializeField] float _energy_cost; - - #endregion - - public virtual float Sample() { return this.MotionValueSpace.Sample(); } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/Motor.cs.meta b/Runtime/Prototyping/Motors/Motor.cs.meta deleted file mode 100644 index a90b4ff33..000000000 --- a/Runtime/Prototyping/Motors/Motor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 3c81474368d9943e981ca3a0cf164121 -timeCreated: 1513326763 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/MotorComponentMenuPath.cs b/Runtime/Prototyping/Motors/MotorComponentMenuPath.cs deleted file mode 100644 index e46c2d784..000000000 --- a/Runtime/Prototyping/Motors/MotorComponentMenuPath.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - public static class MotorComponentMenuPath { - public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Motors/"; - public const string _Postfix = "Motor"; - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/MotorComponentMenuPath.cs.meta b/Runtime/Prototyping/Motors/MotorComponentMenuPath.cs.meta deleted file mode 100644 index 2730d0802..000000000 --- a/Runtime/Prototyping/Motors/MotorComponentMenuPath.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b6c67197079f94deb83ce2e0d754d878 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 6bda13f59e43e406cae4afe9aad66823, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/Particles.meta b/Runtime/Prototyping/Motors/Particles.meta deleted file mode 100644 index 5b5ac0e0b..000000000 --- a/Runtime/Prototyping/Motors/Particles.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 1936de2ad58b34a519dd027d384c63d7 -folderAsset: yes -timeCreated: 1513649542 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/Particles/RocketMotor.cs b/Runtime/Prototyping/Motors/Particles/RocketMotor.cs deleted file mode 100644 index f3f56306a..000000000 --- a/Runtime/Prototyping/Motors/Particles/RocketMotor.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Enums; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors.Particles { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "Particles/Rocket" + MotorComponentMenuPath._Postfix), - RequireComponent(typeof(ParticleSystem)), RequireComponent(typeof(Rigidbody))] - public class RocketMotor : RigidbodyMotor1Dof { - /// - /// - /// - [SerializeField] - bool _fired_this_step; - - /// - /// - /// - [SerializeField] - protected ParticleSystem _Particle_System; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Rocket" + this._Axis_Of_Motion; } - } - - /// - /// - /// - protected override void Setup() { - this._Rigidbody = this.GetComponent(); - this._Particle_System = this.GetComponent(); - var valid_input = this.MotionValueSpace; - valid_input._Min_Value = 0; - this.MotionValueSpace = valid_input; - this.RegisterComponent(); - } - - /// - /// - /// - void LateUpdate() { - if (this._fired_this_step) { - if (!this._Particle_System.isPlaying) { - this._Particle_System.Play(true); - } - } else { - this._Particle_System.Stop(true); - } - - this._fired_this_step = false; - } - - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - if (motion.Strength < this.MotionValueSpace._Min_Value - || motion.Strength > this.MotionValueSpace._Max_Value) { - Debug.Log( - $"It does not accept input {motion.Strength}, outside allowed range {this.MotionValueSpace._Min_Value} to {this.MotionValueSpace._Max_Value}"); - return; // Do nothing - } - - switch (this._Axis_Of_Motion) { - case Axis.X_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.left * motion.Strength); - } else { - this._Rigidbody.AddRelativeForce(Vector3.left * motion.Strength); - } - - break; - case Axis.Y_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.up * motion.Strength); - } else { - this._Rigidbody.AddRelativeForce(Vector3.up * motion.Strength); - } - - break; - case Axis.Z_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.forward * motion.Strength); - } else { - this._Rigidbody.AddRelativeForce(Vector3.forward * motion.Strength); - } - - break; - case Axis.Rot_x_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.left * motion.Strength); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.left * motion.Strength); - } - - break; - case Axis.Rot_y_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.up * motion.Strength); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.up * motion.Strength); - } - - break; - case Axis.Rot_z_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.forward * motion.Strength); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.forward * motion.Strength); - } - - break; - case Axis.Dir_x_: break; - case Axis.Dir_y_: break; - case Axis.Dir_z_: break; - default: throw new ArgumentOutOfRangeException(); - } - - this._fired_this_step = true; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/Particles/RocketMotor.cs.meta b/Runtime/Prototyping/Motors/Particles/RocketMotor.cs.meta deleted file mode 100644 index ea99171b8..000000000 --- a/Runtime/Prototyping/Motors/Particles/RocketMotor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8251bf060f8314480a869f5d1dc20d64 -timeCreated: 1513726836 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/RigidbodyMotor.cs b/Runtime/Prototyping/Motors/RigidbodyMotor.cs deleted file mode 100644 index 65348298d..000000000 --- a/Runtime/Prototyping/Motors/RigidbodyMotor.cs +++ /dev/null @@ -1,129 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "Rigidbody" + MotorComponentMenuPath._Postfix), - RequireComponent(typeof(Rigidbody))] - public class RigidbodyMotor : Motor { - /// - /// - /// - [SerializeField] - protected Space _Relative_To = Space.Self; - - /// - /// - /// - [SerializeField] - protected Rigidbody _Rigidbody; - - /// - /// - /// - [SerializeField] - protected ForceMode _ForceMode = ForceMode.Force; - - string _rot_x; - string _rot_y; - string _rot_z; - - string _x; - string _y; - string _z; - - public override string PrototypingTypeName { - get { return "Rigidbody"; } - } - - /// - /// - /// - protected override void Setup() { - this._Rigidbody = this.GetComponent(); - - this._x = this.Identifier + "X_"; - this._y = this.Identifier + "Y_"; - this._z = this.Identifier + "Z_"; - this._rot_x = this.Identifier + "RotX_"; - this._rot_y = this.Identifier + "RotY_"; - this._rot_z = this.Identifier + "RotZ_"; - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentActor = NeodroidUtilities.MaybeRegisterComponent((Actor)this.ParentActor, (Motor)this); - - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._x); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._y); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._z); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._rot_x); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._rot_y); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._rot_z); - } - - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - if (this._Relative_To == Space.World) { - if (motion.MotorName == this._x) { - this._Rigidbody.AddForce(Vector3.left * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._y) { - this._Rigidbody.AddForce(Vector3.up * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._z) { - this._Rigidbody.AddForce(Vector3.forward * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._rot_x) { - this._Rigidbody.AddTorque(Vector3.left * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._rot_y) { - this._Rigidbody.AddTorque(Vector3.up * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._rot_z) { - this._Rigidbody.AddTorque(Vector3.forward * motion.Strength, this._ForceMode); - } - } else if (this._Relative_To == Space.Self) { - if (motion.MotorName == this._x) { - this._Rigidbody.AddRelativeForce(Vector3.left * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._y) { - this._Rigidbody.AddRelativeForce(Vector3.up * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._z) { - this._Rigidbody.AddRelativeForce(Vector3.forward * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._rot_x) { - this._Rigidbody.AddRelativeTorque(Vector3.left * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._rot_y) { - this._Rigidbody.AddRelativeTorque(Vector3.up * motion.Strength, this._ForceMode); - } else if (motion.MotorName == this._rot_z) { - this._Rigidbody.AddRelativeTorque(Vector3.forward * motion.Strength, this._ForceMode); - } - } else { - Debug.LogWarning($"Not applying force in space {this._Relative_To}"); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/RigidbodyMotor.cs.meta b/Runtime/Prototyping/Motors/RigidbodyMotor.cs.meta deleted file mode 100644 index 41c2d5926..000000000 --- a/Runtime/Prototyping/Motors/RigidbodyMotor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d2936c6bde76942dc809bcdaa9b3901f -timeCreated: 1513326744 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/RigidbodyMotor1Dof.cs b/Runtime/Prototyping/Motors/RigidbodyMotor1Dof.cs deleted file mode 100644 index 6c4692c4a..000000000 --- a/Runtime/Prototyping/Motors/RigidbodyMotor1Dof.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Enums; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "RigidbodyMotor1Dof" + MotorComponentMenuPath._Postfix), - RequireComponent(typeof(Rigidbody))] - public class RigidbodyMotor1Dof : Motor { - /// - /// - /// - [Header("General", order = 101), SerializeField] - protected Axis _Axis_Of_Motion; - - /// - /// - /// - [SerializeField] - protected Space _Relative_To = Space.Self; - - /// - /// - /// - [SerializeField] - protected Rigidbody _Rigidbody; - - /// - /// - /// - [SerializeField] - protected ForceMode _ForceMode = ForceMode.Force; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Rigidbody" + this._Axis_Of_Motion; } - } - - /// - /// - /// - protected override void Setup() { this._Rigidbody = this.GetComponent(); } - - /// - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - switch (this._Axis_Of_Motion) { - case Axis.X_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.left * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeForce(Vector3.left * motion.Strength, this._ForceMode); - } - - break; - case Axis.Y_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.up * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeForce(Vector3.up * motion.Strength, this._ForceMode); - } - - break; - case Axis.Z_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.forward * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeForce(Vector3.forward * motion.Strength, this._ForceMode); - } - - break; - case Axis.Rot_x_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.left * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.left * motion.Strength, this._ForceMode); - } - - break; - case Axis.Rot_y_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.up * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.up * motion.Strength, this._ForceMode); - } - - break; - case Axis.Rot_z_: - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.forward * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.forward * motion.Strength, this._ForceMode); - } - - break; - case Axis.Dir_x_: break; - case Axis.Dir_y_: break; - case Axis.Dir_z_: break; - default: - throw new ArgumentOutOfRangeException(); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/RigidbodyMotor1Dof.cs.meta b/Runtime/Prototyping/Motors/RigidbodyMotor1Dof.cs.meta deleted file mode 100644 index 47412d106..000000000 --- a/Runtime/Prototyping/Motors/RigidbodyMotor1Dof.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: dd6e93fcf92ec4e48b8cebe8a5a25db1 -timeCreated: 1513326709 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/RigidbodyMotor3Dof.cs b/Runtime/Prototyping/Motors/RigidbodyMotor3Dof.cs deleted file mode 100644 index 3c3759807..000000000 --- a/Runtime/Prototyping/Motors/RigidbodyMotor3Dof.cs +++ /dev/null @@ -1,141 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "RigidbodyMotor3Dof" + MotorComponentMenuPath._Postfix), - RequireComponent(typeof(Rigidbody))] - public class RigidbodyMotor3Dof : Motor { - /// - /// - /// - [SerializeField] - protected Space _Relative_To = Space.Self; - - /// - /// - /// - [SerializeField] - protected Rigidbody _Rigidbody; - - /// - /// - /// - [SerializeField] - protected ForceMode _ForceMode = ForceMode.Force; - - /// - /// - /// - [SerializeField] - protected bool _Angular_Motors; - - /// - /// - /// - string _x; - - /// - /// - /// - string _y; - - /// - /// - /// - string _z; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Rigidbody"; } - } - - /// - /// - /// - protected override void Setup() { this._Rigidbody = this.GetComponent(); } - - /// - /// - /// - protected override void RegisterComponent() { - this._x = this.Identifier + "X_"; - this._y = this.Identifier + "Y_"; - this._z = this.Identifier + "Z_"; - if (this._Angular_Motors) { - this._x = this.Identifier + "RotX_"; - this._y = this.Identifier + "RotY_"; - this._z = this.Identifier + "RotZ_"; - } - - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._x); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._y); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._z); - } - - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - if (!this._Angular_Motors) { - if (motion.MotorName == this._x) { - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.left * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeForce(Vector3.left * motion.Strength, this._ForceMode); - } - } else if (motion.MotorName == this._y) { - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.up * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeForce(Vector3.up * motion.Strength, this._ForceMode); - } - } else if (motion.MotorName == this._z) { - if (this._Relative_To == Space.World) { - this._Rigidbody.AddForce(Vector3.forward * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeForce(Vector3.forward * motion.Strength, this._ForceMode); - } - } - } else { - if (motion.MotorName == this._x) { - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.left * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.left * motion.Strength, this._ForceMode); - } - } else if (motion.MotorName == this._y) { - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.up * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.up * motion.Strength, this._ForceMode); - } - } else if (motion.MotorName == this._z) { - if (this._Relative_To == Space.World) { - this._Rigidbody.AddTorque(Vector3.forward * motion.Strength, this._ForceMode); - } else { - this._Rigidbody.AddRelativeTorque(Vector3.forward * motion.Strength, this._ForceMode); - } - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/RigidbodyMotor3Dof.cs.meta b/Runtime/Prototyping/Motors/RigidbodyMotor3Dof.cs.meta deleted file mode 100644 index b96892713..000000000 --- a/Runtime/Prototyping/Motors/RigidbodyMotor3Dof.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: b871e7b9fa5f0461cb1f71d327dfe38c -timeCreated: 1513326688 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/TargetRigidbodyMotor.cs b/Runtime/Prototyping/Motors/TargetRigidbodyMotor.cs deleted file mode 100644 index 07a123056..000000000 --- a/Runtime/Prototyping/Motors/TargetRigidbodyMotor.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Actors; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "TargetRigidbody" + MotorComponentMenuPath._Postfix), - RequireComponent(typeof(Rigidbody))] - public class TargetRigidbodyMotor : Motor, - IEnvironmentListener { - /// - /// - /// - [SerializeField] - protected Rigidbody _Rigidbody; - - string _movement; - string _turn; - Single _movement_speed; - Single _rotation_speed; - IPrototypingEnvironment _parent_environment; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "TargetRigidbody"; } - } - - public Single MovementSpeed { - get { return this._movement_speed; } - } - - public Single RotationSpeed { - get { return this._rotation_speed; } - } - - /// - /// - /// - protected override void Setup() { - this._Rigidbody = this.GetComponent(); - - this._movement = this.Identifier + "Movement_"; - this._turn = this.Identifier + "Turn_"; - } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._movement); - this.ParentActor = NeodroidUtilities.MaybeRegisterNamedComponent( - (Actor)this.ParentActor, - (Motor)this, - this._turn); - - this._parent_environment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this._parent_environment, - this); - - if (this._parent_environment != null) { - this._parent_environment.PreStepEvent += this.PreStep; - this._parent_environment.StepEvent += this.Step; - this._parent_environment.PostStepEvent += this.PostStep; - } - } - - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - if (motion.MotorName == this._movement) { - this.ApplyMovement(motion.Strength); - } else if (motion.MotorName == this._turn) { - this.ApplyRotation(motion.Strength); - } - } - - void ApplyRotation(float rotation_change = 0f) { this._rotation_speed = rotation_change; } - - void ApplyMovement(float movement_change = 0f) { this._movement_speed = movement_change; } - - void OnStep() { - this._Rigidbody.velocity = Vector3.zero; - this._Rigidbody.angularVelocity = Vector3.zero; - - // Move - var movement = this.transform.forward * this._movement_speed * Time.deltaTime; - this._Rigidbody.MovePosition(this._Rigidbody.position + movement); - - // Turn - var turn = this._rotation_speed * Time.deltaTime; - var turn_rotation = Quaternion.Euler(0f, turn, 0f); - this._Rigidbody.MoveRotation(this._Rigidbody.rotation * turn_rotation); - } - - public void PreStep() { } - - public void Step() { this.OnStep(); } - - public void PostStep() { } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/TargetRigidbodyMotor.cs.meta b/Runtime/Prototyping/Motors/TargetRigidbodyMotor.cs.meta deleted file mode 100644 index f0ce6fc22..000000000 --- a/Runtime/Prototyping/Motors/TargetRigidbodyMotor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d86e75f6bc6f14dc09fe5add45c4a79a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 7866945982896999795, guid: 0000000000000000d000000000000000, type: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/WheelColliderMotor.meta b/Runtime/Prototyping/Motors/WheelColliderMotor.meta deleted file mode 100644 index 76c132a95..000000000 --- a/Runtime/Prototyping/Motors/WheelColliderMotor.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6c41ca1399ead4fb08794241c0dca594 -folderAsset: yes -timeCreated: 1502175223 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/WheelColliderMotor/SteeringMotor.cs b/Runtime/Prototyping/Motors/WheelColliderMotor/SteeringMotor.cs deleted file mode 100644 index cc7065e25..000000000 --- a/Runtime/Prototyping/Motors/WheelColliderMotor/SteeringMotor.cs +++ /dev/null @@ -1,63 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors.WheelColliderMotor { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath - + "WheelCollider/Steering" - + MotorComponentMenuPath._Postfix), RequireComponent(typeof(WheelCollider))] - public class SteeringMotor : Motor { - /// - /// - /// - [SerializeField] - WheelCollider _wheel_collider; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Steering"; } - } - - /// - /// - /// - protected override void Setup() { this._wheel_collider = this.GetComponent(); } - - /// - /// - /// - void FixedUpdate() { ApplyLocalPositionToVisuals(this._wheel_collider); } - - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - this._wheel_collider.steerAngle = motion.Strength; - } - - /// - /// - /// - /// - static void ApplyLocalPositionToVisuals(WheelCollider col) { - if (col.transform.childCount == 0) { - return; - } - - var visual_wheel = col.transform.GetChild(0); - - Vector3 position; - Quaternion rotation; - col.GetWorldPose(out position, out rotation); - - visual_wheel.transform.position = position; - visual_wheel.transform.rotation = rotation; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/WheelColliderMotor/SteeringMotor.cs.meta b/Runtime/Prototyping/Motors/WheelColliderMotor/SteeringMotor.cs.meta deleted file mode 100644 index 3a22bde4a..000000000 --- a/Runtime/Prototyping/Motors/WheelColliderMotor/SteeringMotor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 8019ef6a84fc548a9acb94d0fa9be39d -timeCreated: 1513326722 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Motors/WheelColliderMotor/TorqueMotor.cs b/Runtime/Prototyping/Motors/WheelColliderMotor/TorqueMotor.cs deleted file mode 100644 index 6c1034665..000000000 --- a/Runtime/Prototyping/Motors/WheelColliderMotor/TorqueMotor.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Motors.WheelColliderMotor { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "WheelCollider/Torque" + MotorComponentMenuPath._Postfix), - RequireComponent(typeof(WheelCollider))] - public class TorqueMotor : Motor { - [SerializeField] WheelCollider _wheel_collider; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Torque"; } - } - - /// - /// - /// - protected override void Setup() { this._wheel_collider = this.GetComponent(); } - - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - this._wheel_collider.motorTorque = motion.Strength; - } - - void FixedUpdate() { this.ApplyLocalPositionToVisuals(this._wheel_collider); } - - /// - /// - void ApplyLocalPositionToVisuals(WheelCollider col) { - if (col.transform.childCount == 0) { - return; - } - - var visual_wheel = col.transform.GetChild(0); - - Vector3 position; - Quaternion rotation; - col.GetWorldPose(out position, out rotation); - - visual_wheel.transform.position = position; - visual_wheel.transform.rotation = rotation; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Motors/WheelColliderMotor/TorqueMotor.cs.meta b/Runtime/Prototyping/Motors/WheelColliderMotor/TorqueMotor.cs.meta deleted file mode 100644 index c4c556fc1..000000000 --- a/Runtime/Prototyping/Motors/WheelColliderMotor/TorqueMotor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: eb73be20b7f4c45aa9761b221b470cc3 -timeCreated: 1513326734 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Evaluation.meta b/Runtime/Prototyping/ObjectiveFunctions.meta similarity index 100% rename from Runtime/Prototyping/Evaluation.meta rename to Runtime/Prototyping/ObjectiveFunctions.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/EpisodicObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/EpisodicObjective.cs new file mode 100644 index 000000000..bbbdb09e1 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/EpisodicObjective.cs @@ -0,0 +1,97 @@ +using System; +using System.Globalization; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions { + /// + /// + /// + [Serializable] + public abstract class EpisodicObjective : ObjectiveFunction, + //IHasRegister, + IEpisodicObjectiveFunction { + /// + /// + /// + /// + public override float Evaluate() { + var signal = 0.0f; + signal += this.InternalEvaluate(); + + if (this.EpisodeLength > 0 && this.ParentEnvironment.StepI >= this.EpisodeLength) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Maximum episode length reached, Length {this.ParentEnvironment.StepI}"); + } + #endif + + signal = this.FailedSignal; + + this.ParentEnvironment.Terminate("Maximum episode length reached"); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Signal for this step: {signal}"); + } + #endif + + this.LastSignal = signal; + + this.EpisodeReturn += signal; + + return signal; + } + + /// + /// + /// + public new void PrototypingReset() { + this.LastSignal = 0; + this.EpisodeReturn = 0; + this.InternalReset(); + } + + /// + /// + /// + public new void SignalString(DataPoller recipient) { + recipient.PollData($"{this.LastSignal.ToString(CultureInfo.InvariantCulture)}, {this.EpisodeReturn}"); + } + + /// + /// + /// + public new void EpisodeLengthString(DataPoller recipient) { + recipient.PollData($"{this.EpisodeLength.ToString(CultureInfo.InvariantCulture)}"); + } + + /// + /// + /// + [field : SerializeField] + public int EpisodeLength { get; set; } = 1000; + + /// + /// + [field : SerializeField] + public Single EpisodeReturn { get; protected set; } = 0; + + /// + /// + [field : SerializeField] + protected Single SolvedSignal { get; set; } = 1.0f; + + /// + /// + [field : SerializeField] + protected Single FailedSignal { get; set; } = -1.0f; + + /// + /// + [field : SerializeField] + protected Single DefaultSignal { get; set; } = -0.001f; + } +} diff --git a/Runtime/Prototyping/ObjectiveFunctions/EpisodicObjective.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/EpisodicObjective.cs.meta new file mode 100644 index 000000000..878221337 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/EpisodicObjective.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b9bccda286af4f62ab45a44502db66f8 +timeCreated: 1571071583 \ No newline at end of file diff --git a/Runtime/Prototyping/ObjectiveFunctions/EvaluationComponentMenuPath.cs b/Runtime/Prototyping/ObjectiveFunctions/EvaluationComponentMenuPath.cs new file mode 100644 index 000000000..dc1ea00c0 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/EvaluationComponentMenuPath.cs @@ -0,0 +1,15 @@ +namespace droid.Runtime.Prototyping.ObjectiveFunctions { + /// + /// + public static class EvaluationComponentMenuPath { + /// + /// + /// + public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Evaluation/"; + + /// + /// + /// + public const string _Postfix = "Evaluation"; + } +} diff --git a/Runtime/Prototyping/Evaluation/EvaluationComponentMenuPath.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/EvaluationComponentMenuPath.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/EvaluationComponentMenuPath.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/EvaluationComponentMenuPath.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Objective.cs b/Runtime/Prototyping/ObjectiveFunctions/Objective.cs new file mode 100644 index 000000000..fbb6eb037 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Objective.cs @@ -0,0 +1,122 @@ +using System; +using System.Globalization; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions { + /// + /// + [Serializable] + public abstract class ObjectiveFunction : PrototypingGameObject, + //IHasRegister, + IObjectiveFunction { + + + + + /// + /// + /// + /// + public virtual float Evaluate() { + var signal = 0.0f; + signal += this.InternalEvaluate(); + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Signal for this step: {signal}"); + } + #endif + + this.LastSignal = signal; + + return signal; + } + + /// + /// + /// + public override void PrototypingReset() { + this.LastSignal = 0; + this.InternalReset(); + } + + /// + /// + /// + public sealed override void Setup() { + this.PreSetup(); + + if (this.ParentEnvironment == null) { + this.ParentEnvironment = NeodroidSceneUtilities + .RecursiveFirstSelfSiblingParentGetComponent(this.transform); + } + + this.RemotePostSetup(); + } + + + /// + /// + /// + public void SignalString(DataPoller recipient) { + recipient.PollData($"{this.LastSignal.ToString(CultureInfo.InvariantCulture)}"); + } + + /// + /// + /// + public void EpisodeLengthString(DataPoller recipient) { + recipient.PollData($""); + } + + /// + /// + /// + protected override void RegisterComponent() { } + + /// + /// + /// + protected override void UnRegisterComponent() { } + + /// + /// + /// + public abstract float InternalEvaluate(); + + /// + /// + public abstract void InternalReset(); + + #region Fields + + /// + /// + [field : Header("References", order = 100)] + [field : SerializeField] + public ISpatialPrototypingEnvironment ParentEnvironment { get; set; } = null; + + /// + /// + /// + [field : Header("General", order = 101)] + [field : SerializeField] + public float LastSignal { get; protected set; } = 0f; + + + + /// + /// + /// + [field : SerializeField] + public Space1 SignalSpace { get; set; } + + #endregion + } +} diff --git a/Runtime/Prototyping/Evaluation/ObjectiveFunction.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Objective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/ObjectiveFunction.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Objective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/README.md b/Runtime/Prototyping/ObjectiveFunctions/README.md new file mode 100644 index 000000000..bd7cc1316 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/README.md @@ -0,0 +1,4 @@ +# Objective Functions + +These provide agents with signals indicating desirable configurations of the environments, from these the agent can improve itself on doing a particular task that leads to such prefable configurations. + diff --git a/Runtime/Prototyping/ObjectiveFunctions/README.md.meta b/Runtime/Prototyping/ObjectiveFunctions/README.md.meta new file mode 100644 index 000000000..c228fbed2 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/README.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 08592bfb20d5490d909f5ea86a2b1068 +timeCreated: 1567897633 \ No newline at end of file diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial.meta new file mode 100644 index 000000000..c1d8f0b5f --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: efc3e2cac3b04977ae960da544c49e41 +timeCreated: 1566234780 \ No newline at end of file diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/AngularVelocityObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/AngularVelocityObjective.cs new file mode 100644 index 000000000..f9cd691b4 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/AngularVelocityObjective.cs @@ -0,0 +1,44 @@ +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath + + "AngularVelocity" + + EvaluationComponentMenuPath._Postfix)] + public class AngularVelocityObjective : SpatialObjective { + [SerializeField] bool _penalty = false; + [SerializeField] Rigidbody _rigidbody = null; + + /// + /// + /// + public override float InternalEvaluate() { + if (this._penalty) { + if (this._rigidbody) { + return -this._rigidbody.angularVelocity.magnitude; + } + } + + if (this._rigidbody) { + return 1 / (this._rigidbody.angularVelocity.magnitude + 1); + } + + return 0; + } + + /// + /// + public override void InternalReset() { } + + /// + /// + /// + public override void RemotePostSetup() { + if (this._rigidbody == null) { + this._rigidbody = FindObjectOfType(); + } + } + } +} diff --git a/Runtime/Prototyping/Evaluation/AngularVelocityEvaluation.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/AngularVelocityObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/AngularVelocityEvaluation.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/AngularVelocityObjective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/AvoidanceObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/AvoidanceObjective.cs new file mode 100644 index 000000000..98954445e --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/AvoidanceObjective.cs @@ -0,0 +1,67 @@ +using droid.Runtime.GameObjects.ChildSensors; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath + + "PunishmentFunction" + + EvaluationComponentMenuPath._Postfix)] + [RequireComponent(typeof(Rigidbody))] + public class AvoidanceObjective : SpatialObjective { + [SerializeField] string _avoid_tag = "balls"; + [SerializeField] int _hits = 0; + + //[SerializeField] LayerMask _layer_mask; + + [SerializeField] GameObject _player = null; + + // Use this for initialization + /// + /// + /// + public override void RemotePostSetup() { + this.ResetHits(); + + var tagged_gos = GameObject.FindGameObjectsWithTag(this._avoid_tag); + + foreach (var ball in tagged_gos) { + if (ball) { + var publisher = ball.GetComponent(); + if (!publisher || publisher.Caller != this) { + publisher = ball.AddComponent(); + } + + publisher.Caller = this; + publisher.OnCollisionEnterDelegate = this.OnChildCollision; + } + } + } + + void OnChildCollision(GameObject child_sensor_game_object, Collision collision) { + if (collision.collider.name == this._player.name) { + this._hits += 1; + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log(this._hits); + } + #endif + } + + void ResetHits() { this._hits = 0; } + + /// + /// + /// + public override void InternalReset() { this.ResetHits(); } + + /// + /// + /// + /// + public override float InternalEvaluate() { return this._hits * -1f; } + } +} diff --git a/Runtime/Prototyping/Evaluation/PunishmentFunction.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/AvoidanceObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/PunishmentFunction.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/AvoidanceObjective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/EuclideanDistanceObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/EuclideanDistanceObjective.cs new file mode 100644 index 000000000..79213e4f4 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/EuclideanDistanceObjective.cs @@ -0,0 +1,31 @@ +using droid.Runtime.Prototyping.Actors; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath + + "EuclideanDistance" + + EvaluationComponentMenuPath._Postfix)] + class EuclideanDistanceObjective : SpatialObjective { + [SerializeField] Transform _g1; + [SerializeField] Transform _g2; + + public override void InternalReset() { } + + public override float InternalEvaluate() { + return -Vector3.Distance(this._g1.position, this._g2.position); + } + + public override void RemotePostSetup() { + if (this._g1 == null) { + this._g1 = FindObjectOfType().transform; + } + + if (this._g2 == null) { + this._g2 = this.transform; + } + } + } +} diff --git a/Runtime/Prototyping/Evaluation/EuclideanDistance.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/EuclideanDistanceObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/EuclideanDistance.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/EuclideanDistanceObjective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/PoseDevianceObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/PoseDevianceObjective.cs new file mode 100644 index 000000000..86b45ab5d --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/PoseDevianceObjective.cs @@ -0,0 +1,177 @@ +using droid.Runtime.GameObjects.BoundingBoxes; +using droid.Runtime.GameObjects.ChildSensors; +using droid.Runtime.Utilities.Extensions; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath + + "PoseDeviance" + + EvaluationComponentMenuPath._Postfix)] + public class PoseDevianceObjective : SpatialObjective { + /// + /// + /// + /// + public override float InternalEvaluate() { + var signal = this.DefaultSignal; + + /*if (this._playable_area != null && !this._playable_area.Bounds.Intersects(this._actor_transform.ActorBounds)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Outside playable area"); + } + #endif + this.ParentEnvironment.Terminate("Outside playable area"); + }*/ + + var distance = + Mathf.Abs(Vector3.Distance(this._goal.transform.position, + this._actor_transform.transform.position)); + var angle = Quaternion.Angle(this._goal.transform.rotation, this._actor_transform.transform.rotation); + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Distance: {distance}"); + Debug.Log($"Angle: {angle}"); + } + #endif + + if (!this._sparse) { + if (this._inverse) { + signal -= Mathf.Pow(this._distance_base, distance); + signal -= Mathf.Pow(this._angle_base, angle); + } else { + signal += this._distance_nominator / (Mathf.Pow(this._distance_base, distance) + float.Epsilon); + signal += this._angle_nominator / (Mathf.Pow(this._angle_base, angle) + float.Epsilon); + + if (this._state_full) { + if (signal <= this._peak_reward) { + signal = 0.0f; + } else { + this._peak_reward = signal; + } + } + } + } + + if (distance < this._goal_reached_radius) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Within range of goal"); + } + #endif + + signal += this.SolvedSignal; + if (this._terminate_on_goal_reached) { + this.ParentEnvironment?.Terminate("Within range of goal"); + } + } + + if (this._has_collided) { + this.ParentEnvironment?.Terminate("Actor has collided"); + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Frame Number: {this.ParentEnvironment?.StepI}, " + + $"Terminated: {this.ParentEnvironment?.Terminated}, " + + $"Last Reason: {this.ParentEnvironment?.LastTerminationReason}, " + + $"Internal Feedback Signal: {signal}, " + + $"Distance: {distance}"); + } + #endif + + return signal; + } + + /// + /// + /// + public override void InternalReset() { + this._peak_reward = 0.0f; + this._has_collided = false; + } + + /// + /// + /// + public override void RemotePostSetup() { + if (!this._goal) { + this._goal = FindObjectOfType(); + } + + if (!this._actor_transform) { + this._actor_transform = FindObjectOfType(); + + var remote_sensor = + this._actor_transform.GetComponentInChildren>(); + if (!remote_sensor) { + var col = this._actor_transform.GetComponentInChildren(); + if (col) { + remote_sensor = col.gameObject.AddComponent>(); + } + } + + if (remote_sensor) { + remote_sensor.Caller = this; + remote_sensor.OnTriggerEnterDelegate = this.OnChildTriggerEnter; + remote_sensor.OnCollisionEnterDelegate = this.OnChildTriggerEnter; + } + } + + if (this._obstructions == null || this._obstructions.Length <= 0) { + this._obstructions = FindObjectsOfType(); + } + + if (!this._playable_area) { + this._playable_area = FindObjectOfType(); + } + } + + void OnChildTriggerEnter(GameObject child_sensor_game_object, Collision collision) { + if (collision.collider.CompareTag("Obstruction")) { + if (this._terminate_on_obstruction_collision) { + this.ParentEnvironment.Terminate("Collided with obstruction"); + } + } + + this._has_collided = true; + } + + void OnChildTriggerEnter(GameObject child_sensor_game_object, Collider collider1) { + if (collider1.CompareTag("Obstruction")) { + if (this._terminate_on_obstruction_collision) { + this.ParentEnvironment.Terminate("Collided with obstruction"); + } + } + + this._has_collided = true; + } + + #region Fields + + [Header("Specific", order = 102)] + [SerializeField] + float _peak_reward = 0; + + [SerializeField] [Range(0.1f, 10f)] float _distance_base = 2f; + [SerializeField] [Range(0.1f, 10f)] float _distance_nominator = 5f; + [SerializeField] [Range(0.1f, 10f)] float _angle_base = 6f; + [SerializeField] [Range(0.1f, 10f)] float _angle_nominator = 3f; + [SerializeField] bool _sparse = true; + [SerializeField] bool _inverse = false; + [SerializeField] Transform _goal = null; + [SerializeField] Transform _actor_transform = null; + [SerializeField] BoundingBox _playable_area = null; + [SerializeField] Obstruction[] _obstructions = null; + [SerializeField] bool _state_full = false; + [SerializeField] float _goal_reached_radius = 0.01f; // Equivalent to 1 cm. + [SerializeField] bool _terminate_on_obstruction_collision = true; //TODO: implement + [SerializeField] bool _has_collided = false; + [SerializeField] bool _terminate_on_goal_reached = true; + + #endregion + } +} diff --git a/Runtime/Prototyping/Evaluation/PoseDeviance.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/PoseDevianceObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/PoseDeviance.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/PoseDevianceObjective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachAreaObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachAreaObjective.cs new file mode 100644 index 000000000..f066d23ca --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachAreaObjective.cs @@ -0,0 +1,281 @@ +using droid.Runtime.GameObjects.BoundingBoxes; +using droid.Runtime.GameObjects.ChildSensors; +using droid.Runtime.Prototyping.Actors; +using droid.Runtime.Prototyping.Sensors; +using droid.Runtime.Utilities; +using droid.Runtime.Utilities.Extensions; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + enum ActorOverlapping { + Inside_area_, + Outside_area_ + } + + /// + /// + /// + enum ActorColliding { + Not_colliding_, + Colliding_ + } + + //[RequireComponent (typeof(BoundingBox))] + //[RequireComponent (typeof(BoxCollider))] + [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath + + "ReachArea" + + EvaluationComponentMenuPath._Postfix)] + public class ReachAreaObjective : SpatialObjective { + [SerializeField] Collider _actor = null; + + [SerializeField] Collider _area = null; + + [SerializeField] bool _based_on_tags = false; + [SerializeField] ActorColliding _colliding = ActorColliding.Not_colliding_; + + [SerializeField] Obstruction[] _obstructions; + + //Used for.. if outside playable area then reset + [SerializeField] ActorOverlapping _overlapping = ActorOverlapping.Outside_area_; + + [SerializeField] BoundingBox _playable_area; + + public override void InternalReset() { } + + public override float InternalEvaluate() { + /*var regularising_term = 0f; + + foreach (var ob in _obstructions) { + RaycastHit ray_hit; + Physics.Raycast (_actor.transform.position, (ob.transform.position - _actor.transform.position).normalized, out ray_hit, LayerMask.NameToLayer ("Obstruction")); + regularising_term += -Mathf.Abs (Vector3.Distance (ray_hit.point, _actor.transform.position)); + //regularising_term += -Mathf.Abs (Vector3.Distance (ob.transform.position, _actor.transform.position)); + } + + reward += 0.2 * regularising_term;*/ + + //reward += 1 / Mathf.Abs (Vector3.Distance (_area.transform.position, _actor.transform.position)); // Inversely porpotional to the absolute distance, closer higher reward + + if (this._overlapping == ActorOverlapping.Inside_area_) { + this.ParentEnvironment.Terminate("Inside goal area"); + return 1f; + } + + if (this._colliding == ActorColliding.Colliding_) { + this.ParentEnvironment.Terminate("Actor colliding with obstruction"); + } + + if (this._playable_area && this._actor) { + if (!this._playable_area.Bounds.Intersects(this._actor.GetComponent().bounds)) { + this.ParentEnvironment.Terminate("Actor is outside playable area"); + } + } + + return 0f; + } + + public override void RemotePostSetup() { + if (!this._area) { + this._area = FindObjectOfType().gameObject.GetComponent(); + } + + if (!this._actor) { + this._actor = FindObjectOfType().gameObject.GetComponent(); + } + + if (this._obstructions.Length <= 0) { + this._obstructions = FindObjectsOfType(); + } + + if (!this._playable_area) { + this._playable_area = FindObjectOfType(); + } + + NeodroidRegistrationUtilities + .RegisterCollisionTriggerCallbacksOnChildren(this, + this + ._area + .transform, + this + .OnCollisionEnterChild, + this + .OnTriggerEnterChild, + this + .OnCollisionExitChild, + this + .OnTriggerExitChild, + this + .OnCollisionStayChild, + this + .OnTriggerStayChild); + + NeodroidRegistrationUtilities + .RegisterCollisionTriggerCallbacksOnChildren(this, + this + ._actor + .transform, + this + .OnCollisionEnterChild, + this + .OnTriggerEnterChild, + this + .OnCollisionExitChild, + this + .OnTriggerExitChild, + this + .OnCollisionStayChild, + this + .OnTriggerStayChild); + } + + void OnTriggerEnterChild(GameObject child_game_object, Collider other_game_object) { + if (this._actor) { + if (this._based_on_tags) { + if (child_game_object.CompareTag(this._area.tag) && other_game_object.CompareTag(this._actor.tag)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is inside area"); + } + #endif + + this._overlapping = ActorOverlapping.Inside_area_; + } + + if (child_game_object.CompareTag(this._actor.tag) && other_game_object.CompareTag("Obstruction")) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is colliding"); + } + #endif + + this._colliding = ActorColliding.Colliding_; + } + } else { + if (child_game_object == this._area.gameObject + && other_game_object.gameObject == this._actor.gameObject) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is inside area"); + } + #endif + + this._overlapping = ActorOverlapping.Inside_area_; + } + + if (child_game_object == this._actor.gameObject && other_game_object.CompareTag("Obstruction")) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is colliding"); + } + #endif + + this._colliding = ActorColliding.Colliding_; + } + } + } + } + + void OnTriggerStayChild(GameObject child_game_object, Collider other_game_object) { + if (this._actor) { + if (this._based_on_tags) { + if (child_game_object.CompareTag(this._area.tag) && other_game_object.CompareTag(this._actor.tag)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is inside area"); + } + #endif + + this._overlapping = ActorOverlapping.Inside_area_; + } + + if (child_game_object.CompareTag(this._actor.tag) && other_game_object.CompareTag("Obstruction")) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is colliding"); + } + #endif + + this._colliding = ActorColliding.Colliding_; + } + } else { + if (child_game_object == this._area.gameObject + && other_game_object.gameObject == this._actor.gameObject) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is inside area"); + } + #endif + + this._overlapping = ActorOverlapping.Inside_area_; + } + + if (child_game_object == this._actor.gameObject && other_game_object.CompareTag("Obstruction")) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is colliding"); + } + #endif + + this._colliding = ActorColliding.Colliding_; + } + } + } + } + + void OnTriggerExitChild(GameObject child_game_object, Collider other_game_object) { + if (this._actor) { + if (this._based_on_tags) { + if (child_game_object.CompareTag(this._area.tag) && other_game_object.CompareTag(this._actor.tag)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is outside area"); + } + #endif + + this._overlapping = ActorOverlapping.Outside_area_; + } + + if (child_game_object.CompareTag(this._actor.tag) && other_game_object.CompareTag("Obstruction")) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is not colliding"); + } + #endif + + this._colliding = ActorColliding.Not_colliding_; + } + } else { + if (child_game_object == this._area.gameObject + && other_game_object.gameObject == this._actor.gameObject) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is outside area"); + } + #endif + + this._overlapping = ActorOverlapping.Outside_area_; + } + + if (child_game_object == this._actor.gameObject && other_game_object.CompareTag("Obstruction")) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is not colliding"); + } + #endif + + this._colliding = ActorColliding.Not_colliding_; + } + } + } + } + + void OnCollisionEnterChild(GameObject child_game_object, Collision collision) { } + + void OnCollisionStayChild(GameObject child_game_object, Collision collision) { } + + void OnCollisionExitChild(GameObject child_game_object, Collision collision) { } + } +} diff --git a/Runtime/Prototyping/Evaluation/ReachArea.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachAreaObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/ReachArea.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachAreaObjective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachGoalObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachGoalObjective.cs new file mode 100644 index 000000000..cacd6da33 --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachGoalObjective.cs @@ -0,0 +1,131 @@ +using droid.Runtime.GameObjects.ChildSensors; +using droid.Runtime.Prototyping.Actors; +using droid.Runtime.Utilities; +using droid.Runtime.Utilities.Grid; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath + + "ReachGoal" + + EvaluationComponentMenuPath._Postfix)] + public class ReachGoalObjective : SpatialObjective { + [SerializeField] Actor _actor = null; + + [SerializeField] bool _based_on_tags = false; + + [SerializeField] EmptyCell _goal = null; + + //Used for.. if outside playable area then reset + [SerializeField] ActorOverlapping _overlapping = ActorOverlapping.Outside_area_; + + /// + /// + /// + /// + public override float InternalEvaluate() { + var distance = + Mathf.Abs(Vector3.Distance(this._goal.transform.position, this._actor.transform.position)); + + if (this._overlapping == ActorOverlapping.Inside_area_ || distance < 0.5f) { + this.ParentEnvironment.Terminate("Inside goal area"); + return 1f; + } + + return 0f; + } + + /// + /// + /// + public override void InternalReset() { + this.Setup(); + this._overlapping = ActorOverlapping.Outside_area_; + } + + /// + /// + /// + /// + public void SetGoal(EmptyCell goal) { + this._goal = goal; + this.InternalReset(); + } + + /// + /// + /// + public override void RemotePostSetup() { + if (!this._goal) { + this._goal = FindObjectOfType(); + } + + if (!this._actor) { + this._actor = FindObjectOfType(); + } + + if (this._goal) { + NeodroidRegistrationUtilities + .RegisterCollisionTriggerCallbacksOnChildren(this, + this + ._goal + .transform, + null, + this + .OnTriggerEnterChild); + } + + if (this._actor) { + NeodroidRegistrationUtilities + .RegisterCollisionTriggerCallbacksOnChildren(this, + this + ._actor + .transform, + null, + this + .OnTriggerEnterChild); + } + } + + void OnTriggerEnterChild(GameObject child_game_object, Collider other_game_object) { + Debug.Log("triggered"); + if (this._actor) { + if (this._based_on_tags) { + if (other_game_object.CompareTag(this._actor.tag)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is inside area"); + } + #endif + + this._overlapping = ActorOverlapping.Inside_area_; + } + } else { + if (child_game_object == this._goal.gameObject + && other_game_object.gameObject == this._actor.gameObject) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is inside area"); + } + #endif + this._overlapping = ActorOverlapping.Inside_area_; + } + } + } + } + + /// + /// + enum ActorOverlapping { + /// + /// + Inside_area_, + + /// + /// + Outside_area_ + } + } +} diff --git a/Runtime/Prototyping/Evaluation/ReachGoal.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachGoalObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/ReachGoal.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/ReachGoalObjective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/RestInAreaObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/RestInAreaObjective.cs new file mode 100644 index 000000000..e7eee3d6b --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/RestInAreaObjective.cs @@ -0,0 +1,188 @@ +using System.Collections; +using droid.Runtime.GameObjects.BoundingBoxes; +using droid.Runtime.GameObjects.ChildSensors; +using droid.Runtime.Prototyping.Actors; +using droid.Runtime.Prototyping.Sensors; +using droid.Runtime.Utilities; +using droid.Runtime.Utilities.Extensions; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath + + "RestInArea" + + EvaluationComponentMenuPath._Postfix)] + public class RestInAreaObjective : SpatialObjective { + [SerializeField] Actor _actor = null; + + [SerializeField] Collider _area = null; + [SerializeField] bool _is_resting = false; + + [SerializeField] Obstruction[] _obstructions = null; + + //Used for.. if outside playable area then reset + [SerializeField] ActorOverlapping _overlapping = ActorOverlapping.Outside_area_; + + [SerializeField] BoundingBox _playable_area = null; + [SerializeField] float _resting_time = 3f; + [SerializeField] bool _sparse = false; + [SerializeField] Coroutine _wait_for_resting = null; + WaitForSeconds _wait_for_seconds = new WaitForSeconds(3f); + + /// + /// + /// + /// + public override float InternalEvaluate() { + var signal = 0f; + + if (this._overlapping == ActorOverlapping.Inside_area_ && this._is_resting) { + if (this._actor is KillableActor) { + if (((KillableActor)this._actor).IsAlive) { + this.ParentEnvironment.Terminate("Inside goal area"); + return 1f; + } + } else { + this.ParentEnvironment.Terminate("Inside goal area"); + return 1f; + } + } + + if (!this._sparse) { + signal += 1 / Vector3.Distance(this._actor.transform.position, this._area.transform.position); + } + + if (this._playable_area && this._actor) { + if (!this._playable_area.Bounds.Intersects(this._actor.GetComponent().bounds)) { + this.ParentEnvironment.Terminate("Actor is outside playable area"); + } + } + + return signal; + } + + /// + /// + /// + public override void InternalReset() { + if (this._wait_for_resting != null) { + this.StopCoroutine(this._wait_for_resting); + } + + this._is_resting = false; + } + + IEnumerator WaitForResting() { + yield return this._wait_for_seconds; + + this._is_resting = true; + } + + /// + /// + /// + public override void RemotePostSetup() { + if (!this._area) { + this._area = FindObjectOfType().gameObject.GetComponent(); + } + + if (!this._actor) { + this._actor = FindObjectOfType(); + } + + if (this._obstructions.Length <= 0) { + this._obstructions = FindObjectsOfType(); + } + + if (!this._playable_area) { + this._playable_area = FindObjectOfType(); + } + + NeodroidRegistrationUtilities + .RegisterCollisionTriggerCallbacksOnChildren(this, + this + ._area + .transform, + null, + this + .OnTriggerEnterChild, + null, + this + .OnTriggerExitChild, + null, + this + .OnTriggerStayChild); + + NeodroidRegistrationUtilities + .RegisterCollisionTriggerCallbacksOnChildren(this, + this + ._actor + .transform, + null, + this + .OnTriggerEnterChild, + null, + this + .OnTriggerExitChild, + null, + this + .OnTriggerStayChild); + this._wait_for_seconds = new WaitForSeconds(this._resting_time); + } + + void OnTriggerEnterChild(GameObject child_game_object, Collider other_game_object) { + if (this._actor) { + if (child_game_object == this._area.gameObject + && other_game_object.gameObject == this._actor.gameObject) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is inside area"); + } + #endif + + this._overlapping = ActorOverlapping.Inside_area_; + if (this._wait_for_resting != null) { + this.StopCoroutine(this._wait_for_resting); + } + + this._wait_for_resting = this.StartCoroutine(this.WaitForResting()); + } + } + } + + void OnTriggerStayChild(GameObject child_game_object, Collider other_game_object) { + if (this._actor) { + if (child_game_object == this._area.gameObject + && other_game_object.gameObject == this._actor.gameObject) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is inside area"); + } + #endif + + this._overlapping = ActorOverlapping.Inside_area_; + } + } + } + + void OnTriggerExitChild(GameObject child_game_object, Collider other_game_object) { + if (this._actor) { + if (child_game_object == this._area.gameObject + && other_game_object.gameObject == this._actor.gameObject) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("Actor is outside area"); + } + #endif + + this._overlapping = ActorOverlapping.Outside_area_; + if (this._wait_for_resting != null) { + this.StopCoroutine(this._wait_for_resting); + } + } + } + } + } +} diff --git a/Runtime/Prototyping/Evaluation/RestInArea.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/RestInAreaObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/RestInArea.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/RestInAreaObjective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/SeekAndAvoidObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/SeekAndAvoidObjective.cs new file mode 100644 index 000000000..590061bbc --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/SeekAndAvoidObjective.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.GameObjects.ChildSensors; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + public class SeekAndAvoidObjective : ObjectiveFunction { + [SerializeField] Transform _actor = null; + [SerializeField] GameObject _avoidable = null; + List _avoidables = null; + [SerializeField] GameObject _collectible = null; + List _collectibles = null; + [SerializeField] int _end_game_radius = 10; + Vector3 _initial_actor_position = Vector3.zero; + [SerializeField] int _num_avoidables = 50; + [SerializeField] int _num_collectibles = 50; + [SerializeField] int _penalty = -1; + [SerializeField] int _reward = 1; + float _score; + [SerializeField] int _spawn_radius = 10; + List _spawned_locations = null; + + /// + /// + /// + public override String PrototypingTypeName { get { return "SeekAndAvoidListener"; } } + + /// + /// + /// + /// + public override Single InternalEvaluate() { + // The game ends if the number of good balls is 0, or if the robot is too far from start + var actor = this._actor; + if (actor != null) { + var dist = Vector3.Distance(this._initial_actor_position, actor.position); + var game_objects = this._collectibles; + var is_over = game_objects != null && (game_objects.Count == 0 || dist > this._end_game_radius); + + if (is_over) { + this.ParentEnvironment.Terminate($"Ending Game: Dist {dist} radius {this._spawn_radius}"); + } + } + + return this._score; + } + + /// + /// + /// + public override void InternalReset() { + if (!Application.isPlaying) { + return; + } + + var actor = this._actor; + if (actor != null) { + this._initial_actor_position = actor.position; + var remote_sensor = this._actor.GetComponentInChildren>(); + if (!remote_sensor) { + var col = this._actor.GetComponentInChildren(); + if (col) { + remote_sensor = col.gameObject.AddComponent>(); + } + } + + if (remote_sensor) { + remote_sensor.Caller = this; + remote_sensor.OnTriggerEnterDelegate = this.OnChildTriggerEnter; + remote_sensor.OnCollisionEnterDelegate = this.OnChildTriggerEnter; + } + } + + this.ClearEnvironment(); + this.SpawnCollectibles(); + this.SpawnAvoidables(); + } + + void OnChildTriggerEnter(GameObject child_game_object, Collision collision) { + this.OnChildTriggerEnter(child_game_object, collision.collider); + } + + void OnChildTriggerEnter(GameObject child_game_object, Collider collider1) { + #if NEODROID_DEBUG + if (this.Debugging) { + print($"{child_game_object} is colliding with {collider1}"); + } + #endif + + var collectible = this._collectible; + if (collectible != null && collider1.gameObject.name.Contains(collectible.name)) { + this._collectibles.Remove(collider1.gameObject); + Destroy(collider1.gameObject); + this._score += this._reward; + } + + var game_object = this._avoidable; + if (game_object != null && collider1.gameObject.name.Contains(game_object.name)) { + this._avoidables.Remove(collider1.gameObject); + this._score += this._penalty; + Destroy(collider1.gameObject); + } + } + + void SpawnCollectibles() { + for (var i = 0; i < this._num_collectibles; i++) { + var game_object = this._collectible; + if (game_object != null) { + var collectible = this.RandomSpawn(this._collectible, this._initial_actor_position); + this._collectibles.Add(collectible); + } + } + } + + void SpawnAvoidables() { + for (var i = 0; i < this._num_avoidables; i++) { + var game_object = this._avoidable; + if (game_object != null) { + var avoidable = this.RandomSpawn(this._avoidable, this._initial_actor_position); + this._avoidables.Add(avoidable); + } + } + } + + GameObject RandomSpawn(GameObject prefab, Vector3 position) { + this._spawned_locations.Add(position); + + if (prefab != null) { + Vector3 location; + do { + location = this._actor.transform.position; + location.x += Random.Range(-this._spawn_radius, this._spawn_radius); + location.y = position.y + 1f; + location.z += Random.Range(-this._spawn_radius, this._spawn_radius); + } while (this._spawned_locations.Contains(location)); + + this._spawned_locations.Add(location); + + return Instantiate(prefab, + location, + Quaternion.identity, + this.ParentEnvironment.Transform); + } + + return null; + } + + void ClearEnvironment() { + if (this._spawned_locations != null) { + this._spawned_locations.Clear(); + } else { + this._spawned_locations = new List(); + } + + if (this._collectibles != null) { + foreach (var obj in this._collectibles) { + Destroy(obj); + } + + this._collectibles.Clear(); + } else { + this._collectibles = new List(); + } + + if (this._avoidables != null) { + foreach (var obj in this._avoidables) { + Destroy(obj); + } + + this._avoidables.Clear(); + } else { + this._avoidables = new List(); + } + } + } +} diff --git a/Runtime/Prototyping/Evaluation/SeekAndAvoidEvaluation.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/SeekAndAvoidObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/SeekAndAvoidEvaluation.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/SeekAndAvoidObjective.cs.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/SpatialObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/SpatialObjective.cs new file mode 100644 index 000000000..65a1c71bd --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/SpatialObjective.cs @@ -0,0 +1,98 @@ +using droid.Runtime.GameObjects.BoundingBoxes; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + public abstract class SpatialObjective : EpisodicObjective { + + + /// + /// + /// + [field : SerializeField] + protected BoundingBox Box { get; set; } + + /// + /// // TODO: Look at how to simplify a way to describe which objects should be in this list + /// + [field : SerializeField] + protected Transform[] TerminatingTransforms { get; set; } + + /// + /// + /// + public override void RemotePostSetup() { + base.RemotePostSetup(); + + if (this.Box == null) { + if (this.ParentEnvironment.PlayableArea) { + this.Box = this.ParentEnvironment.PlayableArea; + } else { + this.Box = this.gameObject.GetComponent(); + } + } + } + + /// + /// + /// + /// + public override float Evaluate() { + var signal = 0.0f; + signal += this.InternalEvaluate(); + + if (this.EpisodeLength > 0 && this.ParentEnvironment?.StepI >= this.EpisodeLength) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Maximum episode length reached, Length {this.ParentEnvironment.StepI}"); + } + #endif + + signal = this.FailedSignal; + + this.ParentEnvironment.Terminate("Maximum episode length reached"); + } + + if (this.Box) { + foreach (var t in this.TerminatingTransforms) { + if (!this.Box.Bounds.Contains(t.position)) { + signal = this.FailedSignal; + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"The transform {t} outside bounds, terminating {this.ParentEnvironment}"); + } + #endif + + this.ParentEnvironment + ?.Terminate($"The transform {t} is not inside {this.Box.gameObject} bounds"); + } + } + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log(signal); + } + #endif + + this.LastSignal = signal; + + this.EpisodeReturn += signal; + + return signal; + } + + /// + /// + public abstract override void InternalReset(); + + /// + /// + /// + /// + public abstract override float InternalEvaluate(); + } +} diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/SpatialObjective.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/SpatialObjective.cs.meta new file mode 100644 index 000000000..bd5b79fbf --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/SpatialObjective.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b387469a6e7113488017cf7a37df09d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 17fcdffc70a3a4ad292d69bbf78ba1ca, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/ObjectiveFunctions/Spatial/VelocityObjective.cs b/Runtime/Prototyping/ObjectiveFunctions/Spatial/VelocityObjective.cs new file mode 100644 index 000000000..d32cb95ff --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Spatial/VelocityObjective.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Spatial { + /// + /// + /// + public class VelocityObjective : SpatialObjective { + /// + /// + [SerializeField] + Rigidbody _rigidbody = null; + + /// + /// + public override void InternalReset() { } + + /// + /// + /// + /// + public override float InternalEvaluate() { + var vel_mag = this._rigidbody.velocity.magnitude; + + this.IsOutsideBound(); + + return vel_mag; + } + + /// + /// + void IsOutsideBound() { + if (this.ParentEnvironment.PlayableArea && this._rigidbody) { + var env_bounds = this.ParentEnvironment.PlayableArea.Bounds; + var rb_bounds = this._rigidbody.GetComponent().bounds; + var intersects = env_bounds.Intersects(rb_bounds); + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"{this.ParentEnvironment.Identifier} - {env_bounds}"); + Debug.Log($"{this._rigidbody.name} - {rb_bounds}"); + Debug.Log($"Is intersecting - {intersects}"); + } + #endif + + if (!intersects) { + this.ParentEnvironment.Terminate("Actor is outside playable area"); + } + } + } + } +} diff --git a/Runtime/Prototyping/Evaluation/VelocityEvaluation.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Spatial/VelocityObjective.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/VelocityEvaluation.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Spatial/VelocityObjective.cs.meta diff --git a/Runtime/Prototyping/Evaluation/Tasks.meta b/Runtime/Prototyping/ObjectiveFunctions/Tasks.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/Tasks.meta rename to Runtime/Prototyping/ObjectiveFunctions/Tasks.meta diff --git a/Runtime/Prototyping/ObjectiveFunctions/Tasks/TaskSequence.cs b/Runtime/Prototyping/ObjectiveFunctions/Tasks/TaskSequence.cs new file mode 100644 index 000000000..76e533e9f --- /dev/null +++ b/Runtime/Prototyping/ObjectiveFunctions/Tasks/TaskSequence.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Prototyping.Sensors.Spatial.Grid; +using droid.Runtime.ScriptableObjects.Deprecated; +using UnityEngine; + +namespace droid.Runtime.Prototyping.ObjectiveFunctions.Tasks { + //[ExecuteInEditMode] + /// + /// + public class TaskSequence : NeodroidTask { + [SerializeField] GoalCellSensor _current_goal_cell; + + [SerializeField] Stack _goal_stack; + + [SerializeField] GoalCellSensor[] _sequence; + + public GoalCellSensor CurrentGoalCell { + get { return this._current_goal_cell; } + private set { this._current_goal_cell = value; } + } + + void Start() { + if (this._sequence == null || this._sequence.Length == 0) { + this._sequence = FindObjectsOfType(); + Array.Sort(this._sequence, (g1, g2) => g1.OrderIndex.CompareTo(g2.OrderIndex)); + } + + Array.Reverse(this._sequence); + this._goal_stack = new Stack(this._sequence); + this.CurrentGoalCell = this.PopGoal(); + } + + public GoalCellSensor[] GetSequence() { return this._sequence; } + + public GoalCellSensor PopGoal() { + this.CurrentGoalCell = this._goal_stack.Pop(); + return this.CurrentGoalCell; + } + } +} diff --git a/Runtime/Prototyping/Evaluation/Tasks/TaskSequence.cs.meta b/Runtime/Prototyping/ObjectiveFunctions/Tasks/TaskSequence.cs.meta similarity index 100% rename from Runtime/Prototyping/Evaluation/Tasks/TaskSequence.cs.meta rename to Runtime/Prototyping/ObjectiveFunctions/Tasks/TaskSequence.cs.meta diff --git a/Runtime/Prototyping/Observers/Camera/CameraObserver.cs b/Runtime/Prototyping/Observers/Camera/CameraObserver.cs deleted file mode 100644 index 09e14fa4c..000000000 --- a/Runtime/Prototyping/Observers/Camera/CameraObserver.cs +++ /dev/null @@ -1,190 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Camera { - /// - /// - /// - enum ImageFormat { - /// - /// - /// - Jpg_, - - /// - /// - /// - Png_, - - /// - /// - /// - Exr_ - } - - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "Camera" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode, RequireComponent(typeof(UnityEngine.Camera))] - public class CameraObserver : Observer, - IHasByteArray { - /// - /// - /// - [SerializeField] - ImageFormat _image_format = ImageFormat.Jpg_; - - /// - /// - /// - [SerializeField, Range(0, 100)] - int _jpeg_quality = 75; - - /// - /// - /// - [Header("Observation", order = 103)] - //[SerializeField] - byte[] _bytes = { }; - - /// - /// - /// - [Header("Specific", order = 102), SerializeField] - protected UnityEngine.Camera _camera; - - /// - /// - /// - protected bool _grab = true; - - /// - /// - /// - protected IManager _manager; - - /// - /// - /// - Texture2D _texture; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Camera"; } - } - - /// - /// - /// - public byte[] Bytes { - get { return this._bytes; } - private set { this._bytes = value; } - } - - /// - /// - /// - protected override void PreSetup() { - this._manager = FindObjectOfType(); - this._camera = this.GetComponent(); - if (this._camera) { - var target_texture = this._camera.targetTexture; - if (!target_texture) { - Debug.LogWarning("No targetTexture defaulting to a texture of size (256, 256)"); - this._texture = new Texture2D(256, 256); - } else { - var texture_format_str = target_texture.format.ToString(); - TextureFormat o; - if (Enum.TryParse(texture_format_str, out o)) { - this._texture = new Texture2D( - target_texture.width, - target_texture.height, - o, - target_texture.useMipMap, - !target_texture.sRGB); - } else { - Debug.LogWarning( - $"Texture format {texture_format_str} is not a valid TextureFormat for Texture2D$"); - } - } - } - - if (this._manager != null) { - if (this._manager.SimulatorConfiguration != null) { - if (this._manager.SimulatorConfiguration.SimulationType != SimulationType.Frame_dependent_) { - Debug.LogWarning( - "WARNING! Camera Observations may be out of sync with other observation data, because simulation configuration is not frame dependent"); - } - } - } - } - - /// - /// - /// - protected virtual void OnPostRender() { this.UpdateBytes(); } - - // ReSharper disable once Unity.RedundantEventFunction - /// - /// - /// - protected override void Update() { - //Dont assign anything the floatenumerable - } - - /// - /// - /// - /// - protected virtual void UpdateBytes() { - if (!this._grab) { - return; - } - - this._grab = false; - - if (this._camera) { - var current_render_texture = RenderTexture.active; - RenderTexture.active = this._camera.targetTexture; - - this._texture.ReadPixels(new Rect(0, 0, this._texture.width, this._texture.height), 0, 0); - this._texture.Apply(); - - switch (this._image_format) { - case ImageFormat.Jpg_: - this.Bytes = this._texture.EncodeToJPG(this._jpeg_quality); - break; - case ImageFormat.Png_: - this.Bytes = this._texture.EncodeToPNG(); - break; - case ImageFormat.Exr_: - this.Bytes = this._texture.EncodeToEXR(); - break; - default: throw new ArgumentOutOfRangeException(); - } - - RenderTexture.active = current_render_texture; - } else { - Debug.LogWarning($"No camera found on {this}"); - } - } - - /// - /// - /// - public override void UpdateObservation() { - this._grab = true; - if (this._manager?.SimulatorConfiguration?.SimulationType != SimulationType.Frame_dependent_) { - this._camera.Render(); - this.UpdateBytes(); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Camera/FloatArrayCameraObserver.cs b/Runtime/Prototyping/Observers/Camera/FloatArrayCameraObserver.cs deleted file mode 100644 index 22051ceb6..000000000 --- a/Runtime/Prototyping/Observers/Camera/FloatArrayCameraObserver.cs +++ /dev/null @@ -1,112 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Camera { - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "FloatArrayCamera" + ObserverComponentMenuPath._Postfix)] - public class FloatArrayCameraObserver : Observer, - IHasArray { - [Header("Observation", order = 103)] - //[SerializeField] - float[] _array = { }; - - [SerializeField] bool _black_white; - - [Header("Specific", order = 102), SerializeField] - UnityEngine.Camera _camera; - - bool _grab = true; - - IManager _manager; - - [SerializeField] Texture2D _texture; - - public override string PrototypingTypeName { - get { return "Camera"; } - } - - public float[] ObservationArray { - get { return this._array; } - private set { this._array = value; } - } - - protected override void PreSetup() { - //this._manager = FindObjectOfType(); - this._camera = this.GetComponent(); - if (this._camera.targetTexture) { - this._texture = new Texture2D(this._camera.targetTexture.width, this._camera.targetTexture.height); - if (this._black_white) { - this.ObservationArray = new float[this._texture.width * this._texture.height * 1]; // *1 for clarity - } else { - this.ObservationArray = new float[this._texture.width * this._texture.height * 3]; - } - } else { - this.ObservationArray = new float[0]; - } - - this.FloatEnumerable = this.ObservationArray; - } - - protected virtual void OnPostRender() { - if (this._camera.targetTexture) { - this.UpdateArray(); - } - } - - protected virtual void UpdateArray() { - if (!this._grab) { - return; - } - - this._grab = false; - - var current_render_texture = RenderTexture.active; - RenderTexture.active = this._camera.targetTexture; - - this._texture.ReadPixels( - new Rect(0, 0, this._camera.targetTexture.width, this._camera.targetTexture.height), - 0, - 0); - this._texture.Apply(); - - if (!this._black_white) { - for (var w = 0; w < this._texture.width; w++) { - for (var h = 0; h < this._texture.height; h++) { - var c = this._texture.GetPixel(w, h); - this.ObservationArray[this._texture.width * w + h * 3] = c.r; - this.ObservationArray[this._texture.width * w + h * 3 + 1] = c.g; - this.ObservationArray[this._texture.width * w + h * 3 + 2] = c.b; - } - } - } else { - for (var w = 0; w < this._texture.width; w++) { - for (var h = 0; h < this._texture.height; h++) { - var c = this._texture.GetPixel(w, h); - this.ObservationArray[this._texture.width * w + h] = (c.r + c.g + c.b) / 3; - } - } - } - - RenderTexture.active = current_render_texture; - this.FloatEnumerable = this.ObservationArray; - } - - public override void UpdateObservation() { - if (this._manager?.SimulatorConfiguration != null) { - if (this._manager.SimulatorConfiguration.SimulationType != SimulationType.Frame_dependent_) { - Debug.LogWarning("WARNING! Camera Observations may be out of sync other data"); - } - } - - this._grab = true; - var manager = this._manager; - if (manager != null - && manager.SimulatorConfiguration.SimulationType != SimulationType.Frame_dependent_) { - this._camera.Render(); - - this.UpdateArray(); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Camera/SegmentationCameraObserver.cs b/Runtime/Prototyping/Observers/Camera/SegmentationCameraObserver.cs deleted file mode 100644 index 7b0b7aa14..000000000 --- a/Runtime/Prototyping/Observers/Camera/SegmentationCameraObserver.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Linq; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using Neodroid.Runtime.Utilities.Segmentation; -using UnityEngine; -using UnityEngine.Serialization; -using Object = System.Object; - -namespace Neodroid.Runtime.Prototyping.Observers.Camera { - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "SegmentationCamera" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode, RequireComponent(typeof(UnityEngine.Camera))] - public class SegmentationCameraObserver : StringAugmentedCameraObserver { - /// - /// - /// - - [SerializeField] Segmenter _segmenter; - - - /// - /// - /// - public override void UpdateObservation() { - this._grab = true; - if (this._manager?.SimulatorConfiguration?.SimulationType != SimulationType.Frame_dependent_) { - this._camera.Render(); - this.UpdateBytes(); - } - - this._Serialised_String = this._segmenter != null ? this._segmenter.ColorsDict - .Select(c=>$"{c.Key}: {c.Value.ToString()}") - .Aggregate("", (current, next) => $"{current}, {next}") : "Nothing"; - - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Camera/StringAugmentedCameraObserver.cs b/Runtime/Prototyping/Observers/Camera/StringAugmentedCameraObserver.cs deleted file mode 100644 index c36e8a318..000000000 --- a/Runtime/Prototyping/Observers/Camera/StringAugmentedCameraObserver.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Utilities.ScriptableObjects; -using UnityEngine; -using UnityEngine.Serialization; -using Object = System.Object; - -namespace Neodroid.Runtime.Prototyping.Observers.Camera { - - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "StringAugmentedCamera" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode, RequireComponent(typeof(UnityEngine.Camera))] - public class StringAugmentedCameraObserver : CameraObserver, - IHasSerialisedString { - /// - /// - /// - [FormerlySerializedAs("_serialised_string")] - [Header("Observation", order = 103)] - - - [SerializeField] - protected string _Serialised_String; - - - /// - /// - /// - public override void UpdateObservation() { - this._grab = true; - if (this._manager?.SimulatorConfiguration?.SimulationType != SimulationType.Frame_dependent_) { - this._camera.Render(); - this.UpdateBytes(); - } - } - - /// - /// - /// - public String ObservationValue { get { return this._Serialised_String; } } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/CategoricalObserver.cs b/Runtime/Prototyping/Observers/CategoricalObserver.cs deleted file mode 100644 index b315721ec..000000000 --- a/Runtime/Prototyping/Observers/CategoricalObserver.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers { - /// - /// - /// - enum Category { - One_, - Two_, - Three_ - } - - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "Categorical" + ObserverComponentMenuPath._Postfix)] - public class CategoricalObserver : Observer { - void OneHotEncoding() { } - - /// - /// - /// - /// - public override void UpdateObservation() { throw new NotImplementedException(); } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/CompassObserver.cs b/Runtime/Prototyping/Observers/CompassObserver.cs deleted file mode 100644 index a45d31f88..000000000 --- a/Runtime/Prototyping/Observers/CompassObserver.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers { - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "Compass" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode, Serializable] - public class CompassObserver : Observer, - IHasDouble { - /// - /// - /// - [SerializeField] - Vector2 _2_d_position; - - /// - /// - /// - [Header("Observation", order = 103), SerializeField] - Vector3 _position; - - /// - /// - /// - [SerializeField] - Space3 _position_space = new Space3 { - _Decimal_Granularity = 1, _Max_Values = Vector3.one, _Min_Values = -Vector3.one - }; - - /// - /// - /// - [Header("Specific", order = 102), SerializeField] - UnityEngine.Transform _target; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Compass"; } - } - - /// - /// - /// - public Space2 ObservationSpace2D { - get { - return new Space2(this._position_space._Decimal_Granularity) { - _Max_Values = new Vector2(this._position_space._Max_Values.x, this._position_space._Max_Values.y), - _Min_Values = new Vector2(this._position_space._Min_Values.x, this._position_space._Min_Values.y) - }; - } - } - - /// - /// - /// - public Vector3 Position { - get { return this._position; } - set { - this._position = this.NormaliseObservation ? this._position_space.ClipNormaliseRound(value) : value; - this._2_d_position = new Vector2(this._position.x, this._position.z); - } - } - - /// - /// - /// - public Vector2 ObservationValue { - get { return this._2_d_position; } - set { this._2_d_position = value; } - } - - /// - /// - /// - protected override void PreSetup() { this.FloatEnumerable = new[] {this.Position.x, this.Position.z}; } - - /// - /// - /// - public override void UpdateObservation() { - this.Position = this.transform.InverseTransformVector(this.transform.position - this._target.position) - .normalized; - - this.FloatEnumerable = new[] {this.Position.x, this.Position.z}; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/CompassObserver.cs.meta b/Runtime/Prototyping/Observers/CompassObserver.cs.meta deleted file mode 100644 index 7065784ec..000000000 --- a/Runtime/Prototyping/Observers/CompassObserver.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: ea408ea788d454c34adb71695255cd91 -timeCreated: 1516625627 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Observers/Experimental.meta b/Runtime/Prototyping/Observers/Experimental.meta deleted file mode 100644 index 7f33d0d22..000000000 --- a/Runtime/Prototyping/Observers/Experimental.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8df04a6e47fb644239862d38b7c35d01 -folderAsset: yes -timeCreated: 1515254775 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Observers/Experimental/BoundingBoxObserver.cs b/Runtime/Prototyping/Observers/Experimental/BoundingBoxObserver.cs deleted file mode 100644 index ebc183c5a..000000000 --- a/Runtime/Prototyping/Observers/Experimental/BoundingBoxObserver.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Neodroid.Runtime.Utilities.BoundingBoxes; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Experimental { - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath - + "Experimental/BoundingBox" - + ObserverComponentMenuPath._Postfix), ExecuteInEditMode, RequireComponent(typeof(BoundingBox))] - public class BoundingBoxObserver : Observer { - /// - /// - /// - public override string PrototypingTypeName { - get { return "BoundingBox"; } - } - //BoundingBox _bounding_box; - - /// - /// - /// - protected override void PreSetup() { - //_bounding_box = this.GetComponent (); - } - - /// - /// - /// - public override void UpdateObservation() { - //Data = Encoding.ASCII.GetBytes (_bounding_box.BoundingBoxCoordinatesAsJSON); - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Grid/GoalCellObserver.cs b/Runtime/Prototyping/Observers/Grid/GoalCellObserver.cs deleted file mode 100644 index c058852f9..000000000 --- a/Runtime/Prototyping/Observers/Grid/GoalCellObserver.cs +++ /dev/null @@ -1,93 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using Neodroid.Runtime.Utilities.Misc.Grid; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Grid { - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "GoalCell" + ObserverComponentMenuPath._Postfix)] - public class GoalCellObserver : Observer, - IHasTriple { - [SerializeField] EmptyCell _current_goal; - [SerializeField] Vector3 _current_goal_position; - - [SerializeField] bool _draw_names = true; - - [SerializeField] int _order_index; - - /// - /// - /// - public int OrderIndex { - get { return this._order_index; } - set { this._order_index = value; } - } - - /// - /// - /// - public bool DrawNames { - get { return this._draw_names; } - set { this._draw_names = value; } - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "GoalObserver"; } - } - - /// - /// - /// - public EmptyCell CurrentGoal { - get { - this.UpdateObservation(); - return this._current_goal; - } - set { this._current_goal = value; } - } - - /// - /// - /// - public Vector3 ObservationValue { - get { return this._current_goal_position; } - private set { this._current_goal_position = value; } - } - - /// - /// - /// - public Space3 TripleSpace { get; } = new Space3(); - - /// - /// - /// - public override void UpdateObservation() { - if (this._current_goal) { - this._current_goal_position = this._current_goal.transform.position; - } - - this.FloatEnumerable = new[] { - this._current_goal_position.x, this._current_goal_position.y, this._current_goal_position.z - }; - } - - #if UNITY_EDITOR - void OnDrawGizmosSelected() { - if (this.DrawNames) { - if (this._current_goal) { - NeodroidUtilities.DrawString( - this._current_goal.name, - this._current_goal.transform.position, - Color.green); - } - } - } - #endif - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Grid/GridPositionObserver.cs b/Runtime/Prototyping/Observers/Grid/GridPositionObserver.cs deleted file mode 100644 index 48765c332..000000000 --- a/Runtime/Prototyping/Observers/Grid/GridPositionObserver.cs +++ /dev/null @@ -1,72 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Grid { - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "GridPosition" + ObserverComponentMenuPath._Postfix)] - public class GridPositionObserver : Observer, - IHasSingle { - /// - /// - /// - int[,] _grid; - - /// - /// - /// - [SerializeField] - int _height; - - [Header("Observation", order = 103), SerializeField] - float _observation_value; - - [SerializeField] ValueSpace _observation_value_space; - [SerializeField] int _width; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Value"; } - } - - /// - /// - /// - public float ObservationValue { - get { return this._observation_value; } - set { - this._observation_value = this.NormaliseObservation - ? this._observation_value_space.ClipNormaliseRound(value) - : value; - } - } - - public ValueSpace SingleSpace { - get { return this._observation_value_space; } - } - - protected override void PreSetup() { - this._grid = new int[this._width, this._height]; - - var k = 0; - for (var i = 0; i < this._width; i++) { - for (var j = 0; j < this._height; j++) { - this._grid[i, j] = k++; - } - } - - this.FloatEnumerable = new[] {this.ObservationValue}; - } - - public override void UpdateObservation() { - var x = this.transform.position.x + this._width; - var z = this.transform.position.z + this._height; - - this.ObservationValue = this._grid[(int)x, (int)z]; - - this.FloatEnumerable = new[] {this.ObservationValue}; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Observer.cs b/Runtime/Prototyping/Observers/Observer.cs deleted file mode 100644 index 90cd595a8..000000000 --- a/Runtime/Prototyping/Observers/Observer.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.GameObjects; -using Neodroid.Runtime.Utilities.Misc.Drawing; -using Neodroid.Runtime.Utilities.Misc.Grasping; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers { - /// - /// - /// - [ExecuteInEditMode, Serializable] - public abstract class Observer : PrototypingGameObject, - - //IResetable, - IObserver { - /// - /// - /// - public IPrototypingEnvironment ParentEnvironment { - get { return this._environment; } - set { this._environment = value; } - } - - /// - /// - /// - public bool NormaliseObservation { - get { return this._normalise_observation; } - set { this._normalise_observation = value; } - } - - /// - /// - public virtual IEnumerable FloatEnumerable { get; set; } - - //protected abstract void UpdateFloatEnumerable(IEnumerable vals); - - /// - /// - /// - protected sealed override void Setup() { - this.PreSetup(); - this.FloatEnumerable = new float[] { }; - this.UpdateObservation(); - } - - /// - /// - /// - protected virtual void PreSetup() { } - - /// - /// - /// - protected override void RegisterComponent() { - this.ParentEnvironment = NeodroidUtilities.MaybeRegisterComponent( - (PrototypingEnvironment)this.ParentEnvironment, - this); - } - - /// - /// - /// - protected override void UnRegisterComponent() { this.ParentEnvironment?.UnRegister(this); } - - /// - /// - /// - public abstract void UpdateObservation(); - - /// - /// - /// - protected virtual void Update() { - if (Application.isPlaying) { - if (this.FloatEnumerable == null || !this.FloatEnumerable.Any()) { - Debug.LogWarning( - $"FloatEnumerable of {this.Identifier} is empty! Maybe you forget an assignment to it when updating observations"); - } - } - } - - #region Fields - - [Header("References", order = 99), SerializeField] - IPrototypingEnvironment _environment; - - [Header("Normalisation", order = 100), SerializeField] - bool _normalise_observation; - - #endregion - - /// - /// - /// - public void EnvironmentReset() { } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/ObserverComponentMenuPath.cs b/Runtime/Prototyping/Observers/ObserverComponentMenuPath.cs deleted file mode 100644 index 6f3518975..000000000 --- a/Runtime/Prototyping/Observers/ObserverComponentMenuPath.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace Neodroid.Runtime.Prototyping.Observers { - /// - /// - /// - public static class ObserverComponentMenuPath { - /// - /// - /// - public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Observers/"; - - /// - /// - /// - public const string _Postfix = "Observer"; - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Rays/AdjacencyObserver.cs b/Runtime/Prototyping/Observers/Rays/AdjacencyObserver.cs deleted file mode 100644 index 5560d8d39..000000000 --- a/Runtime/Prototyping/Observers/Rays/AdjacencyObserver.cs +++ /dev/null @@ -1,304 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Rays { - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "Adjacency" + ObserverComponentMenuPath._Postfix)] - public class AdjacencyObserver : Observer, - IHasArray { - [SerializeField] float _range = 1.0f; - [SerializeField] RaycastHit _hit; - - [SerializeField] bool _is_2_d; - - [Header("Observation", order = 103), SerializeField] - float[] _obs_array; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Adjacency"; } - } - - /// - /// - /// - public RaycastHit Hit { - get { return this._hit; } - set { this._hit = value; } - } - - /// - /// - /// - public float[] ObservationArray { - get { return this._obs_array; } - private set { this._obs_array = value; } - } - - /// - /// - /// - protected override void PreSetup() { - if (this._is_2_d) { - this.ObservationArray = new float[8]; - } else { - this.ObservationArray = new float[27]; - } - - this.FloatEnumerable = this.ObservationArray; - } - - /// - /// - /// - public override void UpdateObservation() { - if (this._is_2_d) { - var vals = new float[8]; - if (Physics.Raycast(this.transform.position, Vector3.forward, out this._hit, this._range)) { - vals[0] = 1; - } else { - vals[0] = 0; - } - - if (Physics.Raycast(this.transform.position, Vector3.left, out this._hit, this._range)) { - vals[1] = 1; - } else { - vals[1] = 0; - } - - if (Physics.Raycast(this.transform.position, Vector3.right, out this._hit, this._range)) { - vals[2] = 1; - } else { - vals[2] = 0; - } - - if (Physics.Raycast(this.transform.position, Vector3.back, out this._hit, this._range)) { - vals[3] = 1; - } else { - vals[3] = 0; - } - - if (Physics.Raycast( - this.transform.position, - (Vector3.forward + Vector3.left).normalized, - out this._hit, - this._range)) { - vals[4] = 1; - } else { - vals[4] = 0; - } - - if (Physics.Raycast( - this.transform.position, - (Vector3.forward + Vector3.right).normalized, - out this._hit, - this._range)) { - vals[5] = 1; - } else { - vals[5] = 0; - } - - if (Physics.Raycast( - this.transform.position, - (Vector3.back + Vector3.left).normalized, - out this._hit, - this._range)) { - vals[6] = 1; - } else { - vals[6] = 0; - } - - if (Physics.Raycast( - this.transform.position, - (Vector3.back + Vector3.right).normalized, - out this._hit, - this._range)) { - vals[7] = 1; - } else { - vals[7] = 0; - } - - this.ObservationArray = vals; - } else { - var vals = new float[27]; - if (Physics.Raycast(this.transform.position, Vector3.forward, out this._hit, this._range)) { - vals[0] = 1; - } else { - vals[0] = 0; - } - - if (Physics.Raycast(this.transform.position, Vector3.left, out this._hit, this._range)) { - vals[1] = 1; - } else { - vals[1] = 0; - } - - if (Physics.Raycast(this.transform.position, Vector3.right, out this._hit, this._range)) { - vals[2] = 1; - } else { - vals[2] = 0; - } - - if (Physics.Raycast(this.transform.position, Vector3.back, out this._hit, this._range)) { - vals[3] = 1; - } else { - vals[3] = 0; - } - - if (Physics.Raycast(this.transform.position, Vector3.up, out this._hit, this._range)) { - vals[4] = 1; - } else { - vals[4] = 0; - } - - if (Physics.Raycast(this.transform.position, Vector3.down, out this._hit, this._range)) { - vals[5] = 1; - } else { - vals[5] = 0; - } - - //TODO:Missing combinations Vector3.down+Vector3.left... - - this.ObservationArray = vals; - } - - this.FloatEnumerable = this.ObservationArray; - } - - #if UNITY_EDITOR - [SerializeField] Color _color = Color.green; - - void OnDrawGizmosSelected() { - if (this.enabled) { - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.forward * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.left * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.right * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.back * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.forward + Vector3.left).normalized * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.forward + Vector3.right).normalized * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.back + Vector3.left).normalized * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.back + Vector3.right).normalized * this._range, - this._color); - if (!this._is_2_d) { - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.up * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.down * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.up + Vector3.left).normalized * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.up + Vector3.right).normalized * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.up + Vector3.forward).normalized * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.up + Vector3.back).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.down + Vector3.left).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.down + Vector3.right).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.down + Vector3.forward).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.down + Vector3.back).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - - (Vector3.down + Vector3.forward + Vector3.left).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - - (Vector3.down + Vector3.forward + Vector3.right).normalized * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.down + Vector3.back + Vector3.left).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - - (Vector3.down + Vector3.back + Vector3.right).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - - (Vector3.up + Vector3.forward + Vector3.left).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - - (Vector3.up + Vector3.forward + Vector3.right).normalized * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.up + Vector3.back + Vector3.left).normalized * this._range, - this._color); - - Debug.DrawLine( - this.transform.position, - this.transform.position - (Vector3.up + Vector3.back + Vector3.right).normalized * this._range, - this._color); - } - } - } - #endif - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Rays/FixedLidarObserver.cs b/Runtime/Prototyping/Observers/Rays/FixedLidarObserver.cs deleted file mode 100644 index 147d28e88..000000000 --- a/Runtime/Prototyping/Observers/Rays/FixedLidarObserver.cs +++ /dev/null @@ -1,158 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Rays { - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "FixedLidar" + ObserverComponentMenuPath._Postfix)] - public class FixedLidarObserver : Observer, - IHasArray { - [SerializeField] float _range = 100.0f; - [SerializeField] RaycastHit _hit; - - [SerializeField] bool _is_2_d; - - [Header("Observation", order = 103), SerializeField] - float[] _obs_array; - - [SerializeField] - ValueSpace _observation_value_space = - new ValueSpace {_Decimal_Granularity = 10, _Min_Value = 0.0f, _Max_Value = 100.0f}; - - public override string PrototypingTypeName { - get { return "Lidar"; } - } - - public float[] ObservationArray { - get { return this._obs_array; } - private set { this._obs_array = value; } - } - - protected override void PreSetup() { - if (this._is_2_d) { - this.ObservationArray = new float[4]; - } else { - this.ObservationArray = new float[6]; - } - - this.FloatEnumerable = this.ObservationArray; - } - - public override void UpdateObservation() { - if (this._is_2_d) { - var vals = new float[4]; - if (Physics.Raycast(this.transform.position, Vector3.forward, out this._hit, this._range)) { - vals[0] = this._hit.distance; - } else { - vals[0] = this._range; - } - - vals[0] = this._observation_value_space.ClipNormaliseRound(vals[0]); - if (Physics.Raycast(this.transform.position, Vector3.left, out this._hit, this._range)) { - vals[1] = this._hit.distance; - } else { - vals[1] = this._range; - } - - vals[1] = this._observation_value_space.ClipNormaliseRound(vals[1]); - if (Physics.Raycast(this.transform.position, Vector3.right, out this._hit, this._range)) { - vals[2] = this._hit.distance; - } else { - vals[2] = this._range; - } - - vals[2] = this._observation_value_space.ClipNormaliseRound(vals[2]); - if (Physics.Raycast(this.transform.position, Vector3.back, out this._hit, this._range)) { - vals[3] = this._hit.distance; - } else { - vals[3] = this._range; - } - - vals[3] = this._observation_value_space.ClipNormaliseRound(vals[3]); - this.ObservationArray = vals; - } else { - var vals = new float[6]; - if (Physics.Raycast(this.transform.position, Vector3.forward, out this._hit, this._range)) { - vals[0] = this._hit.distance; - } else { - vals[0] = this._range; - } - - vals[0] = this._observation_value_space.ClipNormaliseRound(vals[0]); - if (Physics.Raycast(this.transform.position, Vector3.left, out this._hit, this._range)) { - vals[1] = this._hit.distance; - } else { - vals[1] = this._range; - } - - vals[1] = this._observation_value_space.ClipNormaliseRound(vals[1]); - if (Physics.Raycast(this.transform.position, Vector3.right, out this._hit, this._range)) { - vals[2] = this._hit.distance; - } else { - vals[2] = this._range; - } - - vals[2] = this._observation_value_space.ClipNormaliseRound(vals[2]); - if (Physics.Raycast(this.transform.position, Vector3.back, out this._hit, this._range)) { - vals[3] = this._hit.distance; - } else { - vals[3] = this._range; - } - - vals[3] = this._observation_value_space.ClipNormaliseRound(vals[3]); - if (Physics.Raycast(this.transform.position, Vector3.up, out this._hit, this._range)) { - vals[4] = this._hit.distance; - } else { - vals[4] = this._range; - } - - vals[4] = this._observation_value_space.ClipNormaliseRound(vals[4]); - if (Physics.Raycast(this.transform.position, Vector3.down, out this._hit, this._range)) { - vals[5] = this._hit.distance; - } else { - vals[5] = this._range; - } - - vals[5] = this._observation_value_space.ClipNormaliseRound(vals[5]); - this.ObservationArray = vals; - } - - this.FloatEnumerable = this.ObservationArray; - } - - #if UNITY_EDITOR - [SerializeField] Color _color = Color.green; - - void OnDrawGizmosSelected() { - if (this.enabled) { - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.forward * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.left * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.right * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.back * this._range, - this._color); - if (!this._is_2_d) { - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.up * this._range, - this._color); - Debug.DrawLine( - this.transform.position, - this.transform.position - Vector3.down * this._range, - this._color); - } - } - } - #endif - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Rays/FixedLidarObserver.cs.meta b/Runtime/Prototyping/Observers/Rays/FixedLidarObserver.cs.meta deleted file mode 100644 index 249f23abe..000000000 --- a/Runtime/Prototyping/Observers/Rays/FixedLidarObserver.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: d08925dd7ef6747e48d4be484910fea4 -timeCreated: 1516172011 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Prototyping/Observers/Rays/LineOfSightObserver.cs b/Runtime/Prototyping/Observers/Rays/LineOfSightObserver.cs deleted file mode 100644 index 753c591f0..000000000 --- a/Runtime/Prototyping/Observers/Rays/LineOfSightObserver.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Rays { - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "LineOfSight" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode, Serializable] - public class LineOfSightObserver : Observer, - IHasSingle { - RaycastHit _hit; - - [SerializeField] float _obs_value; - - [Header("Specific", order = 102), SerializeField] - UnityEngine.Transform _target; - - /// - /// - /// - [SerializeField] - ValueSpace _observation_value_space; - - public override string PrototypingTypeName { - get { return "LineOfSight"; } - } - - public float ObservationValue { - get { return this._obs_value; } - private set { this._obs_value = value; } - } - - public ValueSpace SingleSpace { - get { return this._observation_value_space; } - } - - protected override void PreSetup() { this.FloatEnumerable = new[] {this.ObservationValue}; } - - public override void UpdateObservation() { - var distance = Vector3.Distance(this.transform.position, this._target.position); - if (Physics.Raycast( - this.transform.position, - this._target.position - this.transform.position, - out this._hit, - distance)) { - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log(this._hit.distance); - } - #endif - - if (this._hit.collider.gameObject != this._target.gameObject) { - this.ObservationValue = 0; - } else { - this.ObservationValue = 1; - } - } else { - this.ObservationValue = 1; - } - - this.FloatEnumerable = new[] {this.ObservationValue}; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Rays/NearestByTagObserver.cs b/Runtime/Prototyping/Observers/Rays/NearestByTagObserver.cs deleted file mode 100644 index 45eaad0d8..000000000 --- a/Runtime/Prototyping/Observers/Rays/NearestByTagObserver.cs +++ /dev/null @@ -1,110 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Rays { - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "NearestByTag" + ObserverComponentMenuPath._Postfix)] - public class NearestByTagObserver : Observer, - IHasEulerTransform { - [SerializeField] string _tag = ""; - [SerializeField] Vector3 _direction; - [SerializeField] Space3 _direction_space = new Space3(10); - - [Header("Specific", order = 102), SerializeField] - GameObject _nearest_object; - - [Header("Observation", order = 103), SerializeField] - Vector3 _position; - - [SerializeField] Space3 _position_space = new Space3(10); - [SerializeField] Vector3 _rotation; - [SerializeField] Space3 _rotation_space = new Space3(10); - - public override string PrototypingTypeName { - get { return "Nearest" + this._tag; } - } - - public Vector3 Position { - get { return this._position; } - set { - this._position = this.NormaliseObservation ? this._position_space.ClipNormaliseRound(value) : value; - } - } - - public Vector3 Rotation { - get { return this._rotation; } - set { - this._rotation = this.NormaliseObservation ? this._rotation_space.ClipNormaliseRound(value) : value; - } - } - - public Space3 PositionSpace { get; } - public Space3 DirectionSpace { get; } - public Space3 RotationSpace { get; } - - public Vector3 Direction { - get { return this._direction; } - set { - this._direction = this.NormaliseObservation ? this._direction_space.ClipNormaliseRound(value) : value; - } - } - - public override void UpdateObservation() { - this._nearest_object = this.FindNearest(); - - if (this.ParentEnvironment != null) { - this.Position = this.ParentEnvironment.TransformPosition(this._nearest_object.transform.position); - this.Direction = this.ParentEnvironment.TransformDirection(this._nearest_object.transform.forward); - this.Rotation = this.ParentEnvironment.TransformDirection(this._nearest_object.transform.up); - } else { - this.Position = this._nearest_object.transform.position; - this.Direction = this._nearest_object.transform.forward; - this.Rotation = this._nearest_object.transform.up; - } - - this.FloatEnumerable = new[] { - this.Position.x, - this.Position.y, - this.Position.z, - this.Direction.x, - this.Direction.y, - this.Direction.z, - this.Rotation.x, - this.Rotation.y, - this.Rotation.z - }; - } - - protected override void PreSetup() { - this.FloatEnumerable = new[] { - this.Position.x, - this.Position.y, - this.Position.z, - this.Direction.x, - this.Direction.y, - this.Direction.z, - this.Rotation.x, - this.Rotation.y, - this.Rotation.z - }; - } - - GameObject FindNearest() { - var candidates = FindObjectsOfType(); - var nearest_object = this.gameObject; - var nearest_distance = -1.0; - foreach (var candidate in candidates) { - if (candidate.CompareTag(this._tag)) { - var dist = Vector3.Distance(this.transform.position, candidate.transform.position); - if (nearest_distance > dist || nearest_distance < 0) { - nearest_distance = dist; - nearest_object = candidate; - } - } - } - - return nearest_object; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Rays/RaycastObserver.cs b/Runtime/Prototyping/Observers/Rays/RaycastObserver.cs deleted file mode 100644 index fc08be38f..000000000 --- a/Runtime/Prototyping/Observers/Rays/RaycastObserver.cs +++ /dev/null @@ -1,65 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Rays { - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "Raycast" + ObserverComponentMenuPath._Postfix)] - public class RaycastObserver : Observer, - IHasSingle { - [SerializeField] Vector3 _direction = Vector3.forward; - - [SerializeField] float _range = 100.0f; - - [SerializeField] RaycastHit _hit; - [SerializeField] ValueSpace _observation_value_space; - public ValueSpace SingleSpace { - get { return this._observation_value_space; } - } - - [SerializeField] - ValueSpace _observation_space = - new ValueSpace {_Decimal_Granularity = 3, _Min_Value = 0, _Max_Value = 100.0f}; - - [Header("Observation", order = 103), SerializeField] - float _observation_value; - - public override string PrototypingTypeName { - get { return "Raycast" + $"{this._direction.x}{this._direction.y}{this._direction.z}"; } - } - - public float ObservationValue { - get { return this._observation_value; } - private set { - this._observation_value = this.NormaliseObservation - ? this._observation_space.ClipNormaliseRound(value) - : value; - } - } - - protected override void PreSetup() { this.FloatEnumerable = new[] {this.ObservationValue}; } - - public override void UpdateObservation() { - if (Physics.Raycast(this.transform.position, this._direction, out this._hit, this._range)) { - this.ObservationValue = this._hit.distance; - } else { - this.ObservationValue = this._range; - } - - this.FloatEnumerable = new[] {this.ObservationValue}; - } - - #if UNITY_EDITOR - [SerializeField] Color _color = Color.green; - - void OnDrawGizmosSelected() { - if (this.enabled) { - Debug.DrawLine( - this.transform.position, - this.transform.position - this._direction * this._range, - this._color); - } - } - #endif - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Rigidbody/AngularVelocityObserver.cs b/Runtime/Prototyping/Observers/Rigidbody/AngularVelocityObserver.cs deleted file mode 100644 index 974763348..000000000 --- a/Runtime/Prototyping/Observers/Rigidbody/AngularVelocityObserver.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Rigidbody { - public class AngularVelocityObserver : Observer, IHasTriple { - [SerializeField] Space3 _angular_velocity_space = new Space3(10); - [SerializeField] Vector3 _angular_velocity; - - [SerializeField] UnityEngine.Rigidbody _rigidbody; - - protected override void PreSetup() { - this._rigidbody = this.GetComponent(); - this.FloatEnumerable = new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; - } - - public override void UpdateObservation() { - this.ObservationValue = this._rigidbody.angularVelocity; - - this.FloatEnumerable = new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; - } - - public Vector3 ObservationValue { - get { return this._angular_velocity; } - set { this._angular_velocity = value; } - } - - public Space3 TripleSpace { get { return this._angular_velocity_space; } } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Rigidbody/RigidbodyObserver.cs b/Runtime/Prototyping/Observers/Rigidbody/RigidbodyObserver.cs deleted file mode 100644 index e76ea4203..000000000 --- a/Runtime/Prototyping/Observers/Rigidbody/RigidbodyObserver.cs +++ /dev/null @@ -1,126 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Rigidbody { - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "Rigidbody" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode, RequireComponent(typeof(UnityEngine.Rigidbody))] - public class RigidbodyObserver : Observer, - IHasRigidbody { - [Header("Observation", order = 100), SerializeField] - Vector3 _angular_velocity; - - [SerializeField] Vector3 _velocity; - - [SerializeField] float _last_update_time; - - [Header("Configuration", order = 110), SerializeField] - UnityEngine.Rigidbody _rigidbody; - - [SerializeField] bool _differential; - [SerializeField] Space3 _velocity_space = new Space3(10); - [SerializeField] Space3 _angular_space = new Space3(10); - - /// - /// - /// - public override string PrototypingTypeName { - get { - if (this._differential) { - return "RigidbodyDifferential"; - } - - return "Rigidbody"; - } - } - - /// - /// - /// - public Vector3 Velocity { - get { return this._velocity; } - set { - this._velocity = this.NormaliseObservation ? this._velocity_space.ClipNormaliseRound(value) : value; - } - } - - /// - /// - /// - public Vector3 AngularVelocity { - get { return this._angular_velocity; } - set { - this._angular_velocity = - this.NormaliseObservation ? this._angular_space.ClipNormaliseRound(value) : value; - } - } - - /// - /// - /// - public Space3 VelocitySpace { - get { return this._velocity_space; } - } - - /// - /// - /// - public Space3 AngularSpace { - get { return this._angular_space; } - } - - public override void UpdateObservation() { - var update_time_difference = Time.time - this._last_update_time; - if (this._differential && update_time_difference > 0) { - var vel_diff = this.Velocity - this._rigidbody.velocity; - var ang_diff = this.AngularVelocity - this._rigidbody.angularVelocity; - - var vel_magnitude = vel_diff.magnitude; - if (vel_magnitude > 0) { - this.Velocity = vel_diff / (update_time_difference + float.Epsilon); - } else { - this.Velocity = vel_diff; - } - - var ang_magnitude = ang_diff.magnitude; - if (ang_magnitude > 0) { - this.AngularVelocity = ang_diff / (update_time_difference + float.Epsilon); - } else { - this.AngularVelocity = ang_diff; - } - } else { - this.Velocity = this._rigidbody.velocity; - this.AngularVelocity = this._rigidbody.angularVelocity; - } - - this._last_update_time = Time.time; - - this.FloatEnumerable = new[] { - this.Velocity.x, - this.Velocity.y, - this.Velocity.z, - this.AngularVelocity.x, - this.AngularVelocity.y, - this.AngularVelocity.z - }; - } - - /// - /// - /// - protected override void PreSetup() { - this._rigidbody = this.GetComponent(); - this.FloatEnumerable = new[] { - this.Velocity.x, - this.Velocity.y, - this.Velocity.z, - this.AngularVelocity.x, - this.AngularVelocity.y, - this.AngularVelocity.z - }; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Rigidbody/VelocityObserver.cs b/Runtime/Prototyping/Observers/Rigidbody/VelocityObserver.cs deleted file mode 100644 index 0c4747fed..000000000 --- a/Runtime/Prototyping/Observers/Rigidbody/VelocityObserver.cs +++ /dev/null @@ -1,51 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Rigidbody { - /// - /// - /// - public class VelocityObserver : Observer, IHasTriple { - [SerializeField] Space3 _velocity_space = new Space3(10); - [SerializeField] Vector3 _velocity; - - [SerializeField] UnityEngine.Rigidbody _rigidbody; - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Rigidbody"; } - } - - /// - /// - /// - public Vector3 ObservationValue { - get { return this._velocity; } - set { - this._velocity = this.NormaliseObservation ? this._velocity_space.ClipNormaliseRound(value) : value; - } - } - - /// - /// - /// - public override void UpdateObservation() { - this.ObservationValue = this._rigidbody.velocity; - - this.FloatEnumerable = new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; - } - - /// - /// - /// - protected override void PreSetup() { - this._rigidbody = this.GetComponent(); - this.FloatEnumerable = new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; - } - - public Space3 TripleSpace { get { return this._velocity_space; } } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/TargetRigidbodyObserver.cs b/Runtime/Prototyping/Observers/TargetRigidbodyObserver.cs deleted file mode 100644 index c20975069..000000000 --- a/Runtime/Prototyping/Observers/TargetRigidbodyObserver.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Motors; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers { - /// - /// - /// - public class TargetRigidbodyObserver : Observer, - IHasDouble { - TargetRigidbodyMotor _motor; - [SerializeField] Space2 _observation_space2_d; - - /// - /// - /// - protected override void PreSetup() { - base.PreSetup(); - this._motor = this.GetComponent(); - } - - /// - /// - /// - public override void UpdateObservation() { - this.FloatEnumerable = new[] {this.ObservationValue.x, this.ObservationValue.y}; - } - - /// - /// - /// - public Vector2 ObservationValue { - get { return new Vector2(this._motor.MovementSpeed, this._motor.RotationSpeed); } - } - - /// - /// - /// - public Space2 ObservationSpace2D { - get { return this._observation_space2_d; } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Transform/EulerTransformObserver.cs b/Runtime/Prototyping/Observers/Transform/EulerTransformObserver.cs deleted file mode 100644 index 53998d3ad..000000000 --- a/Runtime/Prototyping/Observers/Transform/EulerTransformObserver.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Misc.SearchableEnum; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Transform { - /// - /// - /// - public enum ObservationSpace { - /// - /// - /// - Local_, - - /// - /// - /// - Global_, - - /// - /// - /// - Environment_ - } - - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "EulerTransform" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode, Serializable] - public class EulerTransformObserver : Observer, - IHasEulerTransform { - [Header("Specific", order = 102), SerializeField, SearchableEnum] - ObservationSpace _space = ObservationSpace.Environment_; - - [Header("Observation", order = 103), SerializeField] - Vector3 _position; - - [SerializeField] Space3 _position_space = new Space3(10); - - [SerializeField] Vector3 _rotation; - [SerializeField] Space3 _rotation_space = new Space3(10); - - [SerializeField] Vector3 _direction; - [SerializeField] Space3 _direction_space = new Space3(10); - - public override string PrototypingTypeName { - get { return "EulerTransform"; } - } - - public Vector3 Position { - get { return this._position; } - set { - this._position = this.NormaliseObservation ? this._position_space.ClipNormaliseRound(value) : value; - } - } - - public Vector3 Rotation { - get { return this._rotation; } - set { - this._rotation = this.NormaliseObservation ? this._rotation_space.ClipNormaliseRound(value) : value; - } - } - - public Space3 PositionSpace { get; } = new Space3(); - public Space3 DirectionSpace { get; } = new Space3(); - public Space3 RotationSpace { get; } = new Space3(); - - public Vector3 Direction { - get { return this._direction; } - set { - this._direction = this.NormaliseObservation ? this._direction_space.ClipNormaliseRound(value) : value; - } - } - - /// - /// - /// - public override void UpdateObservation() { - if (this.ParentEnvironment != null && this._space == ObservationSpace.Environment_) { - this.Position = this.ParentEnvironment.TransformPosition(this.transform.position); - this.Direction = this.ParentEnvironment.TransformDirection(this.transform.forward); - this.Rotation = this.ParentEnvironment.TransformDirection(this.transform.up); - } else if (this._space == ObservationSpace.Local_) { - this.Position = this.transform.localPosition; - this.Direction = this.transform.forward; - this.Rotation = this.transform.up; - } else { - this.Position = this.transform.position; - this.Direction = this.transform.forward; - this.Rotation = this.transform.up; - } - - this.FloatEnumerable = new[] { - this.Position.x, - this.Position.y, - this.Position.z, - this.Direction.x, - this.Direction.y, - this.Direction.z, - this.Rotation.x, - this.Rotation.y, - this.Rotation.z - }; - } - - protected override void PreSetup() { - this.FloatEnumerable = new[] { - this.Position.x, - this.Position.y, - this.Position.z, - this.Direction.x, - this.Direction.y, - this.Direction.z, - this.Rotation.x, - this.Rotation.y, - this.Rotation.z - }; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Transform/PositionObserver.cs b/Runtime/Prototyping/Observers/Transform/PositionObserver.cs deleted file mode 100644 index 478f98f79..000000000 --- a/Runtime/Prototyping/Observers/Transform/PositionObserver.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Transform { - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "Position" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode, Serializable] - public class PositionObserver : Observer, - IHasTriple { - [Header("Specific", order = 102), SerializeField] - ObservationSpace _space = ObservationSpace.Environment_; - - [Header("Observation", order = 103), SerializeField] - Vector3 _position; - - [SerializeField] Space3 _position_space = new Space3(10); - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Position"; } - } - - /// - /// - /// - public Vector3 ObservationValue { - get { return this._position; } - set { - this._position = this.NormaliseObservation ? this._position_space.ClipNormaliseRound(value) : value; - } - } - - /// - /// - /// - public Space3 TripleSpace { get; } = new Space3(); - - /// - /// - /// - protected override void PreSetup() { - this.FloatEnumerable = - new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; - } - - /// - /// - /// - public override void UpdateObservation() { - if (this.ParentEnvironment != null && this._space == ObservationSpace.Environment_) { - this.ObservationValue = this.ParentEnvironment.TransformPosition(this.transform.position); - } else if (this._space == ObservationSpace.Local_) { - this.ObservationValue = this.transform.localPosition; - } else { - this.ObservationValue = this.transform.position; - } - - this.FloatEnumerable = - new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Transform/PositionObserver2D.cs b/Runtime/Prototyping/Observers/Transform/PositionObserver2D.cs deleted file mode 100644 index 9e74bb60a..000000000 --- a/Runtime/Prototyping/Observers/Transform/PositionObserver2D.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Enums; -using Neodroid.Runtime.Utilities.Misc.SearchableEnum; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Transform { - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath - + "PositionObserver2D" - + ObserverComponentMenuPath._Postfix), ExecuteInEditMode, Serializable] - public class PositionObserver2D : Observer, - IHasDouble { - [Header("Specific", order = 102), SerializeField] - ObservationSpace _use_space = ObservationSpace.Environment_; - - [Header("Observation", order = 103), SerializeField] - Vector2 _2_d_position; - - [SerializeField, SearchableEnum] Dimension2DCombination _dim_combination = Dimension2DCombination.Xz_; - - [SerializeField] Space2 _position_space; - - public ObservationSpace UseSpace { - get { return this._use_space; } - } - - public override string PrototypingTypeName { - get { return "DoublePosition"; } - } - - /// - /// - /// - /// - /// - public void SetPosition(Vector3 position) { - Vector2 vector2_pos; - switch (this._dim_combination) { - case Dimension2DCombination.Xy_: - vector2_pos = new Vector2(position.x, position.y); - break; - case Dimension2DCombination.Xz_: - vector2_pos = new Vector2(position.x, position.z); - break; - case Dimension2DCombination.Yz_: - vector2_pos = new Vector2(position.y, position.z); - break; - default: throw new ArgumentOutOfRangeException(); - } - - this._2_d_position = this.NormaliseObservation - ? this._position_space.ClipNormaliseRound(vector2_pos) - : vector2_pos; - } - - public Vector2 ObservationValue { - get { return this._2_d_position; } - set { this._2_d_position = value; } - } - - public Space2 ObservationSpace2D { - get { - return new Space2(this._position_space._Decimal_Granularity) { - _Max_Values = new Vector2(this._position_space._Max_Values.x, this._position_space._Max_Values.y), - _Min_Values = new Vector2(this._position_space._Min_Values.x, this._position_space._Min_Values.y) - }; - } - } - - public override void UpdateObservation() { - if (this.ParentEnvironment != null && this._use_space == ObservationSpace.Environment_) { - this.SetPosition(this.ParentEnvironment.TransformPosition(this.transform.position)); - } else if (this._use_space == ObservationSpace.Local_) { - this.SetPosition(this.transform.localPosition); - } else { - this.SetPosition(this.transform.position); - } - - this.FloatEnumerable = new[] {this._2_d_position.x, this._2_d_position.y}; - } - - /// - /// - /// - protected override void PreSetup() { - this.FloatEnumerable = new[] {this._2_d_position.x, this._2_d_position.y}; - } - - void OnDrawGizmos() { - if (this.enabled) { - switch (this._dim_combination) { - case Dimension2DCombination.Xy_: - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.right * 2, Color.green); - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.up * 2, Color.red); - break; - case Dimension2DCombination.Xz_: - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.right * 2, Color.green); - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.forward * 2, Color.red); - break; - case Dimension2DCombination.Yz_: - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.up * 2, Color.green); - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.forward * 2, Color.red); - break; - default: throw new ArgumentOutOfRangeException(); - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Transform/QuaternionTransformObserver.cs b/Runtime/Prototyping/Observers/Transform/QuaternionTransformObserver.cs deleted file mode 100644 index 5c760afe8..000000000 --- a/Runtime/Prototyping/Observers/Transform/QuaternionTransformObserver.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Transform { - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath - + "QuaternionTransform" - + ObserverComponentMenuPath._Postfix), ExecuteInEditMode, Serializable] - public class QuaternionTransformObserver : Observer, - IHasQuaternionTransform { - [Header("Specific", order = 102), SerializeField] - ObservationSpace _space = ObservationSpace.Environment_; - - [SerializeField] bool _use_environments_coordinates = true; - - [Header("Observation", order = 103), SerializeField] - Vector3 _position; - - [SerializeField] Quaternion _rotation; - - public ObservationSpace Space { - get { return this._space; } - } - - public override string PrototypingTypeName { - get { return "QuaternionTransform"; } - } - - public Vector3 Position { - get { return this._position; } - } - - public Quaternion Rotation { - get { return this._rotation; } - } - - public override void UpdateObservation() { - if (this.ParentEnvironment != null && this._use_environments_coordinates) { - this._position = this.ParentEnvironment.TransformPosition(this.transform.position); - this._rotation = Quaternion.Euler(this.ParentEnvironment.TransformDirection(this.transform.forward)); - } else { - this._position = this.transform.position; - this._rotation = this.transform.rotation; - } - - this.FloatEnumerable = new[] { - this._position.x, - this._position.y, - this._position.z, - this._rotation.x, - this._rotation.y, - this._rotation.z, - this._rotation.w - }; - } - - protected override void PreSetup() { - this.FloatEnumerable = new[] { - this._position.x, - this._position.y, - this._position.z, - this._rotation.x, - this._rotation.y, - this._rotation.z, - this._rotation.w - }; - } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Transform/RotationObserver.cs b/Runtime/Prototyping/Observers/Transform/RotationObserver.cs deleted file mode 100644 index cbe450e13..000000000 --- a/Runtime/Prototyping/Observers/Transform/RotationObserver.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Transform { - [AddComponentMenu(PrototypingComponentMenuPath._ComponentMenuPath + "Observers/Position"), - ExecuteInEditMode, Serializable] - public class RotationObserver : Observer, - IHasQuadruple { - [Header("Specific", order = 102), SerializeField] - ObservationSpace _space = ObservationSpace.Environment_; - - [Header("Observation", order = 103), SerializeField] - Quaternion _rotation; - - /// - /// - /// - public ObservationSpace Space { - get { return this._space; } - } - - /// - /// - /// - public override string PrototypingTypeName { - get { return "Position"; } - } - - /// - /// - /// - protected override void PreSetup() { - this.FloatEnumerable = - new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; - } - - /// - /// - /// - public override void UpdateObservation() { - if (this.ParentEnvironment != null && this._space == ObservationSpace.Environment_) { - this.ObservationValue = this.ParentEnvironment.TransformRotation(this.transform.rotation); - } else if (this._space == ObservationSpace.Local_) { - this.ObservationValue = this.transform.localRotation; - } else { - this.ObservationValue = this.transform.rotation; - } - - this.FloatEnumerable = - new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; - } - - /// - /// - /// - public Quaternion ObservationValue { - get { return this._rotation; } - set { this._rotation = value; } - } - - /// - /// - /// - public Space4 QuadSpace { get; } = new Space4(); - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/Observers/Transform/SingleAxisTransformObserver.cs b/Runtime/Prototyping/Observers/Transform/SingleAxisTransformObserver.cs deleted file mode 100755 index 861d3a5ca..000000000 --- a/Runtime/Prototyping/Observers/Transform/SingleAxisTransformObserver.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using Neodroid.Runtime.Utilities.Enums; -using Neodroid.Runtime.Utilities.Misc.SearchableEnum; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers.Transform { - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath - + "SingleAxisTransform" - + ObserverComponentMenuPath._Postfix), ExecuteInEditMode] - public class SingleAxisTransformObserver : ValueObserver { - - [SerializeField, SearchableEnum] Axis _dim = Axis.X_; - - /// - /// - /// - protected override void PreSetup() { this.FloatEnumerable = new[] {this.ObservationValue}; } - - public override void UpdateObservation() { - switch (this._dim) { - case Axis.X_: - this.ObservationValue = this.transform.position.x; - break; - case Axis.Y_: - this.ObservationValue = this.transform.position.y; - break; - case Axis.Z_: - this.ObservationValue = this.transform.position.z; - break; - case Axis.Rot_x_: - this.ObservationValue = this.transform.rotation.eulerAngles.x; - break; - case Axis.Rot_y_: - this.ObservationValue = this.transform.rotation.eulerAngles.y; - break; - case Axis.Rot_z_: - this.ObservationValue = this.transform.rotation.eulerAngles.z; - break; - case Axis.Dir_x_: - this.ObservationValue = this.transform.forward.x; - break; - case Axis.Dir_y_: - this.ObservationValue = this.transform.forward.y; - break; - case Axis.Dir_z_: - this.ObservationValue = this.transform.forward.z; - break; - default: throw new ArgumentOutOfRangeException(); - } - - this.FloatEnumerable = new[] {this.ObservationValue}; - } - - void OnDrawGizmos() { - if (this.enabled) { - switch (this._dim) { - case Axis.X_: - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.right * 2, Color.green); - - break; - case Axis.Y_: - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.right * 2, Color.green); - break; - case Axis.Z_: - Debug.DrawLine(this.transform.position, this.transform.position + Vector3.up * 2, Color.green); - break; - default: throw new ArgumentOutOfRangeException(); - } - } - } - } -} diff --git a/Runtime/Prototyping/Observers/ValueObserver.cs b/Runtime/Prototyping/Observers/ValueObserver.cs deleted file mode 100644 index 5705d664b..000000000 --- a/Runtime/Prototyping/Observers/ValueObserver.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Prototyping.Observers { - /// - /// - /// - [AddComponentMenu( - ObserverComponentMenuPath._ComponentMenuPath + "Value" + ObserverComponentMenuPath._Postfix), - ExecuteInEditMode] - public class ValueObserver : Observer, - IHasSingle { - [Header("Observation", order = 103), SerializeField] - float _observation_value; - - [SerializeField] ValueSpace _observation_value_space; - - public ValueSpace SingleSpace { - get { return this._observation_value_space; } - } - - public float ObservationValue { - get { return this._observation_value; } - set { - this._observation_value = this.NormaliseObservation - ? this._observation_value_space.ClipNormaliseRound(value) - : value; - } - } - - protected override void PreSetup() { this.FloatEnumerable = new[] {this.ObservationValue}; } - - public override void UpdateObservation() { this.FloatEnumerable = new[] {this.ObservationValue}; } - } -} \ No newline at end of file diff --git a/Runtime/Prototyping/PrototypingComponentMenuPath.cs b/Runtime/Prototyping/PrototypingComponentMenuPath.cs index abcf2b7bd..0bc615fe9 100644 --- a/Runtime/Prototyping/PrototypingComponentMenuPath.cs +++ b/Runtime/Prototyping/PrototypingComponentMenuPath.cs @@ -1,11 +1,9 @@ -namespace Neodroid.Runtime.Prototyping { +namespace droid.Runtime.Prototyping { /// - /// /// public static class PrototypingComponentMenuPath { /// - /// /// public const string _ComponentMenuPath = "Neodroid/" + "Prototyping/"; } -} \ No newline at end of file +} diff --git a/Runtime/Prototyping/README.md b/Runtime/Prototyping/README.md new file mode 100644 index 000000000..d3270be47 --- /dev/null +++ b/Runtime/Prototyping/README.md @@ -0,0 +1,5 @@ +# Prototyping + +The submodule of the droid package enables rapid prototyping, the user simply add prebuilt Components to GameObjects, configures them for the particular task and done, _no scripting required_. Agent can now either observe, act or evaluate in environment and much more.. + +A future version of the submodule will be an ECS implementation, benefiting from the batched run over many components. diff --git a/Runtime/Prototyping/README.md.meta b/Runtime/Prototyping/README.md.meta new file mode 100644 index 000000000..4de5d8072 --- /dev/null +++ b/Runtime/Prototyping/README.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 78e35ce7abd84d7ab6e602e6f3efcacc +timeCreated: 1567897951 \ No newline at end of file diff --git a/Runtime/Prototyping/Observers.meta b/Runtime/Prototyping/Sensors.meta similarity index 100% rename from Runtime/Prototyping/Observers.meta rename to Runtime/Prototyping/Sensors.meta diff --git a/Runtime/Prototyping/Sensors/Auditory.meta b/Runtime/Prototyping/Sensors/Auditory.meta new file mode 100644 index 000000000..816b33f9a --- /dev/null +++ b/Runtime/Prototyping/Sensors/Auditory.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9bd8942c81541704bb3f7fe554838da7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Auditory/AudioSpectrumSensor.cs b/Runtime/Prototyping/Sensors/Auditory/AudioSpectrumSensor.cs new file mode 100644 index 000000000..a805db67e --- /dev/null +++ b/Runtime/Prototyping/Sensors/Auditory/AudioSpectrumSensor.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Auditory { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "AudioSpectrum" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(AudioListener))] + public class AudioSpectrumSensor : Sensor, + IHasFloatArray { + #if NEODROID_DEBUG + void LateUpdate() { + if (this.Debugging) { + var spectrum = new float[256]; + AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.Rectangular); + + for (var i = 1; i < spectrum.Length - 1; i++) { + var prev = spectrum[i - 1]; + var cur = spectrum[i]; + var next = spectrum[i + 1]; + Debug.DrawLine(new Vector3(i - 1, cur + 10, 0), + new Vector3(i, next + 10, 0), + Color.red); + Debug.DrawLine(new Vector3(i - 1, Mathf.Log(prev) + 10, 2), + new Vector3(i, Mathf.Log(cur) + 10, 2), + Color.cyan); + Debug.DrawLine(new Vector3(Mathf.Log(i - 1), prev- 10, 1), + new Vector3(Mathf.Log(i), cur - 10, 1), + Color.green); + Debug.DrawLine(new Vector3(Mathf.Log(i - 1), Mathf.Log(prev), 3), + new Vector3(Mathf.Log(i), Mathf.Log(cur), 3), + Color.blue); + } + } + } + #endif + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return this.ObservationArray; } } + + public override void UpdateObservation() { + var spectrum = new float[256]; + AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.Rectangular); + this.ObservationArray = spectrum; + } + + public Single[] ObservationArray { get; set; } + public Space1[] ObservationSpace { get; } = new Space1[1]; + } +} diff --git a/Runtime/Prototyping/Sensors/Auditory/AudioSpectrumSensor.cs.meta b/Runtime/Prototyping/Sensors/Auditory/AudioSpectrumSensor.cs.meta new file mode 100644 index 000000000..535b47900 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Auditory/AudioSpectrumSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b561e0562f3f5e1f93f7af1e7e2e93d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Auditory/AudioWaveformSensor.cs b/Runtime/Prototyping/Sensors/Auditory/AudioWaveformSensor.cs new file mode 100644 index 000000000..6b877fef5 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Auditory/AudioWaveformSensor.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Auditory { + + + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "AudioWaveform" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(AudioListener))] + public class AudioWaveformSensor : Sensor, + IHasFloatArray { + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return this.ObservationArray; } } + + #if NEODROID_DEBUG + void LateUpdate() { + if (this.Debugging) { + var samples = new float[256]; + AudioListener.GetOutputData(samples, 0); + + for (var i = 1; i < samples.Length - 1; i++) { + var prev = samples[i - 1]* 3; + var cur = samples[i] * 3; + var next = samples[i + 1]* 3; + Debug.DrawLine(new Vector3(i - 1, cur, 0), + new Vector3(i, next, 0), + Color.red); + } + } + } + #endif + + /// + /// + /// + public override void UpdateObservation() { + var samples = new float[256]; + AudioListener.GetOutputData(samples, 0); + this.ObservationArray = samples; + } + + /// + /// + /// + public Single[] ObservationArray { get; set; } + /// + /// + /// + public Space1[] ObservationSpace { get; } = new Space1[1]; + } +} diff --git a/Runtime/Prototyping/Sensors/Auditory/AudioWaveformSensor.cs.meta b/Runtime/Prototyping/Sensors/Auditory/AudioWaveformSensor.cs.meta new file mode 100644 index 000000000..f865476fb --- /dev/null +++ b/Runtime/Prototyping/Sensors/Auditory/AudioWaveformSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57456c14f58c522bd9681f9a82df1b38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Experimental.meta b/Runtime/Prototyping/Sensors/Experimental.meta new file mode 100644 index 000000000..e45a636cb --- /dev/null +++ b/Runtime/Prototyping/Sensors/Experimental.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7e040562d53846cb893770631f1d6e14 +timeCreated: 1560188397 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Experimental/ByteArrayRawImageSensor.cs b/Runtime/Prototyping/Sensors/Experimental/ByteArrayRawImageSensor.cs new file mode 100644 index 000000000..2ea63e942 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Experimental/ByteArrayRawImageSensor.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.UI; + +namespace droid.Runtime.Prototyping.Sensors.Experimental { + /// + /// + /// + public class ByteArrayRawImageSensor : Sensor, + IHasByteArray { + [SerializeField] RawImage raw_image; + [SerializeField] Texture2D texture2D; + [SerializeField] WebCamTexture webcam_texture; + Byte[] _bytes = {}; + + /// + /// + /// + public override void PreSetup() { + if (this.raw_image == null) { + this.raw_image = this.GetComponent(); + } + + this.ReInitCamera(); + } + + void ReInitCamera() { + if (!Application.isPlaying) { + return; + } + + if (this.webcam_texture == null) { + this.webcam_texture = new WebCamTexture(); + } else { + this.webcam_texture.Stop(); + this.webcam_texture = new WebCamTexture(); + } + + if (this.webcam_texture) { + this.raw_image.texture = this.webcam_texture; + this.raw_image.material.mainTexture = this.webcam_texture; + this.webcam_texture.Play(); + + this.texture2D = new Texture2D(this.webcam_texture.width, + this.webcam_texture.height, + GraphicsFormat.R8G8B8A8_UNorm, + 0, + TextureCreationFlags.None); + } + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new List(); } } + + /// + /// + /// + public override void UpdateObservation() { + if (this.webcam_texture && this.webcam_texture.isPlaying) { + this.texture2D.SetPixels(this.webcam_texture.GetPixels()); + this.texture2D.Apply(); + //this.texture2D.UpdateExternalTexture(this.webcam_texture.GetNativeTexturePtr()); + this.Bytes = this.texture2D.GetRawTextureData(); + } else { + this.ReInitCamera(); + } + } + + /// + /// + /// + public Byte[] Bytes { + get { return this._bytes; } + private set { + if (value != null) { + this._bytes = value; + } + } + } + + /// + /// + /// + public Int32[] Shape { + get { + int channels; + switch (this.texture2D.graphicsFormat) { + case GraphicsFormat.R8_UNorm: + case GraphicsFormat.R16_SFloat: + case GraphicsFormat.R32_SFloat: + channels = 1; + break; + //case GraphicsFormat.R32G32B32A32_SFloat: + //case GraphicsFormat.B8G8R8A8_UNorm: + //case GraphicsFormat.R16G16B16A16_SFloat: + default: + channels = 4; + break; + } + + return new[] {this.texture2D.height, this.texture2D.width, channels}; + } + } + + /// + /// + /// + public String ArrayEncoding { + get { + var s = "Unknown"; + + var texture = this.texture2D; + switch (texture.graphicsFormat) { + case GraphicsFormat.R8G8B8A8_UNorm: + case GraphicsFormat.R8_UInt: + s = "UINT8"; + break; + case GraphicsFormat.R16_SFloat: + case GraphicsFormat.R16G16B16A16_SFloat: + s = "FLOAT16"; + break; + case GraphicsFormat.R32_SFloat: + case GraphicsFormat.R32G32B32A32_SFloat: + s = "FLOAT32"; + break; + default: + s = "Unknown"; + break; + } + + return s; + } + } + + /// + /// + /// + /// + public override string ToString() { + var rep = $"Byte Array (Length: {this.Bytes.Length}), " + + $"Sample [{this.Bytes[0]}.." + + $"{this.Bytes[this.Bytes.Length - 1]}]"; + + return rep; + } + } +} diff --git a/Runtime/Prototyping/Sensors/Experimental/ByteArrayRawImageSensor.cs.meta b/Runtime/Prototyping/Sensors/Experimental/ByteArrayRawImageSensor.cs.meta new file mode 100644 index 000000000..7a5e1b4d8 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Experimental/ByteArrayRawImageSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f99249b3e2d63304946498dad5f1818 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Experimental/CategoricalSensor.cs b/Runtime/Prototyping/Sensors/Experimental/CategoricalSensor.cs new file mode 100644 index 000000000..ab47d2ca3 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Experimental/CategoricalSensor.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using droid.Runtime.GameObjects; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Experimental { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Categorical" + + SensorComponentMenuPath._Postfix)] + public class CategoricalSensor : Sensor, + IHasSingle { + [SerializeField] PrototypingGameObject _categoryProvider = null; + [SerializeField] float _observationValue = 0; + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new[] {this.ObservationValue}; } } + + /// + /// + /// + public override void UpdateObservation() { + if (this._categoryProvider is ICategoryProvider provider) { + this.ObservationValue = provider.CurrentCategoryValue; + } + } + + /// + /// + /// + public float ObservationValue { + get { return this._observationValue; } + private set { this._observationValue = value; } + } + + public Space1 SingleSpace { get; } + } +} diff --git a/Runtime/Prototyping/Observers/CategoricalObserver.cs.meta b/Runtime/Prototyping/Sensors/Experimental/CategoricalSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/CategoricalObserver.cs.meta rename to Runtime/Prototyping/Sensors/Experimental/CategoricalSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Experimental/SingleValueSensor.cs b/Runtime/Prototyping/Sensors/Experimental/SingleValueSensor.cs new file mode 100644 index 000000000..b9f8fc3fa --- /dev/null +++ b/Runtime/Prototyping/Sensors/Experimental/SingleValueSensor.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Experimental { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + "Value" + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + public abstract class SingleValueSensor : Sensor, + IHasSingle { + [Header("Observation", order = 103)] + [SerializeField] + float _observation_value; + + [SerializeField] protected Space1 _observation_value_space = Space1.ZeroOne; + + /// + /// + /// + public Space1 SingleSpace { get { return this._observation_value_space; } } + + /// + /// + /// + public float ObservationValue { + get { return this._observation_value; } + set { + this._observation_value = this.SingleSpace.Project(value); + } + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new[] {this.ObservationValue}; } } + + + } +} diff --git a/Runtime/Prototyping/Observers/ValueObserver.cs.meta b/Runtime/Prototyping/Sensors/Experimental/SingleValueSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/ValueObserver.cs.meta rename to Runtime/Prototyping/Sensors/Experimental/SingleValueSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/README.md b/Runtime/Prototyping/Sensors/README.md new file mode 100644 index 000000000..c609a9f73 --- /dev/null +++ b/Runtime/Prototyping/Sensors/README.md @@ -0,0 +1,3 @@ +# Sensors + +Sensors offers a way of serving observation of differing modalities to be published to an agent diff --git a/Runtime/Prototyping/Sensors/README.md.meta b/Runtime/Prototyping/Sensors/README.md.meta new file mode 100644 index 000000000..cd711508d --- /dev/null +++ b/Runtime/Prototyping/Sensors/README.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 14fd9b5fc64f40ff805202c0c480ea51 +timeCreated: 1567897282 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Sensor.cs b/Runtime/Prototyping/Sensors/Sensor.cs new file mode 100644 index 000000000..3aa20f88d --- /dev/null +++ b/Runtime/Prototyping/Sensors/Sensor.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects; +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors { + /// + /// + /// + [ExecuteInEditMode] + [Serializable] + public abstract class Sensor : PrototypingGameObject, + ISensor { + /// + /// + public AbstractSpatialPrototypingEnvironment ParentEnvironment { + get { return this._environment; } + set { this._environment = value; } + } + + /// + /// + /// + public abstract IEnumerable FloatEnumerable { get; } + + /// + /// + /// + public abstract void UpdateObservation(); + + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this); + } + + /// + /// + /// + protected override void UnRegisterComponent() { this.ParentEnvironment?.UnRegister(this); } + + /// + /// + protected virtual void Update() { + if (Application.isPlaying) { + if (this.FloatEnumerable == null) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.LogWarning($"FloatEnumerable of {this.Identifier} is empty! Maybe you forget an assignment to it when updating observations"); + } + #endif + } + } + } + + /// + /// + /// + /// + public override string ToString() { + return this.FloatEnumerable.Any() ? string.Join(",", this.FloatEnumerable) : "Empty FloatEnumerable"; + } + + #region Fields + + [Header("References", order = 99)] + [SerializeField] + AbstractSpatialPrototypingEnvironment _environment; + + #endregion + } +} diff --git a/Runtime/Prototyping/Observers/Observer.cs.meta b/Runtime/Prototyping/Sensors/Sensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Observer.cs.meta rename to Runtime/Prototyping/Sensors/Sensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/SensorComponentMenuPath.cs b/Runtime/Prototyping/Sensors/SensorComponentMenuPath.cs new file mode 100644 index 000000000..a67b83f59 --- /dev/null +++ b/Runtime/Prototyping/Sensors/SensorComponentMenuPath.cs @@ -0,0 +1,13 @@ +namespace droid.Runtime.Prototyping.Sensors { + /// + /// + public static class SensorComponentMenuPath { + /// + /// + public const string _ComponentMenuPath = PrototypingComponentMenuPath._ComponentMenuPath + "Sensors/"; + + /// + /// + public const string _Postfix = "Sensor"; + } +} diff --git a/Runtime/Prototyping/Observers/ObserverComponentMenuPath.cs.meta b/Runtime/Prototyping/Sensors/SensorComponentMenuPath.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/ObserverComponentMenuPath.cs.meta rename to Runtime/Prototyping/Sensors/SensorComponentMenuPath.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial.meta b/Runtime/Prototyping/Sensors/Spatial.meta new file mode 100644 index 000000000..dcd1e8d4a --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 06ea967f6b30463ea694aa04c1aa22b2 +timeCreated: 1571140945 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Spatial/BoundingBox.meta b/Runtime/Prototyping/Sensors/Spatial/BoundingBox.meta new file mode 100644 index 000000000..91d7237fb --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/BoundingBox.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 62aae6d8e08d44dca549d04c8b5ff3f3 +timeCreated: 1541079854 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Spatial/BoundingBox/BoundingBoxSensor.cs b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/BoundingBoxSensor.cs new file mode 100644 index 000000000..db29c10d1 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/BoundingBoxSensor.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.BoundingBox { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Experimental/BoundingBox" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(GameObjects.BoundingBoxes.BoundingBox))] + public class BoundingBoxSensor : Sensor, + IHasString { + /// + /// + /// + public override string PrototypingTypeName { get { return "BoundingBox"; } } + + GameObjects.BoundingBoxes.BoundingBox _bounding_box; + [SerializeField] string _observationValue; + + /// + /// + /// + public override void PreSetup() { + this._bounding_box = this.GetComponent(); + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new List(); } } + + /// + /// + /// + public override void UpdateObservation() { + this.ObservationValue = this._bounding_box.BoundingBoxCoordinatesWorldSpaceAsJson; + } + + /// + /// + /// + public string ObservationValue { + get { return this._observationValue; } + set { this._observationValue = value; } + } + + public override string ToString() { return this.ObservationValue; } + } +} diff --git a/Runtime/Prototyping/Observers/Experimental/BoundingBoxObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/BoundingBoxSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Experimental/BoundingBoxObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/BoundingBox/BoundingBoxSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/BoundingBox/ScreenSpaceBoundingBoxSensor.cs b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/ScreenSpaceBoundingBoxSensor.cs new file mode 100644 index 000000000..a5fe03d4a --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/ScreenSpaceBoundingBoxSensor.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using droid.Runtime.GameObjects.BoundingBoxes.Experimental; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.BoundingBox { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Experimental/ScreenSpaceBoundingBox" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + //[ExecuteAlways] + [RequireComponent(typeof(GameObjects.BoundingBoxes.BoundingBox))] + public class ScreenSpaceBoundingBoxSensor : Sensor, + IHasString { + /// + /// + /// + public override string PrototypingTypeName { get { return "BoundingBox"; } } + + GameObjects.BoundingBoxes.BoundingBox _bounding_box = null; + [SerializeField] Camera _camera = null; + [SerializeField] Rect _out_rect = new Rect(); + + /// + /// + /// + public override void PreSetup() { + this._bounding_box = this.GetComponent(); + } + + [SerializeField] bool NormaliseObservation = true; + public override IEnumerable FloatEnumerable { get { return new List(); } } + + /// + /// + /// + public override void UpdateObservation() { + if (this._camera) { + var rect = this._bounding_box.ScreenSpaceBoundingRect(this._camera); + + if (this.NormaliseObservation) { + float w; + float h; + var target = this._camera.targetTexture; + + if (target) { + w = target.width; + h = target.height; + } else { + var r = this._camera.pixelRect; + w = r.width; + h = r.height; + } + + this._out_rect = rect.Normalise(w, h); + } else { + this._out_rect = rect; + } + } + + var str_rep = + $"{{\"x\":{this._out_rect.x},\n\"y\":{this._out_rect.y},\n\"w\":{this._out_rect.width},\n\"h\":{this._out_rect.height}}}"; + + this.ObservationValue = str_rep; + } + + /// + /// + /// + public string ObservationValue { get; set; } + + public override string ToString() { return this.ObservationValue; } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/BoundingBox/ScreenSpaceBoundingBoxSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/ScreenSpaceBoundingBoxSensor.cs.meta new file mode 100644 index 000000000..0cdb1a86b --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/ScreenSpaceBoundingBoxSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88e1e351c3ae4685b904ce1555d7c1bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Spatial/BoundingBox/TwoDimensionalScreenSpaceSensor.cs b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/TwoDimensionalScreenSpaceSensor.cs new file mode 100644 index 000000000..6a103d75d --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/TwoDimensionalScreenSpaceSensor.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.BoundingBox { + public class TwoDimensionalScreenSpaceSensor : Sensor, + IHasDouble { + [SerializeField] Vector2 _observation_value = Vector2.zero; + [SerializeField] Space2 _observation_space2_d = Space2.ZeroOne; + + [SerializeField] Camera _reference_camera = null; + + [SerializeField] bool _use_viewport = true; // Already normalised between 0 and 1 + + // Update is called once per frame + public override IEnumerable FloatEnumerable { + get { return new[] {this._observation_value.x, this.ObservationValue.y}; } + } + + public override void UpdateObservation() { + if (this._reference_camera) { + Vector3 point; + if (this._use_viewport) { + point = this._reference_camera.WorldToViewportPoint(this.transform.position); + } else { + point = this._reference_camera.WorldToScreenPoint(this.transform.position); + } + + this._observation_value = point; + } + } + + /// + /// + /// + public Vector2 ObservationValue { get { return this._observation_value; } } + + /// + /// + /// + public Space2 DoubleSpace { get { return this._observation_space2_d; } } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/BoundingBox/TwoDimensionalScreenSpaceSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/TwoDimensionalScreenSpaceSensor.cs.meta new file mode 100644 index 000000000..8d5c0179d --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/BoundingBox/TwoDimensionalScreenSpaceSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba523e391a2a8664cb21e689dc53dd4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric.meta new file mode 100644 index 000000000..286658a0a --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea9f34d435804526b82cca09420f7543 +timeCreated: 1571903868 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/DistanceSensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/DistanceSensor.cs new file mode 100644 index 000000000..69f5d989e --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/DistanceSensor.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric { + /// + /// + /// + public class DistanceSensor : Sensor, + IHasSingle { + [SerializeField] UnityEngine.Transform t1 = null; + [SerializeField] UnityEngine.Transform t2 = null; + [SerializeField] float _observationValue = 0; + [SerializeField] Space1 _single_space = Space1.MinusOneOne * 4; + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new[] {this.ObservationValue}; } } + + /// + /// + /// + public override void UpdateObservation() { + this.ObservationValue = Vector3.Distance(this.t1.position, this.t2.position); + } + + /// + /// + /// + public float ObservationValue { + get { return this._observationValue; } + private set { this._observationValue = this._single_space.Project(value); } + } + + /// + /// + /// + public Space1 SingleSpace { get { return this._single_space; } } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/DistanceSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/DistanceSensor.cs.meta new file mode 100644 index 000000000..d5020801d --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/DistanceSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: faa2e2e4fc5eed0978acef0530b2f930 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Observers/Rays.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rays.meta rename to Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental.meta new file mode 100644 index 000000000..2a07f43a5 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ac0e06a510584587a748e29da3b48c11 +timeCreated: 1552816685 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental/Ray.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental/Ray.cs new file mode 100644 index 000000000..0c591758a --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental/Ray.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric.Rays.Experimental { + /// + /// + /// Ray perception component. Attach this to agents to enable "local perception" + /// via the use of ray casts directed outward from the agent. + /// + public class Ray : MonoBehaviour { + List _perception_buffer = new List(); + Vector3 _end_position; + RaycastHit _hit; + + /// + /// Creates perception vector to be used as part of an observation of an agent. + /// + /// The partial vector observation corresponding to the set of rays + /// Radius of rays + /// Anlges of rays (starting from (1,0) on unit circle). + /// List of tags which correspond to object types agent can see + /// Starting height offset of ray from center of agent. + /// Ending height offset of ray from center of agent. + public List Perceive(float ray_distance, + IEnumerable ray_angles, + string[] detectable_objects, + float start_offset, + float end_offset) { + this._perception_buffer.Clear(); + // For each ray sublist stores categorial information on detected object + // along with object distance. + foreach (var angle in ray_angles) { + this._end_position = this.transform.TransformDirection(PolarToCartesian(ray_distance, angle)); + this._end_position.y = end_offset; + if (Application.isEditor) { + Debug.DrawRay(this.transform.position + new Vector3(0f, start_offset, 0f), + this._end_position, + Color.black, + 0.01f, + true); + } + + var sub_list = new float[detectable_objects.Length + 2]; + if (Physics.SphereCast(this.transform.position + new Vector3(0f, start_offset, 0f), + 0.5f, + this._end_position, + out this._hit, + ray_distance)) { + for (var i = 0; i < detectable_objects.Length; i++) { + if (this._hit.collider.gameObject.CompareTag(detectable_objects[i])) { + sub_list[i] = 1; + sub_list[detectable_objects.Length + 1] = this._hit.distance / ray_distance; + break; + } + } + } else { + sub_list[detectable_objects.Length] = 1f; + } + + this._perception_buffer.AddRange(sub_list); + } + + return this._perception_buffer; + } + + /// + /// Converts polar coordinate to cartesian coordinate. + /// + public static Vector3 PolarToCartesian(float radius, float angle) { + var x = radius * Mathf.Cos(DegreeToRadian(angle)); + var z = radius * Mathf.Sin(DegreeToRadian(angle)); + return new Vector3(x, 0f, z); + } + + /// + /// Converts degrees to radians. + /// + public static float DegreeToRadian(float degree) { return degree * Mathf.PI / 180f; } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental/Ray.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental/Ray.cs.meta new file mode 100644 index 000000000..cc8539dd3 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Experimental/Ray.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a583e652a72e4b47b245b78b7267e57b +timeCreated: 1552816598 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar.meta new file mode 100644 index 000000000..5e9d573a1 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 41b5914a973e423d8d4a099b91c4492c +timeCreated: 1567095644 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/PlanarLidarSensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/PlanarLidarSensor.cs new file mode 100644 index 000000000..530a1770b --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/PlanarLidarSensor.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric.Rays.Lidar { + /// + /// + /// + public class PlanarLidarSensor : Sensor, + IHasFloatArray { + [SerializeField] [Range(1, 90)] int RaysToShoot = 30; + [SerializeField] Space1 _observation_space = new Space1 {Max = 30 }; + [SerializeField] Axis axis = Axis.Y_; + [SerializeField] Single[] _observation_array; + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return this._observation_array; } } + + /// + /// + /// + public override void UpdateObservation() { + var res = new float[this.RaysToShoot]; + float angle = 0; + for (var i = 0; i < this.RaysToShoot; i++) { + var x = Mathf.Sin(angle); + var y = Mathf.Cos(angle); + angle += 2 * Mathf.PI / this.RaysToShoot; + + var position = this.transform.position; + + var dir = new Vector3(position.x + x, position.y + y, 0); + if (this.axis == Axis.Y_) { + dir = new Vector3(position.x + x, 0, position.z + y); + } else if (this.axis == Axis.X_) { + dir = new Vector3(0, position.y + y, position.z + x); + } + + Debug.DrawLine(position, dir, Color.red); + if (Physics.Raycast(this.transform.position, + dir, + out var a, + (float)this._observation_space.Max)) { + res[i] = this._observation_space.Project(a.distance); + } else { + res[i] = this._observation_space.Max; + } + } + + this.ObservationArray = res; + } + + /// + /// + /// + public Single[] ObservationArray { + get { return this._observation_array; } + set { this._observation_array = value; } + } + + /// + /// + /// + public Space1[] ObservationSpace { get { return new[] {this._observation_space}; } } + + void OnDrawGizmosSelected() { + float angle = 0; + for (var i = 0; i < this.RaysToShoot; i++) { + var x = Mathf.Sin(angle) * this._observation_space.Max; + var y = Mathf.Cos(angle) * this._observation_space.Max; + + angle += 2 * Mathf.PI / this.RaysToShoot; + + var position = this.transform.position; + var dir = new Vector3(position.x + x, position.y + y, 0); + if (this.axis == Axis.Y_) { + dir = new Vector3(position.x + x, 0, position.z + y); + } else if (this.axis == Axis.X_) { + dir = new Vector3(0, position.y + y, position.z + x); + } + + Debug.DrawLine(position, dir, Color.red); + } + } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/PlanarLidarSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/PlanarLidarSensor.cs.meta new file mode 100644 index 000000000..a7fa017b3 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/PlanarLidarSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c5c0e5a55e543c9b74d95e6e273ea8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/StaticOmnidirectionalLidarSensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/StaticOmnidirectionalLidarSensor.cs new file mode 100644 index 000000000..cb955c5ad --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/StaticOmnidirectionalLidarSensor.cs @@ -0,0 +1,374 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric.Rays.Lidar { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "StaticOmnidirectionalLidar" + + SensorComponentMenuPath._Postfix)] + public class StaticOmnidirectionalLidarSensor : Sensor, + IHasFloatArray { + [SerializeField] RaycastHit _hit; + + [SerializeField] bool _is_2_d = false; + + [Header("Observation", order = 103)] + [SerializeField] + float[] _obs_array; + + [SerializeField] Space1 _space = new Space1 {Min = 0, Max = 5f}; + + [SerializeField] bool ignore_rotation = false; + + /// + /// + public override string PrototypingTypeName { get { return "OmnidirectionalLidar"; } } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return this.ObservationArray; } } + + /// + /// + public float[] ObservationArray { + get { return this._obs_array; } + private set { this._obs_array = value; } + } + + /// + /// + /// + public Space1[] ObservationSpace { get { return new[] {this._space}; } } + + /// + /// + public override void PreSetup() { + if (this._is_2_d) { + this.ObservationArray = new float[8]; + } else { + this.ObservationArray = new float[27]; + } + } + + /// + /// + public override void UpdateObservation() { + if (this._is_2_d) { + var vals = new float[8]; + if (Physics.Raycast(this.transform.position + this._space.Min * Vector3.forward, + this.transform.TransformDirection(Vector3.forward), + out this._hit, + this._space.Max)) { + vals[0] = this._space.Project(this._hit.distance); + } else { + vals[0] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + this._space.Min * Vector3.left, + this.transform.TransformDirection(Vector3.left), + out this._hit, + this._space.Max)) { + vals[1] = this._space.Project(this._hit.distance); + } else { + vals[1] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + this._space.Min * Vector3.right, + this.transform.TransformDirection(Vector3.right), + out this._hit, + this._space.Max)) { + vals[2] = this._space.Project(this._hit.distance); + } else { + vals[2] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + this._space.Min * Vector3.back, + this.transform.TransformDirection(Vector3.back), + out this._hit, + this._space.Max)) { + vals[3] = this._space.Project(this._hit.distance); + } else { + vals[3] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + + this._space.Min * (Vector3.forward + Vector3.left).normalized, + this.transform.TransformDirection((Vector3.forward + Vector3.left).normalized), + out this._hit, + this._space.Max)) { + vals[4] = this._space.Project(this._hit.distance); + } else { + vals[4] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + + this._space.Min * (Vector3.forward + Vector3.right).normalized, + this.transform.TransformDirection((Vector3.forward + Vector3.right).normalized), + out this._hit, + this._space.Max)) { + vals[5] = this._space.Project(this._hit.distance); + } else { + vals[5] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + + this._space.Min * (Vector3.back + Vector3.left).normalized, + this.transform.TransformDirection((Vector3.back + Vector3.left).normalized), + out this._hit, + this._space.Max)) { + vals[6] = this._space.Project(this._hit.distance); + } else { + vals[6] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + + this._space.Min * (Vector3.back + Vector3.right).normalized, + this.transform.TransformDirection((Vector3.back + Vector3.right).normalized), + out this._hit, + this._space.Max)) { + vals[7] = this._space.Project(this._hit.distance); + } else { + vals[7] = this._space.Max; + } + + this.ObservationArray = vals; + } else { + var vals = new float[27]; + if (Physics.Raycast(this.transform.position + this._space.Min * Vector3.forward, + this.transform.TransformDirection(Vector3.forward), + out this._hit, + this._space.Max)) { + vals[0] = this._space.Project(this._hit.distance); + } else { + vals[0] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + this._space.Min * Vector3.left, + this.transform.TransformDirection(Vector3.left), + out this._hit, + this._space.Max)) { + vals[1] = this._space.Project(this._hit.distance); + } else { + vals[1] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + this._space.Min * Vector3.right, + this.transform.TransformDirection(Vector3.right), + out this._hit, + this._space.Max)) { + vals[2] = this._space.Project(this._hit.distance); + } else { + vals[2] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + this._space.Min * Vector3.back, + this.transform.TransformDirection(Vector3.back), + out this._hit, + this._space.Max)) { + vals[3] = this._space.Project(this._hit.distance); + } else { + vals[3] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + + this._space.Min * (Vector3.forward + Vector3.left).normalized, + this.transform.TransformDirection((Vector3.forward + Vector3.left).normalized), + out this._hit, + this._space.Max)) { + vals[4] = this._space.Project(this._hit.distance); + } else { + vals[4] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + + this._space.Min * (Vector3.forward + Vector3.right).normalized, + this.transform.TransformDirection((Vector3.forward + Vector3.right).normalized), + out this._hit, + this._space.Max)) { + vals[5] = this._space.Project(this._hit.distance); + } else { + vals[5] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + + this._space.Min * (Vector3.back + Vector3.left).normalized, + this.transform.TransformDirection((Vector3.back + Vector3.left).normalized), + out this._hit, + this._space.Max)) { + vals[6] = this._space.Project(this._hit.distance); + } else { + vals[6] = this._space.Max; + } + + if (Physics.Raycast(this.transform.position + + this._space.Min * (Vector3.back + Vector3.right).normalized, + this.transform.TransformDirection((Vector3.back + Vector3.right).normalized), + out this._hit, + this._space.Max)) { + vals[7] = this._space.Project(this._hit.distance); + } else { + vals[7] = this._space.Max; + } + + //TODO:Missing combinations Vector3.down+Vector3.left... + + this.ObservationArray = vals; + } + } + + #if UNITY_EDITOR + [SerializeField] Color _color = Color.green; + + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + Debug.DrawLine(position, + this.transform.TransformDirection(position - Vector3.forward * this._space.Max), + this._color); + Debug.DrawLine(position, + this.transform.TransformDirection(position - Vector3.left * this._space.Max), + this._color); + Debug.DrawLine(position, + this.transform.TransformDirection(position - Vector3.right * this._space.Max), + this._color); + Debug.DrawLine(position, + this.transform.TransformDirection(position - Vector3.back * this._space.Max), + this._color); + Debug.DrawLine(position, + this.transform.TransformDirection(position + - (Vector3.forward + Vector3.left).normalized + * this._space.Max), + this._color); + Debug.DrawLine(position, + this.transform.TransformDirection(position + - (Vector3.forward + Vector3.right).normalized + * this._space.Max), + this._color); + Debug.DrawLine(position, + this.transform.TransformDirection(position + - (Vector3.back + Vector3.left).normalized + * this._space.Max), + this._color); + Debug.DrawLine(position, + this.transform.TransformDirection(position + - (Vector3.back + Vector3.right).normalized + * this._space.Max), + this._color); + if (!this._is_2_d) { + var position1 = this.transform.position; + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 - Vector3.up * this._space.Max), + this._color); + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 - Vector3.down * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.up + Vector3.left).normalized + * this._space.Max), + this._color); + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.up + Vector3.right).normalized + * this._space.Max), + this._color); + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.up + Vector3.forward).normalized + * this._space.Max), + this._color); + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.up + Vector3.back).normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.down + Vector3.left).normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.down + Vector3.right).normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.down + Vector3.forward).normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.down + Vector3.back).normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.down + Vector3.forward + Vector3.left) + .normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.down + Vector3.forward + Vector3.right) + .normalized + * this._space.Max), + this._color); + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.down + Vector3.back + Vector3.left) + .normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.down + Vector3.back + Vector3.right) + .normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.up + Vector3.forward + Vector3.left) + .normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.up + Vector3.forward + Vector3.right) + .normalized + * this._space.Max), + this._color); + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.up + Vector3.back + Vector3.left) + .normalized + * this._space.Max), + this._color); + + Debug.DrawLine(position1, + this.transform.TransformDirection(position1 + - (Vector3.up + Vector3.back + Vector3.right) + .normalized + * this._space.Max), + this._color); + } + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Observers/Rays/AdjacencyObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/StaticOmnidirectionalLidarSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rays/AdjacencyObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/StaticOmnidirectionalLidarSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/SweepingLidarSensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/SweepingLidarSensor.cs new file mode 100644 index 000000000..ad69c6fc8 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/SweepingLidarSensor.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric.Rays.Lidar { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "SweepingLidar" + + SensorComponentMenuPath._Postfix)] + public class SweepingLidarSensor : Sensor, + IHasSingle { + [SerializeField] RaycastHit _hit; + [SerializeField] Vector3 current_direction = Vector3.forward; + + [Header("Observation", order = 103)] + [SerializeField] + Space1 _ray_space = new Space1 {Min = 0, Max = 5f, DecimalGranularity = 2}; + + [SerializeField] + Space1 _sweeping_space = + new Space1 {Min = -180, Max = 180, DecimalGranularity = 5}; + + [SerializeField] Axis sweeping_axis = Axis.Rot_y_; + [SerializeField] int tick_i; + [Range(0.001f,999)][SerializeField] float speed = 1; + + /// + /// Does not use the defined sweep space + /// + [SerializeField] bool loop = false; + + /// + /// + public override string PrototypingTypeName { get { return "SweepingLidar"; } } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new[] {this.ObservationValue}; } } + + /// + /// + public override void PreSetup() { this.PrototypingReset(); } + + public override void PrototypingReset() { this.tick_i = 0; } + + /// + /// + /// + /// + public override void Tick() { + var c = Vector3.forward; + float a = this._sweeping_space.Precision * this.tick_i * this.speed; + if (!this.loop) { + a = this._sweeping_space.Reproject(Mathf.Cos(a) * .5f + .5f); + } + + switch (this.sweeping_axis) { + case Axis.Rot_x_: + c = Quaternion.Euler(a, 0, 0) * c; + break; + case Axis.Rot_y_: + c = Quaternion.Euler(0, a, 0) * c; + break; + + default: throw new ArgumentOutOfRangeException(); + } + + this.current_direction = c; + + this.tick_i += 1; + } + + /// + /// + public override void UpdateObservation() { + if (Physics.Raycast(this.transform.position + this._ray_space.Min * this.current_direction, + this.transform.TransformDirection(this.current_direction), + out this._hit, + this._ray_space.Max)) { + this.ObservationValue = this._ray_space.Project(this._hit.distance); + } else { + this.ObservationValue = this._ray_space.Max; + } + } + + #if UNITY_EDITOR + [SerializeField] Color _color = Color.green; + [SerializeField] Single _observation_value; + + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + Debug.DrawLine(position, + position + this.transform.TransformDirection(this.current_direction) * this._ray_space.Max, + this._color); + } + } + #endif + /// + /// + /// + public Single ObservationValue { + get { return this._observation_value; } + set { this._observation_value = value; } + } + + public Space1 SingleSpace { get { return this._ray_space; } } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/SweepingLidarSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/SweepingLidarSensor.cs.meta new file mode 100644 index 000000000..919037635 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/Lidar/SweepingLidarSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 968d6fb4ce9d461abdcdf3b89ea05938 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/LineOfSightSensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/LineOfSightSensor.cs new file mode 100644 index 000000000..82b266635 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/LineOfSightSensor.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric.Rays { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "LineOfSight" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [Serializable] + public class LineOfSightSensor : Sensor, + IHasSingle { + RaycastHit _hit = new RaycastHit(); + + [SerializeField] float _obs_value = 0; + + /// + /// + [SerializeField] + Space1 _observation_value_space = Space1.ZeroOne; + + [Header("Specific", order = 102)] + [SerializeField] + UnityEngine.Transform _target = null; + + public override string PrototypingTypeName { get { return "LineOfSight"; } } + + public float ObservationValue { get { return this._obs_value; } private set { this._obs_value = value; } } + + public Space1 SingleSpace { get { return this._observation_value_space; } } + + + public override IEnumerable FloatEnumerable { get { return new[] {this.ObservationValue}; } } + + public override void UpdateObservation() { + var distance = Vector3.Distance(this.transform.position, this._target.position); + if (Physics.Raycast(this.transform.position, + this._target.position - this.transform.position, + out this._hit, + distance)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log(this._hit.distance); + } + #endif + + if (this._hit.collider.gameObject != this._target.gameObject) { + this.ObservationValue = 0; + } else { + this.ObservationValue = 1; + } + } else { + this.ObservationValue = 1; + } + } + } +} diff --git a/Runtime/Prototyping/Observers/Rays/LineOfSightObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/LineOfSightSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rays/LineOfSightObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/LineOfSightSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/NearestByTagSensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/NearestByTagSensor.cs new file mode 100644 index 000000000..8691fdfe3 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/NearestByTagSensor.cs @@ -0,0 +1,110 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric.Rays { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "NearestByTag" + + SensorComponentMenuPath._Postfix)] + public class NearestByTagSensor : Sensor, + IHasEulerTransform { + [SerializeField] Vector3 _direction; + [SerializeField] Space3 _direction_space = Space3.ZeroOne; + + [Header("Specific", order = 102)] + [SerializeField] + GameObject _nearest_object; + + [Header("Observation", order = 103)] + [SerializeField] + Vector3 _position; + + [SerializeField] Space3 _position_space = Space3.ZeroOne; + [SerializeField] Vector3 _rotation; + [SerializeField] Space3 _rotation_space = Space3.ZeroOne; + [SerializeField] string _tag = ""; + + /// + /// + /// + public override string PrototypingTypeName { get { return "Nearest" + this._tag; } } + + /// + /// + /// + public Vector3 Position { + get { return this._position; } + set { + this._position = this._position_space.Project(value); + } + } + + public Vector3 Rotation { + get { return this._rotation; } + set { this._rotation = this._rotation_space.Project(value); } + } + + public Space3 PositionSpace { get { return this._position_space; } } + public Space3 DirectionSpace { get { return this._direction_space; } } + public Space3 RotationSpace { get { return this._rotation_space; } } + + public Vector3 Direction { + get { return this._direction; } + set { + this._direction = this._direction_space.Project(value); + } + } + + public override IEnumerable FloatEnumerable { + get { + return new[] { + this.Position.x, + this.Position.y, + this.Position.z, + this.Direction.x, + this.Direction.y, + this.Direction.z, + this.Rotation.x, + this.Rotation.y, + this.Rotation.z + }; + } + } + + public override void UpdateObservation() { + this._nearest_object = this.FindNearest(); + + if (this.ParentEnvironment != null) { + this.Position = this.ParentEnvironment.TransformPoint(this._nearest_object.transform.position); + this.Direction = this.ParentEnvironment.TransformDirection(this._nearest_object.transform.forward); + this.Rotation = this.ParentEnvironment.TransformDirection(this._nearest_object.transform.up); + } else { + this.Position = this._nearest_object.transform.position; + this.Direction = this._nearest_object.transform.forward; + this.Rotation = this._nearest_object.transform.up; + } + } + + + GameObject FindNearest() { + var candidates = FindObjectsOfType(); + var nearest_object = this.gameObject; + var nearest_distance = -1.0; + foreach (var candidate in candidates) { + if (candidate.CompareTag(this._tag)) { + var dist = Vector3.Distance(this.transform.position, candidate.transform.position); + if (nearest_distance > dist || nearest_distance < 0) { + nearest_distance = dist; + nearest_object = candidate; + } + } + } + + return nearest_object; + } + } +} diff --git a/Runtime/Prototyping/Observers/Rays/NearestByTagObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/NearestByTagSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rays/NearestByTagObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/NearestByTagSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/RaycastSensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/RaycastSensor.cs new file mode 100644 index 000000000..d94656641 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/RaycastSensor.cs @@ -0,0 +1,86 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric.Rays { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Raycast" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + public class RaycastSensor : Sensor, + IHasSingle { + [SerializeField] Vector3 _direction = Vector3.forward; + + [SerializeField] RaycastHit _hit = new RaycastHit(); + + [SerializeField] Space1 _observation_space = new Space1 {DecimalGranularity = 3, Min = 0f, Max = 100.0f}; + + [Header("Observation", order = 103)] + [SerializeField] + float _observation_value = 0; + + /// + /// + /// + public override string PrototypingTypeName { + get { return "Raycast" + $"{this._direction.x}{this._direction.y}{this._direction.z}"; } + } + + /// + /// + /// + public Space1 SingleSpace { get { return this._observation_space; } } + + /// + /// + /// + public float ObservationValue { + get { return this._observation_value; } + private set { this._observation_value = this.SingleSpace.Project(value); } + } + + + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new[] {this.ObservationValue}; } } + + /// + /// + /// + public override void UpdateObservation() { + if (Physics.Raycast(this.transform.position, + this.transform.TransformDirection(this._direction), + out this._hit, + this._observation_space.Max)) { + this.ObservationValue = this._hit.distance; + } else { + this.ObservationValue = this._observation_space.Max; + } + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Raycast hit at distance {this._hit.distance}"); + } + #endif + } + + #if UNITY_EDITOR + [SerializeField] Color _color = Color.green; + + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + Debug.DrawLine(position, + position + + this.transform.TransformDirection(this._direction) * this._observation_space.Max, + this._color); + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Observers/Rays/RaycastObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/RaycastSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rays/RaycastObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/EntityCentric/Rays/RaycastSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetDirectionSensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetDirectionSensor.cs new file mode 100644 index 000000000..5c09679b5 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetDirectionSensor.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Compass" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [Serializable] + public class TargetDirectionSensor : Sensor, + IHasDouble { + /// + /// + [SerializeField] + Vector2 _2_d_position = Vector2.zero; + + /// + /// + [Header("Observation", order = 103)] + [SerializeField] + Vector3 _position = Vector3.zero; + + /// + /// + [SerializeField] + Space3 _position_space = new Space3 {DecimalGranularity = 1, Max = Vector3.one, Min = -Vector3.one}; + + /// + /// + [Header("Specific", order = 102)] + [SerializeField] + UnityEngine.Transform _target = null; + + /// + /// + /// + public override string PrototypingTypeName { get { return "Compass"; } } + + /// + /// + public Vector3 Position { + get { return this._position; } + set { + this._position = this._position_space.Project(value); + this._2_d_position = new Vector2(this._position.x, this._position.z); + } + } + + /// + /// + /// + public Space2 DoubleSpace { + get { + return new Space2 { + Max = + new Vector2(this._position_space + .Max.x, + this._position_space + .Max.y), + Min = new Vector2(this._position_space + .Min.x, + this._position_space + .Min.y) + ,DecimalGranularity = this._position_space.DecimalGranularity + }; + } + } + + /// + /// + /// + public Vector2 ObservationValue { get { return this._2_d_position; } set { this._2_d_position = value; } } + + + public override IEnumerable FloatEnumerable { + get { return new[] {this.Position.x, this.Position.z}; } + } + + /// + /// + /// + public override void UpdateObservation() { + this.Position = this.transform.InverseTransformVector(this.transform.position - this._target.position) + .normalized; + } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetDirectionSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetDirectionSensor.cs.meta new file mode 100644 index 000000000..02ceee6f4 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetDirectionSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f05229d29654ca1ab7efed88f4688c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetRigidbodySensor.cs b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetRigidbodySensor.cs new file mode 100644 index 000000000..83fabb2f2 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetRigidbodySensor.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Prototyping.Actuators; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.EntityCentric { + /// + /// + /// + public class TargetRigidbodySensor : Sensor, + IHasDouble { + [SerializeField] TargetRigidbodyActuator _actuator = null; + + [SerializeField] Space2 _observation_space2_d = Space2.ZeroOne; + + /// + /// + /// + public Vector2 ObservationValue { + get { return new Vector2(this._actuator.MovementSpeed, this._actuator.RotationSpeed); } + } + + /// + /// + /// + public Space2 DoubleSpace { get { return this._observation_space2_d; } } + + /// + /// + /// + public override void PreSetup() { + base.PreSetup(); + if (!this._actuator) { + this._actuator = this.GetComponent(); + } + } + + public override IEnumerable FloatEnumerable { + get { return new[] {this.ObservationValue.x, this.ObservationValue.y}; } + } + + /// + /// + /// + public override void UpdateObservation() { } + } +} diff --git a/Runtime/Prototyping/Observers/TargetRigidbodyObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetRigidbodySensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/TargetRigidbodyObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/EntityCentric/TargetRigidbodySensor.cs.meta diff --git a/Runtime/Prototyping/Observers/Grid.meta b/Runtime/Prototyping/Sensors/Spatial/Grid.meta similarity index 100% rename from Runtime/Prototyping/Observers/Grid.meta rename to Runtime/Prototyping/Sensors/Spatial/Grid.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Grid/GoalCellSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Grid/GoalCellSensor.cs new file mode 100644 index 000000000..0b33a8afb --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Grid/GoalCellSensor.cs @@ -0,0 +1,86 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using droid.Runtime.Utilities.Drawing; +using droid.Runtime.Utilities.Grid; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Grid { + [AddComponentMenu( + SensorComponentMenuPath._ComponentMenuPath + "GoalCell" + SensorComponentMenuPath._Postfix)] + public class GoalCellSensor : Sensor, + IHasTriple { + [SerializeField] EmptyCell _current_goal; + [SerializeField] Vector3 _current_goal_position; + + [SerializeField] bool _draw_names = true; + + [SerializeField] int _order_index; + + /// + /// + public int OrderIndex { get { return this._order_index; } set { this._order_index = value; } } + + /// + /// + public bool DrawNames { get { return this._draw_names; } set { this._draw_names = value; } } + + /// + /// + /// + public override string PrototypingTypeName { get { return "Goal"; } } + + /// + /// + public EmptyCell CurrentGoal { + get { + this.UpdateObservation(); + return this._current_goal; + } + set { this._current_goal = value; } + } + + /// + /// + /// + public Vector3 ObservationValue { + get { return this._current_goal_position; } + private set { this._current_goal_position = value; } + } + + /// + /// + /// + public Space3 TripleSpace { get; } = new Space3(); + + public override IEnumerable FloatEnumerable { + get { + return new[] { + this._current_goal_position.x, + this._current_goal_position.y, + this._current_goal_position.z + }; + } + } + + /// + /// + public override void UpdateObservation() { + if (this._current_goal) { + this._current_goal_position = this._current_goal.transform.position; + } + } + + #if UNITY_EDITOR + void OnDrawGizmosSelected() { + if (this.DrawNames) { + if (this._current_goal) { + NeodroidUtilities.DrawString(this._current_goal.name, + this._current_goal.transform.position, + Color.green); + } + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Observers/Grid/GoalCellObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Grid/GoalCellSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Grid/GoalCellObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Grid/GoalCellSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Grid/GridPositionSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Grid/GridPositionSensor.cs new file mode 100644 index 000000000..fab394ac6 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Grid/GridPositionSensor.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Grid { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "GridPosition" + + SensorComponentMenuPath._Postfix)] + public class GridPositionSensor : Sensor, + IHasSingle { + /// + /// + int[,] _grid = null; + + /// + /// + [SerializeField] + int _height = 0; + + [Header("Observation", order = 103)] + [SerializeField] + float _observation_value; + + [SerializeField] Space1 _observation_value_space; + [SerializeField] int _width = 0; + + /// + /// + public override string PrototypingTypeName { get { return "Value"; } } + + /// + /// + public float ObservationValue { + get { return this._observation_value; } + set { this._observation_value = this.SingleSpace.Project(value); } + } + + public Space1 SingleSpace { get { return this._observation_value_space; } } + + public override void PreSetup() { + this._grid = new int[this._width, this._height]; + + var k = 0; + for (var i = 0; i < this._width; i++) { + for (var j = 0; j < this._height; j++) { + this._grid[i, j] = k++; + } + } + } + + public override IEnumerable FloatEnumerable { get { return new[] {this.ObservationValue}; } } + + public override void UpdateObservation() { + var position = this.transform.position; + var x = position.x + this._width; + var z = position.z + this._height; + + this.ObservationValue = this._grid[(int)x, (int)z]; + } + } +} diff --git a/Runtime/Prototyping/Observers/Grid/GridPositionObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Grid/GridPositionSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Grid/GridPositionObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Grid/GridPositionSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Occupancy.meta b/Runtime/Prototyping/Sensors/Spatial/Occupancy.meta new file mode 100644 index 000000000..b3b762d62 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Occupancy.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 27120cf0a3e84d0882a5550048556c3d +timeCreated: 1560187055 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Spatial/Occupancy/Occupancy3dSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Occupancy/Occupancy3dSensor.cs new file mode 100644 index 000000000..c5597fb65 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Occupancy/Occupancy3dSensor.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Occupancy { + + /// + /// + /// + enum IntersectionType { + Cone_sphere_, + Sphere_sphere_ + } + + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Occupancy3d" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + public class Occupancy3dSensor : Sensor, + IHasTripleArray { + [Header("Observation", order = 103)] + [SerializeField] + Vector3[] _observation_value; + + [SerializeField] Space1 _observation_value_space = Space1.ZeroOne; + Light _light; + IEnumerable _transforms; + + /// + /// + /// + public Space1 SingleSpace { get { return this._observation_value_space; } } + + /// + /// + /// + public Vector3[] ObservationArray { + get { return this._observation_value; } + set { this._observation_value = this.SingleSpace.Project(value); } + } + + public override void PreSetup() { + this._light = this.GetComponent(); + this._transforms = FindObjectsOfType().Select(o => o.transform); + } + + public override IEnumerable FloatEnumerable { + get { + var a = new float[this.ObservationArray.Length * 3]; + for (var i = 0; i < this.ObservationArray.Length * 3; i += 3) { + a[i] = this.ObservationArray[i].x; + a[i + 1] = this.ObservationArray[i].y; + a[i + 2] = this.ObservationArray[i].z; + } + + return a; + } + } + + public override void UpdateObservation() { + foreach (var transform1 in this._transforms) { + if (IntersectionUtilities.ConeSphereIntersection(this._light, transform1)) { + //Debug.Log("Intersect"); + } + } + } + + public Space1[] ObservationSpace { get; } = new Space1[1]; + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/Occupancy/Occupancy3dSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Occupancy/Occupancy3dSensor.cs.meta new file mode 100644 index 000000000..38ee62e5c --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Occupancy/Occupancy3dSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f28b887890a64bc890b3866d7143e4b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Observers/Rigidbody.meta b/Runtime/Prototyping/Sensors/Spatial/Rigidbody.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rigidbody.meta rename to Runtime/Prototyping/Sensors/Spatial/Rigidbody.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Rigidbody/AngularVelocitySensor.cs b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/AngularVelocitySensor.cs new file mode 100644 index 000000000..0d00d96b7 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/AngularVelocitySensor.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Rigidbody { + public class AngularVelocitySensor : Sensor, + IHasTriple { + [SerializeField] Vector3 _angular_velocity; + [SerializeField] Space3 _angular_velocity_space = Space3.ZeroOne; + + [SerializeField] UnityEngine.Rigidbody _rigidbody; + + /// + /// + /// + public override string PrototypingTypeName { get { return "AngularVelocity"; } } + + public Vector3 ObservationValue { + get { return this._angular_velocity; } + set { this._angular_velocity = value; } + } + + public Space3 TripleSpace { get { return this._angular_velocity_space; } } + + /// + /// + /// + public override void PreSetup() { this._rigidbody = this.GetComponent(); } + + public override IEnumerable FloatEnumerable { + get { return new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; } + } + + /// + /// + /// + public override void UpdateObservation() { this.ObservationValue = this._rigidbody.angularVelocity; } + } +} diff --git a/Runtime/Prototyping/Observers/Rigidbody/AngularVelocityObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/AngularVelocitySensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rigidbody/AngularVelocityObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Rigidbody/AngularVelocitySensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Rigidbody/RigidbodySensor.cs b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/RigidbodySensor.cs new file mode 100644 index 000000000..9b7eaac69 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/RigidbodySensor.cs @@ -0,0 +1,128 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Rigidbody { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Rigidbody" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(UnityEngine.Rigidbody))] + public class RigidbodySensor : Sensor, + IHasRigidbody { + [SerializeField] Space3 _angular_space = Space3.ZeroOne; + + [Header("Observation", order = 100)] + [SerializeField] + Vector3 _angular_velocity = Vector3.zero; + + [SerializeField] bool _differential = false; + + [SerializeField] float _last_update_time = 0; + + [Header("Configuration", order = 110)] + [SerializeField] + UnityEngine.Rigidbody _rigidbody = null; + + [SerializeField] Vector3 _velocity = Vector3.zero; + [SerializeField] Space3 _velocity_space = Space3.ZeroOne; + + /// + /// + /// + public override string PrototypingTypeName { + get { + if (this._differential) { + return "RigidbodyDifferential"; + } + + return "Rigidbody"; + } + } + + /// + /// + /// + public Vector3 Velocity { + get { return this._velocity; } + set { + this._velocity = this._velocity_space.Project(value); + } + } + + /// + /// + /// + public Vector3 AngularVelocity { + get { return this._angular_velocity; } + set { + this._angular_velocity = this._angular_space.Project(value); + } + } + + /// + /// + /// + public Space3 VelocitySpace { get { return this._velocity_space; } } + + /// + /// + /// + public Space3 AngularSpace { get { return this._angular_space; } } + + /// + /// + /// + public override IEnumerable FloatEnumerable { + get { + return new[] { + this.Velocity.x, + this.Velocity.y, + this.Velocity.z, + this.AngularVelocity.x, + this.AngularVelocity.y, + this.AngularVelocity.z + }; + } + } + + /// + /// + /// + public override void UpdateObservation() { + var update_time_difference = Time.time - this._last_update_time; + if (this._differential && update_time_difference > 0) { + var vel_diff = this.Velocity - this._rigidbody.velocity; + var ang_diff = this.AngularVelocity - this._rigidbody.angularVelocity; + + var vel_magnitude = vel_diff.magnitude; + if (vel_magnitude > 0) { + this.Velocity = vel_diff / (update_time_difference + float.Epsilon); + } else { + this.Velocity = vel_diff; + } + + var ang_magnitude = ang_diff.magnitude; + if (ang_magnitude > 0) { + this.AngularVelocity = ang_diff / (update_time_difference + float.Epsilon); + } else { + this.AngularVelocity = ang_diff; + } + } else { + this.Velocity = this._rigidbody.velocity; + this.AngularVelocity = this._rigidbody.angularVelocity; + } + + this._last_update_time = Time.realtimeSinceStartup; + } + + /// + /// + /// + public override void PreSetup() { this._rigidbody = this.GetComponent(); } + } +} diff --git a/Runtime/Prototyping/Observers/Rigidbody/RigidbodyObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/RigidbodySensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rigidbody/RigidbodyObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Rigidbody/RigidbodySensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Rigidbody/VelocitySensor.cs b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/VelocitySensor.cs new file mode 100644 index 000000000..3fb6f95ee --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/VelocitySensor.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Rigidbody { + /// + /// + /// + [RequireComponent(typeof(UnityEngine.Rigidbody))] + public class VelocitySensor : Sensor, + IHasTriple { + [SerializeField] UnityEngine.Rigidbody _rigidbody; + [SerializeField] Vector3 _velocity; + [SerializeField] Space3 _velocity_space = Space3.ZeroOne; + + /// + /// + /// + public override string PrototypingTypeName { get { return "Velocity"; } } + + /// + /// + public Vector3 ObservationValue { + get { return this._velocity; } + set { + this._velocity = this._velocity_space.Project(value); + } + } + + /// + /// + /// + public Space3 TripleSpace { get { return this._velocity_space; } } + + /// + /// + /// + public override IEnumerable FloatEnumerable { + get { return new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; } + } + + /// + /// + public override void UpdateObservation() { this.ObservationValue = this._rigidbody.velocity; } + + /// + /// + /// + public override void PreSetup() { this._rigidbody = this.GetComponent(); } + } +} diff --git a/Runtime/Prototyping/Observers/Rigidbody/VelocityObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Rigidbody/VelocitySensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Rigidbody/VelocityObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Rigidbody/VelocitySensor.cs.meta diff --git a/Runtime/Prototyping/Observers/Transform.meta b/Runtime/Prototyping/Sensors/Spatial/Transform.meta similarity index 100% rename from Runtime/Prototyping/Observers/Transform.meta rename to Runtime/Prototyping/Sensors/Spatial/Transform.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/EulerTransformSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Transform/EulerTransformSensor.cs new file mode 100644 index 000000000..ef1f7cd63 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/EulerTransformSensor.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Transform { + + + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "EulerTransform" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [Serializable] + public class EulerTransformSensor : Sensor, + IHasEulerTransform { + [SerializeField] Vector3 _direction; + [SerializeField] Space3 _direction_space = Space3.ZeroOne; + + [Header("Observation", order = 103)] + [SerializeField] + Vector3 _position; + + [SerializeField] Space3 _position_space = Space3.ZeroOne; + + [SerializeField] Vector3 _rotation; + [SerializeField] Space3 _rotation_space = Space3.ZeroOne; + + [Header("Specific", order = 102)] + [SerializeField] + [SearchableEnum] + CoordinateSpace _space = CoordinateSpace.Environment_; + + [SerializeField] bool normalised_overwrite_space_if_env_bounds = true; + + /// + /// + /// + public override string PrototypingTypeName { get { return "EulerTransform"; } } + + /// + /// + /// + public Vector3 Position { + get { return this._position; } + set { this._position = this._position_space.Project(value); } + } + + /// + /// + /// + public Vector3 Rotation { + get { return this._rotation; } + set { this._rotation = this._rotation_space.Project(value); } + } + + /// + /// + /// + public Space3 PositionSpace { get; } = new Space3(); + + /// + /// + /// + public Space3 DirectionSpace { get; } = new Space3(); + + /// + /// + /// + public Space3 RotationSpace { get; } = new Space3(); + + /// + /// + /// + public Vector3 Direction { + get { return this._direction; } + set { this._direction = this._direction_space.Project(value); } + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { + get { + return new[] { + this.Position.x, + this.Position.y, + this.Position.z, + this.Direction.x, + this.Direction.y, + this.Direction.z, + this.Rotation.x, + this.Rotation.y, + this.Rotation.z + }; + } + } + + /// + /// + public override void UpdateObservation() { + var transform1 = this.transform; + if (this.ParentEnvironment != null && this._space == CoordinateSpace.Environment_) { + this.Position = this.ParentEnvironment.TransformPoint(transform1.position); + this.Direction = this.ParentEnvironment.TransformDirection(transform1.forward); + this.Rotation = this.ParentEnvironment.TransformDirection(transform1.up); + } else if (this._space == CoordinateSpace.Local_) { + this.Position = transform1.localPosition; + this.Direction = transform1.forward; + this.Rotation = transform1.up; + } else { + this.Position = transform1.position; + this.Direction = transform1.forward; + this.Rotation = transform1.up; + } + } + + /// + /// + /// + public override void RemotePostSetup() { + if (this.normalised_overwrite_space_if_env_bounds) { + if (this.ParentEnvironment) { + this._position_space = Space3.FromCenterExtents(this.ParentEnvironment.PlayableArea.Bounds + .extents); + } + } + } + } +} diff --git a/Runtime/Prototyping/Observers/Transform/EulerTransformObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Transform/EulerTransformSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Transform/EulerTransformObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Transform/EulerTransformSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/Position2DSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Transform/Position2DSensor.cs new file mode 100644 index 000000000..6f8fd2d2a --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/Position2DSensor.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Transform { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Position2D" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [Serializable] + public class Position2DSensor : Sensor, + IHasDouble { + [Header("Observation", order = 103)] + [SerializeField] + Vector2 _2_d_position; + + [SerializeField] [SearchableEnum] Dimension2DCombination _dim_combination = Dimension2DCombination.Xz_; + + [SerializeField] Space2 _position_space = Space2.ZeroOne; + + [Header("Specific", order = 102)] + [SerializeField] + CoordinateSpace _coordinate_space = CoordinateSpace.Environment_; + + [SerializeField] bool normalised_overwrite_space_if_env_bounds = true; + + /// + /// + /// + public Vector2 ObservationValue { get { return this._2_d_position; } set { this._2_d_position = value; } } + + /// + /// + /// + public Space2 DoubleSpace { get { return this._position_space; } } + + /// + /// + /// + /// + public void SetPosition(Vector3 position) { + Vector2 vector2_pos; + switch (this._dim_combination) { + case Dimension2DCombination.Xy_: + vector2_pos = new Vector2(position.x, position.y); + break; + case Dimension2DCombination.Xz_: + vector2_pos = new Vector2(position.x, position.z); + break; + case Dimension2DCombination.Yz_: + vector2_pos = new Vector2(position.y, position.z); + break; + default: throw new ArgumentOutOfRangeException(); + } + + this._2_d_position = this._position_space.Project(vector2_pos); + + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { + get { return new[] {this._2_d_position.x, this._2_d_position.y}; } + } + + /// + /// + /// + public override void UpdateObservation() { + if (this.ParentEnvironment != null && this._coordinate_space == CoordinateSpace.Environment_) { + this.SetPosition(this.ParentEnvironment.TransformPoint(this.transform.position)); + } else if (this._coordinate_space == CoordinateSpace.Local_) { + this.SetPosition(this.transform.localPosition); + } else { + this.SetPosition(this.transform.position); + } + } + + /// + /// + /// + public override void PreSetup() { + if (this.normalised_overwrite_space_if_env_bounds) { + if (this.ParentEnvironment && this.ParentEnvironment.PlayableArea != null) { + var ex = this.ParentEnvironment.PlayableArea.Bounds.extents; + switch (this._dim_combination) { + case Dimension2DCombination.Xy_: + this._position_space = Space2.FromCenterExtents(new Vector2(ex.x, ex.y)); + break; + case Dimension2DCombination.Xz_: + this._position_space = Space2.FromCenterExtents(new Vector2(ex.x, ex.z)); + break; + case Dimension2DCombination.Yz_: + this._position_space = Space2.FromCenterExtents(new Vector2(ex.y, ex.z)); + break; + default: throw new ArgumentOutOfRangeException(); + } + } + } + } + + #if UNITY_EDITOR + + void OnDrawGizmosSelected() { + if (this.enabled) { + var position = this.transform.position; + switch (this._dim_combination) { + case Dimension2DCombination.Xy_: + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + Debug.DrawLine(position, position + Vector3.up * 2, Color.red); + break; + case Dimension2DCombination.Xz_: + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + Debug.DrawLine(position, position + Vector3.forward * 2, Color.red); + break; + case Dimension2DCombination.Yz_: + + Debug.DrawLine(position, position + Vector3.up * 2, Color.green); + Debug.DrawLine(position, position + Vector3.forward * 2, Color.red); + break; + default: //TODO add the Direction cases + Gizmos.DrawIcon(position, "console.warnicon", true); + break; + } + } + } + #endif + } +} diff --git a/Runtime/Prototyping/Observers/Transform/PositionObserver2D.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Transform/Position2DSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Transform/PositionObserver2D.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Transform/Position2DSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/PositionSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Transform/PositionSensor.cs new file mode 100644 index 000000000..a21526408 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/PositionSensor.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Transform { + /// + /// + /// + [AddComponentMenu( + SensorComponentMenuPath._ComponentMenuPath + "Position" + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [Serializable] + public class PositionSensor : Sensor, + IHasTriple { + [Header("Observation", order = 103)] + [SerializeField] + Vector3 _position; + + [SerializeField] Space3 _position_space = Space3.ZeroOne; + + [Header("Specific", order = 102)] + [SerializeField] + CoordinateSpace _space = CoordinateSpace.Environment_; + + [SerializeField] bool normalised_overwrite_space_if_env_bounds = true; + + /// + /// + public override string PrototypingTypeName { get { return "Position"; } } + + /// + /// + public Vector3 ObservationValue { + get { return this._position; } + set { + this._position = this._position_space.Project(value); + } + } + + /// + /// + public Space3 TripleSpace { get { return this._position_space; } } + + /// + /// + public override void RemotePostSetup() { + if (this.normalised_overwrite_space_if_env_bounds) { + if (this.ParentEnvironment) { + this._position_space = Space3.FromCenterExtents(this.ParentEnvironment.PlayableArea.Bounds.extents); + } + } + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { + get { return new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; } + } + + /// + /// + public override void UpdateObservation() { + if (this.ParentEnvironment != null && this._space == CoordinateSpace.Environment_) { + this.ObservationValue = this.ParentEnvironment.TransformPoint(this.transform.position); + } else if (this._space == CoordinateSpace.Local_) { + this.ObservationValue = this.transform.localPosition; + } else { + this.ObservationValue = this.transform.position; + } + } + } +} diff --git a/Runtime/Prototyping/Observers/Transform/PositionObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Transform/PositionSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Transform/PositionObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Transform/PositionSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/QuaternionTransformSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Transform/QuaternionTransformSensor.cs new file mode 100644 index 000000000..d1bc4c6af --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/QuaternionTransformSensor.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Transform { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "QuaternionTransform" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [Serializable] + public class QuaternionTransformSensor : Sensor, + IHasQuaternionTransform { + [Header("Observation", order = 103)] + [SerializeField] + Vector3 _position; + + [SerializeField] Quaternion _rotation; + + [Header("Specific", order = 102)] + [SerializeField] + CoordinateSpace _space = CoordinateSpace.Environment_; + + /// + /// + /// + public override string PrototypingTypeName { get { return "QuaternionTransform"; } } + + /// + /// + /// + public Vector3 Position { get { return this._position; } } + + /// + /// + /// + public Quaternion Rotation { get { return this._rotation; } } + + public Space1 PositionSpace { get; } //TODO: Implement + public Space1 RotationSpace { get; } //TODO: Implement + + /// + /// + /// + public override IEnumerable FloatEnumerable { + get { + return new[] { + this._position.x, + this._position.y, + this._position.z, + this._rotation.x, + this._rotation.y, + this._rotation.z, + this._rotation.w + }; + } + } + + /// + /// + /// + public override void UpdateObservation() { + var transform1 = this.transform; + if (this.ParentEnvironment != null && this._space == CoordinateSpace.Environment_) { + this._position = this.ParentEnvironment.TransformPoint(transform1.position); + this._rotation = Quaternion.Euler(this.ParentEnvironment.TransformDirection(transform1.forward)); + } else { + this._position = transform1.position; + this._rotation = transform1.rotation; + } + } + + + } +} diff --git a/Runtime/Prototyping/Observers/Transform/QuaternionTransformObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Transform/QuaternionTransformSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Transform/QuaternionTransformObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Transform/QuaternionTransformSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/RotationSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Transform/RotationSensor.cs new file mode 100644 index 000000000..24552adef --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/RotationSensor.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Transform { + [AddComponentMenu(PrototypingComponentMenuPath._ComponentMenuPath + "Rotation")] + [ExecuteInEditMode] + [Serializable] + public class RotationSensor : Sensor, + IHasQuadruple { + [Header("Observation", order = 103)] + [SerializeField] + Quaternion _rotation; + + [Header("Specific", order = 102)] + [SerializeField] + CoordinateSpace _space = CoordinateSpace.Environment_; + + /// + /// + public CoordinateSpace Space { get { return this._space; } } + + /// + /// + /// + public override string PrototypingTypeName { get { return "Position"; } } + + /// + /// + /// + public Quaternion ObservationValue { get { return this._rotation; } set { this._rotation = value; } } + + /// + /// + /// + public Space4 QuadSpace { get; } = new Space4(); + + + + /// + /// + /// + public override IEnumerable FloatEnumerable { + get { return new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; } + } + + /// + /// + /// + public override void UpdateObservation() { + if (this.ParentEnvironment != null && this._space == CoordinateSpace.Environment_) { + this.ObservationValue = this.ParentEnvironment.TransformRotation(this.transform.rotation); + } else if (this._space == CoordinateSpace.Local_) { + this.ObservationValue = this.transform.localRotation; + } else { + this.ObservationValue = this.transform.rotation; + } + } + } +} diff --git a/Runtime/Prototyping/Observers/Transform/RotationObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Transform/RotationSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Transform/RotationObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Transform/RotationSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/ScaleSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Transform/ScaleSensor.cs new file mode 100644 index 000000000..1cbe806aa --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/ScaleSensor.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Transform { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + "Scale" + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [Serializable] + public class ScaleSensor : Sensor, + IHasTriple { + [Header("Observation", order = 103)] + [SerializeField] + Vector3 _position; + + [SerializeField] Space3 _scale_space = Space3.ZeroOne; + + /// + /// + public override string PrototypingTypeName { get { return "Scale"; } } + + /// + /// + public Vector3 ObservationValue {//TODO: IMPLEMENT LOCAL SPACE + get { return this._position; } + set { + this._position = this._scale_space.Project(value); + } + } + + /// + /// + public Space3 TripleSpace { get { return this._scale_space; } } + + /// + /// + public override void PreSetup() { } + + /// + /// + /// + public override IEnumerable FloatEnumerable { + get { return new[] {this.ObservationValue.x, this.ObservationValue.y, this.ObservationValue.z}; } + } + + /// + /// + public override void UpdateObservation() { this.ObservationValue = this.transform.localScale; } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/ScaleSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Transform/ScaleSensor.cs.meta new file mode 100644 index 000000000..75a45b427 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/ScaleSensor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f7fe5c86b1c5c606d97ae7bf7591ea63 +timeCreated: 1516289271 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/SingleAxisTransformSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Transform/SingleAxisTransformSensor.cs new file mode 100644 index 000000000..f9dc15587 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/SingleAxisTransformSensor.cs @@ -0,0 +1,119 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Prototyping.Sensors.Experimental; +using droid.Runtime.Structs.Space; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Transform { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "SingleAxisTransform" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + public class SingleAxisTransformSensor : SingleValueSensor { + [SerializeField] [SearchableEnum] Axis _dim = Axis.X_; + + [SerializeField] bool normalised_overwrite_space_if_env_bounds = true; + + /// + /// + public override string PrototypingTypeName { get { return "SingleAxisTransform" + this._dim; } } + + /// + /// + public override void RemotePostSetup() { + if(this.normalised_overwrite_space_if_env_bounds) { + switch (this._dim) { + case Axis.X_: + if (this.ParentEnvironment) { + this._observation_value_space = + Space1.FromCenterExtent(this.ParentEnvironment.PlayableArea.Bounds.extents.x); + } + + break; + case Axis.Y_: + if (this.ParentEnvironment) { + this._observation_value_space = + Space1.FromCenterExtent(this.ParentEnvironment.PlayableArea.Bounds.extents.y); + } + + break; + case Axis.Z_: + if (this.ParentEnvironment) { + this._observation_value_space = + Space1.FromCenterExtent(this.ParentEnvironment.PlayableArea.Bounds.extents.z); + } + break; + } + } + } + + /// + /// + /// + /// + public override void UpdateObservation() { //TODO: IMPLEMENT LOCAL SPACE + switch (this._dim) { + case Axis.X_: + this.ObservationValue = this.transform.position.x; + break; + case Axis.Y_: + this.ObservationValue = this.transform.position.y; + break; + case Axis.Z_: + this.ObservationValue = this.transform.position.z; + break; + case Axis.Rot_x_: + this.ObservationValue = this.transform.rotation.eulerAngles.x; + break; + case Axis.Rot_y_: + this.ObservationValue = this.transform.rotation.eulerAngles.y; + break; + case Axis.Rot_z_: + this.ObservationValue = this.transform.rotation.eulerAngles.z; + break; + case Axis.Dir_x_: + this.ObservationValue = this.transform.forward.x; + break; + case Axis.Dir_y_: + this.ObservationValue = this.transform.forward.y; + break; + case Axis.Dir_z_: + this.ObservationValue = this.transform.forward.z; + break; + default: throw new ArgumentOutOfRangeException(); + } + } + + void OnDrawGizmos() { + if (this.enabled) { + var position = this.transform.position; + switch (this._dim) { + case Axis.Rot_x_: + case Axis.X_: + + Debug.DrawLine(position, position + Vector3.right * 2, Color.green); + break; + case Axis.Rot_y_: + case Axis.Y_: + + Debug.DrawLine(position, position + Vector3.up * 2, Color.green); + break; + case Axis.Rot_z_: + case Axis.Z_: + Debug.DrawLine(position, position + Vector3.forward * 2, Color.green); + break; + case Axis.Dir_x_: break; + case Axis.Dir_y_: break; + case Axis.Dir_z_: break; + default: //TODO add the Direction cases + Gizmos.DrawIcon(position, "console.warnicon", true); + break; + } + } + } + } +} diff --git a/Runtime/Prototyping/Observers/Transform/SingleAxisTransformObserver.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Transform/SingleAxisTransformSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Transform/SingleAxisTransformObserver.cs.meta rename to Runtime/Prototyping/Sensors/Spatial/Transform/SingleAxisTransformSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/SphericalCoordinateSensor.cs b/Runtime/Prototyping/Sensors/Spatial/Transform/SphericalCoordinateSensor.cs new file mode 100644 index 000000000..8667b56a7 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/SphericalCoordinateSensor.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Spatial.Transform { + public class SphericalCoordinateSensor : Sensor, + IHasDouble { + [SerializeField] + Space2 _spherical_space = new Space2 { + Min = Vector2.zero, + Max = new Vector2(Mathf.PI * 2f, Mathf.PI * 2f),DecimalGranularity = 4 + }; + + [SerializeField] SphericalSpace sc; + + public override void PrototypingReset() { + this.sc = SphericalSpace.FromCartesian(this.transform.position, + 3f, + 10f, + 0f, + Mathf.PI * 2f, + 0f, + Mathf.PI * 2f); + } + + public override IEnumerable FloatEnumerable { + get { return new[] {this.ObservationValue.x, this.ObservationValue.y}; } + } + + public override void UpdateObservation() { this.sc.UpdateFromCartesian(this.transform.position); } //TODO: IMPLEMENT LOCAL SPACE + public Vector2 ObservationValue { get { return this.sc.ToVector2; } } + public Space2 DoubleSpace { get { return this._spherical_space; } } + } +} diff --git a/Runtime/Prototyping/Sensors/Spatial/Transform/SphericalCoordinateSensor.cs.meta b/Runtime/Prototyping/Sensors/Spatial/Transform/SphericalCoordinateSensor.cs.meta new file mode 100644 index 000000000..900408bba --- /dev/null +++ b/Runtime/Prototyping/Sensors/Spatial/Transform/SphericalCoordinateSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe4169b6018e56f4bf3909d2aadf8a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Strings.meta b/Runtime/Prototyping/Sensors/Strings.meta new file mode 100644 index 000000000..b9a8ec765 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Strings.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 126e2ea7fe0f4b65aca6e9a7fdba2ed2 +timeCreated: 1567084759 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Strings/StringSensor.cs b/Runtime/Prototyping/Sensors/Strings/StringSensor.cs new file mode 100644 index 000000000..d4e46bc0c --- /dev/null +++ b/Runtime/Prototyping/Sensors/Strings/StringSensor.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Strings { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + "String" + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + public class StringSensor : Sensor, + IHasString { + [Header("Observation", order = 103)] + [SerializeField] + string _observation_value; + + /// + /// + /// + public String ObservationValue { + get { return this._observation_value; } + set { this._observation_value = value; } + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new float[] { }; } } + + /// + /// + /// + public override void UpdateObservation() { + this._observation_value = this.ParentEnvironment.StepI.ToString(); + } + } +} diff --git a/Runtime/Prototyping/Sensors/Strings/StringSensor.cs.meta b/Runtime/Prototyping/Sensors/Strings/StringSensor.cs.meta new file mode 100644 index 000000000..bdf10e3a2 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Strings/StringSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77ba1a3188024bb79d764296465695d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Observers/Camera.meta b/Runtime/Prototyping/Sensors/Visual.meta similarity index 100% rename from Runtime/Prototyping/Observers/Camera.meta rename to Runtime/Prototyping/Sensors/Visual.meta diff --git a/Runtime/Prototyping/Sensors/Visual/ByteArrayCameraSensor.cs b/Runtime/Prototyping/Sensors/Visual/ByteArrayCameraSensor.cs new file mode 100644 index 000000000..624ae4225 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/ByteArrayCameraSensor.cs @@ -0,0 +1,244 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.GameObjects.NeodroidCamera.Experimental; +using droid.Runtime.Interfaces; +using droid.Runtime.Managers; +using droid.Runtime.Utilities; +using UnityEngine; +using UnityEngine.Experimental.Rendering; + +namespace droid.Runtime.Prototyping.Sensors.Visual { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "ByteArrayCamera" + + SensorComponentMenuPath._Postfix)] + public class ByteArrayCameraSensor : Sensor, + IHasByteArray { + const TextureCreationFlags _flags = TextureCreationFlags.None; + bool _grab = true; + IManager _manager = null; + Texture2D _texture = null; + RenderTexture _rt; + + [Header("Specific", order = 102)] + [SerializeField] + Camera _camera = null; + + Byte[] _bytes = { }; + [SerializeField] Boolean linear_space; + [SerializeField] Camera disable_camera_when_unused; + + /// + /// + /// + public override void PreSetup() { + if (this._manager == null) { + this._manager = FindObjectOfType(); + } + + if (this._camera == null) { + this._camera = this.GetComponent(); + } + + if (this._texture) { + UnityHelpers.Destroy(this._texture); + } + + if (this._manager?.SimulatorConfiguration?.SimulationType != SimulationType.Frame_dependent_) { + if (this.disable_camera_when_unused) { + this._camera.enabled = false; + } + } + + var target_texture = this._camera.targetTexture; + if (!target_texture) { + #if NEODROID_DEBUG + Debug.LogWarning($"RenderTexture target not available on {this.Identifier} not available, allocating a default!"); + #endif + this._rt = new RenderTexture(NeodroidConstants._Default_Width, + NeodroidConstants._Default_Height, + 0, + RenderTextureFormat.ARGBFloat) { + filterMode = FilterMode.Point, + name = $"rt_{this.Identifier}", + enableRandomWrite = true + }; + this._rt.Create(); + this._camera.targetTexture = this._rt; + this._texture = new Texture2D(NeodroidConstants._Default_Width, + NeodroidConstants._Default_Height, + NeodroidConstants._Default_TextureFormat, + false, + this.linear_space); + } else { + this._texture = new Texture2D(target_texture.width, + target_texture.height, + target_texture.graphicsFormat, + _flags); + } + } + + void OnDestroy() { + if (this._rt) { + this._rt.Release(); + } + } + + /// + /// + /// + protected virtual void OnPostRender() { + if (this._manager?.SimulatorConfiguration?.SimulationType == SimulationType.Frame_dependent_) { + this.UpdateArray(); + } + #if NEODROID_DEBUG + if (this.Debugging) { + //Graphics.DrawTexture(new Rect(new Vector2(0, 0), new Vector2(256, 256)), this._texture); + } + #endif + } + + /// + /// + /// + protected virtual void UpdateArray() { + #if NEODROID_DEBUG + if (this.Debugging) { + this._grab = true; + } + #endif + + if (!this._grab && this._camera.targetTexture) { + return; + } + + this._grab = false; + + if (this._camera) { + var current_render_texture = RenderTexture.active; + var texture = this._camera.targetTexture; + RenderTexture.active = texture; + + this._texture.ReadPixels(new Rect(0, + 0, + this._texture.width, + this._texture.height), + 0, + 0, + recalculateMipMaps : false); + this.Bytes = this._texture.GetRawTextureData(); + RenderTexture.active = current_render_texture; + } else { + Debug.LogWarning($"No camera found on {this}"); + } + } + + /// + /// + /// + public override String PrototypingTypeName { get { return ""; } } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return new float[] { }; } } + + /// + /// + /// + public override void UpdateObservation() { + this._grab = true; + if (this._manager?.SimulatorConfiguration?.SimulationType != SimulationType.Frame_dependent_) { + if (Application.isPlaying) { + this._camera.Render(); + } + + this.UpdateArray(); + } + } + + /// + /// + /// + /// + public override string ToString() { + if (this.Bytes != null) { + var rep = $"Byte Array (Length: {this.Bytes.Length}), "; + if (this.Bytes.Length > 1) { + rep += $"Sample [{this.Bytes[0]}.." + $"{this.Bytes[this.Bytes.Length - 1]}]"; + } + + return rep; + } + + return "No data"; + } + + /// + /// + /// + public Byte[] Bytes { + get { return this._bytes; } + private set { + if (value != null) { + this._bytes = value; + } + } + } + + /// + /// + /// + public Int32[] Shape { + get { + int channels; + switch (this._texture.graphicsFormat) { + case GraphicsFormat.R8_UNorm: + case GraphicsFormat.R16_SFloat: + case GraphicsFormat.R32_SFloat: + channels = 1; + break; + //case GraphicsFormat.R32G32B32A32_SFloat: + //case GraphicsFormat.B8G8R8A8_UNorm: + //case GraphicsFormat.R16G16B16A16_SFloat: + default: + channels = 4; + break; + } + + return new[] {this._texture.width, this._texture.height, channels}; + } + } + + /// + /// + /// + public String ArrayEncoding { + get { + string s; + switch (this._texture.graphicsFormat) { + case GraphicsFormat.R8G8B8A8_UNorm: + case GraphicsFormat.R8_UInt: + s = "UINT8"; + break; + case GraphicsFormat.R16_SFloat: + case GraphicsFormat.R16G16B16A16_SFloat: + s = "FLOAT16"; + break; + case GraphicsFormat.R32_SFloat: + case GraphicsFormat.R32G32B32A32_SFloat: + s = "FLOAT32"; + break; + default: + s = "Unknown"; + break; + } + + return s; + } + } + } +} diff --git a/Runtime/Prototyping/Sensors/Visual/ByteArrayCameraSensor.cs.meta b/Runtime/Prototyping/Sensors/Visual/ByteArrayCameraSensor.cs.meta new file mode 100644 index 000000000..8b781a93e --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/ByteArrayCameraSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2fce5be366194edf81ec206b319817d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated.meta b/Runtime/Prototyping/Sensors/Visual/Deprecated.meta new file mode 100644 index 000000000..0066e20af --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cb802ff9f69a413da1db370a52b177e1 +timeCreated: 1559586784 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/EncodedCameraSensor.cs b/Runtime/Prototyping/Sensors/Visual/Deprecated/EncodedCameraSensor.cs new file mode 100644 index 000000000..01caab054 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/EncodedCameraSensor.cs @@ -0,0 +1,281 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Managers; +using droid.Runtime.Utilities; +using UnityEngine; +using UnityEngine.Experimental.Rendering; + +namespace droid.Runtime.Prototyping.Sensors.Visual.Deprecated { + /// + /// + enum ImageFormat { + /// + /// + Jpg_, + + /// + /// + Png_, + + /// + /// + Exr_, + + /// + /// + Tga_, + + /// + /// + Raw_ + } + + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "EncodedCamera" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [DisallowMultipleComponent] + [RequireComponent(typeof(Camera))] + public class EncodedCameraSensor : Sensor, + IHasByteArray { + /// + /// + [Header("Specific", order = 102)] + [SerializeField] + protected Camera _Camera; + + /// + /// + protected bool _Grab = true; + + /// + /// + [SerializeField] + ImageFormat imageFormat = ImageFormat.Png_; + + /// + /// + [SerializeField] + [Range(0, 100)] + int jpegQuality = 75; + + /// + /// + protected IManager _Manager = null; + + /// + /// + /// + public override string PrototypingTypeName { get { return ""; } } + + /// + /// + Texture2D _texture = null; + + [SerializeField] bool disable_encoding = false; + + /// + /// + /// + [field : Header("Observation", order = 103)] + public byte[] Bytes { get; private set; } = { }; + + /// + /// + /// + public GraphicsFormat DataType { + get { + return GraphicsFormat.None; //this.imageFormat; + } + } + + /// + /// + /// + public int[] Shape { + get { + var channels = 4; + if (this.imageFormat == ImageFormat.Jpg_) { + channels = 3; + } + + return new[] {this._texture.width, this._texture.height, channels}; + } + } + + /// + /// + /// + /// + public string ArrayEncoding { + get { + switch (this.imageFormat) { + case ImageFormat.Jpg_: + return "JPEG"; + case ImageFormat.Png_: + return "PNG"; + case ImageFormat.Exr_: + return "EXR"; + case ImageFormat.Tga_: + return "TGA"; + case ImageFormat.Raw_: + return "RAW"; + default: throw new ArgumentOutOfRangeException(); + } + } + } + + /// + /// + /// + public override void PreSetup() { + if (this._Manager == null) { + this._Manager = FindObjectOfType(); + } + + if (this._Camera == null) { + this._Camera = this.GetComponent(); + } + + if (this._Camera) { + var target_texture = this._Camera.targetTexture; + if (!target_texture) { + Debug.LogWarning($"No targetTexture defaulting to a texture of size ({NeodroidConstants._Default_Width}, {NeodroidConstants._Default_Height})"); + + this._texture = new Texture2D(NeodroidConstants._Default_Width, NeodroidConstants._Default_Height); + } else { + var texture_format_str = target_texture.format.ToString(); + if (Enum.TryParse(texture_format_str, out TextureFormat texture_format)) { + this._texture = new Texture2D(target_texture.width, + target_texture.height, + texture_format, + target_texture.useMipMap, + !target_texture.sRGB); + } else { + #if NEODROID_DEBUG + Debug.LogWarning($"Texture format {texture_format_str} is not a valid TextureFormat for Texture2D for sensor {this.Identifier}"); + #endif + } + } + } + #if NEODROID_DEBUG + if (this._Manager?.SimulatorConfiguration != null) { + if (this._Manager.SimulatorConfiguration.SimulationType != SimulationType.Frame_dependent_ + && Application.isEditor) { + //Debug.Log("Notice that camera observations may be out of sync with other observation data, because simulation configuration is not frame dependent"); + } + } + #endif + } + + /// + /// + protected virtual void OnPostRender() { this.UpdateBytes(); } + + /// + /// + /// + protected void UpdateBytes() { + if (!this._Grab) { + return; + } + + this._Grab = false; + + if (this._Camera) { + var current_render_texture = RenderTexture.active; + RenderTexture.active = this._Camera.targetTexture; + + if (this._texture) { + this._texture.ReadPixels(new Rect(0, + 0, + this._texture.width, + this._texture.height), + 0, + 0); + this._texture.Apply(); + } else { + #if NEODROID_DEBUG + Debug.LogWarning("Texture not available!"); + #endif + var target_texture = this._Camera.targetTexture; + this._texture = new Texture2D(target_texture.width, + target_texture.height, + NeodroidConstants._Default_TextureFormat, + false); + } + + if (!this.disable_encoding) { + switch (this.imageFormat) { + case ImageFormat.Jpg_: + this.Bytes = this._texture.EncodeToJPG(this.jpegQuality); + break; + case ImageFormat.Png_: + this.Bytes = this._texture.EncodeToPNG(); + break; + case ImageFormat.Exr_: + this.Bytes = this._texture.EncodeToEXR(); + break; + case ImageFormat.Tga_: + this.Bytes = this._texture.EncodeToTGA(); + break; + case ImageFormat.Raw_: + this.Bytes = this._texture.GetRawTextureData(); + break; + /*case ImageFormat.Ppm_: + // create a file header for ppm formatted file + string headerStr = string.Format("P6\n{0} {1}\n255\n", rect.width, rect.height); + fileHeader = System.Text.Encoding.ASCII.GetBytes(headerStr); + this.Bytes = _texture.GetRawTextureData(); + + new System.Threading.Thread(() => + { + // create file and write optional header with image bytes + var f = System.IO.File.Create(filename); + if (fileHeader != null) f.Write(fileHeader, 0, fileHeader.Length); + f.Write(fileData, 0, fileData.Length); + f.Close(); + Debug.Log(string.Format("Wrote screenshot {0} of size {1}", filename, fileData.Length)); + }).Start(); + */ + default: throw new ArgumentOutOfRangeException(); + } + } + + RenderTexture.active = current_render_texture; + } else { + Debug.LogWarning($"No camera found on {this}"); + } + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return null; } } + + /// + /// + /// + public override void UpdateObservation() { + this._Grab = true; + if (this._Manager?.SimulatorConfiguration?.SimulationType != SimulationType.Frame_dependent_) { + if (Application.isPlaying) { + this._Camera.Render(); + } + + this.UpdateBytes(); + } + } + + /// + /// + /// + /// + public override string ToString() { return $"Rendered {this.imageFormat} image"; } + } +} diff --git a/Runtime/Prototyping/Observers/Camera/CameraObserver.cs.meta b/Runtime/Prototyping/Sensors/Visual/Deprecated/EncodedCameraSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Camera/CameraObserver.cs.meta rename to Runtime/Prototyping/Sensors/Visual/Deprecated/EncodedCameraSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/FloatArrayCameraSensor.cs b/Runtime/Prototyping/Sensors/Visual/Deprecated/FloatArrayCameraSensor.cs new file mode 100644 index 000000000..8b57c34a5 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/FloatArrayCameraSensor.cs @@ -0,0 +1,144 @@ +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Managers; +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Visual.Deprecated { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "FloatArrayCamera" + + SensorComponentMenuPath._Postfix)] + public class FloatArrayCameraSensor : Sensor, + IHasFloatArray { + [SerializeField] bool _black_white = false; + + [Header("Specific", order = 102)] + [SerializeField] + Camera _camera = null; + + bool _grab = true; + + IManager _manager = null; + + [SerializeField] Texture2D _texture = null; + + /// + /// + /// + [field : Header("Observation", order = 103)] + public float[] ObservationArray { get; private set; } = null; + + /// + /// + /// + public Space1[] ObservationSpace { get { return new[] {Space1.ZeroOne}; } } + + /// + /// + /// + public override void PreSetup() { + if (this._manager == null) { + this._manager = FindObjectOfType(); + } + + if (this._camera == null) { + this._camera = this.GetComponent(); + } + + var target_texture = this._camera.targetTexture; + if (target_texture) { + this._texture = new Texture2D(target_texture.width, target_texture.height); + if (this._black_white) { + this.ObservationArray = new float[this._texture.width * this._texture.height * 1]; // *1 for clarity + } else { + this.ObservationArray = new float[this._texture.width * this._texture.height * 3]; + } + } else { + this.ObservationArray = new float[0]; + } + } + + /// + /// + /// + protected virtual void OnPostRender() { + if (this._camera.targetTexture) { + this.UpdateArray(); + } + } + + /// + /// + /// + protected virtual void UpdateArray() { + if (!this._grab) { + return; + } + + this._grab = false; + + var current_render_texture = RenderTexture.active; + var target_texture = this._camera.targetTexture; + RenderTexture.active = target_texture; + + this._texture.ReadPixels(new Rect(0, + 0, + target_texture.width, + target_texture.height), + 0, + 0); + this._texture.Apply(); + + if (!this._black_white) { + for (var w = 0; w < this._texture.width; w++) { + for (var h = 0; h < this._texture.height; h++) { + var c = this._texture.GetPixel(w, h); + this.ObservationArray[this._texture.width * w + h * 3] = c.r; + this.ObservationArray[this._texture.width * w + h * 3 + 1] = c.g; + this.ObservationArray[this._texture.width * w + h * 3 + 2] = c.b; + } + } + } else { + for (var w = 0; w < this._texture.width; w++) { + for (var h = 0; h < this._texture.height; h++) { + var c = this._texture.GetPixel(w, h); + this.ObservationArray[this._texture.width * w + h] = (c.r + c.g + c.b) / 3; + } + } + } + + RenderTexture.active = current_render_texture; + } + + /// + /// + /// + public override IEnumerable FloatEnumerable { get { return this.ObservationArray; } } + + /// + /// + /// + public override void UpdateObservation() { + #if NEODROID_DEBUG + if (this.Debugging) { + if (this._manager?.SimulatorConfiguration != null) { + if (this._manager.SimulatorConfiguration.SimulationType != SimulationType.Frame_dependent_) { + Debug.LogWarning("WARNING! Camera Observations may be out of sync other data"); + } + } + } + #endif + + this._grab = true; + var manager = this._manager; + if (manager != null + && manager.SimulatorConfiguration.SimulationType != SimulationType.Frame_dependent_) { + this.UpdateArray(); + } + } + } +} diff --git a/Runtime/Prototyping/Observers/Camera/FloatArrayCameraObserver.cs.meta b/Runtime/Prototyping/Sensors/Visual/Deprecated/FloatArrayCameraSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Camera/FloatArrayCameraObserver.cs.meta rename to Runtime/Prototyping/Sensors/Visual/Deprecated/FloatArrayCameraSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/NativeColorFloatArrayCameraSensor.cs b/Runtime/Prototyping/Sensors/Visual/Deprecated/NativeColorFloatArrayCameraSensor.cs new file mode 100644 index 000000000..3fd1431a2 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/NativeColorFloatArrayCameraSensor.cs @@ -0,0 +1,213 @@ +using System; +using System.Collections.Generic; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Managers; +using droid.Runtime.Structs.Space; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Visual.Deprecated { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "NativeColorArrayCamera" + + SensorComponentMenuPath._Postfix)] + public class NativeColorFloatArrayCameraSensor : Sensor, + IHasFloatArray { + [Header("Specific", order = 102)] + [SerializeField] + Camera _camera = null; + + bool _grab = true; + + IManager _manager = null; + + [SerializeField] Texture2D _texture = null; + + /// + /// + /// + [field : Header("Observation", order = 103)] + public float[] ObservationArray { get; private set; } + + /// + /// + /// + public Space1[] ObservationSpace { get { return new[] {Space1.ZeroOne}; } } + + /// + /// + /// + public override void PreSetup() { + if (this._manager == null) { + this._manager = FindObjectOfType(); + } + + if (this._camera == null) { + this._camera = this.GetComponent(); + } + + var target_texture = this._camera.targetTexture; + if (target_texture) { + this.ObservationArray = new float[target_texture.width * target_texture.height * 4]; + } else { + #if NEODROID_DEBUG + Debug.LogWarning("Texture not available!"); + #endif + this._texture = new Texture2D(NeodroidConstants._Default_Width, + NeodroidConstants._Default_Height, + NeodroidConstants._Default_TextureFormat, + false); + this.ObservationArray = new float[this._texture.width * this._texture.height * 4]; + } + } + + /// + /// + /// + protected virtual void OnPostRender() { + #if NEODROID_DEBUG + if (this.Debugging) { + this._grab = true; + } + #endif + if (this._camera.targetTexture) { + this.UpdateArray(); + } + #if NEODROID_DEBUG + if (this.Debugging) { + //Graphics.DrawTexture(new Rect(new Vector2(0, 0), new Vector2(256, 256)), this._texture); + } + #endif + } + + /// + /// + /// + protected virtual void UpdateArray() { + if (!this._grab) { + return; + } + + this._grab = false; + + if (this._camera) { + var current_render_texture = RenderTexture.active; + RenderTexture.active = this._camera.targetTexture; + + if (this._texture + && this._camera.targetTexture.width == this._texture.width + && this._camera.targetTexture.height == this._texture.height) { + this._texture.ReadPixels(new Rect(0, + 0, + this._texture.width, + this._texture.height), + 0, + 0); + //this._texture.Apply(); + } else { + #if NEODROID_DEBUG + Debug.LogWarning("Texture not available!"); + #endif + this._texture = new Texture2D(this._camera.targetTexture.width, + this._camera.targetTexture.height, + NeodroidConstants._Default_TextureFormat, + false); + this.ObservationArray = new float[this._texture.width * this._texture.height * 4]; + } + + //Texture2D texCopy = new Texture2D(_texture.width, _texture.height, _texture.format, _texture.mipmapCount > 1); + //texCopy.LoadRawTextureData(_texture.GetRawTextureData()); + //texCopy.Apply(); + //var a = texCopy.GetRawTextureData(); + var a = this._texture.GetRawTextureData(); + + #if NEODROID_DEBUG + var min = a[0]; + var max = a[0]; + + #endif + + var i = 0; +/* + foreach (var b in a) { + this.flat_float_array[i] = b.r; + this.flat_float_array[i + 1] = b.g; + this.flat_float_array[i + 2] = b.b; + this.flat_float_array[i + 3] = b.a; + i += 4; + } +*/ + for (var index = 0; index < a.Length; index++) { + var b = a[index]; + //i = index*4; + this.ObservationArray[i] = b.r; + this.ObservationArray[i + 1] = b.g; + this.ObservationArray[i + 2] = b.b; + this.ObservationArray[i + 3] = b.a; + i += 4; + + #if NEODROID_DEBUG + if (this.Debugging) { + max[0] = Mathf.Max(b[0], max[0]); + min[0] = Mathf.Min(b[0], min[0]); + max[1] = Mathf.Max(b[1], max[1]); + min[1] = Mathf.Min(b[1], min[1]); + max[2] = Mathf.Max(b[2], max[2]); + min[2] = Mathf.Min(b[2], min[2]); + max[3] = Mathf.Max(b[3], max[3]); + min[3] = Mathf.Min(b[3], min[3]); + } + #endif + } + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"len(a):{a.Length}, min:{min}, max:{max}"); + } + #endif + + RenderTexture.active = current_render_texture; + } else { + Debug.LogWarning($"No camera found on {this}"); + } + } + + /// + /// + /// + public override String PrototypingTypeName { get { return ""; } } + + public override IEnumerable FloatEnumerable { + get { return null; } //this.ObservationArray; } + } + + /// + /// + /// + public override void UpdateObservation() { + this._grab = true; + if (this._manager?.SimulatorConfiguration?.SimulationType != SimulationType.Frame_dependent_) { + if (Application.isPlaying) { + this._camera.Render(); + } + + this.UpdateArray(); + } + } + + /// + /// + /// + /// + public override string ToString() { + var rep = $"Float Array (Length: {this.ObservationArray.Length}), " + + $"Sample [{Mathf.Clamp01(this.ObservationArray[0])}.." + + $"{Mathf.Clamp01(this.ObservationArray[this.ObservationArray.Length - 1])}]"; + + return rep; + } + } +} diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/NativeColorFloatArrayCameraSensor.cs.meta b/Runtime/Prototyping/Sensors/Visual/Deprecated/NativeColorFloatArrayCameraSensor.cs.meta new file mode 100644 index 000000000..5268b86b5 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/NativeColorFloatArrayCameraSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2a9ad1dd275438d95094ed0f6b885c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation.meta b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation.meta new file mode 100644 index 000000000..a52704cf5 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: be101edf785e4d1dbdf89cb0e03f62cc +timeCreated: 1538075904 \ No newline at end of file diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationEncodedCameraSensor.cs b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationEncodedCameraSensor.cs new file mode 100644 index 000000000..05005c420 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationEncodedCameraSensor.cs @@ -0,0 +1,33 @@ +using System.Linq; +using droid.Runtime.GameObjects.NeodroidCamera.Segmentation; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Visual.Deprecated.Segmentation { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "SegmentationCamera" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(Camera), typeof(Segmenter))] + public class SegmentationEncodedCameraSensor : StringAugmentedEncodedCameraSensor { + /// + /// + [SerializeField] + Segmenter _segmenter = null; + + /// + /// + /// + public override void UpdateObservation() { + base.UpdateObservation(); + + Debug.LogWarning(JsonUtility.ToJson(this._segmenter.ColorsDict)); + this.serialised_string = this._segmenter != null + ? this._segmenter.ColorsDict.Select(c => $"{c.Key}: {c.Value.ToString()}") + .Aggregate("", (current, next) => $"{current}, {next}") + : "Nothing"; + } + } +} diff --git a/Runtime/Prototyping/Observers/Camera/SegmentationCameraObserver.cs.meta b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationEncodedCameraSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Camera/SegmentationCameraObserver.cs.meta rename to Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationEncodedCameraSensor.cs.meta diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationSensor.cs b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationSensor.cs new file mode 100644 index 000000000..7f4fc470c --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationSensor.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.GameObjects.NeodroidCamera.Segmentation; +using droid.Runtime.Prototyping.Sensors.Strings; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Visual.Deprecated.Segmentation { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "Segmentation" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(Segmenter))] + public class SegmentationSensor : StringSensor { + /// + /// + [SerializeField] + Segmenter _segmenter = null; + + public override IEnumerable FloatEnumerable { get { return new List(); } } + + /// + /// + /// + public override void UpdateObservation() { + this.ObservationValue = this._segmenter != null + ? this._segmenter.ColorsDict.Select(c => $"{c.Key}: {c.Value.ToString()}") + .Aggregate("", + (current, next) => + current != "" ? $"{current}, {next}" : $"{next}") + : "Nothing"; + //TODO:ADD this Type(COLOR) and ColorDict as serialisation option instead of a string +/* if (this._segmenter != null) { + this.ObservationValue += $", Outline: {this._segmenter.OutlineColor.ToString()}"; + } + */ + } + + /// + /// + /// + /// + public override String ToString() { return this.ObservationValue; } + } +} diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationSensor.cs.meta b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationSensor.cs.meta new file mode 100644 index 000000000..be418d8b2 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/Segmentation/SegmentationSensor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1003e9e65c5a4495a80b404ca321593b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fa2530ece249847448409133a5495ad9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Prototyping/Sensors/Visual/Deprecated/StringAugmentedEncodedCameraSensor.cs b/Runtime/Prototyping/Sensors/Visual/Deprecated/StringAugmentedEncodedCameraSensor.cs new file mode 100644 index 000000000..39c9875b7 --- /dev/null +++ b/Runtime/Prototyping/Sensors/Visual/Deprecated/StringAugmentedEncodedCameraSensor.cs @@ -0,0 +1,66 @@ +using System; +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Sensors.Visual.Deprecated { + /// + /// + /// + [AddComponentMenu(SensorComponentMenuPath._ComponentMenuPath + + "StringAugmentedCamera" + + SensorComponentMenuPath._Postfix)] + [ExecuteInEditMode] + [RequireComponent(typeof(Camera))] + public class StringAugmentedEncodedCameraSensor : EncodedCameraSensor, + IHasString { + const string _color_identifier = "Colors"; + + string _colors; + + /// + /// + [Header("Observation", order = 103)] + [SerializeField] + protected string serialised_string; + + /// + /// + public String ObservationValue { get { return this.serialised_string; } } + + /// + /// + /// + public override void PreSetup() { + base.PreSetup(); + this._colors = this.Identifier + _color_identifier; + } + + /// + /// + /// + protected override void RegisterComponent() { + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this, this.Identifier); + + this.ParentEnvironment = + NeodroidRegistrationUtilities.RegisterComponent(this.ParentEnvironment, this, this._colors); + } + + /// + /// + /// + protected override void UnRegisterComponent() { + this.ParentEnvironment?.UnRegister(this, this.Identifier); + this.ParentEnvironment?.UnRegister(this, this._colors); + } + + /// + /// + /// + public override void UpdateObservation() { + base.UpdateObservation(); + this.serialised_string = ""; + } + } +} diff --git a/Runtime/Prototyping/Observers/Camera/StringAugmentedCameraObserver.cs.meta b/Runtime/Prototyping/Sensors/Visual/Deprecated/StringAugmentedEncodedCameraSensor.cs.meta similarity index 100% rename from Runtime/Prototyping/Observers/Camera/StringAugmentedCameraObserver.cs.meta rename to Runtime/Prototyping/Sensors/Visual/Deprecated/StringAugmentedEncodedCameraSensor.cs.meta diff --git a/Runtime/Prototyping/Internals.meta b/Runtime/Prototyping/Unobservables.meta similarity index 100% rename from Runtime/Prototyping/Internals.meta rename to Runtime/Prototyping/Unobservables.meta diff --git a/Runtime/Prototyping/Unobservables/ActionCounter.cs b/Runtime/Prototyping/Unobservables/ActionCounter.cs new file mode 100644 index 000000000..5fb7e4120 --- /dev/null +++ b/Runtime/Prototyping/Unobservables/ActionCounter.cs @@ -0,0 +1,56 @@ +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Unobservables { + /// + /// + /// + public class ActionCounter : Unobservable { + [SerializeField] ISpatialPrototypingEnvironment _environment; + + /// + /// + public ISpatialPrototypingEnvironment ParentEnvironment { + get { return this._environment; } + set { this._environment = value; } + } + + /// + /// + /// + public override string PrototypingTypeName { get { return "ActionCounter"; } } + + /// + /// + /// + protected override void Clear() { } + + /// + /// + void HandleStep() { + var reaction = this._environment.LastReaction; + var motions = reaction.Motions; + //TODO: implement + } + + /// + /// + /// + public override void PrototypingReset() { } + + /// + /// + /// + public override void PreStep() { } + + /// + /// + /// + public override void Step() { this.HandleStep(); } + + /// + /// + /// + public override void PostStep() { } + } +} diff --git a/Runtime/Prototyping/Internals/ActionCounter.cs.meta b/Runtime/Prototyping/Unobservables/ActionCounter.cs.meta similarity index 100% rename from Runtime/Prototyping/Internals/ActionCounter.cs.meta rename to Runtime/Prototyping/Unobservables/ActionCounter.cs.meta diff --git a/Runtime/Prototyping/Unobservables/ObservablesComponentMenuPath.cs b/Runtime/Prototyping/Unobservables/ObservablesComponentMenuPath.cs new file mode 100644 index 000000000..cb62c3d6f --- /dev/null +++ b/Runtime/Prototyping/Unobservables/ObservablesComponentMenuPath.cs @@ -0,0 +1,14 @@ +namespace droid.Runtime.Prototyping.Unobservables { + /// + /// + public static class ObservablesComponentMenuPath { + /// + /// + public const string _ComponentMenuPath = + PrototypingComponentMenuPath._ComponentMenuPath + "Unobservables/"; + + /// + /// + public const string _Postfix = "Unobservable"; + } +} diff --git a/Runtime/Prototyping/Internals/ResetableComponentMenuPath.cs.meta b/Runtime/Prototyping/Unobservables/ObservablesComponentMenuPath.cs.meta similarity index 100% rename from Runtime/Prototyping/Internals/ResetableComponentMenuPath.cs.meta rename to Runtime/Prototyping/Unobservables/ObservablesComponentMenuPath.cs.meta diff --git a/Runtime/Prototyping/Unobservables/README.md b/Runtime/Prototyping/Unobservables/README.md new file mode 100644 index 000000000..02bcafbfe --- /dev/null +++ b/Runtime/Prototyping/Unobservables/README.md @@ -0,0 +1,3 @@ +# Unobservables + +Unobservables offers a way of tracking internal states for later reinitialisation diff --git a/Runtime/Prototyping/Unobservables/README.md.meta b/Runtime/Prototyping/Unobservables/README.md.meta new file mode 100644 index 000000000..988da24e6 --- /dev/null +++ b/Runtime/Prototyping/Unobservables/README.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ec642452a53c4780b7156f30e8b96aa6 +timeCreated: 1568295861 \ No newline at end of file diff --git a/Runtime/Prototyping/Internals/StateValidation.meta b/Runtime/Prototyping/Unobservables/StateValidation.meta similarity index 100% rename from Runtime/Prototyping/Internals/StateValidation.meta rename to Runtime/Prototyping/Unobservables/StateValidation.meta diff --git a/Runtime/Prototyping/Unobservables/StateValidation/EnsureValidState.cs b/Runtime/Prototyping/Unobservables/StateValidation/EnsureValidState.cs new file mode 100644 index 000000000..c905234e1 --- /dev/null +++ b/Runtime/Prototyping/Unobservables/StateValidation/EnsureValidState.cs @@ -0,0 +1,99 @@ +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects.BoundingBoxes; +using droid.Runtime.Prototyping.Actors; +using droid.Runtime.Utilities.Extensions; +using UnityEngine; + +namespace droid.Runtime.Prototyping.Unobservables.StateValidation { + /// + /// + /// + public class EnsureValidState : Unobservable { + [SerializeField] Actor _actor; + + [SerializeField] AbstractSpatialPrototypingEnvironment _environment; + [SerializeField] Transform _goal; + + [SerializeField] Obstruction[] _obstructions; + [SerializeField] bool _only_initial_state = true; + + [SerializeField] BoundingBox _playable_area; + + /// + /// + /// + public override string PrototypingTypeName { get { return "ValidityChecker"; } } + + /// + /// + /// + protected override void Clear() { + if (!this._goal) { + this._goal = FindObjectOfType(); + } + + if (!this._actor) { + this._actor = FindObjectOfType(); + } + + if (!this._environment) { + this._environment = FindObjectOfType(); + } + + if (this._obstructions.Length <= 0) { + this._obstructions = FindObjectsOfType(); + } + + if (!this._playable_area) { + this._playable_area = FindObjectOfType(); + } + } + + /// + /// + void ValidateState() { + if (this._only_initial_state && this._environment.StepI != 0) { + return; + } + + if (this._playable_area != null && !this._playable_area.Bounds.Intersects(this._actor.ActorBounds)) { + this._environment.Terminate("Actor outside playable area"); + } + + if (this._playable_area != null + && !this._playable_area.Bounds.Intersects(this._goal.GetComponent().bounds)) { + this._environment.Terminate("Goal outside playable area"); + } + + foreach (var obstruction in this._obstructions) { + if (obstruction != null + && obstruction.GetComponent().bounds.Intersects(this._actor.ActorBounds)) { + this._environment.Terminate("Actor overlapping obstruction"); + } + + if (obstruction != null + && obstruction.GetComponent().bounds + .Intersects(this._goal.GetComponent().bounds)) { + this._environment.Terminate("Goal overlapping obstruction"); + } + } + } + + public override void PrototypingReset() { } + + /// + /// + /// + public override void PreStep() { this.ValidateState(); } + + /// + /// + /// + public override void Step() { this.ValidateState(); } + + /// + /// + /// + public override void PostStep() { this.ValidateState(); } + } +} diff --git a/Runtime/Prototyping/Internals/StateValidation/EnsureValidState.cs.meta b/Runtime/Prototyping/Unobservables/StateValidation/EnsureValidState.cs.meta similarity index 100% rename from Runtime/Prototyping/Internals/StateValidation/EnsureValidState.cs.meta rename to Runtime/Prototyping/Unobservables/StateValidation/EnsureValidState.cs.meta diff --git a/Runtime/Prototyping/Unobservables/TransformUnobservable.cs b/Runtime/Prototyping/Unobservables/TransformUnobservable.cs new file mode 100644 index 000000000..a4d56df39 --- /dev/null +++ b/Runtime/Prototyping/Unobservables/TransformUnobservable.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +namespace droid.Runtime.Prototyping.Unobservables { + /// + /// + /// + [AddComponentMenu(ObservablesComponentMenuPath._ComponentMenuPath + + "Transform" + + ObservablesComponentMenuPath._Postfix)] + public class TransformUnobservable : Unobservable { + /// + /// + Vector3 _original_position; + + /// + /// + Quaternion _original_rotation; + + /// + /// + /// + public override string PrototypingTypeName { get { return "Transform"; } } + + /// + /// + /// + public override void PrototypingReset() { + this.transform.position = this._original_position; + this.transform.rotation = this._original_rotation; + } + + /// + /// + public override void Setup() { + this._original_position = this.transform.position; + this._original_rotation = this.transform.rotation; + } + } +} diff --git a/Runtime/Prototyping/Internals/TransformResetable.cs.meta b/Runtime/Prototyping/Unobservables/TransformUnobservable.cs.meta similarity index 100% rename from Runtime/Prototyping/Internals/TransformResetable.cs.meta rename to Runtime/Prototyping/Unobservables/TransformUnobservable.cs.meta diff --git a/Runtime/Prototyping/Unobservables/Unobservable.cs b/Runtime/Prototyping/Unobservables/Unobservable.cs new file mode 100644 index 000000000..17e5ccd4b --- /dev/null +++ b/Runtime/Prototyping/Unobservables/Unobservable.cs @@ -0,0 +1,56 @@ +using System; +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects; +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities; + +namespace droid.Runtime.Prototyping.Unobservables { + /// + /// + /// + public abstract class Unobservable : PrototypingGameObject, + IUnobservable { + /// + /// + public AbstractSpatialPrototypingEnvironment _Parent_Environment; + + /// + /// + public abstract override String PrototypingTypeName { get; } + + + /// + /// + /// + public virtual void PreStep() { } + + /// + /// + /// + public virtual void Step() { } + + /// + /// + /// + public virtual void PostStep() { } + + /// + /// + /// + protected override void RegisterComponent() { + this._Parent_Environment = + NeodroidRegistrationUtilities.RegisterComponent(this._Parent_Environment, this); + + if (this._Parent_Environment != null) { + this._Parent_Environment.PreStepEvent += this.PreStep; + this._Parent_Environment.StepEvent += this.Step; + this._Parent_Environment.PostStepEvent += this.PostStep; + } + } + + /// + /// + /// + protected override void UnRegisterComponent() { this._Parent_Environment?.UnRegister(this); } + } +} diff --git a/Runtime/Prototyping/Internals/Resetable.cs.meta b/Runtime/Prototyping/Unobservables/Unobservable.cs.meta similarity index 100% rename from Runtime/Prototyping/Internals/Resetable.cs.meta rename to Runtime/Prototyping/Unobservables/Unobservable.cs.meta diff --git a/Runtime/RenderTextures/Experimental/CustomRenderTexture.asset b/Runtime/RenderTextures/Experimental/CustomRenderTexture.asset deleted file mode 100644 index d30078526..000000000 --- a/Runtime/RenderTextures/Experimental/CustomRenderTexture.asset +++ /dev/null @@ -1,48 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!86 &8600000 -CustomRenderTexture: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: CustomRenderTexture - m_ImageContentsHash: - serializedVersion: 2 - Hash: 00000000000000000000000000000000 - m_ForcedFallbackFormat: 4 - m_DownscaleFallback: 0 - m_Width: 256 - m_Height: 256 - m_AntiAliasing: 1 - m_DepthFormat: 0 - m_ColorFormat: 0 - m_MipMap: 0 - m_GenerateMips: 1 - m_SRGB: 0 - m_UseDynamicScale: 0 - m_BindMS: 0 - m_TextureSettings: - serializedVersion: 2 - m_FilterMode: 1 - m_Aniso: 1 - m_MipBias: 0 - m_WrapU: 1 - m_WrapV: 1 - m_WrapW: 1 - m_Dimension: 2 - m_VolumeDepth: 1 - m_Material: {fileID: 0} - m_InitSource: 0 - m_InitMaterial: {fileID: 0} - m_InitColor: {r: 1, g: 1, b: 1, a: 1} - m_InitTexture: {fileID: 0} - m_UpdateMode: 2 - m_InitializationMode: 2 - m_UpdateZoneSpace: 0 - m_CurrentUpdateZoneSpace: 0 - m_UpdateZones: [] - m_UpdatePeriod: 0 - m_ShaderPass: 0 - m_CubemapFaceMask: 4294967295 - m_DoubleBuffered: 0 - m_WrapUpdateZones: 0 diff --git a/Runtime/Resources.meta b/Runtime/Resources.meta new file mode 100644 index 000000000..fc8a7dab9 --- /dev/null +++ b/Runtime/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0e97a33067c794add9cb64f08159d17f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Flares.meta b/Runtime/Resources/Flares.meta similarity index 100% rename from Runtime/Flares.meta rename to Runtime/Resources/Flares.meta diff --git a/Runtime/Flares/SunFlare.flare b/Runtime/Resources/Flares/SunFlare.flare similarity index 95% rename from Runtime/Flares/SunFlare.flare rename to Runtime/Resources/Flares/SunFlare.flare index 4f0717d7c..51eb275e9 100644 --- a/Runtime/Flares/SunFlare.flare +++ b/Runtime/Resources/Flares/SunFlare.flare @@ -1,175 +1,175 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!121 &12100000 -Flare: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: SunFlare - m_FlareTexture: {fileID: 2800000, guid: 3db965b2ade7df541afd57470f02dc2c, type: 3} - m_TextureLayout: 0 - m_Elements: - - m_ImageIndex: 0 - m_Position: 0 - m_Size: 38.2 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 1 - m_Position: 0 - m_Size: 74.1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_UseLightColor: 0 - m_Rotate: 0 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 0.2 - m_Size: 29 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 0.2 - m_Size: 9.4 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: -0.5 - m_Size: 12.27 - m_Color: {r: 0.24615383, g: 0.24615383, b: 0.24615383, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 0.3 - m_Size: 8 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 3 - m_Position: 0.3 - m_Size: 26.6 - m_Color: {r: 0.09230769, g: 0.09230769, b: 0.09230769, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 3 - m_Position: 2 - m_Size: 40 - m_Color: {r: 0.07692307, g: 0.07692307, b: 0.07692307, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 4 - m_Position: 1.5 - m_Size: 10 - m_Color: {r: 0.05384618, g: 0.05384618, b: 0.05384618, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 4 - m_Position: 1 - m_Size: 20 - m_Color: {r: 0.0153846145, g: 0.0153846145, b: 0.0153846145, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 4 - m_Position: -0.25 - m_Size: 10 - m_Color: {r: 0.123076916, g: 0.123076916, b: 0.123076916, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 1 - m_Size: 3.33 - m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 1.4 - m_Size: 2.66 - m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 1.3 - m_Size: 3.33 - m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 1.75 - m_Size: 10 - m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 2 - m_Size: 1.33 - m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: -0.5 - m_Size: 3.33 - m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 1.65 - m_Size: 5.33 - m_Color: {r: 0.1076923, g: 0.1076923, b: 0.1076923, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 0.5 - m_Size: 6.66 - m_Color: {r: 0.13846153, g: 0.13846153, b: 0.13846153, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - - m_ImageIndex: 2 - m_Position: 0.4 - m_Size: 2 - m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} - m_UseLightColor: 0 - m_Rotate: 1 - m_Zoom: 1 - m_Fade: 1 - m_UseFog: 0 ---- !u!1002 &12100001 -EditorExtensionImpl: - serializedVersion: 6 +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!121 &12100000 +Flare: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: SunFlare + m_FlareTexture: {fileID: 2800000, guid: 3db965b2ade7df541afd57470f02dc2c, type: 3} + m_TextureLayout: 0 + m_Elements: + - m_ImageIndex: 0 + m_Position: 0 + m_Size: 38.2 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 1 + m_Position: 0 + m_Size: 74.1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_UseLightColor: 0 + m_Rotate: 0 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 0.2 + m_Size: 29 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 0.2 + m_Size: 9.4 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: -0.5 + m_Size: 12.27 + m_Color: {r: 0.24615383, g: 0.24615383, b: 0.24615383, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 0.3 + m_Size: 8 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 3 + m_Position: 0.3 + m_Size: 26.6 + m_Color: {r: 0.09230769, g: 0.09230769, b: 0.09230769, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 3 + m_Position: 2 + m_Size: 40 + m_Color: {r: 0.07692307, g: 0.07692307, b: 0.07692307, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 4 + m_Position: 1.5 + m_Size: 10 + m_Color: {r: 0.05384618, g: 0.05384618, b: 0.05384618, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 4 + m_Position: 1 + m_Size: 20 + m_Color: {r: 0.0153846145, g: 0.0153846145, b: 0.0153846145, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 4 + m_Position: -0.25 + m_Size: 10 + m_Color: {r: 0.123076916, g: 0.123076916, b: 0.123076916, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 1 + m_Size: 3.33 + m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 1.4 + m_Size: 2.66 + m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 1.3 + m_Size: 3.33 + m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 1.75 + m_Size: 10 + m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 2 + m_Size: 1.33 + m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: -0.5 + m_Size: 3.33 + m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 1.65 + m_Size: 5.33 + m_Color: {r: 0.1076923, g: 0.1076923, b: 0.1076923, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 0.5 + m_Size: 6.66 + m_Color: {r: 0.13846153, g: 0.13846153, b: 0.13846153, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + - m_ImageIndex: 2 + m_Position: 0.4 + m_Size: 2 + m_Color: {r: 0.3230769, g: 0.3230769, b: 0.3230769, a: 1} + m_UseLightColor: 0 + m_Rotate: 1 + m_Zoom: 1 + m_Fade: 1 + m_UseFog: 0 +--- !u!1002 &12100001 +EditorExtensionImpl: + serializedVersion: 6 diff --git a/Runtime/Flares/SunFlare.flare.meta b/Runtime/Resources/Flares/SunFlare.flare.meta similarity index 100% rename from Runtime/Flares/SunFlare.flare.meta rename to Runtime/Resources/Flares/SunFlare.flare.meta diff --git a/Runtime/Flares/Texture.meta b/Runtime/Resources/Flares/Texture.meta similarity index 100% rename from Runtime/Flares/Texture.meta rename to Runtime/Resources/Flares/Texture.meta diff --git a/Runtime/Flares/Texture/SunFlareTexture.psd b/Runtime/Resources/Flares/Texture/SunFlareTexture.psd similarity index 100% rename from Runtime/Flares/Texture/SunFlareTexture.psd rename to Runtime/Resources/Flares/Texture/SunFlareTexture.psd diff --git a/Runtime/Flares/Texture/SunFlareTexture.psd.meta b/Runtime/Resources/Flares/Texture/SunFlareTexture.psd.meta similarity index 100% rename from Runtime/Flares/Texture/SunFlareTexture.psd.meta rename to Runtime/Resources/Flares/Texture/SunFlareTexture.psd.meta diff --git a/Runtime/Fonts.meta b/Runtime/Resources/Fonts.meta similarity index 100% rename from Runtime/Fonts.meta rename to Runtime/Resources/Fonts.meta diff --git a/Runtime/Fonts/Bangers.ttf b/Runtime/Resources/Fonts/Bangers.ttf similarity index 100% rename from Runtime/Fonts/Bangers.ttf rename to Runtime/Resources/Fonts/Bangers.ttf diff --git a/Runtime/Fonts/Bangers.ttf.meta b/Runtime/Resources/Fonts/Bangers.ttf.meta similarity index 100% rename from Runtime/Fonts/Bangers.ttf.meta rename to Runtime/Resources/Fonts/Bangers.ttf.meta diff --git a/Runtime/Fonts/LemonMilk.otf b/Runtime/Resources/Fonts/LemonMilk.otf similarity index 100% rename from Runtime/Fonts/LemonMilk.otf rename to Runtime/Resources/Fonts/LemonMilk.otf diff --git a/Runtime/Fonts/LemonMilk.otf.meta b/Runtime/Resources/Fonts/LemonMilk.otf.meta similarity index 100% rename from Runtime/Fonts/LemonMilk.otf.meta rename to Runtime/Resources/Fonts/LemonMilk.otf.meta diff --git a/Runtime/Fonts/LiberationSans.ttf b/Runtime/Resources/Fonts/LiberationSans.ttf similarity index 100% rename from Runtime/Fonts/LiberationSans.ttf rename to Runtime/Resources/Fonts/LiberationSans.ttf diff --git a/Runtime/Fonts/LiberationSans.ttf.meta b/Runtime/Resources/Fonts/LiberationSans.ttf.meta similarity index 100% rename from Runtime/Fonts/LiberationSans.ttf.meta rename to Runtime/Resources/Fonts/LiberationSans.ttf.meta diff --git a/Runtime/Materials.meta b/Runtime/Resources/Materials.meta similarity index 100% rename from Runtime/Materials.meta rename to Runtime/Resources/Materials.meta diff --git a/Runtime/Materials/Misc.meta b/Runtime/Resources/Materials/Misc.meta similarity index 100% rename from Runtime/Materials/Misc.meta rename to Runtime/Resources/Materials/Misc.meta diff --git a/Runtime/Materials/Misc/BoundingBoxLineMaterial.mat b/Runtime/Resources/Materials/Misc/BoundingBoxLineMaterial.mat similarity index 100% rename from Runtime/Materials/Misc/BoundingBoxLineMaterial.mat rename to Runtime/Resources/Materials/Misc/BoundingBoxLineMaterial.mat diff --git a/Runtime/Materials/Misc/BoundingBoxLineMaterial.mat.meta b/Runtime/Resources/Materials/Misc/BoundingBoxLineMaterial.mat.meta similarity index 100% rename from Runtime/Materials/Misc/BoundingBoxLineMaterial.mat.meta rename to Runtime/Resources/Materials/Misc/BoundingBoxLineMaterial.mat.meta diff --git a/Runtime/Materials/Misc/BunnyHat.mat b/Runtime/Resources/Materials/Misc/BunnyHat.mat similarity index 100% rename from Runtime/Materials/Misc/BunnyHat.mat rename to Runtime/Resources/Materials/Misc/BunnyHat.mat diff --git a/Runtime/Materials/Misc/BunnyHat.mat.meta b/Runtime/Resources/Materials/Misc/BunnyHat.mat.meta similarity index 100% rename from Runtime/Materials/Misc/BunnyHat.mat.meta rename to Runtime/Resources/Materials/Misc/BunnyHat.mat.meta diff --git a/Runtime/Resources/Materials/Misc/Experimental.meta b/Runtime/Resources/Materials/Misc/Experimental.meta new file mode 100644 index 000000000..0bcaae95a --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3138f8eb54f3c023fac7485a68ff6053 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Misc/Experimental/EdgeHighlight.mat b/Runtime/Resources/Materials/Misc/Experimental/EdgeHighlight.mat new file mode 100644 index 000000000..c78cd903b --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental/EdgeHighlight.mat @@ -0,0 +1,92 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: EdgeHighlight + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Normal: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _MaxTriSize: 200 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Treshold: 0.2 + - _UVSec: 0 + - _WireSmoothness: 9.75 + - _WireThickness: 477 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0, g: 0, b: 0, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _OccludedColor: {r: 1, g: 1, b: 1, a: 1} + - _WireColor: {r: 0, g: 1, b: 0, a: 1} diff --git a/Runtime/Resources/Materials/Misc/Experimental/EdgeHighlight.mat.meta b/Runtime/Resources/Materials/Misc/Experimental/EdgeHighlight.mat.meta new file mode 100644 index 000000000..55d311ae8 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental/EdgeHighlight.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3963a01db839d1a688d046d735f1ca15 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Misc/Experimental/OcclusionSharedMat1.mat b/Runtime/Resources/Materials/Misc/Experimental/OcclusionSharedMat1.mat new file mode 100644 index 000000000..cc661ed42 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental/OcclusionSharedMat1.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OcclusionSharedMat1 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 0.25276557, y: 0.73734707} + m_Offset: {x: 0.27222002, y: 0.6370781} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.38672072 + - _GlossyReflections: 0.5988199 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.29295963, g: 0.35027504, b: 0.32965735, a: 0.20958106} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Runtime/Resources/Materials/Misc/Experimental/OcclusionSharedMat1.mat.meta b/Runtime/Resources/Materials/Misc/Experimental/OcclusionSharedMat1.mat.meta new file mode 100644 index 000000000..42eda0fec --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental/OcclusionSharedMat1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7bc9ae29014cf4c9aa3e8a67cbb43da +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Misc/Experimental/PlainOldStandard.mat b/Runtime/Resources/Materials/Misc/Experimental/PlainOldStandard.mat new file mode 100644 index 000000000..e4153ce27 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental/PlainOldStandard.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PlainOldStandard + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 909bf35a7d28f0b5097f8526925dfdd0, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0.322 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Runtime/Resources/Materials/Misc/Experimental/PlainOldStandard.mat.meta b/Runtime/Resources/Materials/Misc/Experimental/PlainOldStandard.mat.meta new file mode 100644 index 000000000..baa896743 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental/PlainOldStandard.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c28416b42c2fd2e2b912af75f5ce2399 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Misc/Experimental/UberMaterial.mat b/Runtime/Resources/Materials/Misc/Experimental/UberMaterial.mat new file mode 100644 index 000000000..e0ff19d53 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental/UberMaterial.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UberMaterial + m_Shader: {fileID: 4800000, guid: 9ef031f3fb374c09be803378295ffba1, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Compression_Factor: 0.25 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Sensitivity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _from_center_span_div_2: {r: 10, g: 10, b: 10, a: 10} diff --git a/Runtime/Resources/Materials/Misc/Experimental/UberMaterial.mat.meta b/Runtime/Resources/Materials/Misc/Experimental/UberMaterial.mat.meta new file mode 100644 index 000000000..604f16c62 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Experimental/UberMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d21e376fa75b0e1d0a77b60ca1301d3b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Misc/Gradient.meta b/Runtime/Resources/Materials/Misc/Gradient.meta new file mode 100644 index 000000000..3d5c3ccdc --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Gradient.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eeb504f4ee64ebfc68afffb34db1fc8d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Misc/Gradient/PearlWhiteGradient 1.mat b/Runtime/Resources/Materials/Misc/Gradient/PearlWhiteGradient 1.mat new file mode 100644 index 000000000..673461588 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Gradient/PearlWhiteGradient 1.mat @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PearlWhiteGradient 1 + m_Shader: {fileID: 4800000, guid: 46d979d8776b41498142bf24c51e2d09, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Main: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Gradient: 1.54 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorBottom: {r: 0.8867924, g: 0.8366287, b: 0.70274115, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Runtime/Resources/Materials/Misc/Gradient/PearlWhiteGradient 1.mat.meta b/Runtime/Resources/Materials/Misc/Gradient/PearlWhiteGradient 1.mat.meta new file mode 100644 index 000000000..3895d89e0 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Gradient/PearlWhiteGradient 1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 658c31bb8521fd25f97f8f09440d6d05 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Misc/Gradient/redGradient.mat b/Runtime/Resources/Materials/Misc/Gradient/redGradient.mat new file mode 100644 index 000000000..adb30ca97 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Gradient/redGradient.mat @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: redGradient + m_Shader: {fileID: 4800000, guid: 46d979d8776b41498142bf24c51e2d09, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Main: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Gradient: 1.54 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.9716981, g: 0.19708972, b: 0.19708972, a: 1} + - _ColorBottom: {r: 0.8207547, g: 0.22622171, b: 0.14711642, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Runtime/Resources/Materials/Misc/Gradient/redGradient.mat.meta b/Runtime/Resources/Materials/Misc/Gradient/redGradient.mat.meta new file mode 100644 index 000000000..7cef46460 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Gradient/redGradient.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d36bcde38339b089fa95fd9abe5da8a3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Materials/Misc/NeodroidLogo.mat b/Runtime/Resources/Materials/Misc/NeodroidLogo.mat similarity index 100% rename from Runtime/Materials/Misc/NeodroidLogo.mat rename to Runtime/Resources/Materials/Misc/NeodroidLogo.mat diff --git a/Runtime/Materials/Misc/NeodroidLogo.mat.meta b/Runtime/Resources/Materials/Misc/NeodroidLogo.mat.meta similarity index 100% rename from Runtime/Materials/Misc/NeodroidLogo.mat.meta rename to Runtime/Resources/Materials/Misc/NeodroidLogo.mat.meta diff --git a/Runtime/Materials/Misc/PointPlotMaterial.mat b/Runtime/Resources/Materials/Misc/PointPlotMaterial.mat similarity index 100% rename from Runtime/Materials/Misc/PointPlotMaterial.mat rename to Runtime/Resources/Materials/Misc/PointPlotMaterial.mat diff --git a/Runtime/Materials/Misc/PointPlotMaterial.mat.meta b/Runtime/Resources/Materials/Misc/PointPlotMaterial.mat.meta similarity index 100% rename from Runtime/Materials/Misc/PointPlotMaterial.mat.meta rename to Runtime/Resources/Materials/Misc/PointPlotMaterial.mat.meta diff --git a/Runtime/Materials/Proto.meta b/Runtime/Resources/Materials/Misc/Proto.meta similarity index 100% rename from Runtime/Materials/Proto.meta rename to Runtime/Resources/Materials/Misc/Proto.meta diff --git a/Runtime/Materials/Proto/Generated.meta b/Runtime/Resources/Materials/Misc/Proto/Generated.meta similarity index 100% rename from Runtime/Materials/Proto/Generated.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated.meta diff --git a/Runtime/Materials/Proto/Generated/Dark.meta b/Runtime/Resources/Materials/Misc/Proto/Generated/Dark.meta similarity index 100% rename from Runtime/Materials/Proto/Generated/Dark.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated/Dark.meta diff --git a/Runtime/Materials/Proto/Generated/Dark/GridBox_Default_Active.png b/Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_Active.png similarity index 100% rename from Runtime/Materials/Proto/Generated/Dark/GridBox_Default_Active.png rename to Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_Active.png diff --git a/Runtime/Materials/Proto/Generated/Dark/GridBox_Default_Active.png.meta b/Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_Active.png.meta similarity index 100% rename from Runtime/Materials/Proto/Generated/Dark/GridBox_Default_Active.png.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_Active.png.meta diff --git a/Runtime/Materials/Proto/Generated/Dark/GridBox_Default_Normal.png b/Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_Normal.png similarity index 100% rename from Runtime/Materials/Proto/Generated/Dark/GridBox_Default_Normal.png rename to Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_Normal.png diff --git a/Runtime/Materials/Proto/Generated/Dark/GridBox_Default_Normal.png.meta b/Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_Normal.png.meta similarity index 100% rename from Runtime/Materials/Proto/Generated/Dark/GridBox_Default_Normal.png.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_Normal.png.meta diff --git a/Runtime/Materials/Proto/Generated/Dark/GridBox_Default_OnNormal.png b/Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_OnNormal.png similarity index 100% rename from Runtime/Materials/Proto/Generated/Dark/GridBox_Default_OnNormal.png rename to Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_OnNormal.png diff --git a/Runtime/Materials/Proto/Generated/Dark/GridBox_Default_OnNormal.png.meta b/Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_OnNormal.png.meta similarity index 100% rename from Runtime/Materials/Proto/Generated/Dark/GridBox_Default_OnNormal.png.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated/Dark/GridBox_Default_OnNormal.png.meta diff --git a/Runtime/Materials/Proto/Generated/Light.meta b/Runtime/Resources/Materials/Misc/Proto/Generated/Light.meta similarity index 100% rename from Runtime/Materials/Proto/Generated/Light.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated/Light.meta diff --git a/Runtime/Materials/Proto/Generated/Light/GridBox_Default_Active.png b/Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_Active.png similarity index 100% rename from Runtime/Materials/Proto/Generated/Light/GridBox_Default_Active.png rename to Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_Active.png diff --git a/Runtime/Materials/Proto/Generated/Light/GridBox_Default_Active.png.meta b/Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_Active.png.meta similarity index 100% rename from Runtime/Materials/Proto/Generated/Light/GridBox_Default_Active.png.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_Active.png.meta diff --git a/Runtime/Materials/Proto/Generated/Light/GridBox_Default_Normal.png b/Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_Normal.png similarity index 100% rename from Runtime/Materials/Proto/Generated/Light/GridBox_Default_Normal.png rename to Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_Normal.png diff --git a/Runtime/Materials/Proto/Generated/Light/GridBox_Default_Normal.png.meta b/Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_Normal.png.meta similarity index 100% rename from Runtime/Materials/Proto/Generated/Light/GridBox_Default_Normal.png.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_Normal.png.meta diff --git a/Runtime/Materials/Proto/Generated/Light/GridBox_Default_OnNormal.png b/Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_OnNormal.png similarity index 100% rename from Runtime/Materials/Proto/Generated/Light/GridBox_Default_OnNormal.png rename to Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_OnNormal.png diff --git a/Runtime/Materials/Proto/Generated/Light/GridBox_Default_OnNormal.png.meta b/Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_OnNormal.png.meta similarity index 100% rename from Runtime/Materials/Proto/Generated/Light/GridBox_Default_OnNormal.png.meta rename to Runtime/Resources/Materials/Misc/Proto/Generated/Light/GridBox_Default_OnNormal.png.meta diff --git a/Runtime/Materials/Proto/GridBox_Default.png b/Runtime/Resources/Materials/Misc/Proto/GridBox_Default.png similarity index 100% rename from Runtime/Materials/Proto/GridBox_Default.png rename to Runtime/Resources/Materials/Misc/Proto/GridBox_Default.png diff --git a/Runtime/Materials/Proto/GridBox_Default.png.meta b/Runtime/Resources/Materials/Misc/Proto/GridBox_Default.png.meta similarity index 100% rename from Runtime/Materials/Proto/GridBox_Default.png.meta rename to Runtime/Resources/Materials/Misc/Proto/GridBox_Default.png.meta diff --git a/Runtime/Materials/Proto/ProtoBlue.mat b/Runtime/Resources/Materials/Misc/Proto/ProtoBlue.mat similarity index 95% rename from Runtime/Materials/Proto/ProtoBlue.mat rename to Runtime/Resources/Materials/Misc/Proto/ProtoBlue.mat index b7e93751d..c8c6e1edb 100644 --- a/Runtime/Materials/Proto/ProtoBlue.mat +++ b/Runtime/Resources/Materials/Misc/Proto/ProtoBlue.mat @@ -4,8 +4,9 @@ Material: serializedVersion: 6 m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_Name: ProtoBlue m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: diff --git a/Runtime/Materials/Proto/ProtoBlue.mat.meta b/Runtime/Resources/Materials/Misc/Proto/ProtoBlue.mat.meta similarity index 100% rename from Runtime/Materials/Proto/ProtoBlue.mat.meta rename to Runtime/Resources/Materials/Misc/Proto/ProtoBlue.mat.meta diff --git a/Runtime/Materials/Proto/ProtoGreen.mat b/Runtime/Resources/Materials/Misc/Proto/ProtoGreen.mat similarity index 100% rename from Runtime/Materials/Proto/ProtoGreen.mat rename to Runtime/Resources/Materials/Misc/Proto/ProtoGreen.mat diff --git a/Runtime/Materials/Proto/ProtoGreen.mat.meta b/Runtime/Resources/Materials/Misc/Proto/ProtoGreen.mat.meta similarity index 100% rename from Runtime/Materials/Proto/ProtoGreen.mat.meta rename to Runtime/Resources/Materials/Misc/Proto/ProtoGreen.mat.meta diff --git a/Runtime/Materials/Proto/ProtoOrange.mat b/Runtime/Resources/Materials/Misc/Proto/ProtoOrange.mat similarity index 100% rename from Runtime/Materials/Proto/ProtoOrange.mat rename to Runtime/Resources/Materials/Misc/Proto/ProtoOrange.mat diff --git a/Runtime/Materials/Proto/ProtoOrange.mat.meta b/Runtime/Resources/Materials/Misc/Proto/ProtoOrange.mat.meta similarity index 100% rename from Runtime/Materials/Proto/ProtoOrange.mat.meta rename to Runtime/Resources/Materials/Misc/Proto/ProtoOrange.mat.meta diff --git a/Runtime/Materials/Proto/ProtoRed.mat b/Runtime/Resources/Materials/Misc/Proto/ProtoRed.mat similarity index 100% rename from Runtime/Materials/Proto/ProtoRed.mat rename to Runtime/Resources/Materials/Misc/Proto/ProtoRed.mat diff --git a/Runtime/Materials/Proto/ProtoRed.mat.meta b/Runtime/Resources/Materials/Misc/Proto/ProtoRed.mat.meta similarity index 100% rename from Runtime/Materials/Proto/ProtoRed.mat.meta rename to Runtime/Resources/Materials/Misc/Proto/ProtoRed.mat.meta diff --git a/Runtime/Materials/Proto/ProtoWhite.mat b/Runtime/Resources/Materials/Misc/Proto/ProtoWhite.mat similarity index 100% rename from Runtime/Materials/Proto/ProtoWhite.mat rename to Runtime/Resources/Materials/Misc/Proto/ProtoWhite.mat diff --git a/Runtime/Materials/Proto/ProtoWhite.mat.meta b/Runtime/Resources/Materials/Misc/Proto/ProtoWhite.mat.meta similarity index 100% rename from Runtime/Materials/Proto/ProtoWhite.mat.meta rename to Runtime/Resources/Materials/Misc/Proto/ProtoWhite.mat.meta diff --git a/Runtime/Materials/Proto/ProtoYellow.mat b/Runtime/Resources/Materials/Misc/Proto/ProtoYellow.mat similarity index 100% rename from Runtime/Materials/Proto/ProtoYellow.mat rename to Runtime/Resources/Materials/Misc/Proto/ProtoYellow.mat diff --git a/Runtime/Materials/Proto/ProtoYellow.mat.meta b/Runtime/Resources/Materials/Misc/Proto/ProtoYellow.mat.meta similarity index 100% rename from Runtime/Materials/Proto/ProtoYellow.mat.meta rename to Runtime/Resources/Materials/Misc/Proto/ProtoYellow.mat.meta diff --git a/Runtime/Resources/Materials/Misc/Terrain.mat b/Runtime/Resources/Materials/Misc/Terrain.mat new file mode 100644 index 000000000..5fe5ca655 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Terrain.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Terrain + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: e573d986e51134d48b79cf2761ab65b4, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 0.27509695 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _BaseScale: {r: 1, g: 1, b: 1, a: 0} + - _Color: {r: 0.9832063, g: 0.93029237, b: 0.99399346, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Runtime/Resources/Materials/Misc/Terrain.mat.meta b/Runtime/Resources/Materials/Misc/Terrain.mat.meta new file mode 100644 index 000000000..b7c4abd33 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/Terrain.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9dcb64b3e517a15e8f0e9570158b7bf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Misc/WhiteGridMaterial.mat b/Runtime/Resources/Materials/Misc/WhiteGridMaterial.mat new file mode 100644 index 000000000..0b352aa22 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/WhiteGridMaterial.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: WhiteGridMaterial + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Runtime/Resources/Materials/Misc/WhiteGridMaterial.mat.meta b/Runtime/Resources/Materials/Misc/WhiteGridMaterial.mat.meta new file mode 100644 index 000000000..ee262d4d9 --- /dev/null +++ b/Runtime/Resources/Materials/Misc/WhiteGridMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6b334063539a5d7f8a2167e99e919e2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Skyboxes.meta b/Runtime/Resources/Materials/Skyboxes.meta new file mode 100644 index 000000000..9ed47b1f7 --- /dev/null +++ b/Runtime/Resources/Materials/Skyboxes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97fa982d3802ef3a3bc6ab6ad335b8db +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Skyboxes/CleanRoomSkybox.mat b/Runtime/Resources/Materials/Skyboxes/CleanRoomSkybox.mat new file mode 100644 index 000000000..e86bfcb5f --- /dev/null +++ b/Runtime/Resources/Materials/Skyboxes/CleanRoomSkybox.mat @@ -0,0 +1,29 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: CleanRoomSkybox + m_Shader: {fileID: 4800000, guid: 1c7c196301cbce067a9791aee8777b22, type: 3} + m_ShaderKeywords: _MAPPING_LATITUDE_LONGITUDE_LAYOUT + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Floats: + - _Exponent1: 4.35 + - _Exponent2: 3.58 + - _Intensity: 1.21 + m_Colors: + - _GroundColor: {r: 0.97999996, g: 0.97999996, b: 0.97999996, a: 0} + - _HorizonColor: {r: 0.7924528, g: 0.7924528, b: 0.7924528, a: 0} + - _SkyColor: {r: 1, g: 1, b: 1, a: 0} diff --git a/Runtime/Resources/Materials/Skyboxes/CleanRoomSkybox.mat.meta b/Runtime/Resources/Materials/Skyboxes/CleanRoomSkybox.mat.meta new file mode 100644 index 000000000..ef318731c --- /dev/null +++ b/Runtime/Resources/Materials/Skyboxes/CleanRoomSkybox.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4794529d8b748ac07b62fb6ebe8ca69a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Materials/Misc/NorthernSkyBox.mat b/Runtime/Resources/Materials/Skyboxes/NorthernSkyBox.mat similarity index 95% rename from Runtime/Materials/Misc/NorthernSkyBox.mat rename to Runtime/Resources/Materials/Skyboxes/NorthernSkyBox.mat index 63f2a48de..618ad98c5 100644 --- a/Runtime/Materials/Misc/NorthernSkyBox.mat +++ b/Runtime/Resources/Materials/Skyboxes/NorthernSkyBox.mat @@ -5,7 +5,8 @@ Material: serializedVersion: 6 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_Name: NorthernSkyBox m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: _SUNDISK_HIGH_QUALITY @@ -55,7 +56,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Floats: - - _AtmosphereThickness: 0.97333723 + - _AtmosphereThickness: 1.03 - _BumpScale: 1 - _Cutoff: 0.5 - _DetailNormalMapScale: 1 diff --git a/Runtime/Materials/Misc/NorthernSkyBox.mat.meta b/Runtime/Resources/Materials/Skyboxes/NorthernSkyBox.mat.meta similarity index 100% rename from Runtime/Materials/Misc/NorthernSkyBox.mat.meta rename to Runtime/Resources/Materials/Skyboxes/NorthernSkyBox.mat.meta diff --git a/Runtime/Materials/Misc/ProtoSkyBox.mat b/Runtime/Resources/Materials/Skyboxes/ProtoSkyBox.mat similarity index 96% rename from Runtime/Materials/Misc/ProtoSkyBox.mat rename to Runtime/Resources/Materials/Skyboxes/ProtoSkyBox.mat index 733332631..ab479c838 100644 --- a/Runtime/Materials/Misc/ProtoSkyBox.mat +++ b/Runtime/Resources/Materials/Skyboxes/ProtoSkyBox.mat @@ -5,7 +5,8 @@ Material: serializedVersion: 6 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_Name: ProtoSkyBox m_Shader: {fileID: 104, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: _MAPPING_LATITUDE_LONGITUDE_LAYOUT _SUNDISK_HIGH_QUALITY @@ -88,7 +89,7 @@ Material: - _Cutoff: 0.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _Exposure: 1 + - _Exposure: 0.5 - _GlossMapScale: 1 - _Glossiness: 0 - _GlossyReflections: 1 @@ -114,4 +115,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _GroundColor: {r: 1, g: 1, b: 1, a: 1} - _SkyTint: {r: 0.5, g: 0.5, b: 0.5, a: 1} - - _Tint: {r: 0, g: 0, b: 0.12941177, a: 0.5} + - _Tint: {r: 1, g: 0.60784316, b: 0.11764703, a: 1} diff --git a/Runtime/Materials/Misc/ProtoSkyBox.mat.meta b/Runtime/Resources/Materials/Skyboxes/ProtoSkyBox.mat.meta similarity index 100% rename from Runtime/Materials/Misc/ProtoSkyBox.mat.meta rename to Runtime/Resources/Materials/Skyboxes/ProtoSkyBox.mat.meta diff --git a/Runtime/Materials/Misc/WarmSkyBox.mat b/Runtime/Resources/Materials/Skyboxes/WarmSkyBox.mat similarity index 100% rename from Runtime/Materials/Misc/WarmSkyBox.mat rename to Runtime/Resources/Materials/Skyboxes/WarmSkyBox.mat diff --git a/Runtime/Materials/Misc/WarmSkyBox.mat.meta b/Runtime/Resources/Materials/Skyboxes/WarmSkyBox.mat.meta similarity index 100% rename from Runtime/Materials/Misc/WarmSkyBox.mat.meta rename to Runtime/Resources/Materials/Skyboxes/WarmSkyBox.mat.meta diff --git a/Runtime/Materials/Standard.meta b/Runtime/Resources/Materials/Standard.meta similarity index 100% rename from Runtime/Materials/Standard.meta rename to Runtime/Resources/Materials/Standard.meta diff --git a/Runtime/Materials/Standard/BluePlastic.mat b/Runtime/Resources/Materials/Standard/BluePlastic.mat similarity index 100% rename from Runtime/Materials/Standard/BluePlastic.mat rename to Runtime/Resources/Materials/Standard/BluePlastic.mat diff --git a/Runtime/Materials/Standard/BluePlastic.mat.meta b/Runtime/Resources/Materials/Standard/BluePlastic.mat.meta similarity index 100% rename from Runtime/Materials/Standard/BluePlastic.mat.meta rename to Runtime/Resources/Materials/Standard/BluePlastic.mat.meta diff --git a/Runtime/Materials/Standard/StandardGreen.mat b/Runtime/Resources/Materials/Standard/StandardGreen.mat similarity index 100% rename from Runtime/Materials/Standard/StandardGreen.mat rename to Runtime/Resources/Materials/Standard/StandardGreen.mat diff --git a/Runtime/Materials/Standard/StandardGreen.mat.meta b/Runtime/Resources/Materials/Standard/StandardGreen.mat.meta similarity index 100% rename from Runtime/Materials/Standard/StandardGreen.mat.meta rename to Runtime/Resources/Materials/Standard/StandardGreen.mat.meta diff --git a/Runtime/Materials/Standard/StandardRed.mat b/Runtime/Resources/Materials/Standard/StandardRed.mat similarity index 100% rename from Runtime/Materials/Standard/StandardRed.mat rename to Runtime/Resources/Materials/Standard/StandardRed.mat diff --git a/Runtime/Materials/Standard/StandardRed.mat.meta b/Runtime/Resources/Materials/Standard/StandardRed.mat.meta similarity index 100% rename from Runtime/Materials/Standard/StandardRed.mat.meta rename to Runtime/Resources/Materials/Standard/StandardRed.mat.meta diff --git a/Runtime/Materials/Standard/StandardWhite.mat b/Runtime/Resources/Materials/Standard/StandardWhite.mat similarity index 100% rename from Runtime/Materials/Standard/StandardWhite.mat rename to Runtime/Resources/Materials/Standard/StandardWhite.mat diff --git a/Runtime/Materials/Standard/StandardWhite.mat.meta b/Runtime/Resources/Materials/Standard/StandardWhite.mat.meta similarity index 100% rename from Runtime/Materials/Standard/StandardWhite.mat.meta rename to Runtime/Resources/Materials/Standard/StandardWhite.mat.meta diff --git a/Runtime/Materials/Unlit.meta b/Runtime/Resources/Materials/Unlit.meta similarity index 100% rename from Runtime/Materials/Unlit.meta rename to Runtime/Resources/Materials/Unlit.meta diff --git a/Runtime/Materials/Contrasts.meta b/Runtime/Resources/Materials/Unlit/Contrasts.meta similarity index 100% rename from Runtime/Materials/Contrasts.meta rename to Runtime/Resources/Materials/Unlit/Contrasts.meta diff --git a/Runtime/Materials/Contrasts/ContrastsCyan.mat b/Runtime/Resources/Materials/Unlit/Contrasts/ContrastsCyan.mat similarity index 100% rename from Runtime/Materials/Contrasts/ContrastsCyan.mat rename to Runtime/Resources/Materials/Unlit/Contrasts/ContrastsCyan.mat diff --git a/Runtime/Materials/Contrasts/ContrastsCyan.mat.meta b/Runtime/Resources/Materials/Unlit/Contrasts/ContrastsCyan.mat.meta similarity index 100% rename from Runtime/Materials/Contrasts/ContrastsCyan.mat.meta rename to Runtime/Resources/Materials/Unlit/Contrasts/ContrastsCyan.mat.meta diff --git a/Runtime/Materials/Contrasts/ContrastsGray.mat b/Runtime/Resources/Materials/Unlit/Contrasts/ContrastsGray.mat similarity index 100% rename from Runtime/Materials/Contrasts/ContrastsGray.mat rename to Runtime/Resources/Materials/Unlit/Contrasts/ContrastsGray.mat diff --git a/Runtime/Materials/Contrasts/ContrastsGray.mat.meta b/Runtime/Resources/Materials/Unlit/Contrasts/ContrastsGray.mat.meta similarity index 100% rename from Runtime/Materials/Contrasts/ContrastsGray.mat.meta rename to Runtime/Resources/Materials/Unlit/Contrasts/ContrastsGray.mat.meta diff --git a/Runtime/Materials/Contrasts/ContrastsRed.mat b/Runtime/Resources/Materials/Unlit/Contrasts/ContrastsRed.mat similarity index 100% rename from Runtime/Materials/Contrasts/ContrastsRed.mat rename to Runtime/Resources/Materials/Unlit/Contrasts/ContrastsRed.mat diff --git a/Runtime/Materials/Contrasts/ContrastsRed.mat.meta b/Runtime/Resources/Materials/Unlit/Contrasts/ContrastsRed.mat.meta similarity index 100% rename from Runtime/Materials/Contrasts/ContrastsRed.mat.meta rename to Runtime/Resources/Materials/Unlit/Contrasts/ContrastsRed.mat.meta diff --git a/Runtime/Materials/Pastels.meta b/Runtime/Resources/Materials/Unlit/Pastels.meta similarity index 100% rename from Runtime/Materials/Pastels.meta rename to Runtime/Resources/Materials/Unlit/Pastels.meta diff --git a/Runtime/Materials/Pastels/BlueGreenLightPastel.mat b/Runtime/Resources/Materials/Unlit/Pastels/BlueGreenLightPastel.mat similarity index 100% rename from Runtime/Materials/Pastels/BlueGreenLightPastel.mat rename to Runtime/Resources/Materials/Unlit/Pastels/BlueGreenLightPastel.mat diff --git a/Runtime/Materials/Pastels/BlueGreenLightPastel.mat.meta b/Runtime/Resources/Materials/Unlit/Pastels/BlueGreenLightPastel.mat.meta similarity index 100% rename from Runtime/Materials/Pastels/BlueGreenLightPastel.mat.meta rename to Runtime/Resources/Materials/Unlit/Pastels/BlueGreenLightPastel.mat.meta diff --git a/Runtime/Materials/Pastels/BlueGreenPastel.mat b/Runtime/Resources/Materials/Unlit/Pastels/BlueGreenPastel.mat similarity index 100% rename from Runtime/Materials/Pastels/BlueGreenPastel.mat rename to Runtime/Resources/Materials/Unlit/Pastels/BlueGreenPastel.mat diff --git a/Runtime/Materials/Pastels/BlueGreenPastel.mat.meta b/Runtime/Resources/Materials/Unlit/Pastels/BlueGreenPastel.mat.meta similarity index 100% rename from Runtime/Materials/Pastels/BlueGreenPastel.mat.meta rename to Runtime/Resources/Materials/Unlit/Pastels/BlueGreenPastel.mat.meta diff --git a/Runtime/Materials/Pastels/OrangePastel.mat b/Runtime/Resources/Materials/Unlit/Pastels/OrangePastel.mat similarity index 100% rename from Runtime/Materials/Pastels/OrangePastel.mat rename to Runtime/Resources/Materials/Unlit/Pastels/OrangePastel.mat diff --git a/Runtime/Materials/Pastels/OrangePastel.mat.meta b/Runtime/Resources/Materials/Unlit/Pastels/OrangePastel.mat.meta similarity index 100% rename from Runtime/Materials/Pastels/OrangePastel.mat.meta rename to Runtime/Resources/Materials/Unlit/Pastels/OrangePastel.mat.meta diff --git a/Runtime/Materials/Pastels/RedPastel.mat b/Runtime/Resources/Materials/Unlit/Pastels/RedPastel.mat similarity index 100% rename from Runtime/Materials/Pastels/RedPastel.mat rename to Runtime/Resources/Materials/Unlit/Pastels/RedPastel.mat diff --git a/Runtime/Materials/Pastels/RedPastel.mat.meta b/Runtime/Resources/Materials/Unlit/Pastels/RedPastel.mat.meta similarity index 100% rename from Runtime/Materials/Pastels/RedPastel.mat.meta rename to Runtime/Resources/Materials/Unlit/Pastels/RedPastel.mat.meta diff --git a/Runtime/Materials/Pastels/YellowLightPastel.mat b/Runtime/Resources/Materials/Unlit/Pastels/YellowLightPastel.mat similarity index 100% rename from Runtime/Materials/Pastels/YellowLightPastel.mat rename to Runtime/Resources/Materials/Unlit/Pastels/YellowLightPastel.mat diff --git a/Runtime/Materials/Pastels/YellowLightPastel.mat.meta b/Runtime/Resources/Materials/Unlit/Pastels/YellowLightPastel.mat.meta similarity index 100% rename from Runtime/Materials/Pastels/YellowLightPastel.mat.meta rename to Runtime/Resources/Materials/Unlit/Pastels/YellowLightPastel.mat.meta diff --git a/Runtime/Materials/Pastels/YellowPastel.mat b/Runtime/Resources/Materials/Unlit/Pastels/YellowPastel.mat similarity index 100% rename from Runtime/Materials/Pastels/YellowPastel.mat rename to Runtime/Resources/Materials/Unlit/Pastels/YellowPastel.mat diff --git a/Runtime/Materials/Pastels/YellowPastel.mat.meta b/Runtime/Resources/Materials/Unlit/Pastels/YellowPastel.mat.meta similarity index 100% rename from Runtime/Materials/Pastels/YellowPastel.mat.meta rename to Runtime/Resources/Materials/Unlit/Pastels/YellowPastel.mat.meta diff --git a/Runtime/Resources/Materials/Unlit/SegOutline 1.mat b/Runtime/Resources/Materials/Unlit/SegOutline 1.mat new file mode 100644 index 000000000..81afef1cf --- /dev/null +++ b/Runtime/Resources/Materials/Unlit/SegOutline 1.mat @@ -0,0 +1,81 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SegOutline 1 + m_Shader: {fileID: 4800000, guid: 65c1b5085509542dea35733cfc881720, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Limiter: 1.34 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Outline: 0.115 + - _OutlineFactor: 0.1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0.06858788, b: 0.94509804, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 1, g: 0, b: 1, a: 1} diff --git a/Runtime/Resources/Materials/Unlit/SegOutline 1.mat.meta b/Runtime/Resources/Materials/Unlit/SegOutline 1.mat.meta new file mode 100644 index 000000000..c41c37f59 --- /dev/null +++ b/Runtime/Resources/Materials/Unlit/SegOutline 1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0a59d4db00bf4090bf535472ddca3f2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Unlit/SegOutline.mat b/Runtime/Resources/Materials/Unlit/SegOutline.mat new file mode 100644 index 000000000..4d5c25ffd --- /dev/null +++ b/Runtime/Resources/Materials/Unlit/SegOutline.mat @@ -0,0 +1,79 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SegOutline + m_Shader: {fileID: 4800000, guid: 2087ae572f9b411a889c058a7abfb76f, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Outline: 0.08 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.44758415, g: 0, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 1, g: 0, b: 0.7821784, a: 1} diff --git a/Runtime/Resources/Materials/Unlit/SegOutline.mat.meta b/Runtime/Resources/Materials/Unlit/SegOutline.mat.meta new file mode 100644 index 000000000..06b57a1aa --- /dev/null +++ b/Runtime/Resources/Materials/Unlit/SegOutline.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21fa462512ed5aa17be55ee8aa7536fb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Materials/Unlit/UnlitCyan.mat b/Runtime/Resources/Materials/Unlit/UnlitCyan.mat new file mode 100644 index 000000000..c06349498 --- /dev/null +++ b/Runtime/Resources/Materials/Unlit/UnlitCyan.mat @@ -0,0 +1,81 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UnlitCyan + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.5943396, g: 1, b: 0.97209346, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Runtime/Resources/Materials/Unlit/UnlitCyan.mat.meta b/Runtime/Resources/Materials/Unlit/UnlitCyan.mat.meta new file mode 100644 index 000000000..f304bf469 --- /dev/null +++ b/Runtime/Resources/Materials/Unlit/UnlitCyan.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ffc2c8ea91e706d64a2b2c528a6aa37c +timeCreated: 1515096974 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Materials/Unlit/UnlitGray.mat b/Runtime/Resources/Materials/Unlit/UnlitGray.mat similarity index 100% rename from Runtime/Materials/Unlit/UnlitGray.mat rename to Runtime/Resources/Materials/Unlit/UnlitGray.mat diff --git a/Runtime/Materials/Unlit/UnlitGray.mat.meta b/Runtime/Resources/Materials/Unlit/UnlitGray.mat.meta similarity index 100% rename from Runtime/Materials/Unlit/UnlitGray.mat.meta rename to Runtime/Resources/Materials/Unlit/UnlitGray.mat.meta diff --git a/Runtime/Materials/Unlit/UnlitGreenTrans.mat b/Runtime/Resources/Materials/Unlit/UnlitGreenTrans.mat similarity index 78% rename from Runtime/Materials/Unlit/UnlitGreenTrans.mat rename to Runtime/Resources/Materials/Unlit/UnlitGreenTrans.mat index 144c145f4..a07597d65 100644 --- a/Runtime/Materials/Unlit/UnlitGreenTrans.mat +++ b/Runtime/Resources/Materials/Unlit/UnlitGreenTrans.mat @@ -5,9 +5,10 @@ Material: serializedVersion: 6 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_Name: UnlitGreenTrans - m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_Shader: {fileID: 4800000, guid: 90cadb91a7902754f9fe5b4563306677, type: 3} m_ShaderKeywords: _ALPHAPREMULTIPLY_ON m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -18,6 +19,10 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: + - _BlendTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -55,6 +60,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Floats: + - _Alpha: 0.5 - _BumpScale: 1 - _Cutoff: 0.5 - _DetailNormalMapScale: 1 @@ -62,6 +68,8 @@ Material: - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 + - _Intensity: 0 + - _MaxTriSize: 74 - _Metallic: 0 - _Mode: 3 - _OcclusionStrength: 1 @@ -70,7 +78,11 @@ Material: - _SpecularHighlights: 1 - _SrcBlend: 1 - _UVSec: 0 + - _WireSmoothness: 20 + - _WireThickness: 703 - _ZWrite: 0 m_Colors: - - _Color: {r: 0.5576423, g: 0.9411765, b: 0.3737024, a: 0.553} + - _BaseColor: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 0.5576423, g: 0.9411765, b: 0.37370238, a: 0.627451} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _WireColor: {r: 0, g: 1, b: 0, a: 1} diff --git a/Runtime/Materials/Unlit/UnlitGreenTrans.mat.meta b/Runtime/Resources/Materials/Unlit/UnlitGreenTrans.mat.meta similarity index 100% rename from Runtime/Materials/Unlit/UnlitGreenTrans.mat.meta rename to Runtime/Resources/Materials/Unlit/UnlitGreenTrans.mat.meta diff --git a/Runtime/Materials/Unlit/UnlitOrange.mat b/Runtime/Resources/Materials/Unlit/UnlitOrange.mat similarity index 100% rename from Runtime/Materials/Unlit/UnlitOrange.mat rename to Runtime/Resources/Materials/Unlit/UnlitOrange.mat diff --git a/Runtime/Materials/Unlit/UnlitOrange.mat.meta b/Runtime/Resources/Materials/Unlit/UnlitOrange.mat.meta similarity index 100% rename from Runtime/Materials/Unlit/UnlitOrange.mat.meta rename to Runtime/Resources/Materials/Unlit/UnlitOrange.mat.meta diff --git a/Runtime/Materials/Unlit/UnlitRed.mat b/Runtime/Resources/Materials/Unlit/UnlitRed.mat similarity index 95% rename from Runtime/Materials/Unlit/UnlitRed.mat rename to Runtime/Resources/Materials/Unlit/UnlitRed.mat index 8c6c36009..353c38a0e 100644 --- a/Runtime/Materials/Unlit/UnlitRed.mat +++ b/Runtime/Resources/Materials/Unlit/UnlitRed.mat @@ -4,8 +4,9 @@ Material: serializedVersion: 6 m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_Name: UnlitRed m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: diff --git a/Runtime/Materials/Unlit/UnlitRed.mat.meta b/Runtime/Resources/Materials/Unlit/UnlitRed.mat.meta similarity index 100% rename from Runtime/Materials/Unlit/UnlitRed.mat.meta rename to Runtime/Resources/Materials/Unlit/UnlitRed.mat.meta diff --git a/Runtime/Materials/Unlit/UnlitWhite.mat b/Runtime/Resources/Materials/Unlit/UnlitWhite.mat similarity index 100% rename from Runtime/Materials/Unlit/UnlitWhite.mat rename to Runtime/Resources/Materials/Unlit/UnlitWhite.mat diff --git a/Runtime/Materials/Unlit/UnlitWhite.mat.meta b/Runtime/Resources/Materials/Unlit/UnlitWhite.mat.meta similarity index 100% rename from Runtime/Materials/Unlit/UnlitWhite.mat.meta rename to Runtime/Resources/Materials/Unlit/UnlitWhite.mat.meta diff --git a/Runtime/Resources/Meshes.meta b/Runtime/Resources/Meshes.meta new file mode 100644 index 000000000..d552fbeab --- /dev/null +++ b/Runtime/Resources/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 38b14400c56914a4d93cdefbf075d8df +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Meshes/Cube.asset b/Runtime/Resources/Meshes/Cube.asset new file mode 100644 index 000000000..8eea0198a --- /dev/null +++ b/Runtime/Resources/Meshes/Cube.asset @@ -0,0 +1,162 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Cube + serializedVersion: 9 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 36 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 24 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 000001000200000002000300040005000600040006000700080009000a0008000a000b000c000d000e000c000e000f00100011001200100012001300140015001600140016001700 + m_VertexData: + serializedVersion: 2 + m_VertexCount: 24 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 40 + format: 0 + dimension: 2 + - stream: 0 + offset: 48 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 1344 + _typelessdata: 0000003f000000bf0000003f00000000000000000000803f000080bf0000000000000000000080bf00000000000000007ee4303f88bfb13e0000003f0000003f0000003f00000000000000000000803f000080bf0000000000000000000080bf000000000000803f7ee4303f4020273f000000bf0000003f0000003f00000000000000000000803f000080bf0000000000000000000080bf0000803f0000803ffc247f3f4020273f000000bf000000bf0000003f00000000000000000000803f000080bf0000000000000000000080bf0000803f00000000fc247f3f88bfb13e0000003f0000003f0000003f000000000000803f00000000000080bf0000000000000000000080bf000000000000000094949e3e4020273f0000003f0000003f000000bf000000000000803f00000000000080bf0000000000000000000080bf000000000000803f94949e3e83bfb13e000000bf0000003f000000bf000000000000803f00000000000080bf0000000000000000000080bf0000803f0000803f3ce6843b83bfb13e000000bf0000003f0000003f000000000000803f00000000000080bf0000000000000000000080bf0000803f000000003ce6843b4020273f0000003f0000003f000000bf0000000000000000000080bf000080bf0000000000000000000080bf000000000000000083bfb13e83bfb13e0000003f000000bf000000bf0000000000000000000080bf000080bf0000000000000000000080bf000000000000803f83bfb13e4020273f000000bf000000bf000000bf0000000000000000000080bf000080bf0000000000000000000080bf0000803f0000803f4020273f4020273f000000bf0000003f000000bf0000000000000000000080bf000080bf0000000000000000000080bf0000803f000000004020273f83bfb13e0000003f000000bf000000bf00000000000080bf00000000000080bf0000000000000000000080bf000000000000000083bfb13e3ce6843b0000003f000000bf0000003f00000000000080bf00000000000080bf0000000000000000000080bf000000000000803f83bfb13e94949e3e000000bf000000bf0000003f00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000803f4020273f94949e3e000000bf000000bf000000bf00000000000080bf00000000000080bf0000000000000000000080bf0000803f000000004020273f3ce6843b000000bf000000bf0000003f000080bf00000000000000000000000000000000000080bf000080bf0000000000000000b8b5303f94949e3e000000bf0000003f0000003f000080bf00000000000000000000000000000000000080bf000080bf000000000000803f34f67e3f94949e3e000000bf0000003f000000bf000080bf00000000000000000000000000000000000080bf000080bf0000803f0000803f34f67e3f3ce6843b000000bf000000bf000000bf000080bf00000000000000000000000000000000000080bf000080bf0000803f00000000b8b5303f3ce6843b0000003f000000bf000000bf0000803f000000000000000000000000000000000000803f000080bf000000000000000094949e3e3ce6843b0000003f0000003f000000bf0000803f000000000000000000000000000000000000803f000080bf000000000000803f3ce6843b3ce6843b0000003f0000003f0000003f0000803f000000000000000000000000000000000000803f000080bf0000803f0000803f3ce6843b94949e3e0000003f000000bf0000003f0000803f000000000000000000000000000000000000803f000080bf0000803f0000000094949e3e94949e3e + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 10.70262 + m_MeshOptimized: 0 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/Runtime/Resources/Meshes/Cube.asset.meta b/Runtime/Resources/Meshes/Cube.asset.meta new file mode 100644 index 000000000..9037e3b47 --- /dev/null +++ b/Runtime/Resources/Meshes/Cube.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 218ee1dde84ca9a2b916a9f3472655c1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Meshes/Quad.asset b/Runtime/Resources/Meshes/Quad.asset new file mode 100644 index 000000000..20b636066 --- /dev/null +++ b/Runtime/Resources/Meshes/Quad.asset @@ -0,0 +1,162 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Quad + serializedVersion: 9 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 6 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 4 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 3.0616168e-17} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 000001000200010000000300 + m_VertexData: + serializedVersion: 2 + m_VertexCount: 4 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 40 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 192 + _typelessdata: 000000bf000000bf31310da40000000000000000000080bf0000803f0000000000000000000080bf00000000000000000000003f0000003f31310d240000000000000000000080bf0000803f0000000000000000000080bf0000803f0000803f0000003f000000bf31310da40000000000000000000080bf0000803f0000000000000000000080bf0000803f00000000000000bf0000003f31310d240000000000000000000080bf0000803f0000000000000000000080bf000000000000803f + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 3.0616168e-17} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimized: 1 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/Runtime/Resources/Meshes/Quad.asset.meta b/Runtime/Resources/Meshes/Quad.asset.meta new file mode 100644 index 000000000..350f40cfd --- /dev/null +++ b/Runtime/Resources/Meshes/Quad.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b8d549c876b1103279a5d2b32df5a6af +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Meshes/Sphere.asset b/Runtime/Resources/Meshes/Sphere.asset new file mode 100644 index 000000000..a2a7fdfa8 --- /dev/null +++ b/Runtime/Resources/Meshes/Sphere.asset @@ -0,0 +1,162 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Sphere + serializedVersion: 9 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 2304 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 515 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 0 + m_IndexBuffer: 00000100020000000200030003000200040003000400050005000400060005000600070007000600080007000800090001000a00020001000b000a0002000a000c0002000c00040004000c000d0004000d00060006000d000e0006000e0008000b000f000a000b0010000f000a000f0011000a0011000c000c00110012000c0012000d000d00120013000d0013000e00100014000f001000150014000f00140016000f001600110011001600170011001800120012001700190012001a0013000e0013001b000e001b001c001c001b001d001c001d001e001e001d001f001e001f00200020001f0021002000210022002300200022002300220024002500230024002500240026001f00270021001f00280027001d0028001f0029002300250029002a0023002a001e0020002a00200023001d002b0028002c002a0029002c002d002a002d001e002a002d001c001e0009002d002c00090008002d0008001c002d0008000e001c001b002e002b001b002b001d0013002e001b0013002f002e0030003100320030003200330033003200340033003400350035003400360035003600370037003600380037003800390031003a00320031003b003a0032003a003c0032003c00340034003c003d0034003d00360036003d003e0036003e0038003b003f003a003b0040003f003a003f0041003a0041003c003c00410042003c0042003d003d00420043003d0043003e00400044003f004000450044003f00440046003f00460041004100460047004100470042004200470048004200490043003e0043004a003e004a004b004b004a004c004b004c004d004d004c004e004d004e004f004f004e0050004f005000510052004f0051005200510053005400520053005400530055004e00150050004e00140015004c0014004e0056005200540056005700520057004d004f0057004f0052004c001600140058005700560058005900570059004d00570059004b004d0039005900580039003800590038004b00590038003e004b004a00170016004a0016004c0043005a00170043005b004a005c005d005e005c005e005f005f005e0060005f00600061006100600062006100620063006300620064006300640065005d0066005e005d00670066005e00660068005e0068006000600068006900600069006200620069006a0062006a00640067006b00660067006c006b0066006b006d0066006d00680068006d006e0068006e00690069006e006f0069006f006a006c0070006b006c00710070006b00700072006b0072006d006d00720073006d0073006e006e00730074006e0075006f006a006f0076006a0076007700770076007800770078007900790078007a0079007a007b007b007a007c007b007c007d007e007b007d007e007d007f0080007e007f0080007f0081007a0082007c007a0083008200780083007a0084007e008000840085007e00850079007b0085007b007e0078008600830087008500840087008800850088007900850088007700790065008800870065006400880064007700880064006a007700890082008300890083008a008a00830086008b0089008a008b008a008c008d008b008c008d008c008e008f008d008e008f008e00900090008e0091009000910092009200910093009200930094009400930095009400950096008e008c0097008e00970091009100970098009100980093009300980099009300990095008c008a009a008c009a00970097009a009b0097009b00980098009b009c0098009c0099009a009d009b009a0086009d0076009d0086007600860078006f009d0076006f009e009d008a0086009a009b009d009f009b00a0009c00a100a200a300a100a300a400a200a500a300a200a600a500a600a700a500a600a800a700a8007100a700a80070007100a900a200a100a900aa00a200aa00a600a200aa00ab00a600ab00a800a600ab00ac00a800ac007000a800ac0072007000ad00aa00a900ad00ae00aa00ae00ab00aa00ae00af00ab00af00ac00ab00af00b000ac00b0007200ac00b00073007200b100ae00ad00b100b200ae00b200af00ae00b200b300af00b300b000af00b300b400b000b4007300b000b400b5007300b600b700b800b600b800b900b900b800ba00b900ba00bb00bb00ba00bc00bb00bc00bd00bd00bc00be00bd00be00bf00b700c000b800b700c100c000b800c000c200b800c200ba00ba00c200c300ba00c300bc00bc00c300c400bc00c400be00c100c500c000c100c600c500c000c500c700c000c700c200c200c700c800c200c800c300c300c800c900c300c900c400c600ca00c500c600cb00ca00c500ca00cc00c500cc00c700c700cc00cd00c700cd00c800c800cd00ce00c800ce00c900c400c900cf00c400cf00d000d000cf00d100d000d100d200d200d100d300d200d300d400d400d300d500d400d500d600d700d400d600d700d600d800d900d700d800d900d800da00d300db00d500d300dc00db00d100dc00d300dd00d700d900dd00de00d700de00d200d400de00d400d700d100df00dc00e000de00dd00e000e100de00e100d200de00e100d000d200bf00e100e000bf00be00e100be00d000e100be00c400d000e200db00dc00e200dc00e300e300dc00df00e400e200e300e400e300e500e600e400e500e600e500e700e800e600e700e800e700e900e900e700ea00e900ea00eb00eb00ea00ec00eb00ec00ed00ed00ec00ee00ed00ee00ef00e700e500f000e700f000ea00ea00f000f100ea00f100ec00ec00f100f200ec00f200ee00e500e300f300e500f300f000f000f300f400f000f400f100f100f400f500f100f500f200f300f600f400f300df00f600cf00f600df00cf00df00d100c900f600cf00c900ce00f600f400f600ce00f400ce00f500e300df00f300ef00ee00f700ef00f700f800f800f700f900f800f900fa00fa00f900fb00fa00fb00fc00fc00fb00fd00fc00fd00fe00fb00ff00fd00fb000001ff00f9000001fb0000010101ff000001020101010201cb0001010201ca00cb00f90003010001030102010001f7000301f9000301040102010401ca0002010401cc00ca00050104010301f700050103010501060104010601cc0004010601cd00cc00ee000501f700ee00f2000501f20006010501f200f5000601f500cd000601f500ce00cd00070108010901070109010a010a0109010b010a010b010c010c010b010d010c010d010e010e010d010f010e010f011001080111010901080112011101090111011301090113010b010b01130114010b0114010d010d01140115010d0115010f01120116011101120117011601110116011801110118011301130118011901130119011401140119011a0114011a01150117011b01160117011c011b0116011b011d0116011d01180118011d011e0118011e01190119011e011f0119011f011a0115011a0120011501200121012101200122012101220123012301220124012301240125012501240126012501260127012801250127012801270129012a01280129012a0129012b0124012c01260124012d012c0122012d0124012e0128012a012e012f0128012f01230125012f0125012801220130012d0131012f012e01310132012f01320123012f0132012101230110013201310110010f0132010f01210132010f011501210133012c012d0133012d01340134012d013001350133013401350134013601370135013601370136013801390137013801390138013a013a0138013b013a013b013c013c013b013d013c013d013e013e013d013f013e013f014001380136014101380141013b013b01410142013b0142013d013d01420143013d0143013f013601340144013601440141014101440145014101450142014201450146014201460143014401470145014401300147012001470130012001300122011a01470120011a011f014701450147011f0145011f01460134013001440140013f014801400148014901490148014a0149014a014b014b014a014c014b014c014d014d014c014e014d014e014f014c0150014e014c01510150014a0151014c0151015201500151015301520153011c01520153011b011c014a0154015101540153015101480154014a0154015501530155011b01530155011d011b0156015501540148015601540156015701550157011d01550157011e011d013f01560148013f014301560143015701560143014601570146011e01570146011f011e01580159015a0158015a015b015b015a015c015b015c015d015d015c015e015d015e015f015f015e0160015f0160016101590162015a015901630162015a01620164015a0164015c015c01640165015c0165015e015e01650166015e0166016001630167016201630168016701620167016901620169016401640169016a0164016a01650165016a016b0165016b01660168016c01670168016d016c0167016c016e0167016e01690169016e016f0169016f016a016a016f0170016a0170016b0171016c016d0171016d01720173017101720173017201740175017301740175017401760177017501760177017601780179017501770179017a0175017a01730175017a017b0173017b01710173017b017c0171017c016e016c017c016c0171017d017a0179017d017e017a017e017b017a017e017f017b017f017c017b017f0180017c0180016e017c0180016f016e0181017e017d01810182017e0182017f017e01820183017f01830180017f0183018401800184016f018001840170016f0185018601870185018701880186018901870186018a0189018a018b0189018a018c018b018c018d018b018c018e018d018f01860185018f019001860190018a018601900191018a0191018c018a01910192018c0192018e018c01920193018e01940190018f0194019501900195019101900195019601910196019201910196019701920197019301920197019801930199019501940199019a0195019a01960195019a019b0196019b01970196019b019c0197019c01980197019c019d0198019e018e0193019f018e019e01a0019f019e01a0019e01a101a201a001a101a201a101a301a401a201a301a401a301a501a501a301a601a501a601a701a701a601a801a701a801a901a901a801aa01a901aa01ab01a301a101ac01a301ac01a601a601ac01ad01a601ad01a801a801ad01ae01a801ae01aa01a101af01ac01a1019e01af01ac01af01b001ac01b001ad01ad01b001b101ad01b101ae019e019301af01af0193019801af019801b001b00198019d01b0019d01b1019f018d018e01b201b301b401b201b401b501b501b401b601b501b601b701b701b601b801b701b801b901b901b801ba01b901ba01bb01b301bc01b401b301bd01bc01b401bc01be01b401be01b601b601be01bf01b601bf01b801b801bf01c001b801c001ba01bd01c101bc01bd01c201c101bc01c101c301bc01c301be01be01c301c401be01c401bf01bf01c401c501bf01c501c001c201c601c101c201c701c601c101c601c801c101c801c301c301c801c901c301c901c401c401c901ca01c401ca01c501c001c501cb01c001cb01cc01cc01cb01cd01cc01cd01ce01ce01cd01cf01ce01cf01d001d001cf01d101d001d101d201d301d001d201d301d201d401d501d301d401d501d401d601cf01d701d101cf01d801d701cd01d801cf01d901d301d501d901da01d301da01ce01d001da01d001d301cd01db01d801dc01da01d901dc01dd01da01dd01ce01da01dd01cc01ce01bb01dd01dc01bb01ba01dd01ba01cc01dd01ba01c001cc01de01d701d801de01d801df01df01d801db01e001de01df01e001df01e101e201e001e101e201e101e301e401e201e301e401e301e501e501e301e601e501e601e701e701e601e801e701e801e901e901e801ea01e901ea01eb01e301e101ec01e301ec01e601e601ec01ed01e601ed01e801e801ed01ee01e801ee01ea01e101df01ef01e101ef01ec01ec01ef01f001ec01f001ed01ed01f001f101ed01f101ee01ef01f201f001ef01db01f201cb01f201db01cb01db01cd01c501f201cb01c501ca01f201f001f201ca01f001ca01f101df01db01ef01eb01ea01f301eb01f301f401f401f301f501f401f501f601f601f501f701f601f701f801f801f701f901f801f901fa01f701fb01f901f701fc01fb01f501fc01f701fc01fd01fb01fc01fe01fd01fe01c701fd01fe01c601c701f501ff01fc01ff01fe01fc01f301ff01f501ff010002fe010002c601fe010002c801c60101020002ff01f3010102ff010102020200020202c80100020202c901c801ea010102f301ea01ee010102ee0102020102ee01f1010202f101c9010202f101ca01c901 + m_VertexData: + serializedVersion: 2 + m_VertexCount: 515 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 40 + format: 0 + dimension: 2 + - stream: 0 + offset: 48 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 28840 + _typelessdata: 145e933e145e93be145e93be3acd133f3acd13bf3bcd13bf0bd2343fce4ccbbab037353f000080bf9e62bf3efce9a23e263ab13e2e3ab13e52289e3e52289ebe1ef575bec5bf1e3fc5bf1ebf4309f6be9a20223f7a050c3db1ec453f000080bf7085c93e8e109c3e263ab13e8eebc43eae777e3e4709b5beae777ebef221fe3e895436bff221febef404353f1ecf9b33f204353f000080bf9e62bf3ece19913eabebc43e8eebc43e1ef5753e52289ebe52289ebe4309f63ec5bf1ebfc5bf1ebfb8c6453f508210bdfa4a223f000080bfce3fb53e8e109c3eabebc43e2e3ab13e3313333ec23dc5becd0487be4fcfb23e1f4d46bfaafa06bf687d543fa018b0bb20c40e3f000080bf141daf3e1c68803e079dd83e8eebc43e99392e3e66a6a9be66a6a9be69a4ae3ec8292abfc7292abf1163663fc938da3cf7cfde3e000080bf400fa63eccc4943e079dd83e2e3ab13e47c1b83d52a8cfbec20d8dbe72e0383e569950bfc6040dbf398d773ffe0a373d096d803e000080bf4833993eeb96733e884eec3e8eebc43ef558b43d14a6b1be14a6b1be082e353ed22932bfd22932bf12fc783f7c227a3c15916d3e000080bfe7ab933e00b18f3e884eec3e2e3ab13ec2a59bb24721d3bef6708fbe000000000d2954bf0f430fbf5fed7f3f67975a3cdedba1bc000080bfa6dd7e3e472e6f3e0c00003f8eebc43e006065b3cd7cb4becd7cb4be00000000f30435bff30435bf84ff7f3f4c83323b4d8332bb000080bfa6dd7e3ecce38d3e0c00003f2e3ab13ecd04873ec23dc5be331333beaafa063f1f4d46bf4fcfb2bedd3c113f5d1e753c25c7523f000080bf28a8cf3e1c68803eabebc43e2e9dd83e66a6a93e66a6a9be99392ebec7292a3fc8292abf69a4aebe8f4edf3efa7cd0bcac46663f000080bffeb5d83eccc4943e263ab13e2e9dd83e855b3c3e14bed9be855b3cbef9e9bb3ebdd05abff9e9bbbee136403fcbf6203d00c9283f000080bf9e62bf3e2e5c5b3e079dd83e2e9dd83e1e8dc13df588e6be859b44bebd42413ece8267bfd200c4be8cf6693f4d749c3cfa96cf3e000080bfa2ada43e07153e3e884eec3e2e9dd83eaeef27b3aec7eabecd4c48be00000000ffd66bbf6e27c7be97ac7e3fb0f0213d59c5bfbd000080bfa6dd7e3e1786323e0c00003f2e9dd83ec20d8d3e52a8cfbe47c1b8bdc7040d3f569950bf72e038bebf99623e4d2287bdc814793f000080bff491e53eeb96733eabebc43ed24eec3e14a6b13e14a6b1bef558b4bdd229323fd32932bf092e35be100e6f3e7cf860bcc7e6783f000080bf5519eb3e00b18f3e263ab13ed24eec3e859b443ef588e6be1e8dc1bdd300c43ece8267bfbd4241beb0e7e33e2a01cb3a443d653f000080bf9917da3e5779333e079dd83ed24eec3eb83eca3d0a07f5beb83ecabdedf74a3e91bc75bfeff74abee0ab403fbec89f3c627d283f000080bfd8c2be3e2bd5083e884eec3ed24eec3e47294bb299f9f9be706dcebd00000000f5a77abfb52250bea2277a3f44e4303d7f0755be000080bfa6dd7e3e15fed03d0c00003fd24eec3ef6708f3e4721d3be0ad723330f430f3f0d2954bf00000000bf98a8bcdcb063bccaeb7f3f000080bf6a56ff3e472e6f3eabebc43e0900003fcd7cb43ecd7cb4be0ad72333f404353ff30435bf00000000d937a4badb37a4bae6ff7f3f000080bf6a56ff3ecce38d3e263ab13e0900003fcd4c483eaec7eabec21da7326e27c73effd66bbf000000001464d7bdd3e235bd8a537e3f000080bf6a56ff3e69a32d3e079dd83e0900003f706dce3d99f9f9be0ad723b2b022503ef5a77abf00000000b6431cbe98c101bd24df7c3f000080bf6a56ff3e15d2c73d884eec3e0900003f706dce3d99f9f9be0ad723b2b022503ef5a77abf000000007dee9dbdfa2383bc6d347f3f000080bf6a56ff3e15d2c73d884eec3e0900003f00000000000000bf0000000000000000000080bf00000000aab579be000000008c45783f000080bfe835bf3e0639b23c0c00003f0900003f00000000000000bf0000000000000000000080bf000000006f0b763f00000000ba648dbe0000803fe835bf3e0639b23c0c00003f0900003fb83ecabd0a07f5beb83ecabdf7f74abe91bc75bf04f84abeb48b2c3fe78b5a3c34153dbf000080bf9c35003e6795113e9cd8093fd24eec3e1e8dc1bdf588e6be859b44bebf4241bece8267bfd200c4be2263693f32c286bcab39d2be000080bf0660343ee93e3d3e9cd8093f2e9dd83e859b44bef588e6be1e8dc1bdda00c4becd8267bfcf4241be7ffcd33ec171703c16ff68bf000080bf2c18933de5613e3e68b1133fd24eec3e855b3cbe14bed9be855b3cbef9e9bbbebdd05abff9e9bbbe7822343fecd9413bede535bf000080bf20ecfd3d60af563e68b1133f2e9dd83ec20d8dbe52a8cfbe47c1b8bdc6040dbf569950bf75e038be0d22873e59f50f3d35c276bf000080bf805d4a3ded96733e248a1d3fd24eec3ecd0487bec23dc5be331333beaafa06bf1f4d46bf4fcfb2befc950b3fb72bde3bfb9656bf000080bff4d5bc3d1c68803e248a1d3f2e9dd83e14a6b1be14a6b1bef558b4bdd22932bfd22932bf082e35befe0a703eb340503c78d878bf000080bf80221e3d00b18f3ef662273fd24eec3e66a6a9be66a6a9be99392ebec7292abfc8292abf69a4aebeff23ed3ee96209bc1ee062bf000080bfa49e983dcac4943ef662273f2e9dd83eae777ebe4709b5beae777ebef221febe895436bff221febef404353f9cdc4ab3f30435bf000080bf20ecfd3dce19913e248a1d3f8eebc43e52289ebe52289ebe1ef575bec5bf1ebfc5bf1ebf4309f6be67101e3fd16e01bc505d49bf000080bfd860d53d90109c3ef662273f8eebc43e1ef575be52289ebe52289ebe5809f6becbbf1ebfb7bf1ebf5080493f5b5cdf3b9fe41dbf000080bfb03b133e8e109c3e248a1d3f2e3ab13e145e93be145e93be145e93be3acd13bf3acd13bf3bcd13bfac3b353f4543dbba09ce34bf000080bf20ecfd3dfce9a23ef662273f2e3ab13ecd7cb4becd7cb4be00000000f30435bff40435bf000000006d3aa43a6d3aa4bae6ff7fbf000080bf008871bacce38d3ef662273f0900003ff6708fbe4721d3be0ad7a3320f430fbf0d2954bf000000005302d03c73758cbc3ce17fbf000080bf008871ba492e6f3e248a1d3f0900003f99392ebe66a6a9be66a6a9be71a4aebed5292abfb6292abf06c4623f44141a3cd68cedbe000080bfcc9c313eccc4943e68b1133f2e3ab13e331333bec23dc5becd0487be4fcfb2be1f4d46bfaafa06bffc96563ffa2bdebbfb950bbf000080bf22811f3e1c68803e68b1133f8eebc43ecd4c48beaec7eabe0ab7d1af7c27c7befcd66bbf000000008854a43da7c40abdf2067fbf000080bf008871baf980313e68b1133f0900003ff558b4bd14a6b1be14a6b1beeb2d35bed82932bfcf2932bf60c2783f2ab736bcfa8c71be000080bf7a63563e00b18f3e9cd8093f2e3ab13e47c1b8bd52a8cfbec20d8dbe75e038be569950bfc7040dbff5b3763f28550dbdff9487be000080bfbc544b3eed96733e9cd8093f8eebc43ec26dcebd99f9f9be00000000c32250bef5a77abf0000000069dd033ee1fddabcbac67dbf000080bf008871ba3592e33d9cd8093f0900003f00000000000000bf0000000000000000000080bf00000000fa6e2b3f000000005a1f3ebf000080bf6891f43d0639b23c0c00003f0900003f145e93be145e93be145e933e3bcd13bf3acd13bf3acd133f06d234bfa95ecbbab63735bf000080bfe6985f3ffce9a23ef662273ff262273f52289ebe52289ebe1ef5753eb7bf1ebfcbbf1ebf5809f63eaa2022bf5e050c3da4ec45bf000080bf4eaa643f90109c3ef662273f3d8a1d3fae777ebe4709b5beae777e3ef221febe895436bff221fe3ef00435bf5a0d87b4f60435bf000080bfe6985f3fce19913e248a1d3f3d8a1d3f1ef575be52289ebe52289e3e4309f6bec5bf1ebfc5bf1e3fb6c645bfa38210bdfe4a22bf000080bf7d875a3f8e109c3e248a1d3ff262273f331333bec23dc5becd04873e4fcfb2be1f4d46bfaafa063f638357bf4e1c493c89210abf000080bf2176573f1c68803e68b1133f3d8a1d3f99392ebe66a6a9be66a6a93e63a4aebec6292abfca292a3f136366bfd638da3ceccfdebe000080bf38ef523fccc4943e68b1133ff262273f47c1b8bd52a8cfbec20d8d3e75e038be569950bfc6040d3f376a78bf9fe9653da2a670be000080bf3c814c3fed96733e9cd8093f3d8a1d3ff558b4bd14a6b1be14a6b13efe2d35bed02932bfd629323f11fc78bf16217a3c19916dbe000080bf8abd493f00b18f3e9cd8093ff262273fcccc4c334721d3bef6708f3e000000000d2954bf0f430f3f75f57fbfc275243c978d733c000080bf029f3f3f472e6f3e0c00003f3d8a1d3f8fc27533cd7cb4becd7cb43e00000000f10435bff504353f84ff7fbf4283323b3f83323b000080bf029f3f3fcce38d3e0c00003ff262273fcd0487bec23dc5be3313333eaafa06bf1f4d46bf4fcfb23e71f108bf721089bc1a4058bf000080bfadbb673f1c68803e248a1d3f7eb1133f66a6a9be66a6a9be99392e3eb6292abfd5292abf71a4ae3ea34edfbe637dd0bca74666bf000080bf96426c3fccc4943ef662273f7eb1133f855b3cbe14bed9be855b3c3ef9e9bbbebdd05abff9e9bb3e7ec730bf9d6b65bcac2039bf000080bfe6985f3f60af563e68b1133f7eb1133f1e8dc1bdf588e6be859b443ebf4241bece8267bfd200c43e25bd68bf28705d3ca022d5be000080bf683e523fa7373a3e9cd8093f7eb1133f5208acb2aec7eabecd4c483e00000000ffd66bbf6e27c73e4c137fbfef49073dca35a03d000080bf029f3f3f1786323e0c00003f7eb1133fc20d8dbe52a8cfbe47c1b83dc7040dbf569950bf75e0383e8c6482be9c9b2bbd955377bf000080bf92b0723fed96733e248a1d3fc2d8093f14a6b1be14a6b1bef558b43dcf2932bfd82932bfeb2d353e0b0e6fbe61f660bcc7e678bf000080bf4474753f00b18f3ef662273fc2d8093f859b44bef588e6be1e8dc13dda00c4becd8267bfcf42413e3c35d3be9e4d7dbc752b69bf000080bf66f36c3fe5613e3e68b1133fc2d8093fb83ecabd0a07f5beb83eca3df7f74abe91bc75bf04f84a3eceb035bf64368e3a675834bf000080bf1bc8613f85e00e3e9cd8093fc2d8093f5280b7b299f9f9be706dce3d00000000f5a77abfb522503ea6b87ebf8237a63c752cc83d000080bf029f3f3fdd67d63d0c00003fc2d8093ff6708fbe4721d3be0ad7a3320f430fbf0d2954bf000000005302d03c73758cbc3ce17fbf000080bfcc927f3f492e6f3e248a1d3f0900003fcd7cb4becd7cb4be00000000f30435bff40435bf000000006d3aa43a6d3aa4bae6ff7fbf000080bfcc927f3fcce38d3ef662273f0900003fcd4c48beaec7eabe0ab7d1af7c27c7befcd66bbf000000008854a43da7c40abdf2067fbf000080bfcc927f3ff980313e68b1133f0900003fc26dcebd99f9f9be00000000c32250bef5a77abf0000000069dd033ee1fddabcbac67dbf000080bfcc927f3fe1fcd33d9cd8093f0900003f00000000000000bf0000000000000000000080bf0000000078c0223e00000000f3be7cbf000080bf08b95f3f36f4a63c0c00003f0900003f00000000000000bf0000000000000000000080bf00000000260c7cbf00000000153f333e000080bf08b95f3f36f4a63c0c00003f0900003fb83eca3d0a07f5beb83eca3dedf74a3e91bc75bfeff74a3ebcdd3fbf4e5794bc946a293f000080bfe7751d3f6d47073e884eec3ec2d8093f1e8dc13df588e6be859b443ebd42413ece8267bfd200c43e3df769bf8b8e9cbcc893cf3e000080bf9aff2c3fe5793b3e884eec3e7eb1133f859b443ef588e6be1e8dc13dd200c43ece8267bfbd42413e07f4debe2299673bb973663f000080bf9d4a123fbb1b393e079dd83ec2d8093f855b3c3e14bed9be855b3c3ef9e9bb3ebdd05abff9e9bb3effb336bf7f47babb5950333f000080bf1ca51f3f2e5c5b3e079dd83e7eb1133fc20d8d3e52a8cfbe47c1b83dc6040d3f569950bf75e0383e13488fbe2d42c03cb0b2753f000080bf708d0c3feb96733eabebc43ec2d8093fcd04873ec23dc5be3313333eaafa063f1f4d46bf4fcfb23ef1660dbff1510fb98767553f000080bf5682173f1c68803eabebc43e7eb1133f14a6b13e14a6b1bef558b43dd329323fd22932bf092e353e000b70be9840503c78d8783f000080bfbfc9093f00b18f3e263ab13ec2d8093f66a6a93e66a6a9be99392e3ec7292a3fc8292abf69a4ae3efc23edbe7d6209bc1fe0623f000080bf6bfb123fcac4943e263ab13e7eb1133fae777e3e4709b5beae777e3ef221fe3e895436bff221fe3ef50435bf8dfd3db4f104353f000080bf1ca51f3fce19913eabebc43e3d8a1d3f52289e3e52289ebe1ef5753ec5bf1e3fc5bf1ebf4309f63e61101ebf776c01bc545d493f000080bfb3931a3f8e109c3e263ab13e3d8a1d3f1ef5753e52289ebe52289e3e5809f63ecbbf1ebfb7bf1e3f528049bf4b5adf3b9ce41d3f000080bf83b6243f8e109c3eabebc43ef262273f145e933e145e93be145e933e3acd133f3acd13bf3bcd133fb33b35bfcd5fdbba02ce343f000080bf1ca51f3ffce9a23e263ab13ef262273f99392e3e66a6a9be66a6a93e6aa4ae3ed3292abfb9292a3f07c462bfde141a3ccf8ced3e000080bfcc4e2c3fccc4943e079dd83ef262273f3313333ec23dc5becd04873e4fcfb23e1f4d46bfaafa063f886755bfb23c0f39f0660d3f000080bfdfc7273f1c68803e079dd83e3d8a1d3ff558b43d14a6b1be14a6b13ee22d353ed42932bfd329323f60c278bf6cb636bcf58c713e000080bf7680353f00b18f3e884eec3ef262273f47c1b83d52a8cfbec20d8d3e76e0383e569950bfc6040d3fa4cb75bffab0c8bcda908e3e000080bfc6bc323feb96733e884eec3e3d8a1d3f00000000000000bf0000000000000000000080bf000000008c153fbf00000000655c2a3f000080bfbf561f3fa66a903c0c00003f0900003f706dce3d99f9f9be0ad723b2b022503ef5a77abf00000000c32b6dbe1df044bd0bbc783f000080bf6a56ff3e15d2c73d884eec3e0900003f3de2933eae67933e3de293bec6b9133f1bf4133fc6b913bf672f353fa0c8a9ba61da343f000080bf9e62bf3e00012f3f223a313fbf8b9d3e00b0763ef6409e3eebb19ebefff1f53e6dd61e3f1fb21ebfae294c3f0e5973bc2d661a3f000080bfce3fb53eb66d323fe4123b3fbf8b9d3eae377f3e1e2db53eae377fbe0511fe3e5460363f0511febef304353fbbb25333f404353f000080bf9e62bf3eb8b0393fe4123b3f56da893eebb19e3ef6409e3e00b076be1fb21e3f6dd61e3ffff1f5be958f1a3f532a633c810b4c3f000080bf7085c93eb66d323f223a313f56da893e5c7f873e3d72c53ee1aa33beb0f1063f8f49463f31fab2be6728123f1c5e94bced1f523f000080bf28a8cf3e6ed53e3fe4123b3fc6516c3eeb39aa3e85c3a93e5ccf2ebef1222a3fa5262a3f40cbaebe06cde53ec1c7263c4dc0643f000080bffeb5d83e9813363f223a313fc6516c3e148e8d3e99e9cf3e3d62b9bd51f90c3f25a2503f25cd38be101b793e46524d3d4ffa773f000080bff491e53ec223423fe4123b3fc0ee443ec23db23eaec7b13e33f3b4bd6a30323f7a24323f451a35beb638753e7d6eec3b538b783f000080bf5519eb3e7e9d383f223a313fc0ee443ee1f28f3e8f62d33e5c8fc2b3fc340f3f8c32543f000000006bf1f5bb24fba53b50fd7f3f000080bf6a56ff3eec3d433fe4123b3fc48b1d3e0a17b53ea4a0b43e8fc2f5b36d0b353f7afe343f00000000309051bb309f513b54ff7f3f000080bf6a56ff3e1784393f223a313fc48b1d3ee1aa333e3d72c53e5c7f87be31fab23e8f49463fb0f106bfef1f523fc75d943c6428123f000080bf161daf3e6ed53e3f8ceb443f56da893e5ccf2e3e85c3a93eeb39aabe40cbae3ea5262a3ff1222abf38a0643fc04712bc1350e63e000080bf400fa63e9813363f8ceb443fbf8b9d3e0aff3c3e0000da3e0aff3cbeecd4bb3ec6d95a3fecd4bbbef404353f4b0298b2f304353f000080bf9e62bf3e3b57453f8ceb443fc6516c3e3d42453ea4d0e63e9931c2bda5b6c33e3895673f870e41be9f5acd3ea626af3c62716a3f000080bf9b17da3ecc7f4f3f8ceb443fc0ee443e7bfc483e5c0feb3eb81e85b3a9d4c63e72e86b3f00000000631d93bd68fcf73c96387f3f000080bf6a56ff3e46f5503f8ceb443fc48b1d3e3d62b93d99e9cf3e148e8dbe1fcd383e27a2503f52f90cbf4ffa773f3a524dbd081b793e000080bf4833993ec223423f52c44e3f56da893e33f3b43daec7b13ec23db2be3e1a353e7b24323f6b3032bf9473783fc303b8bbc2c3763e000080bfe9ab933e7e9d383f52c44e3fbf8b9d3e9931c23da4d0e63e3d4245be750e413e3a95673f9eb6c3be6b716a3fa327afbc745acd3e000080bfa2ada43ecc7f4f3f52c44e3fc6516c3e66eeca3d9959f53e66eecabd13f1493ea1d7753f22f149be6e9b353f809c77baf06d343f000080bf9e62bf3efee05e3f52c44e3fc0ee443ea420cf3d854bfa3e703d0ab3e1474e3e7cc07a3f00000000223e0ebe1808ea3ca1697d3f000080bf6a56ff3e1bec663f52c44e3fc48b1d3eb81e05b48f62d33ee1f28fbe000000008c32543ffd340fbf50fd7f3f77fda5bbd8f4f5bb000080bfa6dd7e3eec3d433f1c9d583f56da893ec2f528b4a4a0b43e0a17b5be000000007afe343f6d0b35bfd5ff7f3f36fdd1ba2feed1ba000080bfa6dd7e3e1784393f1c9d583fbf8b9d3eeb51b8b35c0feb3e7bfc48be0000000075e86b3f9bd4c6be97387f3fbdfbf7bc091d93bd000080bfa6dd7e3e46f5503f1c9d583fc6516c3ea4703db3854bfa3e5220cfbd000000007cc07a3fcf474ebe00077e3f6a78ccbc318df8bd000080bfa6dd7e3e1bec663f1c9d583fc0ee443e33b3a3310000003f0ad7a3b1000000000000803f0000000060757b3f00000000a10640be000080bf4202c53e92c5783f1c9d583fc48b1d3e33b3a3310000003f0ad7a3b1000000000000803f00000000f4a355be00000000d05d7a3f000080bf4202c53e92c5783f1c9d583fc48b1d3e66eeca3d9959f53e66eeca3d16f1493ea1d7753f1ef1493ef71835bf38780339edf0343f000080bf1ca51f3ffee05e3f52c44e3f1052ec3d3d42453ea4d0e63e9931c23da6b6c33e3895673f850e413eb41fdbbe1409f6bbbd5c673f000080bf9c4a123fcc7f4f3f8ceb443f1052ec3d9931c23da4d0e63e3d42453e790e413e3a95673f9eb6c33ebe5c67bf3309f63baf1fdb3e000080bf9aff2c3fcc7f4f3f52c44e3f208c9d3d0aff3c3e0000da3e0aff3c3eecd4bb3ec6d95a3fecd4bb3ef30435bf6df671b2f304353f000080bf1ca51f3f3b57453f8ceb443f208c9d3d3d62b93d99e9cf3e148e8d3e25cd383e25a2503f51f90c3fd9a872bfdc2bafbbcb19a33e000080bfc6bc323fc223423f52c44e3f808b1d3de1aa333e3d72c53e5c7f873e31fab23e8f49463fb0f1063f8f0056bf3111783b117e0c3f000080bfdfc7273f6ed53e3f8ceb443f808b1d3d33f3b43daec7b13ec23db23e4d1a353e7e24323f6730323f6f5878bfe1eb793b9580783e000080bf7680353f7e9d383f52c44e3f0000a0345ccf2e3e85c3a93eeb39aa3e47cbae3ea7262a3fec222a3fe19564bf4bb40b3c217ae63e000080bfcc4e2c3f9813363f8ceb443f0000a034ae377f3e1e2db53eae377f3e0511fe3e5460363f0511fe3ef30435bf0a120ab3f404353f000080bf1ca51f3fb8b0393fe4123b3f808b1d3d00b0763ef6409e3eebb19e3efff1f53e6dd61e3f1fb21e3fe4b64bbf0505363cc3021b3f000080bf83b6243fb66d323fe4123b3f0000a034ebb19e3ef6409e3e00b0763e1fb21e3f6dd61e3ffff1f53eead71abf51d646bc7dd64b3f000080bfb3931a3fb66d323f223a313f808b1d3d3de2933eae67933e3de2933ec6b9133f1bf4133fc6b9133ff3d334bf6063c3bacc35353f000080bf1ca51f3f00012f3f223a313f0000a0348fc27533a4a0b43e0a17b53e000000007afe343f6d0b353fd5ff7fbfd8fdd1bad1eed13a000080bf029f3f3f1784393f1c9d583f0000a034cccc4c338f62d33ee1f28f3e000000008c32543ffc340f3f50fd7fbf73fca5bb5af3f53b000080bf029f3f3fec3d433f1c9d583f808b1d3deb39aa3e85c3a93e5ccf2e3eec222a3fa7262a3f47cbae3e41ffe6be9db0edbb0375643f000080bf6bfb123f9813363f223a313f208c9d3d5c7f873e3d72c53ee1aa333eb0f1063f8f49463f31fab23e117e0cbf2a1178bb8f00563f000080bf5682173f6ed53e3fe4123b3f208c9d3db81e05335c0feb3e7bfc483e0000000077e86b3f99d4c63e4c397fbf0e8bf7bc32da923d000080bf029f3f3f46f5503f1c9d583f208c9d3dc23db23eaec7b13e33f3b43d6730323f7f24323f481a353e94107abe07980fbbaa3f783f000080bfbfc9093f7e9d383f223a313f1052ec3d148e8d3e99e9cf3e3d62b93d52f90c3f27a2503f23cd383ece19a3bef72caf3bd9a8723f000080bf708d0c3fc223423fe4123b3f1052ec3d33f3b4bdaec7b13ec23db23e491a35be7f24323f6730323f927378bfd903b8bbd5c376be000080bf8abd493f7e9d383fc475623f0000a0343d62b9bd99e9cf3e148e8d3e23cd38be27a2503f52f90c3f4ffa77bf40524dbd0c1b79be000080bf3c814c3fc223423fc475623f808b1d3d5ccf2ebe85c3a93eeb39aa3e47cbaebea7262a3fec222a3f36a064bf8e4812bc1b50e6be000080bf38ef523f9813363f824e6c3f0000a034e1aa33be3d72c53e5c7f873e31fab2be8f49463fb0f1063fec1f52bf4c5e943c692812bf000080bf2176573f6ed53e3f824e6c3f808b1d3d00b076bef6409e3eebb19e3efff1f5be6dd61e3f1fb21e3fad294cbfb35873bc2e661abf000080bf7d875a3fb66d323f3427763f0000a034ae377fbe1e2db53eae377f3e0511febe5460363f0511fe3ef20435bf9cbda633f40435bf000080bfe6985f3fb8b0393f3427763f808b1d3d3de293beae67933e3de2933ec6b913bf1bf4133fc6b9133f672f35bf05c6a9ba62da34bf000080bfe6985f3f00012f3f0000803f0000a034ebb19ebef6409e3e00b0763e1fb21ebf6dd61e3ffff1f53e968f1abf002a633c810b4cbf000080bf50aa643fb66d323f0000803f808b1d3d5c7f87be3d72c53ee1aa333eb0f106bf8f49463f31fab23e692812bf595e94bcec1f52bf000080bfadbb673f6ed53e3f3427763f208c9d3deb39aabe85c3a93e5ccf2e3eec222abfa7262a3f47cbae3e09cde5be46c9263c4cc064bf000080bf96426c3f9813363f0000803f208c9d3d148e8dbe99e9cf3e3d62b93d52f90cbf27a2503f26cd383e171b79be31524d3d4efa77bf000080bf94b0723fc223423f3427763f1052ec3dc23db2beaec7b13e33f3b43d683032bf7f24323f4d1a353eca3875be966dec3b528b78bf000080bf4474753f7e9d383f0000803f1052ec3de1f28fbe8f62d33e00000000fc340fbf8c32543f000000001cf3f53b48fca53b50fd7fbf000080bfcc927f3fec3d433f3427763fc48b1d3e0a17b5bea4a0b43e000000006d0b35bf7afe343f00000000be93513bbea2513b54ff7fbf000080bfcc927f3f1784393f0000803fc48b1d3e0aff3cbe0000da3e0aff3c3eecd4bbbec6d95a3fecd4bb3ef30435bfa84a6fb2f30435bf000080bfe6985f3f3b57453f824e6c3f208c9d3d3d4245bea4d0e63e9931c23d9eb6c3be3a95673f790e413ed5acbabed41c233df4286ebf000080bf66f36c3fcc7f4f3f824e6c3f1052ec3d7bfc48be5c0feb3e000000009bd4c6be77e86b3f00000000b4a2943d958cfa3c6f347fbf000080bfcc927f3f46f5503f824e6c3fc48b1d3e9931c2bda4d0e63e3d42453e780e41be3a95673f9eb6c33e958c6dbff11116bd4aeebdbe000080bf683e523fcc7f4f3fc475623f208c9d3d66eecabd9959f53e66eeca3d0ff149bea3d7753f0ff1493e717b32bffe61843bbc8437bf000080bfe6985f3fbb6b603fc475623f1052ec3d5220cfbd854bfa3e00000000cc474ebe7ec07a3f00000000526b3b3e132e1a3db87d7bbf000080bfc6737f3f192b663fc475623fc48b1d3eb81e8532854bfa3e5220cf3d000000007cc07a3fcf474e3e5e147cbfb6d90fbddcdc2e3e000080bffda73f3f9fe6663f1c9d583f1052ec3d33b3a3310000003f0ad7a3b1000000000000803f0000000075dc32bf00000000ee26373f000080bf3ea91e3f02d4793f1c9d583fc48b1d3e33b3a3310000003f0ad7a3b1000000000000803f000000002f2478bf0000000010c67b3e000080bf4205603fb81f793f1c9d583fc48b1d3e33b3a3310000003f0ad7a3b1000000000000803f000000002ad06d3e00000000280079bf000080bf4205603fb81f793f1c9d583fc48b1d3eebb19ebef6409e3e00b076be1fb21ebf6dd61e3ffff1f5bee8d71a3f53d746bc7ed64bbf000080bfd860d53db66d323f0000803f56da893eae377fbe1e2db53eae377fbe0511febe5460363f0511febef304353f052a86b2f30435bf000080bf20ecfd3db8b0393f3427763f56da893e00b076bef6409e3eebb19ebefff1f5be6dd61e3f1fb21ebfe4b64b3f0405363cc3021bbf000080bfb23b133eb66d323f3427763fbf8b9d3e3de293beae67933e3de293bec6b913bf1bf4133fc6b913bff8d3343fba50c3bac73535bf000080bf20ecfd3d01012f3f0000803fbf8b9d3e5ccf2ebe85c3a93eeb39aabe3acbaebea8262a3fee222abfe495643f90b30b3c167ae6be000080bfcc9c313e9813363f824e6c3fbf8b9d3ee1aa33be3d72c53e5c7f87be22fab2be9349463fb1f106bf9700563f1814783b057e0cbf000080bf22811f3e6ed53e3f824e6c3f56da893e33f3b4bdaec7b13ec23db2be3e1a35be7f24323f683032bf6f58783f68e7793b918078be000080bf7a63563e7e9d383fc475623fbf8b9d3eeb61b9bd99e9cf3e148e8dbe11cd38be27a2503f52f90cbfdfa8723ff827afbba519a3be000080bfba544b3ec223423fc475623f56da893eeb39aabe85c3a93e5ccf2ebeec222abfa7262a3f47cbaebe3fffe63e27b1edbb047564bf000080bfa49e983d9813363f0000803fc6516c3e5c7f87be3d72c53ee1aa33beb0f106bf8f49463f31fab2be117e0c3f0e1178bb8f0056bf000080bff4d5bc3d6ed53e3f3427763fc6516c3e0aff3cbe0000da3e0aff3cbee6d4bbbec6d95a3ff4d4bbbefa04353f8ab31732ec0435bf000080bf20ecfd3d3b57453f824e6c3fc6516c3e9931c2bda4d0e63e3d4245be6f0e41be3895673fa8b6c3bebf5c673f9007f63ba91fdbbe000080bf0660343ecc7f4f3fc475623fc6516c3ec23db2beaec7b13e33f3b4bd683032bf7f24323f4d1a35be9b107a3ec3970fbbaa3f78bf000080bf80221e3d7e9d383f0000803fc0ee443e148e8dbe99e9cf3e3d62b9bd52f90cbf27a2503f23cd38bed119a33e882daf3bd8a872bf000080bf805d4a3dc223423f3427763fc0ee443e3d4245bea4d0e63e9931c2bd9eb6c3be3a95673f790e41beb01fdb3e0b09f6bbbd5c67bf000080bf2c18933dcc7f4f3f824e6c3fc0ee443e66eecabd9959f53e66eecabd0ff149bea3d7753f0cf149bef204353f4594ab31f40435bf000080bf20ecfd3dfee05e3fc475623fc0ee443e0a17b5bea4a0b43e000000006d0b35bf7afe343f00000000be93513bbea2513b54ff7fbf000080bf008871ba1784393f0000803fc48b1d3ee1f28fbe8f62d33e00000000fc340fbf8c32543f000000001cf3f53b48fca53b50fd7fbf000080bf008871baec3d433f3427763fc48b1d3e7bfc48be5c0feb3e000000009bd4c6be77e86b3f00000000b4a2943d958cfa3c6f347fbf000080bf008871ba46f5503f824e6c3fc48b1d3e5220cfbd854bfa3e00000000cc474ebe7ec07a3f00000000526b3b3e132e1a3db87d7bbf000080bf008871ba1bec663fc475623fc48b1d3e33b3a3310000003f0ad7a3b1000000000000803f000000004c443b3f00000000668c2ebf000080bf7494043e92c5783f1c9d583fc48b1d3e145e933e145e93be145e93be3acd133f3acd13bf3bcd13bf0bd2343fce4ccbbab037353f000080bf9e62bf3efce9a23e00008032c08b9d3e52289e3e1ef575be52289ebebcbf1e3f6d09f6bebcbf1ebf991f353f60ba893a3cea343f000080bf9e62bf3e2865b23e3c8b1d3dc08b9d3e4709b53eae777ebeae777ebe7c54363f2322febee721febecf79113fb262f2bbd6a3523f000080bf7074cd3eb6b1af3e3c8b1d3d3bda893e52289e3e52289ebe1ef575bec5bf1e3fc5bf1ebf4309f6be9a20223f7a050c3db1ec453f000080bf7085c93e8e109c3e000080323bda893ec23dc53ecd0487be331333be1e4d463fb4fa06bf37cfb2bec8dcd03e3ebeb1bb0cba693f000080bf8ca3dc3eb9c0aa3e3c8b1d3dbc516c3e66a6a93e66a6a9be99392ebec7292a3fc8292abf69a4aebe8f4edf3efa7cd0bcac46663f000080bffeb5d83eccc4943e00008032bc516c3e52a8cf3ec20d8dbe47c1b8bd5699503fc6040dbf76e038be4b0a5c3e416612bbe6047a3f000080bf2584ed3eeaeba63e3c8b1d3db8ee443e14a6b13e14a6b1bef558b4bdd229323fd32932bf092e35be100e6f3e7cf860bcc7e6783f000080bf5519eb3e00b18f3e00008032b8ee443e4721d33ef6708fbe0ad723b30e29543f0f430fbf00000000d3b5053add03463af9ff7f3f000080bf6a56ff3e0368a53e3c8b1d3d908b1d3ecd7cb43ecd7cb4be0ad72333f404353ff30435bf00000000d937a4badb37a4bae6ff7f3f000080bf6a56ff3ecce38d3e00008032908b1d3ec23dc53e851333becd0487be194d463f6acfb2bea9fa06bfaae90f3feaabe2ba0fb8533f000080bfa775ce3e929fc73e798b9d3d3bda893e66a6a93e99392ebe66a6a9bec5292a3f7aa4aebec4292abfad0a353fffa2b23938ff343f000080bf9e62bf3ebf29c93e798b9d3dc08b9d3e14bed93e855b3cbe855b3cbec2d05a3f01eabbbed2e9bbbe0398c93eb71e13bb01526b3f000080bfe118de3e6badc43e798b9d3dbc516c3ef588e63e859b44be1e8dc1bdcd82673fda00c4becf4241be7baa503e5b79a7bad9a07a3f000080bfb87dee3e040fc23e788b9d3db8ee443eaec7ea3ecd4c48bea4a8a4b3fcd66b3f7d27c7be0000000063a108b87bcca1b80000803f000080bf6a56ff3efce2c03e788b9d3d908b1d3e52a8cf3e47c1b8bdc20d8dbef23d503f7e6142be4dbf0cbfb9540f3f3e7e11ba1b1d543f000080bfa6c0ce3e1324e33e6351ec3d3bda893e14a6b13ef558b4bd14a6b1be7bd6313f15243fbe7cd631bf7c06353f776f36396a03353f000080bf9e62bf3e19d7e33e6351ec3dc08b9d3ef588e63e1e8dc1bd859b44be7922673fbbc249be5ba3c3be0d7bc73ed8423fba4ec56b3f000080bf4d84de3eadbee13e6351ec3dbc516c3e0a07f53eb83ecabdb83ecabd9087753fe9ef50be32e948be065a4d3e7e901a3aadcc7a3f000080bf8fc4ee3e845de03e6251ec3db8ee443e99f9f93ec26dcebd0ad723b38b707a3f784354beabeab0b99bf8aa398963bab8ffff7f3f000080bf6a56ff3e8cb3df3e6251ec3d908b1d3eb8d6d33e8fa467bae1f28fbe3c3c543f885e1cbc4b210fbfef220f3f8b2867b8ba3e543f000080bfbfbece3eff3a003fc18b1d3e3bda893e0a17b53e85a467ba0a17b5bea402353fd37423bca40235bff904353f2eef3d38ee04353f000080bf9e62bf3eff3a003fc18b1d3ec08b9d3ea370eb3e82a467ba7bfc48bee8e56b3fd3380cbc63d4c6be2cd6c63e29b398b821e86b3f000080bf9481de3eff3a003fc18b1d3ebc516c3e7bb4fa3ecea467ba5220cfbd1ed47a3fe55bfabb50a24cbe0baa4c3ea5a1583b50d57a3f000080bf94c2ee3eff3a003fc18b1d3eb8ee443e0000003f33b3a3b1000030b45cfe7f3f5244e6bb9fa06fbac19a753acb78543ba0ff7f3f000080bf6a56ff3eff3a003fc18b1d3e908b1d3e0a07f53eb83ecabdb83eca3d9e96753f444451be8b69473e1cb64bbe6fc0593516e27a3f000080bf23f4073f845de03e6251ec3dd852ec3df588e63e859b44be1e8dc13dcd82673fda00c4becd42413e91ab50be7b1fa63acba07a3f000080bf8f17083f040fc23e788b9d3dd852ec3df588e63e1e8dc1bd859b443ee35d673f2c0e49be55b8c23ef195c6bef9e731b6a8f56b3f000080bf4314103fadbee13e6251ec3d188c9d3d14bed93e855b3cbe855b3c3ec2d05a3f01eabbbed2e9bb3e0aa7c9be60e8fc3ad54e6b3f000080bff949103f6badc43e788b9d3d188c9d3d52a8cf3e47c1b8bdc20d8d3e3d87503ff64640bef3800c3f090c0fbfc425e8372a4e543f000080bf17f6173f1324e33e6151ec3d408d1d3dc23dc53e851333becd04873e194d463f6acfb2bea9fa063f05ea0fbfb85ee03ad2b7533f000080bf961b183f929fc73e778b9d3d408d1d3d14a6b13ef558b4bd14a6b13e07ee313fbb613cbe07ee313fa50435bf08ad13384105353f000080bf1ca51f3f19d7e33e6151ec3d0000000066a6a93e99392ebe66a6a93ec5292a3f7aa4aebec4292a3f37ff34bfc5abb239ae0a353f000080bf1ca51f3fbf29c93e778b9d3d000000004709b53eae777ebeae777e3e7c54363f2322febee721fe3e27bc11bf2162ac3b0877523f000080bf319c183fb6b1af3e388b1d3d408d1d3d52289e3e1ef575be52289e3ebcbf1e3f6d09f6bebcbf1e3f3bea34bf57bd893a9a1f353f000080bf1ca51f3f2865b23e388b1d3d0000000052289e3e52289ebe1ef5753ec5bf1e3fc5bf1ebf4309f63e61101ebf776c01bc545d493f000080bfb3931a3f8e109c3e00000000408d1d3d145e933e145e93be145e933e3acd133f3acd13bf3bcd133fb33b35bfcd5fdbba02ce343f000080bf1ca51f3ffce9a23e0000000000000000cd04b53e999909aecd04b53e1003353f2ab913bc1103353fef0435bfcf913e38f804353f000080bf1ca51f3fff3a003fc08b1d3e0000000033dbd43e14aec72deb398e3ea7a3543f483f0cbc86880e3fdc890ebffcfbd935a6a5543f000080bf0bf7173fff3a003fc08b1d3e408d1d3d66a6a93e66a6a9be99392e3ec7292a3fc8292abf69a4ae3efc23edbe7d6209bc1fe0623f000080bf6bfb123fcac4943e00000000188c9d3dc23dc53ecd0487be3313333e1e4d463fb6fa06bf36cfb23eead7d0be57e1b33b1cbb693f000080bfa304113fb9c0aa3e388b1d3d188c9d3d3383ec3e9999192e0aef433e864b6c3f090bf8bb1af2c43e8af3c4be82734537434d6c3f000080bfa015103fff3a003fc08b1d3e188c9d3d14a6b13e14a6b1bef558b43dd329323fd22932bf092e353e000b70be9840503c78d8783f000080bfbfc9093f00b18f3e00000000d852ec3d52a8cf3ec20d8dbe47c1b83d5699503fc4040dbf72e0383e002d5bbe4420683bcb107a3f000080bf5894083feaeba63e3c8b1d3dd852ec3dc23db23eb836b33dc23db23e3239323f3c48333e2839323f9e0535bf33f8ae384804353f000080bf1ca51f3f728a0e3f73ee443e00000000145ed03ea4a8b73d148e8d3e4efb503fdbb1373e3b8c0c3f2cdb0ebfd36e78b90e6f543f000080bf17f6173ff4e30e3f73ee443e408d1d3deb39aa3e52f82d3eeb39aa3ee0242a3f0ccbae3ec1242a3f930b35bf7f85d03951fe343f000080bf1ca51f3f20e11b3f75516c3e000000007be4c53e00d8323e5c7f873e2368463f15e1b23e0ccd063fc1b80fbffeaef0ba42d9533f000080bf961b183f36a61c3f75516c3e408d1d3debb19e3e00f0753eebb19e3e15b71e3f4f36f63effb61e3ff32235bf662e9b3adee6343f000080bf1ca51f3f6b43273f5ada893e00000000eba1b53eae777e3eae377f3ed068363fea28fe3ec1e0fd3ec05311bff324f4bb11be523f000080bf329c183f249d283f5ada893e408d1d3d3de2933eae67933e3de2933ec6b9133f1bf4133fc6b9133ff3d334bf6063c3bacc35353f000080bf1ca51f3f00012f3fb98b9d3e00000000ebb19e3ef6409e3e00b0763e1fb21e3f6dd61e3ffff1f53eead71abf51d646bc7dd64b3f000080bfb3931a3fb66d323fb98b9d3e408d1d3d7be4c53eeb09873ee1aa333e3860463f9fe0063f31c9b23e2cd9d0bec27fa9bbf3ba693f000080bfa404113fa2152b3f5ada893e188c9d3deb39aa3e85c3a93e5ccf2e3eec222a3fa7262a3f47cbae3e41ffe6be9db0edbb0375643f000080bf6bfb123f9813363fb98b9d3e188c9d3d145ed03e1f158d3e3d62b93d11b5503fd9dc0c3fc3d2383e30ee5bbe2d930cbb75067a3f000080bf5894083f08002d3f5ada893ed852ec3dc23db23eaec7b13e33f3b43d6730323f7f24323f481a353e94107abe07980fbbaa3f783f000080bfbfc9093f7e9d383fb98b9d3ed852ec3db8d6d33e47798f3e295c0fb43445543f56190f3f00000000b57207bad3eb483af9ff7f3f000080bf6a56ff3efcc12d3f5ada893e908b1d3e0a17b53ea4a0b43e8fc2f5b36d0b353f7afe343f00000000309051bb309f513b54ff7f3f000080bf6a56ff3e1784393fb98b9d3e908b1d3eb85eda3e0a273c3e0aff3c3ed2f15a3f67a8bb3e4791bb3e5d2ec9be1da012bb9a686b3f000080bff949103f481f1e3f75516c3e188c9d3deb31e73e3d72443e9931c23df59b673f4a8fc33ea72c413ed97850be27f1adba6da37a3f000080bf8f17083f7b6e1f3f75516c3ed852ec3da370eb3e6626483e0ad723b4c3ee6b3fb0b6c63e00000000fd4e0638e7769fb80000803f000080bf6a56ff3e8004203f76516c3e908b1d3eeb31e73eeb79c03d3d42453e6ad1673f8367413ea582c23ea50dc6be107f7eb949126c3f000080bf4314103fa8960f3f73ee443e188c9d3dccbcf53ef530c93d66eeca3df2f1753f754e4a3e4d8f473e018b4bbe959617b946e47a3f000080bf23f4073f3c47103f73ee443ed852ec3d7bb4fa3e5268cd3d7b142eb4d3cd7a3f86434d3ee1dc16bafaebc33950ea883af6ff7f3f000080bf6a56ff3e399c103f74ee443e908b1d3e7b14fb3e0000002dc2c5c73df6fd7a3f316ee2bbfa6d493e396f49be76260cb77fff7a3f000080bf20f5073fff3a003fc08b1d3ed852ec3d145ed03e1f158d3eeb61b9bd11b5503fdadc0c3fb6d238be60115b3e793c623b53127a3f000080bf2584ed3e08002d3f5ada893eb8ee443ec23db23eaec7b13e33f3b4bd6a30323f7a24323f451a35beb638753e7d6eec3b538b783f000080bf5519eb3e7e9d383fb98b9d3eb8ee443e7be4c53eeb09873ee1aa33be3b60463fa0e0063f23c9b2bea2cdd03e738cae3b78bd693f000080bf8ca3dc3ea2152b3f5ada893ebc516c3eeb39aa3e85c3a93e5ccf2ebef1222a3fa5262a3f40cbaebe06cde53ec1c7263c4dc0643f000080bffeb5d83e9813363fb98b9d3ebc516c3eeba1b53eae777e3eae377fbed068363fea28fe3ec1e0fdbee6a1113fd6b7a13b5589523f000080bf6e74cd3e249d283f5ada893e3bda893eebb19e3ef6409e3e00b076be1fb21e3f6dd61e3ffff1f5be958f1a3f532a633c810b4c3f000080bf7085c93eb66d323fb98b9d3e3bda893eebb19e3e00f0753eebb19ebe15b71e3f4f36f63effb61ebfd8e6343f2ecb9a3af922353f000080bf9e62bf3e6b43273f5ada893ec08b9d3e3de2933eae67933e3de293bec6b9133f1bf4133fc6b913bf672f353fa0c8a9ba61da343f000080bf9e62bf3e00012f3fb98b9d3ec08b9d3eeb39aa3e52f82d3eeb39aabee0242a3f0ccbae3ec1242abf5cfe343ffd1bcb39880b353f000080bf9e62bf3e20e11b3f76516c3ec08b9d3e7be4c53e00d8323e5c7f87be2368463f12e1b23e0bcd06bfadbc0f3fb055d73aa0d6533f000080bfa775ce3e36a61c3f76516c3e3bda893ec23db23eb836b33dc23db2beab2a323fdf13353ea22a32bfac03353f47cf1e393a06353f000080bf9e62bf3e728a0e3f74ee443ec08b9d3e145ed03ea4a8b73d148e8dbe4fbd503f9dcf383ee1d00cbfb3250f3f713b043adb3c543f000080bfa6c0ce3ef4e30e3f74ee443e3bda893eb85eda3e0a273c3e0aff3cbed2f15a3f6fa8bb3e3f91bbbeb537c93eceb8053ba3666b3f000080bfe118de3e481f1e3f76516c3ebc516c3eeb31e73eeb79c03d3d4245be4aa2673fcd1d413ef174c3be9bfac63e88820e3a71e06b3f000080bf4d84de3ea8960f3f74ee443ebc516c3eeb31e73e3d72443e9931c2bdf29b673f548fc33ea82c41becb75503eb6bab13a95a37a3f000080bfb87dee3e7b6e1f3f76516c3eb8ee443eccbcf53ef530c93d66eecabd09e9753f413d493e5a5149be4e404d3e22d2b73900ce7a3f000080bf8fc4ee3e3c47103f74ee443eb8ee443e145e933e145e93be145e933e3acd133f3acd13bf3bcd133fb33b35bfcd5fdbba02ce343f000080bf1ca51f3ffce9a23e203ab13ebf8b9d3e52289e3e1ef575be52289e3ebcbf1e3f6d09f6bebcbf1e3f3bea34bf57bd893a9a1f353f000080bf1ca51f3f2865b23e89ebc43ebf8b9d3eae777e3eae777ebe4709b53e1922fe3e1922febe7054363fc2a352bf465ff2bbec79113f000080bf05ae263fb6b1af3e89ebc43e52da893e1ef5753e52289ebe52289e3e5809f63ecbbf1ebfb7bf1e3f528049bf4b5adf3b9ce41d3f000080bf83b6243f8e109c3e203ab13e52da893e8513333ecd0487bec23dc53e40cfb23eb5fa06bf1c4d463f09ba69bf8bbcb1bbd6dcd03e000080bf93452e3fb9c0aa3e89ebc43ea6516c3e99392e3e66a6a9be66a6a93e6aa4ae3ed3292abfb9292a3f07c462bfde141a3ccf8ced3e000080bfcc4e2c3fccc4943e203ab13ea6516c3ef5c0b83dc20d8dbe52a8cf3e24e0383ec6040dbf5a99503fed047abf986e12bbd3095c3e000080bfdeb5363feaeba63e89ebc43eb4ee443ef558b43d14a6b1be14a6b13ee22d353ed42932bfd329323f60c278bf6cb636bcf58c713e000080bf7680353f00b18f3e203ab13eb4ee443e295c8f33f6708fbe4721d33e000000000f430fbf0d29543ff9ff7fbf770c463aa5bb053a000080bf029f3f3f0368a53e89ebc43e808b1d3e8fc27533cd7cb4becd7cb43e00000000f10435bff504353f84ff7fbf4283323b3f83323b000080bf029f3f3fcce38d3e203ab13e808b1d3ecd04873e851333bec23dc53eb4fa063f4fcfb2be194d463f0ab853bf02b3e2bab1e90f3f000080bfa02e273f929fc73eff9cd83e52da893e66a6a93e99392ebe66a6a93ec5292a3f7aa4aebec4292a3f37ff34bfc5abb239ae0a353f000080bf1ca51f3fbf29c93eff9cd83ebf8b9d3e855b3c3e855b3cbe14bed93ed6e9bb3ee4e9bbbec8d05a3f01526bbfa21d13bb0398c93e000080bf3d002f3f6badc43eff9cd83ea6516c3e1e8dc13d859b44bef588e63ea642413ed500c4bece82673fdba07abfa076a7ba51aa503e000080bfaa32373f040fc23eff9cd83eb4ee443e3d9aa233cd4c48beaec7ea3e000000008127c7befad66b3f000080bf66a1a1b80c7d08b8000080bf029f3f3ffce2c03eff9cd83e808b1d3ec20d8d3e47c1b8bd52a8cf3ef3800c3ff64640be3d87503fa64e54bfa565cbb8500b0f3f000080bf1f54273f1324e33e834eec3e52da893e14a6b13ef558b4bd14a6b13e07ee313fbb613cbe07ee313fa50435bf08ad13384105353f000080bf1ca51f3f19d7e33e834eec3ebf8b9d3e859b443e1e8dc1bdf588e63e56b8c23e290e49bee35d673f11f66bbf08b5a3b8fe93c63e000080bff4352f3fadbee13e874eec3ea6516c3eb83eca3db83ecabd0a07f53e9069473e444451be9e96753f13e27abffd707a365fb64b3e000080bf1456373f845de03e874eec3eb4ee443e429eac33c26dcebd99f9f93e00000000189854be0e6c7a3f000080bf1b989eb752a386b6000080bf029f3f3f8cb3df3e874eec3e808b1d3eeb398e3e703d0aae33dbd43e86880e3f483f0cbca7a3543fa6a554bf47904eb5dc890e3f000080bf2c53273fff3a003ffbffff3e52da893ecd04b53e999909aecd04b53e1003353f2ab913bc1103353fef0435bfcf913e38f804353f000080bf1ca51f3fff3a003ffbffff3ebf8b9d3e0aef433e7b140e2d3383ec3e1af2c43e090bf8bb864b6c3f434d6cbf7e0abdb68bf3c43e000080bf96342f3fff3a003ffbffff3ea6516c3ec2c5c73d5c8f1eae7b14fb3e056e493efd6ee2bbf5fd7a3f7eff7abfd95fa635416f493e000080bf1655373fff3a003ffbffff3eb4ee443eaeffaf337bd823b20000003f00000000d648debb7efe7f3f000080bf0b080db8abeb74b4000080bf029f3f3fff3a003ffbffff3e808b1d3eb83ecabdb83ecabd0a07f53e8c6947be444451be9e96753f16e27abf5e8751351db64bbe000080bfeee7473f845de03e874eec3e1053ec3d1e8dc1bd859b44bef588e63ec14241bee200c4becb82673fcba07abfe914a63a8fab50be000080bf5a0b483f040fc23eff9cd83e1053ec3d859b44be1e8dc1bdf588e63e63b8c2be480e49bede5d673fa5f56bbf65312ab60196c6be000080bf0e08503fadbee13e874eec3e608c9d3d855b3cbe855b3cbe14bed93ef0e9bbbe01eabbbebdd05a3fda4e6bbf6f86fd3aefa6c9be000080bfc73d503f6badc43eff9cd83e608c9d3dc20d8dbe47c1b8bd52a8cf3ef5800cbf344740be3b87503f2c4e54bfbc49f737060c0fbf000080bfe2e9573f1324e33e874eec3ef08b1d3dcd0487be331333bec23dc53eaafa06bf4fcfb2be1f4d463fd6b753bfcf77e03affe90fbf000080bf620f583f929fc73eff9cd83ef08b1d3d14a6b1bef558b4bd14a6b13e04ee31bff7613cbe04ee313f3e0535bf2f150d38a90435bf000080bfe6985f3f19d7e33e874eec3e0000003466a6a9be99392ebe66a6a93ec7292abf69a4aebec8292a3faa0a35bf6235b2393bff34bf000080bfe6985f3fbf29c93eff9cd83e00000034ae777ebeae777ebe4709b53ef221febef221febe8954363ffd7652bf6d4eac3b37bc11bf000080bffd8f583fb6b1af3e89ebc43ef08b1d3d52289ebe1ef575be52289e3ec5bf1ebf4309f6bec5bf1e3fa71f35bf60018a3a2eea34bf000080bfe6985f3f2865b23e89ebc43e000000341ef575be52289ebe52289e3e4309f6bec5bf1ebfc5bf1e3fb6c645bfa38210bdfe4a22bf000080bf7d875a3f8e109c3e203ab13ef08b1d3d145e93be145e93be145e933e3bcd13bf3acd13bf3acd133f06d234bfa95ecbbab63735bf000080bfe6985f3ffce9a23e203ab13e00000034cd04b5be9999092ecd04b53e110335bf2ab913bc1003353ff80435bf208f3e38ef0435bf000080bfe6985f3fff3a003ffbffff3e00000034eb398ebe703d0a2e33dbd43e86880ebf483f0cbca7a3543fa6a554bfa203da35dc890ebf000080bfd6ea573fff3a003ffbffff3ef08b1d3d99392ebe66a6a9be66a6a93e63a4aebec6292abfca292a3f136366bfd638da3ceccfdebe000080bf38ef523fccc4943e203ab13e608c9d3d331333becd0487bec23dc53e42cfb2beabfa06bf224d463f21bb69bf52eeb33bd5d7d0be000080bf71f8503fb9c0aa3e89ebc43e608c9d3d0aef43be7b140ead3383ec3e1af2c4be090bf8bb864b6c3f434d6cbfaa7545378af3c4be000080bf6c09503fff3a003ffbffff3e608c9d3df558b4bd14a6b1be14a6b13efe2d35bed02932bfd629323f11fc78bf16217a3c19916dbe000080bf8abd493f00b18f3e203ab13e1053ec3df5c0b8bdc20d8dbe52a8cf3e5ce038bec6040dbf5699503fcc107abf7f22683be12c5bbe000080bf2488483feaeba63e89ebc43e1053ec3dc23db2beb836b33dc23db23e2e3932bf1c48333e2e39323f430435bf24ebae38a30535bf000080bfe6985f3f728a0e3f96d8093f00000034148e8dbea4a8b73d145ed03e3b8c0cbf9fb1373e52fb503f116f54bf66db79b927db0ebf000080bfe2e9573ff4e30e3f96d8093ff08b1d3deb39aabe52f82d3eeb39aa3ed0242abf16cbae3ed0242a3f55fe34bfb70bce39900b35bf000080bfe6985f3f20e11b3f6cb1133f000000345c7f87be52d8323e7be4c53e0ccd06bf2be1b23e2068463f42d953bf7bb9f0bac1b80fbf000080bf620f583f36a61c3f6cb1133ff08b1d3debb19ebe00f0753eebb19e3e05b71ebf6536f63e06b71e3fe1e634bf8bdc9a3aef2235bf000080bfe6985f3f6b43273f3a8a1d3f00000034ae377fbeae777e3eeba1b53eb5e0fdbe1a29fe3ec368363f0bbe52bfad1cf4bbca5311bf000080bfff8f583f249d283f3a8a1d3ff08b1d3d3de293beae67933e3de2933ec6b913bf1bf4133fc6b9133f672f35bf05c6a9ba62da34bf000080bfe6985f3f00012f3fee62273f0000003400b076bef6409e3eebb19e3efff1f5be6dd61e3f1fb21e3fad294cbfb35873bc2e661abf000080bf7d875a3fb66d323fee62273ff08b1d3de1aa33beeb09873e7be4c53e18c9b2beabe0063f3760463ff6ba69bff57aa9bb1fd9d0be000080bf71f8503fa2152b3f3a8a1d3f608c9d3d5ccf2ebe85c3a93eeb39aa3e47cbaebea7262a3fec222a3f36a064bf8e4812bc1b50e6be000080bf38ef523f9813363fee62273f608c9d3d3d62b9bd1f158d3e145ed03ec4d238bed9dc0c3f11b5503f75067abf25940cbb2eee5bbe000080bf2488483f08002d3f3a8a1d3f0853ec3d33f3b4bdaec7b13ec23db23e491a35be7f24323f6730323f927378bfd903b8bbd5c376be000080bf8abd493f7e9d383fee62273f0853ec3d295c8f3347798f3eb8d6d33e0000000056190f3f3445543ff9ff7fbf6c00493a988007ba000080bf029f3f3ffcc12d3f3a8a1d3f808b1d3e8fc27533a4a0b43e0a17b53e000000007afe343f6d0b353fd5ff7fbfd8fdd1bad1eed13a000080bf029f3f3f1784393fee62273f808b1d3e0aff3cbe0a273c3eb85eda3e1f91bbbe70a8bb3ed8f15a3f96686bbf514912bb732ec9be000080bfc73d503f481f1e3f6cb1133f608c9d3d9931c2bd3d72443eeb31e73eb72c41be518fc33ef29b673f6da37abf3d08aebada7850be000080bf5a0b483f7d6e1f3f6cb1133f0853ec3d0ad7a3336626483ea370eb3e00000000bbb6c63ec0ee6b3f000080bf772a9eb80c370538000080bf029f3f3f8004203f6ab1133f808b1d3e3d4245beeb79c03deb31e73e9882c2be6667413e6fd1673f4a126cbf0aab7cb9a00dc6be000080bf0e08503fa8960f3f96d8093f608c9d3d66eecabdf530c93dccbcf53e628f47be804e4a3ef0f1753f46e47abff7b319b9fd8a4bbe000080bfeee7473f3c47103f96d8093f0853ec3d0ad7a333a468cd3d7bb4fa3e000000009cd54d3e5bc67a3f000080bf35995bb8b83e3437000080bf029f3f3f399c103f96d8093f808b1d3ec2c5c7bd0ad71d2e7b14fb3eff6d49be076fe2bbf6fd7a3f7eff7abf86260cb73e6f49be000080bfece8473fff3a003ffbffff3e0853ec3d3d62b93d1f158d3e145ed03ec8d2383ed8dc0c3f10b5503f51127abf5034623b8b115b3e000080bfdeb5363f08002d3f3a8a1d3fb4ee443e33f3b43daec7b13ec23db23e4d1a353e7e24323f6730323f6f5878bfe1eb793b9580783e000080bf7680353f7e9d383fee62273fb4ee443ee1aa333eeb09873e7be4c53e17c9b23eaae0063f3760463f73bd69bfd17eae3bb9cdd03e000080bf93452e3fa2152b3f3a8a1d3f9a516c3e5ccf2e3e85c3a93eeb39aa3e47cbae3ea7262a3fec222a3fe19564bf4bb40b3c217ae63e000080bfcc4e2c3f9813363fee62273f9a516c3eae377f3eae777e3eeba1b53eb5e0fd3e1a29fe3ec368363f618952bfc3cba13bd6a1113f000080bf05ae263f249d283f3a8a1d3f52da893e00b0763ef6409e3eebb19e3efff1f53e6dd61e3f1fb21e3fe4b64bbf0505363cc3021b3f000080bf83b6243fb66d323fee62273f52da893eebb19e3e00f0753eebb19e3e15b71e3f4f36f63effb61e3ff32235bf662e9b3adee6343f000080bf1ca51f3f6b43273f3a8a1d3fbf8b9d3e3de2933eae67933e3de2933ec6b9133f1bf4133fc6b9133ff3d334bf6063c3bacc35353f000080bf1ca51f3f00012f3fee62273fbf8b9d3eeb39aa3e52f82d3eeb39aa3ee0242a3f0ccbae3ec1242a3f930b35bf7f85d03951fe343f000080bf1ca51f3f20e11b3f6ab1133fbf8b9d3e5c7f873e52d8323e7be4c53e0ccd063f2be1b23e2068463f9bd653bf0d3dd73ab3bc0f3f000080bfa02e273f36a61c3f6ab1133f52da893ec23db23eb836b33dc23db23e3239323f3c48333e2839323f9e0535bf33f8ae384804353f000080bf1ca51f3f728a0e3f96d8093fbf8b9d3e148e8d3ea4a8b73d145ed03e3c8c0c3f9eb1373e51fb503f176f54bf82b37d391edb0e3f000080bf1f54273ff4e30e3f96d8093f52da893e0aff3c3e0a273c3eb85eda3e2191bb3e70a8bb3ed8f15a3f9c666bbff45d053bd737c93e000080bf3d002f3f481f1e3f6ab1133fa6516c3e3d42453eeb79c03deb31e73e9882c23e6667413e6fd1673fca116cbf27f310390410c63e000080bff4352f3fa8960f3f96d8093fa6516c3e9931c23d3d72443eeb31e73ebe2c413e528fc33ef29b673f94a37abfc0c3b13adb75503e000080bfaa32373f7d6e1f3f6ab1133fb4ee443e66eeca3df530c93dccbcf53e698f473e824e4a3ef0f1753f26e47abf9a16cf387e8d4b3e000080bf1456373f3c47103f96d8093fb4ee443e145e93be145e93be145e933e3bcd13bf3acd13bf3acd133f06d234bfa95ecbbab63735bf000080bfe6985f3ffce9a23e00000033f262273f52289ebe1ef575be52289e3ec5bf1ebf4309f6bec5bf1e3fa71f35bf60018a3a2eea34bf000080bfe6985f3f2865b23ecc8b1d3df262273f4709b5beae777ebeae777e3e7c5436bfe721febe2322fe3ee17911bf6368f2bbc9a352bf000080bfcea1663fb6b1af3ecc8b1d3d358a1d3f52289ebe52289ebe1ef5753eb7bf1ebfcbbf1ebf5809f63eaa2022bf5e050c3da4ec45bf000080bf4eaa643f90109c3e00000033358a1d3fc23dc5becd0487be8513333e194d46bfa9fa06bf6acfb23effdcd0bee2bdb1bb00ba69bf000080bf5c396e3fb9c0aa3ecc8b1d3d78b1133f66a6a9be66a6a9be99392e3eb6292abfd5292abf71a4ae3ea34edfbe637dd0bca74666bf000080bf96426c3fccc4943e0000003378b1133f52a8cfbec20d8dbe47c1b83d599950bfc7040dbf3ae0383e000a5cbe8f6712bbea047abf000080bfaaa9763feaeba63ecc8b1d3dbcd8093f14a6b1be14a6b1bef558b43dcf2932bfd82932bfeb2d353e0b0e6fbe61f660bcc7e678bf000080bf4474753f00b18f3e00000033bcd8093f4721d3bef6708fbe0ad723330e2954bf0f430fbf0000000058b405baab01463af9ff7fbf000080bfcc927f3f0368a53ecc8b1d3df4ffff3ecd7cb4becd7cb4be00000000f30435bff40435bf000000006d3aa43a6d3aa4bae6ff7fbf000080bfcc927f3fcce38d3e00000033f4ffff3ec23dc5be331333becd04873e1e4d46bf36cfb2beb6fa063fb1e90fbf0ea8e2ba0ab853bf000080bf6c22673f929fc73e758b9d3d358a1d3f66a6a9be99392ebe66a6a93ec7292abf69a4aebec8292a3faa0a35bf6235b2393bff34bf000080bfe6985f3fbf29c93e758b9d3df262273f14bed9be855b3cbe855b3c3ec2d05abfd2e9bbbe01eabb3ef897c9becb6913bb03526bbf000080bf09f46e3f6badc43e758b9d3d78b1133ff588e6be859b44be1e8dc13dd38267bfc500c4bea242413e5faa50be225ca7badba07abf000080bf7426773f040fc23e748b9d3dbcd8093faec7eabecd4c48be8f7a2533ffd66bbf6e27c7be0000000098d009389833a3b8000080bf000080bfcc927f3ffce2c03e748b9d3df4ffff3e52a8cfbe47c1b8bdc20d8d3e3b8750bf344740bef5800c3f560b0fbfb279c8b8a24e54bf000080bfeb47673f1324e33e7d51ec3d358a1d3f14a6b1bef558b4bd14a6b13e04ee31bff7613cbe04ee313f3e0535bf2f150d38a90435bf000080bfe6985f3f19d7e33e7d51ec3df262273ff588e6be1e8dc1bd859b443ede5d67bf480e49be63b8c23e0294c6be6d7fa7b810f66bbf000080bfbe296f3fadbee13e7d51ec3d78b1133f0a07f5beb83ecabdb83eca3d9f9675bf3a4451be7769473e66b64bbee1cecc3612e27abf000080bfe049773f845de03e7c51ec3dbbd8093f99f9f9be706dcebd0ad723338d707abf674354becdddb0b974f7183aa5a593baf2ff7fbf000080bfcc927f3f8cb3df3e7c51ec3df4ffff3e33dbd4be1e85cbadeb398e3ea7a354bf483f0cbc86880e3fdc890ebfbf134eb5a6a554bf000080bff846673fff3a003ff68b1d3e358a1d3fcd04b5be9999092ecd04b53e110335bf2ab913bc1003353ff80435bf208f3e38ef0435bf000080bfe6985f3fff3a003ff68b1d3ef262273f3383ecbe999919ae0aef433e864b6cbf090bf8bb1af2c43e8bf3c4be210fbdb6434d6cbf000080bf62286f3fff3a003ff68b1d3e78b1133f7b14fbbe000000adc2c5c73df6fd7abfb46fe2bbfe6d493e3a6f49be659fae357fff7abf000080bfe248773fff3a003ff68b1d3ebbd8093f000000bf33b3a331000000005cfe7fbf0647e6bb86976fbac3ac753af73a58bb9dff7fbf000080bfcc927f3fff3a003ff68b1d3ef4ffff3e145ed0bea4a8b73d148e8d3e51fb50bf9eb1373e3c8c0c3f1fdb0ebf36a37d39176f54bf000080bfeb47673ff4e30e3f67ee443e358a1d3fc23db2beb836b33dc23db23e2e3932bf1c48333e2e39323f430435bf24ebae38a30535bf000080bfe6985f3f728a0e3f67ee443ef262273f7be4c5be52d8323e5c7f873e206846bf2be1b23e0ccd063fb3bc0fbffe3ad73a9bd653bf000080bf6c22673f36a61c3f78516c3e358a1d3feb39aabe52f82d3eeb39aa3ed0242abf16cbae3ed0242a3f55fe34bfb70bce39900b35bf000080bfe6985f3f20e11b3f78516c3ef262273feba1b5beae777e3eae377f3ec36836bf1a29fe3eb5e0fd3ed6a111bfc1cba13b618952bf000080bfcea1663f249d283f47da893e358a1d3febb19ebe00f0753eebb19e3e05b71ebf6536f63e06b71e3fe1e634bf8bdc9a3aef2235bf000080bfe6985f3f6b43273f47da893ef262273febb19ebef6409e3e00b0763e1fb21ebf6dd61e3ffff1f53e968f1abf002a633c810b4cbf000080bf50aa643fb66d323fbf8b9d3e348a1d3f3de293beae67933e3de2933ec6b913bf1bf4133fc6b9133f672f35bf05c6a9ba62da34bf000080bfe6985f3f00012f3fbf8b9d3ef262273feb39aabe85c3a93e5ccf2e3eec222abfa7262a3f47cbae3e09cde5be46c9263c4cc064bf000080bf96426c3f9813363fbf8b9d3e78b1133f7be4c5beeb09873ee1aa333e376046bfaae0063f17c9b23eb6cdd0bee67fae3b74bd69bf000080bf5c396e3fa2152b3f47da893e78b1133fb85edabe0a273c3e0aff3c3ed8f15abf70a8bb3e2191bb3ed737c9bea05d053b9c666bbf000080bf09f46e3f481f1e3f78516c3e78b1133feb31e7beeb79c03d3d42453e6fd167bf6667413e9882c23e0310c6be5bff1039ca116cbf000080bfbe296f3fa8960f3f67ee443e78b1133fc23db2beaec7b13e33f3b43d683032bf7f24323f4d1a353eca3875be966dec3b528b78bf000080bf4474753f7e9d383fbf8b9d3ebbd8093f145ed0be1f158d3e3d62b93d10b550bfd8dc0c3fc6d2383e90115bbe6f31623b51127abf000080bfaaa9763f08002d3f47da893ebbd8093feb31e7be3d72443e9931c23df29b67bf518fc33eba2c413ed67550be3bc4b13a94a37abf000080bf7426773f7d6e1f3f78516c3ebbd8093fccbcf5bef530c93d66eeca3df0f175bf804e4a3e668f473e7b8d4bbeb6f7ce3826e47abf000080bfe049773f3c47103f67ee443ebbd8093f0a17b5bea4a0b43e000000006d0b35bf7afe343f00000000be93513bbea2513b54ff7fbf000080bfcc927f3f1784393fbf8b9d3ef4ffff3eb8d6d3be47798f3e00000000344554bf56190f3f00000000b187073af30a493af9ff7fbf000080bfcc927f3ffcc12d3f47da893ef4ffff3ea370ebbe6626483e00000000c1ee6bbfbab6c63e00000000dd1205b88aff9db8000080bf000080bfcc927f3f8004203f78516c3ef4ffff3e7bb4fabea468cd3d00000000d3cd7abf9d434d3e45d116ba28f5103a42a42fb9fdff7fbf000080bfcc927f3f399c103f67ee443ef4ffff3e52289ebe52289ebe1ef575bec5bf1ebfc5bf1ebf4309f6be67101e3fd16e01bc505d49bf000080bfd860d53d90109c3e00008032aeebc43e4709b5beae777ebeae777ebe895436bff221febef221febe39bc113f544cac3bfc7652bf000080bfd8a4c53db6b1af3ec88b1d3daeebc43e52289ebe1ef575be52289ebec5bf1ebf4309f6bec5bf1ebf2eea343f6e048a3aa81f35bf000080bf20ecfd3d2865b23ec88b1d3d263ab13e145e93be145e93be145e93be3acd13bf3acd13bf3bcd13bfac3b353f4543dbba09ce34bf000080bf20ecfd3dfce9a23e00008032263ab13e66a6a9be99392ebe66a6a9bec8292abf69a4aebec7292abf3aff343f9b3fb239aa0a35bf000080bf20ecfd3dbf29c93e738b9d3d263ab13ec23dc5be331333becd0487be1f4d46bf4fcfb2beaafa06bfffe90f3f8d78e03ad6b753bf000080bff89fc13d929fc73e738b9d3daeebc43e14a6b1bef558b4bd14a6b1be79d631bf51243fbe79d631bf6e03353f01dc3439780635bf000080bf20ecfd3d19d7e33e7b51ec3d263ab13e52a8cfbe47c1b8bdc20d8dbeef3d50bfb76142be4abf0cbf5b540f3f87931a3a5a1d54bf000080bffc73c03d1324e33e7b51ec3daeebc43e0a17b5be2ba267ba0a17b5bea50235bfb27423bca40235bfed04353f720f3e38f90435bf000080bf20ecfd3dff3a003ff58b1d3e263ab13eb8d6d3be0ca267bae1f28fbe3c3c54bf5e5e1cbc4b210fbfef220f3f23115f38ba3e54bf000080bf9c7bc03dff3a003ff58b1d3eaeebc43e66a6a9be66a6a9be99392ebec7292abfc8292abf69a4aebeff23ed3ee96209bc1ee062bf000080bfa49e983dcac4943e000080322e9dd83ec23dc5becd0487be331333be1f4d46bfaafa06bf4fcfb2bee7d7d03e61edb33b1dbb69bf000080bf68e8883db9c0aa3ec88b1d3d2e9dd83e14bed9be855b3cbe855b3cbebdd05abff9e9bbbef9e9bbbef8a6c93e1784fd3ad84e6bbf000080bf1413833d6badc43e748b9d3d2e9dd83ef588e6be1e8dc1bd859b44be742267bfd6c249be66a3c3beed7ac73e272a413a54c56bbf000080bf5c65813dadbee13e7c51ec3d2e9dd83ea370ebbec7a167ba7bfc48bee8e56bbfa7380cbc63d4c6be2bd6c63ef5869f3822e86bbf000080bf4870813dff3a003ff58b1d3e2e9dd83e14a6b1be14a6b1bef558b4bdd22932bfd22932bf082e35befe0a703eb340503c78d878bf000080bf80221e3d00b18f3e00008032de4eec3e52a8cfbec20d8dbe47c1b8bd569950bfc5040dbf72e038be022d5b3e771f683bcb107abf000080bf10cc0a3deaeba63ecc8b1d3dde4eec3ef588e6be859b44be1e8dc1bdce8267bfd200c4bebd4241be84ab503ee719a63acba07abf000080bf70ff023d040fc23e748b9d3dde4eec3e0a07f5beb83ecabdb83ecabd928775bfe0ef50be17e948beda244d3e48a5d23967cf7abf000080bfb8c8003d845de03e7c51ec3dde4eec3e7bb4fabecba167ba5220cfbd1fd47abfe65cfabb4aa24cbe08aa4c3ebc1659bb50d57abf000080bf90d8003dff3a003ff58b1d3ede4eec3ecd7cb4becd7cb4be00000000f30435bff40435bf000000006d3aa43a6d3aa4bae6ff7fbf000080bf008871bacce38d3e00000033f4ffff3e4721d3bef6708fbe0ad723330e2954bf0f430fbf0000000058b405baab01463af9ff7fbf000080bf008871ba0368a53ecc8b1d3df4ffff3eaec7eabecd4c48be8f7a2533ffd66bbf6e27c7be0000000098d009389833a3b8000080bf000080bf008871bafce2c03e748b9d3df4ffff3e99f9f9be706dcebd0ad723338d707abf674354becdddb0b974f7183aa5a593baf2ff7fbf000080bf008871ba8cb3df3e7c51ec3df4ffff3e000000bf33b3a331000000005cfe7fbf0647e6bb86976fbac3ac753af73a58bb9dff7fbf000080bf008871baff3a003ff68b1d3ef4ffff3e145ed0bea4a8b73d148e8dbe53bd50bf64cf383ee1d00cbf2e260f3fc6c9eeb9883c54bf000080bffc73c03df4e30e3f66ee443eaeebc43ec23db2beb836b33dc23db2bea82a32bfc313353ea82a32bf3906353f747b2039ad0335bf000080bf20ecfd3d728a0e3f66ee443e263ab13eeb39aabe52f82d3eeb39aabed0242abf16cbae3ed0242abf8f0b353f9001ce3955fe34bf000080bf20ecfd3d20e11b3f77516c3e263ab13e7be4c5be52d8323e5c7f87be206846bf2be1b23e0ccd06bfc1b80f3f4eb9f0ba42d953bf000080bff89fc13d36a61c3f77516c3eaeebc43eebb19ebe00f0753eebb19ebe06b71ebf6536f63e05b71ebff022353f54dd9a3ae1e634bf000080bf20ecfd3d6b43273f47da893e263ab13eeba1b5beae777e3eae377fbec36836bf1a29fe3eb5e0fdbec953113fbb1df4bb0bbe52bf000080bfdca4c53d249d283f47da893eaeebc43e3de293beae67933e3de293bec6b913bf1bf4133fc6b913bff8d3343fba50c3bac73535bf000080bf20ecfd3d01012f3fbf8b9d3e263ab13eebb19ebef6409e3e00b076be1fb21ebf6dd61e3ffff1f5bee8d71a3f53d746bc7ed64bbf000080bfd860d53db66d323fbf8b9d3eaeebc43e7be4c5beeb09873ee1aa33be376046bfabe0063f18c9b2be21d9d03e457aa9bbf6ba69bf000080bf68e8883da2152b3f47da893e2e9dd83eeb39aabe85c3a93e5ccf2ebeec222abfa7262a3f47cbaebe3fffe63e27b1edbb047564bf000080bfa49e983d9813363fbf8b9d3e2e9dd83e145ed0be1f158d3e3d62b9bd11b550bfd9dc0c3fc5d238be2cee5b3e6e950cbb75067abf000080bf10cc0a3d08002d3f47da893ede4eec3ec23db2beaec7b13e33f3b4bd683032bf7f24323f4d1a35be9b107a3ec3970fbbaa3f78bf000080bf80221e3d7e9d383fbf8b9d3ede4eec3eb8d6d3be47798f3e00000000344554bf56190f3f00000000b187073af30a493af9ff7fbf000080bf008871bafcc12d3f47da893ef4ffff3e0a17b5bea4a0b43e000000006d0b35bf7afe343f00000000be93513bbea2513b54ff7fbf000080bf008871ba1784393fbf8b9d3ef4ffff3eb85edabe0a273c3e0aff3cbed8f15abf70a8bb3e1f91bbbe742ec93e244812bb96686bbf000080bf1413833d481f1e3f77516c3e2e9dd83eeb31e7be3d72443e9931c2bdf29b67bf518fc33ebb2c41bedb78503e3f0baeba6da37abf000080bf70ff023d7d6e1f3f77516c3ede4eec3ea370ebbe6626483e00000000c1ee6bbfbab6c63e00000000dd1205b88aff9db8000080bf000080bf008871ba8004203f78516c3ef4ffff3eeb31e7beeb79c03d3d4245be4fa267bfb01d413ee374c3be49fac63e596b11ba82e06bbf000080bf5c65813da8960f3f66ee443e2e9dd83eccbcf5bef530c93d66eecabd07e975bf4c3d493e675149bea4fd4c3ec3aad7ba52d17abf000080bfb8c8003d3c47103f66ee443ede4eec3e7bb4fabea468cd3d00000000d3cd7abf9d434d3e45d116ba28f5103a42a42fb9fdff7fbf000080bf008871ba399c103f67ee443ef4ffff3e145e93be145e93be145e93be3acd13bf3acd13bf3bcd13bfac3b353f4543dbba09ce34bf000080bf20ecfd3dfce9a23e2a3a313ff162273f52289ebe1ef575be52289ebec5bf1ebf4309f6bec5bf1ebf2eea343f6e048a3aa81f35bf000080bf20ecfd3d2865b23eec123b3ff162273fae777ebeae777ebe4709b5be2322febee721febe7c5436bfc9a3523f5e68f2bbe17911bf000080bfb0191b3eb6b1af3eec123b3f388a1d3f1ef575be52289ebe52289ebe5809f6becbbf1ebfb7bf1ebf5080493f5b5cdf3b9fe41dbf000080bfb03b133e8e109c3e2a3a313f388a1d3f851333becd0487bec23dc5be6acfb2bea9fa06bf194d46bf00ba693ff4beb1bbfddcd0be000080bfea77393eb9c0aa3eec123b3f7ab1133f99392ebe66a6a9be66a6a9be71a4aebed5292abfb6292abf06c4623f44141a3cd68cedbe000080bfcc9c313eccc4943e2a3a313f7ab1133f47c1b8bdc20d8dbe52a8cfbe39e038bec6040dbf599950bfea047a3f476912bbfa095cbe000080bf1c395b3eeaeba63eec123b3fc1d8093ff558b4bd14a6b1be14a6b1beeb2d35bed82932bfcf2932bf60c2783f2ab736bcfa8c71be000080bf7a63563e00b18f3e2a3a313fc1d8093f8fd2de32f6708fbe4721d3be000000000f430fbf0d2954bff9ff7f3ff302463a39b505ba000080bfa6dd7e3e0368a53eec123b3fecffff3e006065b3cd7cb4becd7cb4be00000000f30435bff30435bf84ff7f3f4c83323b4d8332bb000080bfa6dd7e3ecce38d3e2a3a313fecffff3ecd0487be331333bec23dc5beb6fa06bf36cfb2be1e4d46bf0ab8533fa4a9e2bab1e90fbf000080bf201c1d3e929fc73e9aeb443f388a1d3f66a6a9be99392ebe66a6a9bec8292abf69a4aebec7292abf3aff343f9b3fb239aa0a35bf000080bf20ecfd3dbf29c93e9aeb443ff162273f855b3cbe855b3cbe14bed9be01eabbbed2e9bbbec2d05abf03526b3fc96913bbf897c9be000080bf94623c3e6badc43e9aeb443f7ab1133f1e8dc1bd859b44bef588e6beaf4241becb00c4bed28267bfdba07a3f7b79a7ba55aa50be000080bf422c5d3e040fc23e9aeb443fc1d8093fc22d10b2cd4c48beaec7eabe000000007d27c7befcd66bbf0000803f94c3a1b8de990838000080bfa6dd7e3efce2c03e9aeb443fecffff3ec20d8dbe47c1b8bd52a8cfbe4abf0cbfb76142beef3d50bf191d543fbb2111babc540fbf000080bf20b21d3e1324e33e5ac44e3f388a1d3f14a6b1bef558b4bd14a6b1be79d631bf51243fbe79d631bf6e03353f01dc3439780635bf000080bf20ecfd3d19d7e33e5ac44e3ff162273f859b44be1e8dc1bdf588e6be66a3c3bed6c249be742267bf4dc56b3ff9b73fba0f7bc7be000080bf6c393d3eadbee13e5ac44e3f7ab1133fb83ecabdb83ecabd0a07f5be30e948bee8ef50be908775bfadcc7a3ff58e1a3a045a4dbe000080bff0b95d3e845de03e5ac44e3fc1d8093fc22d1033c26dcebd99f9f9be00000000d5ee53be07757abff3ff7f3f71d19cba72b28439000080bfa6dd7e3e8cb3df3e5ac44e3fecffff3ee1f28fbe61a267bab8d6d3be4b210fbf695e1cbc3c3c54bfba3e543f934467b8ef220fbf000080bf50ae1d3eff3a003f169d583f388a1d3f0a17b5be2ba267ba0a17b5bea50235bfb27423bca40235bfed04353f720f3e38f90435bf000080bf20ecfd3dff3a003f169d583ff162273f7bfc48bea0a267baa370ebbe61d4c6beb1380cbce8e56bbf22e86b3f01b198b82bd6c6be000080bffa333d3eff3a003f169d583f7ab1133f5220cfbd14a367ba7bb4fabe55a24cbe775cfabb1ed47abf4fd57a3f48ad583b10aa4cbe000080bffab55d3eff3a003f169d583fc1d8093f000070b4eb51b82a000000bf000000004c42eebb44fe7fbf0000803f4fb6d3b7100b4534000080bfa6dd7e3eff3a003f169d583fecffff3eb83eca3db83ecabd0a07f5be2ee9483ee5ef50be908775bf67cf7a3ffee7d339d1244d3e000080bfae00903e845de03e5ac44e3fb64eec3e1e8dc13d859b44bef588e6becf42413eda00c4becd8267bfcba07a3f171ca63a96ab503e000080bf8447903e040fc23e9aeb443fb64eec3e859b443e1e8dc1bdf588e6be59a3c33eb9c249be792267bf58c56b3fdf25413ade7ac73e000080bfef40a03eadbee13e5ac44e3f229dd83e855b3c3e855b3cbe14bed9bed2e9bb3e01eabbbec2d05abfd54e6b3f0aeafc3a09a7c93e000080bf5caca03e6badc43e9aeb443f229dd83ec20d8d3e47c1b8bd52a8cfbe4dbf0c3f7e6142bef23d50bf571d543f261d1a3a60540f3f000080bf9604b03e1324e33e5ac44e3f7eebc43ecd04873e851333bec23dc5bea9fa063f6acfb2be194d46bfd2b7533f7161e03a04ea0f3f000080bf974fb03e929fc73e9aeb443f7eebc43e14a6b13ef558b4bd14a6b1be7bd6313f15243fbe7cd631bf7c06353f776f36396a03353f000080bf9e62bf3e19d7e33e5ac44e3f263ab13e66a6a93e99392ebe66a6a9bec5292a3f7aa4aebec4292abfad0a353fffa2b23938ff343f000080bf9e62bf3ebf29c93e9aeb443f263ab13eae777e3eae777ebe4709b5bee721fe3e2322febe7c5436bf0977523fa363ac3b26bc113f000080bfcc50b13eb6b1af3eec123b3f7eebc43e52289e3e1ef575be52289ebebcbf1e3f6d09f6bebcbf1ebf991f353f60ba893a3cea343f000080bf9e62bf3e2865b23eec123b3f263ab13e1ef5753e52289ebe52289ebe4309f63ec5bf1ebfc5bf1ebfb8c6453f508210bdfa4a223f000080bfce3fb53e8e109c3e2a3a313f7eebc43e145e933e145e93be145e93be3acd133f3acd13bf3bcd13bf0bd2343fce4ccbbab037353f000080bf9e62bf3efce9a23e2a3a313f263ab13e0a17b53e85a467ba0a17b5bea402353fd37423bca40235bff904353f2eef3d38ee04353f000080bf9e62bf3eff3a003f169d583f263ab13ee1f28f3eb0a367bab8d6d3be4b210f3f845e1cbc3c3c54bfba3e543fe6f55e38ef220f3f000080bf7e06b03eff3a003f169d583f7eebc43e99392e3e66a6a9be66a6a9be69a4ae3ec8292abfc7292abf1163663fc938da3cf7cfde3e000080bf400fa63eccc4943e2a3a313f229dd83e3313333ecd0487bec23dc5be36cfb23eb6fa06bf1e4d46bf1bbb693fb9dfb33beed7d03e000080bfb021a23eb9c0aa3eec123b3f229dd83e7bfc483eefa367baa370ebbe60d4c63ec7380cbce8e56bbf22e86b3fe8879f3829d6c63e000080bfa943a03eff3a003f169d583f229dd83ef558b43d14a6b1be14a6b1be082e353ed22932bfd22932bf12fc783f7c227a3c15916d3e000080bfe7ab933e00b18f3e2a3a313fb64eec3e47c1b83dc20d8dbe52a8cfbe75e0383ec7040dbf569950bfca107a3f541f683b062d5b3e000080bf1841913eeaeba63eec123b3fb64eec3ec23db23eb836b33dc23db2beab2a323fdf13353ea22a32bfac03353f47cf1e393a06353f000080bf9e62bf3e728a0e3fba75623f263ab13e148e8d3ea4a8b73d145ed0bee1d00c3f62cf383e53bd50bf883c543fdac8eeb92e260f3f000080bf9604b03ef4e30e3fba75623f7eebc43eeb39aa3e52f82d3eeb39aabee0242a3f0ccbae3ec1242abf5cfe343ffd1bcb39880b353f000080bf9e62bf3e20e11b3f864e6c3f263ab13e5c7f873e52d8323e7be4c5be0ccd063f2be1b23e206846bf42d9533fe5baf0bac1b80f3f000080bf974fb03e36a61c3f864e6c3f7eebc43eebb19e3e00f0753eebb19ebe15b71e3f4f36f63effb61ebfd8e6343f2ecb9a3af922353f000080bf9e62bf3e6b43273f4427763f263ab13eae377f3eae777e3eeba1b5beb5e0fd3e1a29fe3ec36836bf0bbe523f771cf4bbca53113f000080bfcc50b13e249d283f4427763f7eebc43e3de2933eae67933e3de293bec6b9133f1bf4133fc6b913bf672f353fa0c8a9ba61da343f000080bf9e62bf3e00012f3f0300803f263ab13e00b0763ef6409e3eebb19ebefff1f53e6dd61e3f1fb21ebfae294c3f0e5973bc2d661a3f000080bfce3fb53eb66d323f0300803f7eebc43ee1aa333eeb09873e7be4c5be06c9b23eace0063f396046bffbba693f267ba9bb0bd9d03e000080bfb021a23ea2152b3f4427763f229dd83e5ccf2e3e85c3a93eeb39aabe40cbae3ea5262a3ff1222abf38a0643fc04712bc1350e63e000080bf400fa63e9813363f0300803f229dd83eeb61b93d1f158d3e145ed0beacd2383edadc0c3f11b550bf77067a3fd0990cbb04ee5b3e000080bf1841913e08002d3f4427763fb64eec3e33f3b43daec7b13ec23db2be3e1a353e7b24323f6b3032bf9473783fc303b8bbc2c3763e000080bfe9ab933e7e9d383f0300803fb64eec3e5c8f42b447798f3eb8d6d3be0000000057190f3f324554bff9ff7f3ffa01493aaa81073a000080bfa6dd7e3efcc12d3f4427763fecffff3ec2f528b4a4a0b43e0a17b5be000000007afe343f6d0b35bfd5ff7f3f36fdd1ba2feed1ba000080bfa6dd7e3e1784393f0300803fecffff3e0aff3c3e0a273c3eb85edabe1991bb3e7aa8bb3ed8f15abf97686b3f1e4712bb6f2ec93e000080bf5caca03e481f1e3f864e6c3f229dd83e9931c23d3d72443eeb31e7beab2c413e5a8fc33ef19b67bf6da37a3f2c09aebacd78503e000080bf8447903e7d6e1f3f864e6c3fb64eec3eae4761b46626483ea370ebbe00000000c0b6c63ec0ee6bbf0000803ff4379eb8644205b8000080bfa6dd7e3e8004203f864e6c3fecffff3e3d42453eeb79c03deb31e7bee374c33eaf1d413e4fa267bf82e06b3f116c11ba49fac63e000080bfef40a03ea8960f3fba75623f229dd83e66eeca3df530c93dccbcf5be5f51493e4c3d493e07e975bf52d17a3f09abd7ba9cfd4c3e000080bfae00903e3c47103fba75623fb64eec3e1e856bb4a468cd3d7bb4fabe0000000095b14c3e4bd57abff8ff7f3f35a7733a9bd54639000080bfa6dd7e3e399c103fba75623fecffff3e5220cf3d54a367ba7bb4fabe4aa24c3efa5bfabb1fd47abf50d57a3f170b59bb08aa4c3e000080bfaa02903eff3a003f169d583fb64eec3eeb61b9bd1f158d3e145ed0beb7d238bedadc0c3f11b550bf53127a3f3a37623b6f115bbe000080bf1c395b3e08002d3f4427763fc1d8093f33f3b4bdaec7b13ec23db2be3e1a35be7f24323f683032bf6f58783f68e7793b918078be000080bf7a63563e7e9d383f0300803fc1d8093fe1aa33beeb09873e7be4c5be06c9b2beace0063f396046bf78bd693f9080ae3ba2cdd0be000080bfea77393ea2152b3f4427763f7ab1133f5ccf2ebe85c3a93eeb39aabe3acbaebea8262a3fee222abfe495643f90b30b3c167ae6be000080bfcc9c313e9813363f0300803f7ab1133fae377fbeae777e3eeba1b5beb5e0fdbe1a29fe3ec36836bf6189523f10cca13bd6a111bf000080bfb0191b3e249d283f4427763f378a1d3f00b076bef6409e3eebb19ebefff1f5be6dd61e3f1fb21ebfe4b64b3f0405363cc3021bbf000080bfb23b133eb66d323f0300803f378a1d3febb19ebe00f0753eebb19ebe06b71ebf6536f63e05b71ebff022353f54dd9a3ae1e634bf000080bf20ecfd3d6b43273f4427763ff162273f3de293beae67933e3de293bec6b913bf1bf4133fc6b913bff8d3343fba50c3bac73535bf000080bf20ecfd3d01012f3f0300803ff162273feb39aabe52f82d3eeb39aabed0242abf16cbae3ed0242abf8f0b353f9001ce3955fe34bf000080bf20ecfd3d20e11b3f864e6c3ff162273f5c7f87be52d8323e7be4c5be0ccd06bf2be1b23e206846bf9bd6533fee3cd73ab3bc0fbf000080bf201c1d3e36a61c3f864e6c3f378a1d3fc23db2beb836b33dc23db2bea82a32bfc313353ea82a32bf3906353f747b2039ad0335bf000080bf20ecfd3d728a0e3fba75623ff162273f148e8dbea4a8b73d145ed0bee0d00cbf63cf383e54bd50bfda3c543fbac1033ab4250fbf000080bf20b21d3ef4e30e3fba75623f388a1d3f0aff3cbe0a273c3eb85edabe1a91bbbe7aa8bb3ed8f15abf9d666b3fd45d053bd037c9be000080bf94623c3e481f1e3f864e6c3f7ab1133f3d4245beeb79c03deb31e7bee474c3beb01d413e4fa267bf74e06b3ff76d0e3a8efac6be000080bf6c393d3ea8960f3fba75623f7ab1133f9931c2bd3d72443eeb31e7beba2c41be5d8fc33ef19b67bf94a37a3fe2bfb13adb7550be000080bf422c5d3e7d6e1f3f864e6c3fc1d8093f66eecabdf530c93dccbcf5be705149be4e3d493e07e975bf00ce7a3f373ab93941404dbe000080bff0b95d3e3c47103fba75623fc1d8093f + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 5.025483 + m_MeshMetrics[1]: 6.1777472 + m_MeshOptimized: 1 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/Runtime/Resources/Meshes/Sphere.asset.meta b/Runtime/Resources/Meshes/Sphere.asset.meta new file mode 100644 index 000000000..af9e43c31 --- /dev/null +++ b/Runtime/Resources/Meshes/Sphere.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b361a5cb5c401068945d1c91c2da3d3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/PhysicsMaterials.meta b/Runtime/Resources/PhysicsMaterials.meta similarity index 100% rename from Runtime/PhysicsMaterials.meta rename to Runtime/Resources/PhysicsMaterials.meta diff --git a/Runtime/PhysicsMaterials/DefaultPhysicsMaterial.physicMaterial b/Runtime/Resources/PhysicsMaterials/DefaultPhysicsMaterial.physicMaterial similarity index 100% rename from Runtime/PhysicsMaterials/DefaultPhysicsMaterial.physicMaterial rename to Runtime/Resources/PhysicsMaterials/DefaultPhysicsMaterial.physicMaterial diff --git a/Runtime/PhysicsMaterials/DefaultPhysicsMaterial.physicMaterial.meta b/Runtime/Resources/PhysicsMaterials/DefaultPhysicsMaterial.physicMaterial.meta similarity index 100% rename from Runtime/PhysicsMaterials/DefaultPhysicsMaterial.physicMaterial.meta rename to Runtime/Resources/PhysicsMaterials/DefaultPhysicsMaterial.physicMaterial.meta diff --git a/Runtime/Resources/Presets.meta b/Runtime/Resources/Presets.meta new file mode 100644 index 000000000..5b8ea8d99 --- /dev/null +++ b/Runtime/Resources/Presets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 292b5abdddf2c8c4a8fde65c1015b6a6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Presets/NormalTexture.preset b/Runtime/Resources/Presets/NormalTexture.preset new file mode 100644 index 000000000..99734b55f --- /dev/null +++ b/Runtime/Resources/Presets/NormalTexture.preset @@ -0,0 +1,502 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!181963792 &2655988077585873504 +Preset: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NormalTexture + m_TargetType: + m_NativeTypeID: 1006 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + m_Properties: + - target: {fileID: 0} + propertyPath: m_ExternalObjects.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MipMapMode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_EnableMipMap + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_sRGBTexture + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LinearTexture + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_FadeOut + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_BorderMipMap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MipMapsPreserveCoverage + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AlphaTestReferenceValue + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MipMapFadeDistanceStart + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MipMapFadeDistanceEnd + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_ConvertToNormalMap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_ExternalNormalMap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_HeightScale + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_NormalMapFilter + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_IsReadable + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_StreamingMipmaps + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_StreamingMipmapsPriority + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_GrayScaleToAlpha + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_GenerateCubemap + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_CubemapConvolution + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SeamlessCubemap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureFormat + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MaxTextureSize + value: 2048 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_FilterMode + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_Aniso + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_MipBias + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_WrapU + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_WrapV + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_WrapW + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_NPOTScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_Lightmap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteMode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteExtrude + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteMeshType + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_Alignment + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpritePivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpritePivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpritePixelsToUnits + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteBorder.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteBorder.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteBorder.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteBorder.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteGenerateFallbackPhysicsShape + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AlphaUsage + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AlphaIsTransparency + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteTessellationDetail + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureType + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureShape + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SingleChannelComponent + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MaxTextureSizeSet + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_CompressionQualitySet + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureFormatSet + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.size + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_BuildTarget + value: DefaultTexturePlatform + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_TextureCompression + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_BuildTarget + value: Standalone + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_TextureCompression + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_BuildTarget + value: iPhone + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_TextureCompression + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_BuildTarget + value: Android + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_TextureCompression + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_BuildTarget + value: Windows Store Apps + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_TextureCompression + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Sprites.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Outline.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_PhysicsShape.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Bones.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_SpriteID + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_InternalID + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Vertices.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Indices.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Edges.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Weights.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_SecondaryTextures.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpritePackingTag + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PSDRemoveMatte + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PSDShowRemoveMatteOption + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_UserData + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AssetBundleName + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AssetBundleVariant + value: + objectReference: {fileID: 0} diff --git a/Runtime/Resources/Presets/NormalTexture.preset.meta b/Runtime/Resources/Presets/NormalTexture.preset.meta new file mode 100644 index 000000000..1b5e95b45 --- /dev/null +++ b/Runtime/Resources/Presets/NormalTexture.preset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d826a4c23450f946b19c20560595a1f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2655988077585873504 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Presets/PostProcessVolumeProfile.asset b/Runtime/Resources/Presets/PostProcessVolumeProfile.asset new file mode 100644 index 000000000..1ea3377c2 --- /dev/null +++ b/Runtime/Resources/Presets/PostProcessVolumeProfile.asset @@ -0,0 +1,1529 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3} + m_Name: PostProcessVolumeProfile + m_EditorClassIdentifier: + settings: + - {fileID: 114065399647409342} + - {fileID: 114501906145162340} + - {fileID: 114062315097659046} + - {fileID: 114981667653416594} + - {fileID: 114496529088806156} + - {fileID: 114032528449252864} +--- !u!114 &114032528449252864 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 556797029e73b2347956b6579e77e05b, type: 3} + m_Name: DepthOfField + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + focusDistance: + overrideState: 1 + value: 10 + aperture: + overrideState: 1 + value: 5.6 + focalLength: + overrideState: 1 + value: 25 + kernelSize: + overrideState: 1 + value: 1 +--- !u!114 &114062315097659046 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: b94fcd11afffcb142908bfcb1e261fba, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + shutterAngle: + overrideState: 0 + value: 270 + sampleCount: + overrideState: 0 + value: 10 +--- !u!114 &114065399647409342 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: adb84e30e02715445aeb9959894e3b4d, type: 3} + m_Name: ColorGrading + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + gradingMode: + overrideState: 0 + value: 1 + externalLut: + overrideState: 0 + value: {fileID: 0} + defaultState: 1 + tonemapper: + overrideState: 1 + value: 2 + toneCurveToeStrength: + overrideState: 0 + value: 0 + toneCurveToeLength: + overrideState: 0 + value: 0.5 + toneCurveShoulderStrength: + overrideState: 0 + value: 0 + toneCurveShoulderLength: + overrideState: 0 + value: 0.5 + toneCurveShoulderAngle: + overrideState: 0 + value: 0 + toneCurveGamma: + overrideState: 0 + value: 1 + ldrLut: + overrideState: 0 + value: {fileID: 0} + defaultState: 4 + ldrLutContribution: + overrideState: 0 + value: 1 + temperature: + overrideState: 0 + value: 0 + tint: + overrideState: 0 + value: 0 + colorFilter: + overrideState: 0 + value: {r: 1, g: 1, b: 1, a: 1} + hueShift: + overrideState: 0 + value: 0 + saturation: + overrideState: 0 + value: 0 + brightness: + overrideState: 0 + value: 0 + postExposure: + overrideState: 0 + value: 0 + contrast: + overrideState: 0 + value: 0 + mixerRedOutRedIn: + overrideState: 0 + value: 100 + mixerRedOutGreenIn: + overrideState: 0 + value: 0 + mixerRedOutBlueIn: + overrideState: 0 + value: 0 + mixerGreenOutRedIn: + overrideState: 0 + value: 0 + mixerGreenOutGreenIn: + overrideState: 0 + value: 100 + mixerGreenOutBlueIn: + overrideState: 0 + value: 0 + mixerBlueOutRedIn: + overrideState: 0 + value: 0 + mixerBlueOutGreenIn: + overrideState: 0 + value: 0 + mixerBlueOutBlueIn: + overrideState: 0 + value: 100 + lift: + overrideState: 0 + value: {x: 1, y: 1, z: 1, w: 0} + gamma: + overrideState: 0 + value: {x: 1, y: 1, z: 1, w: 0} + gain: + overrideState: 0 + value: {x: 1, y: 1, z: 1, w: 0} + masterCurve: + overrideState: 0 + value: + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + cachedData: + - 0 + - 0.0078125 + - 0.015625 + - 0.0234375 + - 0.03125 + - 0.0390625 + - 0.046875 + - 0.0546875 + - 0.0625 + - 0.0703125 + - 0.078125 + - 0.0859375 + - 0.09375 + - 0.1015625 + - 0.109375 + - 0.1171875 + - 0.125 + - 0.1328125 + - 0.140625 + - 0.1484375 + - 0.15625 + - 0.1640625 + - 0.171875 + - 0.1796875 + - 0.1875 + - 0.1953125 + - 0.203125 + - 0.2109375 + - 0.21875 + - 0.2265625 + - 0.234375 + - 0.2421875 + - 0.25 + - 0.2578125 + - 0.265625 + - 0.2734375 + - 0.28125 + - 0.2890625 + - 0.296875 + - 0.3046875 + - 0.3125 + - 0.3203125 + - 0.328125 + - 0.3359375 + - 0.34375 + - 0.3515625 + - 0.359375 + - 0.3671875 + - 0.375 + - 0.3828125 + - 0.390625 + - 0.3984375 + - 0.40625 + - 0.4140625 + - 0.421875 + - 0.4296875 + - 0.4375 + - 0.4453125 + - 0.453125 + - 0.4609375 + - 0.46875 + - 0.4765625 + - 0.484375 + - 0.4921875 + - 0.5 + - 0.5078125 + - 0.515625 + - 0.5234375 + - 0.53125 + - 0.5390625 + - 0.546875 + - 0.5546875 + - 0.5625 + - 0.5703125 + - 0.578125 + - 0.5859375 + - 0.59375 + - 0.6015625 + - 0.609375 + - 0.6171875 + - 0.625 + - 0.6328125 + - 0.640625 + - 0.6484375 + - 0.65625 + - 0.6640625 + - 0.671875 + - 0.6796875 + - 0.6875 + - 0.6953125 + - 0.703125 + - 0.7109375 + - 0.71875 + - 0.7265625 + - 0.734375 + - 0.7421875 + - 0.75 + - 0.7578125 + - 0.765625 + - 0.7734375 + - 0.78125 + - 0.7890625 + - 0.796875 + - 0.8046875 + - 0.8125 + - 0.8203125 + - 0.828125 + - 0.8359375 + - 0.84375 + - 0.8515625 + - 0.859375 + - 0.8671875 + - 0.875 + - 0.8828125 + - 0.890625 + - 0.8984375 + - 0.90625 + - 0.9140625 + - 0.921875 + - 0.9296875 + - 0.9375 + - 0.9453125 + - 0.953125 + - 0.9609375 + - 0.96875 + - 0.9765625 + - 0.984375 + - 0.9921875 + redCurve: + overrideState: 0 + value: + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + cachedData: + - 0 + - 0.0078125 + - 0.015625 + - 0.0234375 + - 0.03125 + - 0.0390625 + - 0.046875 + - 0.0546875 + - 0.0625 + - 0.0703125 + - 0.078125 + - 0.0859375 + - 0.09375 + - 0.1015625 + - 0.109375 + - 0.1171875 + - 0.125 + - 0.1328125 + - 0.140625 + - 0.1484375 + - 0.15625 + - 0.1640625 + - 0.171875 + - 0.1796875 + - 0.1875 + - 0.1953125 + - 0.203125 + - 0.2109375 + - 0.21875 + - 0.2265625 + - 0.234375 + - 0.2421875 + - 0.25 + - 0.2578125 + - 0.265625 + - 0.2734375 + - 0.28125 + - 0.2890625 + - 0.296875 + - 0.3046875 + - 0.3125 + - 0.3203125 + - 0.328125 + - 0.3359375 + - 0.34375 + - 0.3515625 + - 0.359375 + - 0.3671875 + - 0.375 + - 0.3828125 + - 0.390625 + - 0.3984375 + - 0.40625 + - 0.4140625 + - 0.421875 + - 0.4296875 + - 0.4375 + - 0.4453125 + - 0.453125 + - 0.4609375 + - 0.46875 + - 0.4765625 + - 0.484375 + - 0.4921875 + - 0.5 + - 0.5078125 + - 0.515625 + - 0.5234375 + - 0.53125 + - 0.5390625 + - 0.546875 + - 0.5546875 + - 0.5625 + - 0.5703125 + - 0.578125 + - 0.5859375 + - 0.59375 + - 0.6015625 + - 0.609375 + - 0.6171875 + - 0.625 + - 0.6328125 + - 0.640625 + - 0.6484375 + - 0.65625 + - 0.6640625 + - 0.671875 + - 0.6796875 + - 0.6875 + - 0.6953125 + - 0.703125 + - 0.7109375 + - 0.71875 + - 0.7265625 + - 0.734375 + - 0.7421875 + - 0.75 + - 0.7578125 + - 0.765625 + - 0.7734375 + - 0.78125 + - 0.7890625 + - 0.796875 + - 0.8046875 + - 0.8125 + - 0.8203125 + - 0.828125 + - 0.8359375 + - 0.84375 + - 0.8515625 + - 0.859375 + - 0.8671875 + - 0.875 + - 0.8828125 + - 0.890625 + - 0.8984375 + - 0.90625 + - 0.9140625 + - 0.921875 + - 0.9296875 + - 0.9375 + - 0.9453125 + - 0.953125 + - 0.9609375 + - 0.96875 + - 0.9765625 + - 0.984375 + - 0.9921875 + greenCurve: + overrideState: 0 + value: + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + cachedData: + - 0 + - 0.0078125 + - 0.015625 + - 0.0234375 + - 0.03125 + - 0.0390625 + - 0.046875 + - 0.0546875 + - 0.0625 + - 0.0703125 + - 0.078125 + - 0.0859375 + - 0.09375 + - 0.1015625 + - 0.109375 + - 0.1171875 + - 0.125 + - 0.1328125 + - 0.140625 + - 0.1484375 + - 0.15625 + - 0.1640625 + - 0.171875 + - 0.1796875 + - 0.1875 + - 0.1953125 + - 0.203125 + - 0.2109375 + - 0.21875 + - 0.2265625 + - 0.234375 + - 0.2421875 + - 0.25 + - 0.2578125 + - 0.265625 + - 0.2734375 + - 0.28125 + - 0.2890625 + - 0.296875 + - 0.3046875 + - 0.3125 + - 0.3203125 + - 0.328125 + - 0.3359375 + - 0.34375 + - 0.3515625 + - 0.359375 + - 0.3671875 + - 0.375 + - 0.3828125 + - 0.390625 + - 0.3984375 + - 0.40625 + - 0.4140625 + - 0.421875 + - 0.4296875 + - 0.4375 + - 0.4453125 + - 0.453125 + - 0.4609375 + - 0.46875 + - 0.4765625 + - 0.484375 + - 0.4921875 + - 0.5 + - 0.5078125 + - 0.515625 + - 0.5234375 + - 0.53125 + - 0.5390625 + - 0.546875 + - 0.5546875 + - 0.5625 + - 0.5703125 + - 0.578125 + - 0.5859375 + - 0.59375 + - 0.6015625 + - 0.609375 + - 0.6171875 + - 0.625 + - 0.6328125 + - 0.640625 + - 0.6484375 + - 0.65625 + - 0.6640625 + - 0.671875 + - 0.6796875 + - 0.6875 + - 0.6953125 + - 0.703125 + - 0.7109375 + - 0.71875 + - 0.7265625 + - 0.734375 + - 0.7421875 + - 0.75 + - 0.7578125 + - 0.765625 + - 0.7734375 + - 0.78125 + - 0.7890625 + - 0.796875 + - 0.8046875 + - 0.8125 + - 0.8203125 + - 0.828125 + - 0.8359375 + - 0.84375 + - 0.8515625 + - 0.859375 + - 0.8671875 + - 0.875 + - 0.8828125 + - 0.890625 + - 0.8984375 + - 0.90625 + - 0.9140625 + - 0.921875 + - 0.9296875 + - 0.9375 + - 0.9453125 + - 0.953125 + - 0.9609375 + - 0.96875 + - 0.9765625 + - 0.984375 + - 0.9921875 + blueCurve: + overrideState: 0 + value: + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + cachedData: + - 0 + - 0.0078125 + - 0.015625 + - 0.0234375 + - 0.03125 + - 0.0390625 + - 0.046875 + - 0.0546875 + - 0.0625 + - 0.0703125 + - 0.078125 + - 0.0859375 + - 0.09375 + - 0.1015625 + - 0.109375 + - 0.1171875 + - 0.125 + - 0.1328125 + - 0.140625 + - 0.1484375 + - 0.15625 + - 0.1640625 + - 0.171875 + - 0.1796875 + - 0.1875 + - 0.1953125 + - 0.203125 + - 0.2109375 + - 0.21875 + - 0.2265625 + - 0.234375 + - 0.2421875 + - 0.25 + - 0.2578125 + - 0.265625 + - 0.2734375 + - 0.28125 + - 0.2890625 + - 0.296875 + - 0.3046875 + - 0.3125 + - 0.3203125 + - 0.328125 + - 0.3359375 + - 0.34375 + - 0.3515625 + - 0.359375 + - 0.3671875 + - 0.375 + - 0.3828125 + - 0.390625 + - 0.3984375 + - 0.40625 + - 0.4140625 + - 0.421875 + - 0.4296875 + - 0.4375 + - 0.4453125 + - 0.453125 + - 0.4609375 + - 0.46875 + - 0.4765625 + - 0.484375 + - 0.4921875 + - 0.5 + - 0.5078125 + - 0.515625 + - 0.5234375 + - 0.53125 + - 0.5390625 + - 0.546875 + - 0.5546875 + - 0.5625 + - 0.5703125 + - 0.578125 + - 0.5859375 + - 0.59375 + - 0.6015625 + - 0.609375 + - 0.6171875 + - 0.625 + - 0.6328125 + - 0.640625 + - 0.6484375 + - 0.65625 + - 0.6640625 + - 0.671875 + - 0.6796875 + - 0.6875 + - 0.6953125 + - 0.703125 + - 0.7109375 + - 0.71875 + - 0.7265625 + - 0.734375 + - 0.7421875 + - 0.75 + - 0.7578125 + - 0.765625 + - 0.7734375 + - 0.78125 + - 0.7890625 + - 0.796875 + - 0.8046875 + - 0.8125 + - 0.8203125 + - 0.828125 + - 0.8359375 + - 0.84375 + - 0.8515625 + - 0.859375 + - 0.8671875 + - 0.875 + - 0.8828125 + - 0.890625 + - 0.8984375 + - 0.90625 + - 0.9140625 + - 0.921875 + - 0.9296875 + - 0.9375 + - 0.9453125 + - 0.953125 + - 0.9609375 + - 0.96875 + - 0.9765625 + - 0.984375 + - 0.9921875 + hueVsHueCurve: + overrideState: 0 + value: + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Loop: 1 + m_ZeroValue: 0.5 + m_Range: 1 + cachedData: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + hueVsSatCurve: + overrideState: 0 + value: + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Loop: 1 + m_ZeroValue: 0.5 + m_Range: 1 + cachedData: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + satVsSatCurve: + overrideState: 0 + value: + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Loop: 0 + m_ZeroValue: 0.5 + m_Range: 1 + cachedData: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + lumVsSatCurve: + overrideState: 0 + value: + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Loop: 0 + m_ZeroValue: 0.5 + m_Range: 1 + cachedData: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 +--- !u!114 &114496529088806156 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: c1cb7e9e120078f43bce4f0b1be547a7, type: 3} + m_Name: AmbientOcclusion + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + mode: + overrideState: 0 + value: 1 + intensity: + overrideState: 1 + value: 0.5 + color: + overrideState: 0 + value: {r: 0, g: 0, b: 0, a: 1} + ambientOnly: + overrideState: 0 + value: 1 + noiseFilterTolerance: + overrideState: 0 + value: 0 + blurTolerance: + overrideState: 0 + value: -4.6 + upsampleTolerance: + overrideState: 0 + value: -12 + thicknessModifier: + overrideState: 1 + value: 1 + directLightingStrength: + overrideState: 0 + value: 0 + radius: + overrideState: 0 + value: 0.25 + quality: + overrideState: 0 + value: 2 +--- !u!114 &114501906145162340 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 48a79b01ea5641d4aa6daa2e23605641, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + intensity: + overrideState: 1 + value: 2.5 + threshold: + overrideState: 1 + value: 1 + softKnee: + overrideState: 0 + value: 0.5 + clamp: + overrideState: 0 + value: 65472 + diffusion: + overrideState: 0 + value: 7 + anamorphicRatio: + overrideState: 0 + value: 0 + color: + overrideState: 0 + value: {r: 1, g: 1, b: 1, a: 1} + fastMode: + overrideState: 0 + value: 0 + dirtTexture: + overrideState: 0 + value: {fileID: 0} + defaultState: 1 + dirtIntensity: + overrideState: 0 + value: 0 +--- !u!114 &114981667653416594 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 40b924e2dad56384a8df2a1e111bb675, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + mode: + overrideState: 0 + value: 0 + color: + overrideState: 0 + value: {r: 0, g: 0, b: 0, a: 1} + center: + overrideState: 0 + value: {x: 0.5, y: 0.5} + intensity: + overrideState: 1 + value: 0.55 + smoothness: + overrideState: 1 + value: 0.4 + roundness: + overrideState: 1 + value: 0 + rounded: + overrideState: 1 + value: 0 + mask: + overrideState: 0 + value: {fileID: 0} + defaultState: 1 + opacity: + overrideState: 0 + value: 1 diff --git a/Runtime/Resources/Presets/PostProcessVolumeProfile.asset.meta b/Runtime/Resources/Presets/PostProcessVolumeProfile.asset.meta new file mode 100644 index 000000000..5b074eef7 --- /dev/null +++ b/Runtime/Resources/Presets/PostProcessVolumeProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ba2b06fb32e5274aad88925a5b8d3f5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Presets/SkyBoxMaterial.preset b/Runtime/Resources/Presets/SkyBoxMaterial.preset new file mode 100644 index 000000000..2064ec06f --- /dev/null +++ b/Runtime/Resources/Presets/SkyBoxMaterial.preset @@ -0,0 +1,654 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!181963792 &2655988077585873504 +Preset: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SkyBoxMaterial + m_TargetType: + m_NativeTypeID: 21 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + m_Properties: + - target: {fileID: 0} + propertyPath: m_Shader + value: + objectReference: {fileID: 4800000, guid: 1c7c196301cbce067a9791aee8777b22, type: 3} + - target: {fileID: 0} + propertyPath: m_ShaderKeywords + value: _MAPPING_LATITUDE_LONGITUDE_LAYOUT + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LightmapFlags + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_EnableInstancingVariants + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_DoubleSidedGI + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_CustomRenderQueue + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: stringTagMap.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: disabledShaderPasses.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.size + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[0].first + value: _BumpMap + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[0].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[0].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[0].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[0].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[0].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[1].first + value: _DetailAlbedoMap + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[1].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[1].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[1].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[1].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[1].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[2].first + value: _DetailMask + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[2].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[2].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[2].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[2].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[2].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[3].first + value: _DetailNormalMap + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[3].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[3].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[3].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[3].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[3].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[4].first + value: _EmissionMap + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[4].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[4].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[4].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[4].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[4].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[5].first + value: _MainTex + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[5].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[5].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[5].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[5].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[5].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[6].first + value: _MetallicGlossMap + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[6].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[6].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[6].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[6].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[6].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[7].first + value: _OcclusionMap + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[7].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[7].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[7].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[7].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[7].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[8].first + value: _ParallaxMap + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[8].second.m_Texture + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[8].second.m_Scale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[8].second.m_Scale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[8].second.m_Offset.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_TexEnvs.Array.data[8].second.m_Offset.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.size + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[0].first + value: _BumpScale + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[0].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[1].first + value: _Cutoff + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[1].second + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[2].first + value: _DetailNormalMapScale + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[2].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[3].first + value: _DstBlend + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[3].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[4].first + value: _Exponent1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[4].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[5].first + value: _Exponent2 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[5].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[6].first + value: _Exposure + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[6].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[7].first + value: _GlossMapScale + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[7].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[8].first + value: _Glossiness + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[8].second + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[9].first + value: _GlossyReflections + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[9].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[10].first + value: _ImageType + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[10].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[11].first + value: _Intensity + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[11].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[12].first + value: _Layout + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[12].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[13].first + value: _Mapping + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[13].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[14].first + value: _Metallic + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[14].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[15].first + value: _MirrorOnBack + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[15].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[16].first + value: _Mode + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[16].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[17].first + value: _OcclusionStrength + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[17].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[18].first + value: _Parallax + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[18].second + value: 0.02 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[19].first + value: _Rotation + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[19].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[20].first + value: _SmoothnessTextureChannel + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[20].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[21].first + value: _SpecularHighlights + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[21].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[22].first + value: _SrcBlend + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[22].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[23].first + value: _UVSec + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[23].second + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[24].first + value: _ZWrite + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Floats.Array.data[24].second + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.size + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[0].first + value: _Color + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[0].second.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[0].second.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[0].second.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[0].second.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[1].first + value: _Color1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[1].second.r + value: 0.9019608 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[1].second.g + value: 0.9019608 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[1].second.b + value: 0.9019608 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[1].second.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[2].first + value: _Color2 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[2].second.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[2].second.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[2].second.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[2].second.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[3].first + value: _Color3 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[3].second.r + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[3].second.g + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[3].second.b + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[3].second.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[4].first + value: _EmissionColor + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[4].second.r + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[4].second.g + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[4].second.b + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[4].second.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[5].first + value: _GroundColor + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[5].second.r + value: 0.97999996 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[5].second.g + value: 0.97999996 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[5].second.b + value: 0.97999996 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[5].second.a + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[6].first + value: _HorizonColor + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[6].second.r + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[6].second.g + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[6].second.b + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[6].second.a + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[7].first + value: _SkyColor + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[7].second.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[7].second.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[7].second.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[7].second.a + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[8].first + value: _Tint + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[8].second.r + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[8].second.g + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[8].second.b + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SavedProperties.m_Colors.Array.data[8].second.a + value: 0.5 + objectReference: {fileID: 0} diff --git a/Runtime/Resources/Presets/SkyBoxMaterial.preset.meta b/Runtime/Resources/Presets/SkyBoxMaterial.preset.meta new file mode 100644 index 000000000..2aebeb7e1 --- /dev/null +++ b/Runtime/Resources/Presets/SkyBoxMaterial.preset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6f9cafe9fe7fc1ceaaeb38d9234f85b6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2655988077585873504 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Presets/UtilityTexture.preset b/Runtime/Resources/Presets/UtilityTexture.preset new file mode 100644 index 000000000..08e3e925a --- /dev/null +++ b/Runtime/Resources/Presets/UtilityTexture.preset @@ -0,0 +1,502 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!181963792 &2655988077585873504 +Preset: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UtilityTexture + m_TargetType: + m_NativeTypeID: 1006 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + m_Properties: + - target: {fileID: 0} + propertyPath: m_ExternalObjects.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MipMapMode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_EnableMipMap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_sRGBTexture + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LinearTexture + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_FadeOut + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_BorderMipMap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MipMapsPreserveCoverage + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AlphaTestReferenceValue + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MipMapFadeDistanceStart + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MipMapFadeDistanceEnd + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_ConvertToNormalMap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_ExternalNormalMap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_HeightScale + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_NormalMapFilter + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_IsReadable + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_StreamingMipmaps + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_StreamingMipmapsPriority + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_GrayScaleToAlpha + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_GenerateCubemap + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_CubemapConvolution + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SeamlessCubemap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureFormat + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MaxTextureSize + value: 2048 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_FilterMode + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_Aniso + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_MipBias + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_WrapU + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_WrapV + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureSettings.m_WrapW + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_NPOTScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_Lightmap + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteMode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteExtrude + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteMeshType + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_Alignment + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpritePivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpritePivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpritePixelsToUnits + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteBorder.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteBorder.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteBorder.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteBorder.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteGenerateFallbackPhysicsShape + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AlphaUsage + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AlphaIsTransparency + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteTessellationDetail + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureType + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureShape + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SingleChannelComponent + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_MaxTextureSizeSet + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_CompressionQualitySet + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_TextureFormatSet + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.size + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_BuildTarget + value: DefaultTexturePlatform + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_TextureCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[0].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_BuildTarget + value: Standalone + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_TextureCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[1].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_BuildTarget + value: iPhone + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_TextureCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[2].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_BuildTarget + value: Android + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_TextureCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[3].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_BuildTarget + value: Windows Store Apps + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_MaxTextureSize + value: 8192 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_ResizeAlgorithm + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_TextureFormat + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_TextureCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_CompressionQuality + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_CrunchedCompression + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_AllowsAlphaSplitting + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_Overridden + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PlatformSettings.Array.data[4].m_AndroidETC2FallbackOverride + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Sprites.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Outline.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_PhysicsShape.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Bones.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_SpriteID + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_InternalID + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Vertices.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Indices.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Edges.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_Weights.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpriteSheet.m_SecondaryTextures.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_SpritePackingTag + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PSDRemoveMatte + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_PSDShowRemoveMatteOption + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_UserData + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AssetBundleName + value: + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_AssetBundleVariant + value: + objectReference: {fileID: 0} diff --git a/Runtime/Resources/Presets/UtilityTexture.preset.meta b/Runtime/Resources/Presets/UtilityTexture.preset.meta new file mode 100644 index 000000000..5353a025e --- /dev/null +++ b/Runtime/Resources/Presets/UtilityTexture.preset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 78fae3569c6c66c46afc3d9d4fb0b8d4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2655988077585873504 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/RenderTextures.meta b/Runtime/Resources/RenderTextures.meta similarity index 100% rename from Runtime/RenderTextures.meta rename to Runtime/Resources/RenderTextures.meta diff --git a/Runtime/RenderTextures/Experimental.meta b/Runtime/Resources/RenderTextures/Experimental.meta similarity index 100% rename from Runtime/RenderTextures/Experimental.meta rename to Runtime/Resources/RenderTextures/Experimental.meta diff --git a/Runtime/Resources/RenderTextures/Experimental/TestCustomRenderTexture.asset b/Runtime/Resources/RenderTextures/Experimental/TestCustomRenderTexture.asset new file mode 100644 index 000000000..b7091f467 --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestCustomRenderTexture.asset @@ -0,0 +1,51 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!86 &8600000 +CustomRenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TestCustomRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 0 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 + m_Material: {fileID: 0} + m_InitSource: 0 + m_InitMaterial: {fileID: 0} + m_InitColor: {r: 1, g: 1, b: 1, a: 1} + m_InitTexture: {fileID: 0} + m_UpdateMode: 1 + m_InitializationMode: 1 + m_UpdateZoneSpace: 0 + m_CurrentUpdateZoneSpace: 0 + m_UpdateZones: [] + m_UpdatePeriod: 0 + m_ShaderPass: 0 + m_CubemapFaceMask: 4294967295 + m_DoubleBuffered: 0 + m_WrapUpdateZones: 0 diff --git a/Runtime/RenderTextures/Experimental/CustomRenderTexture.asset.meta b/Runtime/Resources/RenderTextures/Experimental/TestCustomRenderTexture.asset.meta similarity index 100% rename from Runtime/RenderTextures/Experimental/CustomRenderTexture.asset.meta rename to Runtime/Resources/RenderTextures/Experimental/TestCustomRenderTexture.asset.meta diff --git a/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture 1.renderTexture b/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture 1.renderTexture new file mode 100644 index 000000000..88ea204e4 --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture 1.renderTexture @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TestDepthRenderTexture 1 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 2 + m_ColorFormat: 8 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture 1.renderTexture.meta b/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture 1.renderTexture.meta new file mode 100644 index 000000000..1a383f6ea --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture 1.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ed8c6af6da45e31e938b8024c1fe458 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture.renderTexture new file mode 100644 index 000000000..3fb76bb3f --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture.renderTexture @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TestDepthRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 2 + m_ColorFormat: 49 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture.renderTexture.meta new file mode 100644 index 000000000..6c217937e --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestDepthRenderTexture.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4123e9c4f641afa58798e99914c15cf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/Experimental/TestRenderTexture 2.renderTexture b/Runtime/Resources/RenderTextures/Experimental/TestRenderTexture 2.renderTexture new file mode 100644 index 000000000..3c66959cc --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestRenderTexture 2.renderTexture @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TestRenderTexture 2 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 2 + m_ColorFormat: 8 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/Experimental/TestRenderTexture 2.renderTexture.meta b/Runtime/Resources/RenderTextures/Experimental/TestRenderTexture 2.renderTexture.meta new file mode 100644 index 000000000..b88bdcb43 --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestRenderTexture 2.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c26e4cac9140124afae9fb656df7f740 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/Experimental/TestSegmentationRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/Experimental/TestSegmentationRenderTexture.renderTexture new file mode 100644 index 000000000..b1b9d9e62 --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestSegmentationRenderTexture.renderTexture @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TestSegmentationRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 2 + m_ColorFormat: 8 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/Experimental/TestSegmentationRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/Experimental/TestSegmentationRenderTexture.renderTexture.meta new file mode 100644 index 000000000..cd6e85afd --- /dev/null +++ b/Runtime/Resources/RenderTextures/Experimental/TestSegmentationRenderTexture.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ca95af6b3c0f63a9bc241f3c12173a5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera.meta b/Runtime/Resources/RenderTextures/NeodroidCamera.meta new file mode 100644 index 000000000..4e467bbbb --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 329ea9a3c43cf207fb6db537a6e780cd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/360.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/360.renderTexture new file mode 100644 index 000000000..008d3174c --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/360.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 360 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/360.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/360.renderTexture.meta new file mode 100644 index 000000000..4c8491988 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/360.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4977ad1f6c37547f8dee0da4d7486fe +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/360Depth.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/360Depth.renderTexture new file mode 100644 index 000000000..ebd8f0320 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/360Depth.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 360Depth + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/360Depth.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/360Depth.renderTexture.meta new file mode 100644 index 000000000..95752e7fa --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/360Depth.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5662329ca6fca540bbc36eed4969d137 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CompressedDepthRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/CompressedDepthRenderTexture.renderTexture new file mode 100644 index 000000000..2c080cb10 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CompressedDepthRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: CompressedDepthRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CompressedDepthRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/CompressedDepthRenderTexture.renderTexture.meta new file mode 100644 index 000000000..e2e7c5824 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CompressedDepthRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 65d4c1ba790a0b02b827d1bca779fd3d +timeCreated: 1502102008 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps.meta new file mode 100644 index 000000000..022e3acd7 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f5499b452e766c8db91e15ece36670a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/360Depth 1.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/360Depth 1.renderTexture new file mode 100644 index 000000000..4d489f23a --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/360Depth 1.renderTexture @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 360Depth 1 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 4 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/360Depth 1.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/360Depth 1.renderTexture.meta new file mode 100644 index 000000000..c9200284d --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/360Depth 1.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f27e84ada65356d44872eafe0d2d2bfe +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/361.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/361.renderTexture new file mode 100644 index 000000000..179739c33 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/361.renderTexture @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 361 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 4 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/361.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/361.renderTexture.meta new file mode 100644 index 000000000..e1c4e4eca --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/361.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6d25569dc2d40f53b8522de63db3a15 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi.meta new file mode 100644 index 000000000..7b1f8092c --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a546ac0b4d652e82d8de6b81d618b4f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/360Depth 2.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/360Depth 2.renderTexture new file mode 100644 index 000000000..ca8cf2ce9 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/360Depth 2.renderTexture @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 360Depth 2 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/360Depth 2.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/360Depth 2.renderTexture.meta new file mode 100644 index 000000000..466419276 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/360Depth 2.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b57346b2662b0c22c9c2db51ba0f3996 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/362.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/362.renderTexture new file mode 100644 index 000000000..816c73fe8 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/362.renderTexture @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 362 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/362.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/362.renderTexture.meta new file mode 100644 index 000000000..02dab762a --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/CubeMaps/Equi/362.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a97959d71ce74f94bb823522984a103 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/RenderTextures/DepthRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/DepthRenderTexture.renderTexture similarity index 82% rename from Runtime/RenderTextures/DepthRenderTexture.renderTexture rename to Runtime/Resources/RenderTextures/NeodroidCamera/DepthRenderTexture.renderTexture index 33aff7665..430117a10 100644 --- a/Runtime/RenderTextures/DepthRenderTexture.renderTexture +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/DepthRenderTexture.renderTexture @@ -12,19 +12,22 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_ForcedFallbackFormat: 4 m_DownscaleFallback: 0 - m_Width: 84 - m_Height: 84 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 m_AntiAliasing: 1 + m_MipCount: -1 m_DepthFormat: 2 - m_ColorFormat: 0 + m_ColorFormat: 52 m_MipMap: 0 m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 m_BindMS: 0 + m_EnableCompatibleFormat: 1 m_TextureSettings: serializedVersion: 2 - m_FilterMode: 1 + m_FilterMode: 0 m_Aniso: 0 m_MipBias: 0 m_WrapU: 1 diff --git a/Runtime/RenderTextures/DepthRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/DepthRenderTexture.renderTexture.meta similarity index 100% rename from Runtime/RenderTextures/DepthRenderTexture.renderTexture.meta rename to Runtime/Resources/RenderTextures/NeodroidCamera/DepthRenderTexture.renderTexture.meta diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/DiffuseRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/DiffuseRenderTexture.renderTexture new file mode 100644 index 000000000..a340cb022 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/DiffuseRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DiffuseRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/DiffuseRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/DiffuseRenderTexture.renderTexture.meta new file mode 100644 index 000000000..5a634d3c4 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/DiffuseRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b52d278b193da0eabaefa52fa456bbb4 +timeCreated: 1505979228 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/RenderTextures/FlowRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/FlowRenderTexture.renderTexture similarity index 82% rename from Runtime/RenderTextures/FlowRenderTexture.renderTexture rename to Runtime/Resources/RenderTextures/NeodroidCamera/FlowRenderTexture.renderTexture index 6b263672e..b718952f9 100644 --- a/Runtime/RenderTextures/FlowRenderTexture.renderTexture +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/FlowRenderTexture.renderTexture @@ -12,19 +12,22 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_ForcedFallbackFormat: 4 m_DownscaleFallback: 0 - m_Width: 84 - m_Height: 84 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 m_AntiAliasing: 1 + m_MipCount: -1 m_DepthFormat: 2 - m_ColorFormat: 0 + m_ColorFormat: 52 m_MipMap: 0 m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 m_BindMS: 0 + m_EnableCompatibleFormat: 1 m_TextureSettings: serializedVersion: 2 - m_FilterMode: 1 + m_FilterMode: 0 m_Aniso: 0 m_MipBias: 0 m_WrapU: 1 diff --git a/Runtime/RenderTextures/FlowRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/FlowRenderTexture.renderTexture.meta similarity index 100% rename from Runtime/RenderTextures/FlowRenderTexture.renderTexture.meta rename to Runtime/Resources/RenderTextures/NeodroidCamera/FlowRenderTexture.renderTexture.meta diff --git a/Runtime/RenderTextures/InfraredShadowRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/InfraredShadowRenderTexture.renderTexture similarity index 82% rename from Runtime/RenderTextures/InfraredShadowRenderTexture.renderTexture rename to Runtime/Resources/RenderTextures/NeodroidCamera/InfraredShadowRenderTexture.renderTexture index ced4476e5..b43e43d2a 100644 --- a/Runtime/RenderTextures/InfraredShadowRenderTexture.renderTexture +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/InfraredShadowRenderTexture.renderTexture @@ -12,19 +12,22 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_ForcedFallbackFormat: 4 m_DownscaleFallback: 0 - m_Width: 84 - m_Height: 84 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 m_AntiAliasing: 1 + m_MipCount: -1 m_DepthFormat: 2 - m_ColorFormat: 0 + m_ColorFormat: 52 m_MipMap: 0 m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 m_BindMS: 0 + m_EnableCompatibleFormat: 1 m_TextureSettings: serializedVersion: 2 - m_FilterMode: 1 + m_FilterMode: 0 m_Aniso: 0 m_MipBias: 0 m_WrapU: 1 diff --git a/Runtime/RenderTextures/InfraredShadowRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/InfraredShadowRenderTexture.renderTexture.meta similarity index 100% rename from Runtime/RenderTextures/InfraredShadowRenderTexture.renderTexture.meta rename to Runtime/Resources/RenderTextures/NeodroidCamera/InfraredShadowRenderTexture.renderTexture.meta diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/LayerSegmentationTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/LayerSegmentationTexture.renderTexture new file mode 100644 index 000000000..7e00cd4ad --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/LayerSegmentationTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LayerSegmentationTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/LayerSegmentationTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/LayerSegmentationTexture.renderTexture.meta new file mode 100644 index 000000000..0a3831e13 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/LayerSegmentationTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 29bfbe75d2faa72cdbf597b2763205ab +timeCreated: 1506529008 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/MaterialIdInstanceSegmentationTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/MaterialIdInstanceSegmentationTexture.renderTexture new file mode 100644 index 000000000..532ab1b70 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/MaterialIdInstanceSegmentationTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MaterialIdInstanceSegmentationTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/MaterialIdInstanceSegmentationTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/MaterialIdInstanceSegmentationTexture.renderTexture.meta new file mode 100644 index 000000000..84889c367 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/MaterialIdInstanceSegmentationTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e52a2f56c9ffa187abf5021f3338228e +timeCreated: 1506529008 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/RenderTextures/NormalRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/NormalRenderTexture.renderTexture similarity index 82% rename from Runtime/RenderTextures/NormalRenderTexture.renderTexture rename to Runtime/Resources/RenderTextures/NeodroidCamera/NormalRenderTexture.renderTexture index f83febe5b..e37304e43 100644 --- a/Runtime/RenderTextures/NormalRenderTexture.renderTexture +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/NormalRenderTexture.renderTexture @@ -12,19 +12,22 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_ForcedFallbackFormat: 4 m_DownscaleFallback: 0 - m_Width: 84 - m_Height: 84 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 m_AntiAliasing: 1 + m_MipCount: -1 m_DepthFormat: 2 - m_ColorFormat: 0 + m_ColorFormat: 52 m_MipMap: 0 m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 m_BindMS: 0 + m_EnableCompatibleFormat: 1 m_TextureSettings: serializedVersion: 2 - m_FilterMode: 1 + m_FilterMode: 0 m_Aniso: 0 m_MipBias: 0 m_WrapU: 1 diff --git a/Runtime/RenderTextures/NormalRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/NormalRenderTexture.renderTexture.meta similarity index 100% rename from Runtime/RenderTextures/NormalRenderTexture.renderTexture.meta rename to Runtime/Resources/RenderTextures/NeodroidCamera/NormalRenderTexture.renderTexture.meta diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectIdInstanceSegmentationTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectIdInstanceSegmentationTexture.renderTexture new file mode 100644 index 000000000..9c1b1699b --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectIdInstanceSegmentationTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ObjectIdInstanceSegmentationTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectIdInstanceSegmentationTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectIdInstanceSegmentationTexture.renderTexture.meta new file mode 100644 index 000000000..eec5b57fe --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectIdInstanceSegmentationTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 280476064a32df4848434f9b38c2d744 +timeCreated: 1506529008 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectSpaceRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectSpaceRenderTexture.renderTexture new file mode 100644 index 000000000..fdb17a4be --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectSpaceRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ObjectSpaceRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectSpaceRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectSpaceRenderTexture.renderTexture.meta new file mode 100644 index 000000000..d52cb23cc --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/ObjectSpaceRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7ce5d7425e7fa3af69f9bdd316de2208 +timeCreated: 1505832185 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/OcclusionMaskRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/OcclusionMaskRenderTexture.renderTexture new file mode 100644 index 000000000..58e21426a --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/OcclusionMaskRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OcclusionMaskRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/OcclusionMaskRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/OcclusionMaskRenderTexture.renderTexture.meta new file mode 100644 index 000000000..48cd654ea --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/OcclusionMaskRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 741d32efcc5cb8896b9ea9bce98ba404 +timeCreated: 1505832185 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/OffsetRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/OffsetRenderTexture.renderTexture new file mode 100644 index 000000000..695983889 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/OffsetRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OffsetRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/OffsetRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/OffsetRenderTexture.renderTexture.meta new file mode 100644 index 000000000..325b4f77f --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/OffsetRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cc4e727fd2f685deea5ec6e4b44b5cc3 +timeCreated: 1505979228 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/RenderTextures/RGBRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/RGBRenderTexture.renderTexture similarity index 82% rename from Runtime/RenderTextures/RGBRenderTexture.renderTexture rename to Runtime/Resources/RenderTextures/NeodroidCamera/RGBRenderTexture.renderTexture index 2ed59f964..6cf0cf0f9 100644 --- a/Runtime/RenderTextures/RGBRenderTexture.renderTexture +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/RGBRenderTexture.renderTexture @@ -12,19 +12,22 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_ForcedFallbackFormat: 4 m_DownscaleFallback: 0 - m_Width: 84 - m_Height: 84 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 m_AntiAliasing: 1 + m_MipCount: -1 m_DepthFormat: 2 - m_ColorFormat: 0 + m_ColorFormat: 52 m_MipMap: 0 m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 m_BindMS: 0 + m_EnableCompatibleFormat: 1 m_TextureSettings: serializedVersion: 2 - m_FilterMode: 1 + m_FilterMode: 0 m_Aniso: 0 m_MipBias: 0 m_WrapU: 1 diff --git a/Runtime/RenderTextures/RGBRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/RGBRenderTexture.renderTexture.meta similarity index 100% rename from Runtime/RenderTextures/RGBRenderTexture.renderTexture.meta rename to Runtime/Resources/RenderTextures/NeodroidCamera/RGBRenderTexture.renderTexture.meta diff --git a/Runtime/RenderTextures/SatelliteRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/SatelliteRenderTexture.renderTexture similarity index 82% rename from Runtime/RenderTextures/SatelliteRenderTexture.renderTexture rename to Runtime/Resources/RenderTextures/NeodroidCamera/SatelliteRenderTexture.renderTexture index 9e16ae9ab..6d14f81e9 100644 --- a/Runtime/RenderTextures/SatelliteRenderTexture.renderTexture +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/SatelliteRenderTexture.renderTexture @@ -12,19 +12,22 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_ForcedFallbackFormat: 4 m_DownscaleFallback: 0 - m_Width: 84 - m_Height: 84 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 m_AntiAliasing: 1 + m_MipCount: -1 m_DepthFormat: 2 - m_ColorFormat: 0 + m_ColorFormat: 52 m_MipMap: 0 m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 m_BindMS: 0 + m_EnableCompatibleFormat: 1 m_TextureSettings: serializedVersion: 2 - m_FilterMode: 1 + m_FilterMode: 0 m_Aniso: 0 m_MipBias: 0 m_WrapU: 1 diff --git a/Runtime/RenderTextures/SatelliteRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/SatelliteRenderTexture.renderTexture.meta similarity index 100% rename from Runtime/RenderTextures/SatelliteRenderTexture.renderTexture.meta rename to Runtime/Resources/RenderTextures/NeodroidCamera/SatelliteRenderTexture.renderTexture.meta diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/TagIdSegmentationTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/TagIdSegmentationTexture.renderTexture new file mode 100644 index 000000000..b9d08567f --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/TagIdSegmentationTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TagIdSegmentationTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/TagIdSegmentationTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/TagIdSegmentationTexture.renderTexture.meta new file mode 100644 index 000000000..1d8bb9c65 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/TagIdSegmentationTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7355ca23a1b57891dafa75b44c2c5cc8 +timeCreated: 1506529008 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/TangentsRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/TangentsRenderTexture.renderTexture new file mode 100644 index 000000000..675fd416c --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/TangentsRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TangentsRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/TangentsRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/TangentsRenderTexture.renderTexture.meta new file mode 100644 index 000000000..3563d411c --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/TangentsRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7ce5712ecfb6c0929a81d56be34c2333 +timeCreated: 1505832185 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/UVsRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/UVsRenderTexture.renderTexture new file mode 100644 index 000000000..9e17d9cc3 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/UVsRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UVsRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/UVsRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/UVsRenderTexture.renderTexture.meta new file mode 100644 index 000000000..ee7043fb1 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/UVsRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 43f8b57e2bee2bd6eb1df24b6c88ba79 +timeCreated: 1505832185 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/UsRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/UsRenderTexture.renderTexture new file mode 100644 index 000000000..0f0b410f6 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/UsRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UsRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/UsRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/UsRenderTexture.renderTexture.meta new file mode 100644 index 000000000..b42fd6a11 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/UsRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a2ed3a19ee4cfe303b28c87fca44a286 +timeCreated: 1505832185 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/ViewSpaceRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/ViewSpaceRenderTexture.renderTexture new file mode 100644 index 000000000..cbfe3414b --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/ViewSpaceRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ViewSpaceRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/ViewSpaceRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/ViewSpaceRenderTexture.renderTexture.meta new file mode 100644 index 000000000..c6047365d --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/ViewSpaceRenderTexture.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: affb45a7139438dc0a18c7848e9c59d0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/VsRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/VsRenderTexture.renderTexture new file mode 100644 index 000000000..dffa912b2 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/VsRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: VsRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/VsRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/VsRenderTexture.renderTexture.meta new file mode 100644 index 000000000..9bf5c0878 --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/VsRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 142c9eceec4ee3060b3550e1b2a64cbf +timeCreated: 1505832185 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/WorldSpaceRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/NeodroidCamera/WorldSpaceRenderTexture.renderTexture new file mode 100644 index 000000000..42d0ae10b --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/WorldSpaceRenderTexture.renderTexture @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: WorldSpaceRenderTexture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 52 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 0 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Runtime/Resources/RenderTextures/NeodroidCamera/WorldSpaceRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/NeodroidCamera/WorldSpaceRenderTexture.renderTexture.meta new file mode 100644 index 000000000..e4dd9dbbd --- /dev/null +++ b/Runtime/Resources/RenderTextures/NeodroidCamera/WorldSpaceRenderTexture.renderTexture.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0a204b96270826992a5c81c531ea5dcf +timeCreated: 1505832185 +licenseType: Pro +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/RenderTextures/Obsolete.meta b/Runtime/Resources/RenderTextures/Obsolete.meta new file mode 100644 index 000000000..16715dcdf --- /dev/null +++ b/Runtime/Resources/RenderTextures/Obsolete.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf24a4a3d3541a36c889d99b1211b041 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/RenderTextures/InstanceSegmentationTexture.renderTexture b/Runtime/Resources/RenderTextures/Obsolete/InstanceSegmentationTexture.renderTexture similarity index 86% rename from Runtime/RenderTextures/InstanceSegmentationTexture.renderTexture rename to Runtime/Resources/RenderTextures/Obsolete/InstanceSegmentationTexture.renderTexture index 7af1bbd2d..ecd63124f 100644 --- a/Runtime/RenderTextures/InstanceSegmentationTexture.renderTexture +++ b/Runtime/Resources/RenderTextures/Obsolete/InstanceSegmentationTexture.renderTexture @@ -12,16 +12,18 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_ForcedFallbackFormat: 4 m_DownscaleFallback: 0 - m_Width: 84 - m_Height: 84 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 m_AntiAliasing: 1 m_DepthFormat: 2 - m_ColorFormat: 0 + m_ColorFormat: 75 m_MipMap: 0 m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 m_BindMS: 0 + m_EnableCompatibleFormat: 1 m_TextureSettings: serializedVersion: 2 m_FilterMode: 1 diff --git a/Runtime/RenderTextures/InstanceSegmentationTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/Obsolete/InstanceSegmentationTexture.renderTexture.meta similarity index 100% rename from Runtime/RenderTextures/InstanceSegmentationTexture.renderTexture.meta rename to Runtime/Resources/RenderTextures/Obsolete/InstanceSegmentationTexture.renderTexture.meta diff --git a/Runtime/RenderTextures/SegmentationRenderTexture.renderTexture b/Runtime/Resources/RenderTextures/Obsolete/SegmentationRenderTexture.renderTexture similarity index 86% rename from Runtime/RenderTextures/SegmentationRenderTexture.renderTexture rename to Runtime/Resources/RenderTextures/Obsolete/SegmentationRenderTexture.renderTexture index e8d4d1f31..93ef889aa 100644 --- a/Runtime/RenderTextures/SegmentationRenderTexture.renderTexture +++ b/Runtime/Resources/RenderTextures/Obsolete/SegmentationRenderTexture.renderTexture @@ -12,16 +12,18 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_ForcedFallbackFormat: 4 m_DownscaleFallback: 0 - m_Width: 84 - m_Height: 84 + serializedVersion: 3 + m_Width: 256 + m_Height: 256 m_AntiAliasing: 1 m_DepthFormat: 2 - m_ColorFormat: 0 + m_ColorFormat: 75 m_MipMap: 0 m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 m_BindMS: 0 + m_EnableCompatibleFormat: 1 m_TextureSettings: serializedVersion: 2 m_FilterMode: 1 diff --git a/Runtime/RenderTextures/SegmentationRenderTexture.renderTexture.meta b/Runtime/Resources/RenderTextures/Obsolete/SegmentationRenderTexture.renderTexture.meta similarity index 100% rename from Runtime/RenderTextures/SegmentationRenderTexture.renderTexture.meta rename to Runtime/Resources/RenderTextures/Obsolete/SegmentationRenderTexture.renderTexture.meta diff --git a/Runtime/Resources/ScriptableObjects.meta b/Runtime/Resources/ScriptableObjects.meta new file mode 100644 index 000000000..2dc68bf29 --- /dev/null +++ b/Runtime/Resources/ScriptableObjects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee9541153a7a642ed982388daaebe597 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ScriptableObjects/PlayerMotions.meta b/Runtime/Resources/ScriptableObjects/PlayerMotions.meta similarity index 100% rename from Runtime/ScriptableObjects/PlayerMotions.meta rename to Runtime/Resources/ScriptableObjects/PlayerMotions.meta diff --git a/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorMotions.asset b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorMotions.asset new file mode 100644 index 000000000..82bda5166 --- /dev/null +++ b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorMotions.asset @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 1aa96101fe55749209a8963174b3defa, type: 3} + m_Name: DefaultActorMotions + m_EditorClassIdentifier: + _Motions: + - _Key: 119 + _Actor: ActorActor + _Motor: ActorRigidbodyZ_ + _Strength: 10 + - _Key: 115 + _Actor: ActorActor + _Motor: ActorRigidbodyZ_ + _Strength: -10 + - _Key: 97 + _Actor: ActorActor + _Motor: ActorRigidbodyX_ + _Strength: 10 + - _Key: 100 + _Actor: ActorActor + _Motor: ActorRigidbodyX_ + _Strength: -10 + - _Key: 113 + _Actor: ActorActor + _Motor: ActorRigidbodyY_ + _Strength: 10 + - _Key: 101 + _Actor: ActorActor + _Motor: ActorRigidbodyY_ + _Strength: -10 + - _Key: 8 + _Actor: Environment + _Motor: Reset + _Strength: 1 + - _Key: 32 + _Actor: Environment + _Motor: Step + _Strength: 1 + - _Key: 100 + _Actor: ActorActor + _Motor: ActorTransformX_ + _Strength: -1 + - _Key: 97 + _Actor: ActorActor + _Motor: ActorTransformX_ + _Strength: 1 + - _Key: 101 + _Actor: ActorActor + _Motor: ActorTransformY_ + _Strength: 1 + - _Key: 113 + _Actor: ActorActor + _Motor: ActorTransformY_ + _Strength: -1 + - _Key: 119 + _Actor: ActorActor + _Motor: ActorTransformZ_ + _Strength: -1 + - _Key: 115 + _Actor: ActorActor + _Motor: ActorTransformZ_ + _Strength: 1 diff --git a/Runtime/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset.meta b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorMotions.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset.meta rename to Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorMotions.asset.meta diff --git a/Runtime/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset similarity index 90% rename from Runtime/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset rename to Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset index 6fa221e10..b72b0d518 100644 --- a/Runtime/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset +++ b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset @@ -4,10 +4,12 @@ MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} m_Script: {fileID: 11500000, guid: 1aa96101fe55749209a8963174b3defa, type: 3} m_Name: DefaultActorRigidbodyMotions m_EditorClassIdentifier: diff --git a/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset.meta b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset.meta new file mode 100644 index 000000000..21358659b --- /dev/null +++ b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorRigidbodyMotions.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45e8f0ef76bd1ef2eafb12310a1356c9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset new file mode 100644 index 000000000..0d1c8734f --- /dev/null +++ b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 1aa96101fe55749209a8963174b3defa, type: 3} + m_Name: DefaultActorTransformMotions + m_EditorClassIdentifier: + _Motions: + - _Key: 119 + _Actor: ActorActor + _Motor: ActorTransformZ_ + _Strength: -1 + - _Key: 97 + _Actor: ActorActor + _Motor: ActorTransformX_ + _Strength: -1 + - _Key: 115 + _Actor: ActorActor + _Motor: ActorTransformZ_ + _Strength: 1 + - _Key: 100 + _Actor: ActorActor + _Motor: ActorTransformX_ + _Strength: 1 + - _Key: 113 + _Actor: ActorActor + _Motor: ActorTransformY_ + _Strength: 1 + - _Key: 101 + _Actor: ActorActor + _Motor: ActorTransformY_ + _Strength: -1 diff --git a/Runtime/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset.meta b/Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset.meta rename to Runtime/Resources/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset.meta diff --git a/Runtime/ScriptableObjects/Segmentations.meta b/Runtime/Resources/ScriptableObjects/Segmentations.meta similarity index 100% rename from Runtime/ScriptableObjects/Segmentations.meta rename to Runtime/Resources/ScriptableObjects/Segmentations.meta diff --git a/Runtime/Resources/ScriptableObjects/Segmentations/DefaultSegmentation.asset b/Runtime/Resources/ScriptableObjects/Segmentations/DefaultSegmentation.asset new file mode 100644 index 000000000..f27c5a24b --- /dev/null +++ b/Runtime/Resources/ScriptableObjects/Segmentations/DefaultSegmentation.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f16b790dafe9a465ab9da94499ded055, type: 3} + m_Name: DefaultSegmentation + m_EditorClassIdentifier: + _color_by_categories: + - _Category_Name: Player + _Color: {r: 1, g: 0, b: 0, a: 1} + - _Category_Name: + _Color: {r: 1, g: 1, b: 1, a: 0} + - _Category_Name: + _Color: {r: 0, g: 0, b: 0, a: 0} diff --git a/Runtime/ScriptableObjects/Segmentations/DefaultSegmentation.asset.meta b/Runtime/Resources/ScriptableObjects/Segmentations/DefaultSegmentation.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/Segmentations/DefaultSegmentation.asset.meta rename to Runtime/Resources/ScriptableObjects/Segmentations/DefaultSegmentation.asset.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultFrameDependent.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultFrameDependent.asset similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DefaultFrameDependent.asset rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultFrameDependent.asset diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultFrameDependent.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultFrameDependent.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DefaultFrameDependent.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultFrameDependent.asset.meta diff --git a/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset new file mode 100644 index 000000000..13423546f --- /dev/null +++ b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ff5f73ed10ef42709ef975f07e9b1a3, type: 3} + m_Name: DefaultIndependent + m_EditorClassIdentifier: + _always_serialise_unobservables: 0 + _always_serialise_individual_observables: 1 + _always_serialise_aggregated_float_array: 1 + _apply_resolution_settings: 0 + _optimiseWindow_for_speed: 0 + _apply_quality_settings: 0 + _height: 500 + _width: 500 + _quality_level: 4 + _v_sync_count: 0 + _full_screen: 0 + _resizable_window: 1 + _color_space: 1 + _frame_finishes: 1 + _frame_skips: 0 + _ip_address: localhost + _max_reply_interval: 0 + _num_of_environments: 0 + _port: 6969 + _replay_reaction_in_skips: 0 + _reset_iterations: 1 + _simulation_type: 3 + _step_execution_phase: 1 + _target_frame_rate: -1 + _time_scale: 1 + _update_fixed_time_scale: 0 diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset.meta diff --git a/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset new file mode 100644 index 000000000..3fd4f2be1 --- /dev/null +++ b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ff5f73ed10ef42709ef975f07e9b1a3, type: 3} + m_Name: DefaultPhysicsDependent + m_EditorClassIdentifier: + _always_serialise_unobservables: 0 + _always_serialise_individual_observables: 0 + _always_serialise_aggregated_float_array: 1 + _apply_resolution_settings: 0 + _optimiseWindow_for_speed: 0 + _apply_quality_settings: 0 + _height: 500 + _width: 500 + _quality_level: 1 + _v_sync_count: 0 + _full_screen: 0 + _resizable_window: 1 + _color_space: 1 + _frame_finishes: 1 + _frame_skips: 0 + _ip_address: localhost + _max_reply_interval: 0 + _num_of_environments: 0 + _port: 6969 + _replay_reaction_in_skips: 0 + _reset_iterations: 1 + _simulation_type: 1 + _step_execution_phase: 1 + _target_frame_rate: 1 + _time_scale: 60 + _update_fixed_time_scale: 0 diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset similarity index 80% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset index e5acd5787..7f70f8bed 100644 --- a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset +++ b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset @@ -4,30 +4,33 @@ MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} m_Script: {fileID: 11500000, guid: 0ff5f73ed10ef42709ef975f07e9b1a3, type: 3} m_Name: DefaultSimulatorConfiguration m_EditorClassIdentifier: + _always_serialise_unobservables: 0 + _always_serialise_individual_observables: 1 _apply_resolution_settings: 0 - _full_screen: 0 - _width: 800 + _apply_quality_settings: 0 _height: 600 + _width: 800 _quality_level: 4 _frame_finishes: 1 - _reset_iterations: 1 _frame_skips: 0 - _simulation_type: 0 - _step_execution_phase: 1 - _time_scale: 1 - _target_frame_rate: -1 + _full_screen: 0 _ip_address: localhost - _port: 6969 - _always_serialise_unobservables: 0 - _always_serialise_indidual_observables: 0 - _update_fixed_time_scale: 0 _max_reply_interval: 0 _num_of_environments: 0 + _port: 6969 _replay_reaction_in_skips: 0 + _reset_iterations: 1 + _simulation_type: 3 + _step_execution_phase: 1 + _target_frame_rate: -1 + _time_scale: 1 + _update_fixed_time_scale: 0 diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DefaultSimulatorConfiguration.asset.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DescriptiveNoPhysicsFrameDependent.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DescriptiveNoPhysicsFrameDependent.asset similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DescriptiveNoPhysicsFrameDependent.asset rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DescriptiveNoPhysicsFrameDependent.asset diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DescriptiveNoPhysicsFrameDependent.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DescriptiveNoPhysicsFrameDependent.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DescriptiveNoPhysicsFrameDependent.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/DescriptiveNoPhysicsFrameDependent.asset.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/FrameRate60PhysicsDependent.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/FrameRate60PhysicsDependent.asset similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/FrameRate60PhysicsDependent.asset rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/FrameRate60PhysicsDependent.asset diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/FrameRate60PhysicsDependent.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/FrameRate60PhysicsDependent.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/FrameRate60PhysicsDependent.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/FrameRate60PhysicsDependent.asset.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/InferenceSimulatorConfiguration.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/InferenceSimulatorConfiguration.asset similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/InferenceSimulatorConfiguration.asset rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/InferenceSimulatorConfiguration.asset diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/InferenceSimulatorConfiguration.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/InferenceSimulatorConfiguration.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/InferenceSimulatorConfiguration.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/InferenceSimulatorConfiguration.asset.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/NoFramesPhysicsDependent.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoFramesPhysicsDependent.asset similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/NoFramesPhysicsDependent.asset rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoFramesPhysicsDependent.asset diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/NoFramesPhysicsDependent.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoFramesPhysicsDependent.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/NoFramesPhysicsDependent.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoFramesPhysicsDependent.asset.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset similarity index 77% rename from Runtime/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset index 189350149..2250e9c02 100644 --- a/Runtime/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset +++ b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset @@ -9,26 +9,31 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} m_Script: {fileID: 11500000, guid: 0ff5f73ed10ef42709ef975f07e9b1a3, type: 3} m_Name: NoPhysicsFrameDependent m_EditorClassIdentifier: + _always_serialise_unobservables: 1 + _always_serialise_individual_observables: 1 + _always_serialise_aggregated_float_array: 1 _apply_resolution_settings: 0 - _full_screen: 0 - _width: 500 + _apply_quality_settings: 0 _height: 500 + _width: 500 _quality_level: 1 _frame_finishes: 1 - _reset_iterations: 1 _frame_skips: 0 - _simulation_type: 0 - _step_execution_phase: 1 - _time_scale: 0 - _target_frame_rate: -1 + _full_screen: 0 _ip_address: localhost - _port: 6969 - _always_serialise_unobservables: 0 - _always_serialise_indidual_observables: 0 - _update_fixed_time_scale: 0 _max_reply_interval: 0 _num_of_environments: 0 + _port: 6969 _replay_reaction_in_skips: 0 + _reset_iterations: 1 + _simulation_type: 0 + _step_execution_phase: 1 + _target_frame_rate: -1 + _time_scale: 0 + _update_fixed_time_scale: 0 + _resizable_window: 1 + _color_space: 1 diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/NoPhysicsFrameDependent.asset.meta diff --git a/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/Speed.asset b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/Speed.asset new file mode 100644 index 000000000..b54669793 --- /dev/null +++ b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/Speed.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ff5f73ed10ef42709ef975f07e9b1a3, type: 3} + m_Name: Speed + m_EditorClassIdentifier: + _always_serialise_unobservables: 0 + _always_serialise_individual_observables: 1 + _always_serialise_aggregated_float_array: 0 + _apply_resolution_settings: 1 + _optimiseWindow_for_speed: 1 + _apply_quality_settings: 1 + _height: 128 + _width: 128 + _quality_level: 4 + _v_sync_count: 0 + _full_screen: 0 + _resizable_window: 0 + _color_space: 1 + _frame_finishes: 3 + _frame_skips: 0 + _ip_address: localhost + _max_reply_interval: 0 + _num_of_environments: 0 + _port: 6969 + _replay_reaction_in_skips: 0 + _reset_iterations: 1 + _simulation_type: 0 + _step_execution_phase: 1 + _target_frame_rate: -1 + _time_scale: 1 + _update_fixed_time_scale: 0 diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependentIndividualObs.asset.meta b/Runtime/Resources/ScriptableObjects/SimulatorConfigurations/Speed.asset.meta similarity index 100% rename from Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependentIndividualObs.asset.meta rename to Runtime/Resources/ScriptableObjects/SimulatorConfigurations/Speed.asset.meta diff --git a/Runtime/Resources/Skins.meta b/Runtime/Resources/Skins.meta new file mode 100644 index 000000000..a1b7d7d06 --- /dev/null +++ b/Runtime/Resources/Skins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2009ddd09d6999a9c996524296110248 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Skins/BoundingBox.guiskin b/Runtime/Resources/Skins/BoundingBox.guiskin new file mode 100644 index 000000000..20dfcc822 --- /dev/null +++ b/Runtime/Resources/Skins/BoundingBox.guiskin @@ -0,0 +1,1561 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} + m_Name: BoundingBox + m_EditorClassIdentifier: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_box: + m_Name: box + m_Normal: + m_Background: {fileID: 2800000, guid: 400a66016a26d45479b1ba3aaf1e6ef8, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 2 + m_Right: 2 + m_Top: 2 + m_Bottom: 2 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 10 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 1 + m_button: + m_Name: button + m_Normal: + m_Background: {fileID: 11006, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Hover: + m_Background: {fileID: 11003, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11005, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_OnHover: + m_Background: {fileID: 11004, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_toggle: + m_Name: toggle + m_Normal: + m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} + m_Hover: + m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 14 + m_Right: 0 + m_Top: 14 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 15 + m_Right: 0 + m_Top: 3 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: 0 + m_Top: -4 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_label: + m_Name: label + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textField: + m_Name: textfield + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textArea: + m_Name: textarea + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_window: + m_Name: window + m_Normal: + m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 18 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 20 + m_Bottom: 10 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: -18} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSlider: + m_Name: horizontalslider + m_Normal: + m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -2 + m_Bottom: -3 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSliderThumb: + m_Name: horizontalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 7 + m_Right: 7 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalSlider: + m_Name: verticalslider + m_Normal: + m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Overflow: + m_Left: -2 + m_Right: -3 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalSliderThumb: + m_Name: verticalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 7 + m_Bottom: 7 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_horizontalScrollbar: + m_Name: horizontalscrollbar + m_Normal: + m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 9 + m_Right: 9 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 1 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 15 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarThumb: + m_Name: horizontalscrollbarthumb + m_Normal: + m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 13 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarLeftButton: + m_Name: horizontalscrollbarleftbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarRightButton: + m_Name: horizontalscrollbarrightbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbar: + m_Name: verticalscrollbar + m_Normal: + m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 9 + m_Bottom: 9 + m_Margin: + m_Left: 1 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 1 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarThumb: + m_Name: verticalscrollbarthumb + m_Normal: + m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 6 + m_Bottom: 6 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalScrollbarUpButton: + m_Name: verticalscrollbarupbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarDownButton: + m_Name: verticalscrollbardownbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_ScrollView: + m_Name: scrollview + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_CustomStyles: + - m_Name: thumb + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: leftbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: rightbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_Settings: + m_DoubleClickSelectsWord: 1 + m_TripleClickSelectsLine: 1 + m_CursorColor: {r: 1, g: 1, b: 1, a: 1} + m_CursorFlashSpeed: -1 + m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} diff --git a/Runtime/Resources/Skins/BoundingBox.guiskin.meta b/Runtime/Resources/Skins/BoundingBox.guiskin.meta new file mode 100644 index 000000000..66fccfe24 --- /dev/null +++ b/Runtime/Resources/Skins/BoundingBox.guiskin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45b8b02736ca4fc5b88b554edf8576ad +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Skins/DefaultGUIStyle.guiskin b/Runtime/Resources/Skins/DefaultGUIStyle.guiskin new file mode 100644 index 000000000..308377c1a --- /dev/null +++ b/Runtime/Resources/Skins/DefaultGUIStyle.guiskin @@ -0,0 +1,1429 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} + m_Name: DefaultGUIStyle + m_EditorClassIdentifier: + m_Font: {fileID: 12800000, guid: ca7561dbd3a3b964ab9da92d50a3baef, type: 3} + m_box: + m_Name: box + m_Normal: + m_Background: {fileID: 11001, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 10 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_button: + m_Name: button + m_Normal: + m_Background: {fileID: 11006, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Hover: + m_Background: {fileID: 11003, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11005, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_OnHover: + m_Background: {fileID: 11004, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 12800000, guid: 2befac256b25f2c4094d94b682b3c170, type: 3} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_toggle: + m_Name: toggle + m_Normal: + m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} + m_Hover: + m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 14 + m_Right: 0 + m_Top: 14 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 15 + m_Right: 0 + m_Top: 3 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: 0 + m_Top: -4 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_label: + m_Name: label + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textField: + m_Name: textfield + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textArea: + m_Name: textarea + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_window: + m_Name: window + m_Normal: + m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 18 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 20 + m_Bottom: 10 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: -18} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSlider: + m_Name: horizontalslider + m_Normal: + m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -2 + m_Bottom: -3 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSliderThumb: + m_Name: horizontalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 7 + m_Right: 7 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalSlider: + m_Name: verticalslider + m_Normal: + m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Overflow: + m_Left: -2 + m_Right: -3 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalSliderThumb: + m_Name: verticalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 7 + m_Bottom: 7 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_horizontalScrollbar: + m_Name: horizontalscrollbar + m_Normal: + m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 9 + m_Right: 9 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 1 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 15 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarThumb: + m_Name: horizontalscrollbarthumb + m_Normal: + m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 13 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarLeftButton: + m_Name: horizontalscrollbarleftbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarRightButton: + m_Name: horizontalscrollbarrightbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbar: + m_Name: verticalscrollbar + m_Normal: + m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 9 + m_Bottom: 9 + m_Margin: + m_Left: 1 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 1 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarThumb: + m_Name: verticalscrollbarthumb + m_Normal: + m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 6 + m_Bottom: 6 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalScrollbarUpButton: + m_Name: verticalscrollbarupbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarDownButton: + m_Name: verticalscrollbardownbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_ScrollView: + m_Name: scrollview + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_CustomStyles: + - m_Name: + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_Settings: + m_DoubleClickSelectsWord: 1 + m_TripleClickSelectsLine: 1 + m_CursorColor: {r: 1, g: 1, b: 1, a: 1} + m_CursorFlashSpeed: -1 + m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} diff --git a/Runtime/Resources/Skins/DefaultGUIStyle.guiskin.meta b/Runtime/Resources/Skins/DefaultGUIStyle.guiskin.meta new file mode 100644 index 000000000..aa0ce2f7e --- /dev/null +++ b/Runtime/Resources/Skins/DefaultGUIStyle.guiskin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec5e654c57aeb0f4e98c176dd7608ba0 +timeCreated: 1468742641 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Textures.meta b/Runtime/Resources/Textures.meta similarity index 100% rename from Runtime/Textures.meta rename to Runtime/Resources/Textures.meta diff --git a/Runtime/Resources/Textures/06_DIFFUSE.jpg b/Runtime/Resources/Textures/06_DIFFUSE.jpg new file mode 100644 index 000000000..53169f3c8 --- /dev/null +++ b/Runtime/Resources/Textures/06_DIFFUSE.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33c5b77822243734286b2c1960e4b4456440394d32d05254396f8ac5995f9c99 +size 1495137 diff --git a/Runtime/Resources/Textures/06_DIFFUSE.jpg.meta b/Runtime/Resources/Textures/06_DIFFUSE.jpg.meta new file mode 100644 index 000000000..9a131cdcd --- /dev/null +++ b/Runtime/Resources/Textures/06_DIFFUSE.jpg.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 8068f6d4a7ef83339a8fe95ba3f3de7c +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/06_DISP.jpg b/Runtime/Resources/Textures/06_DISP.jpg new file mode 100644 index 000000000..8786af4c2 --- /dev/null +++ b/Runtime/Resources/Textures/06_DISP.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f90d001742a5a12f63fd669a80be2f04ccda0eda187bcdbf1b9441f74a7b68b +size 199639 diff --git a/Runtime/Resources/Textures/06_DISP.jpg.meta b/Runtime/Resources/Textures/06_DISP.jpg.meta new file mode 100644 index 000000000..22198afbc --- /dev/null +++ b/Runtime/Resources/Textures/06_DISP.jpg.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 90eb386fd854cb2038aa1a042895b1ee +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/06_NORMAL.jpg b/Runtime/Resources/Textures/06_NORMAL.jpg new file mode 100644 index 000000000..eb1b1fe52 --- /dev/null +++ b/Runtime/Resources/Textures/06_NORMAL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82c6fa8ad8edc4152d215108be6ccaa0d86c656dd857b81c4b76a1dc1ea9767c +size 2067739 diff --git a/Runtime/Resources/Textures/06_NORMAL.jpg.meta b/Runtime/Resources/Textures/06_NORMAL.jpg.meta new file mode 100644 index 000000000..89c31c441 --- /dev/null +++ b/Runtime/Resources/Textures/06_NORMAL.jpg.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: eb1c3850eac73f5e1a12d48a32aaeac9 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/7fJYp.png b/Runtime/Resources/Textures/7fJYp.png new file mode 100644 index 000000000..210a946d8 --- /dev/null +++ b/Runtime/Resources/Textures/7fJYp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d757e4315c7b5ec459030f68d54d4b4d5e504a8d0308c8874e842fd36296de5 +size 15739 diff --git a/Runtime/Resources/Textures/7fJYp.png.meta b/Runtime/Resources/Textures/7fJYp.png.meta new file mode 100644 index 000000000..a0442ad8a --- /dev/null +++ b/Runtime/Resources/Textures/7fJYp.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 9360b378c7c0359fe9870d8351236c1d +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/Brick-2399-bump-map.jpg b/Runtime/Resources/Textures/Brick-2399-bump-map.jpg new file mode 100644 index 000000000..05bb8bfe6 --- /dev/null +++ b/Runtime/Resources/Textures/Brick-2399-bump-map.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47bcad706452c562e5f73a378ab50c27aa8d35b06be7cb282158ec1d5a2bb119 +size 35487 diff --git a/Runtime/Resources/Textures/Brick-2399-bump-map.jpg.meta b/Runtime/Resources/Textures/Brick-2399-bump-map.jpg.meta new file mode 100644 index 000000000..86c507a8e --- /dev/null +++ b/Runtime/Resources/Textures/Brick-2399-bump-map.jpg.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: adce39e889122cfe6b0ad6454766bd4b +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/Brick-2399.jpg b/Runtime/Resources/Textures/Brick-2399.jpg new file mode 100644 index 000000000..9f4ae4694 --- /dev/null +++ b/Runtime/Resources/Textures/Brick-2399.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6eed7b898324c6d11d71ebc7ab7b4dbd145517f7d4b8e13365d55a7008dcc81d +size 41247 diff --git a/Runtime/Resources/Textures/Brick-2399.jpg.meta b/Runtime/Resources/Textures/Brick-2399.jpg.meta new file mode 100644 index 000000000..6428be7fd --- /dev/null +++ b/Runtime/Resources/Textures/Brick-2399.jpg.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 909bf35a7d28f0b5097f8526925dfdd0 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/OpticalFlowWheel.meta b/Runtime/Resources/Textures/OpticalFlowWheel.meta new file mode 100644 index 000000000..c61e9a389 --- /dev/null +++ b/Runtime/Resources/Textures/OpticalFlowWheel.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b13a9a860f05ca7a98931d51e8e46394 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/OpticalFlowWheel/HueSaturation_PGuzman2010.png b/Runtime/Resources/Textures/OpticalFlowWheel/HueSaturation_PGuzman2010.png new file mode 100644 index 000000000..81b80c5a6 --- /dev/null +++ b/Runtime/Resources/Textures/OpticalFlowWheel/HueSaturation_PGuzman2010.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5871f78550dc60f4337728df9aee2d59b977c9da478732a74f45fc0817bb4072 +size 72453 diff --git a/Runtime/Resources/Textures/OpticalFlowWheel/HueSaturation_PGuzman2010.png.meta b/Runtime/Resources/Textures/OpticalFlowWheel/HueSaturation_PGuzman2010.png.meta new file mode 100644 index 000000000..9f947bb9a --- /dev/null +++ b/Runtime/Resources/Textures/OpticalFlowWheel/HueSaturation_PGuzman2010.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 79ffc87f75b21427b98cf477cce5a6a0 +timeCreated: 1483008231 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_ASellent2012.png b/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_ASellent2012.png new file mode 100644 index 000000000..a49a9ab21 --- /dev/null +++ b/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_ASellent2012.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e796de4ad11af0512ce190974b6f9c154d70b55e4734a990c3765ecaa5836638 +size 54243 diff --git a/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_ASellent2012.png.meta b/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_ASellent2012.png.meta new file mode 100644 index 000000000..035a39e24 --- /dev/null +++ b/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_ASellent2012.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 01803600b599d4b8faa18d17375f4bf4 +timeCreated: 1483011921 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_SBaker2007.png b/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_SBaker2007.png new file mode 100644 index 000000000..b2e81331b --- /dev/null +++ b/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_SBaker2007.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fea6120cdadbcd1685e2c641442641665694b998ececd318ae4a6641a4294a45 +size 32662 diff --git a/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_SBaker2007.png.meta b/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_SBaker2007.png.meta new file mode 100644 index 000000000..3dcb58b14 --- /dev/null +++ b/Runtime/Resources/Textures/OpticalFlowWheel/HueValue_SBaker2007.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: b1e361b30b8184d8da9687dfab653ec4 +timeCreated: 1483009829 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/blueprint.png b/Runtime/Resources/Textures/blueprint.png new file mode 100644 index 000000000..8eff46cf8 --- /dev/null +++ b/Runtime/Resources/Textures/blueprint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3f4b35adfcedda238c5a32d70828904a6e372d98ce6536e82583d5c2c00c66d +size 25707 diff --git a/Runtime/Resources/Textures/blueprint.png.meta b/Runtime/Resources/Textures/blueprint.png.meta new file mode 100644 index 000000000..f5317fccd --- /dev/null +++ b/Runtime/Resources/Textures/blueprint.png.meta @@ -0,0 +1,118 @@ +fileFormatVersion: 2 +guid: 5c0fa87a9ee9948a2b3a0403f9d259b7 +TextureImporter: + internalIDToNameTable: + - first: + 41386430: 2186277476908879412 + second: ImportLogs + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/camo_cloth_multicam_2048.jpg b/Runtime/Resources/Textures/camo_cloth_multicam_2048.jpg new file mode 100644 index 000000000..d94312b2b --- /dev/null +++ b/Runtime/Resources/Textures/camo_cloth_multicam_2048.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36198c61b050fbffa7c4e209cd3e142b45c3971c0d60e13d4ee237bdca0d1c52 +size 1230648 diff --git a/Runtime/Resources/Textures/camo_cloth_multicam_2048.jpg.meta b/Runtime/Resources/Textures/camo_cloth_multicam_2048.jpg.meta new file mode 100644 index 000000000..91fbb6e69 --- /dev/null +++ b/Runtime/Resources/Textures/camo_cloth_multicam_2048.jpg.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: a62d075592bfe4277846d07d29598842 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/chesterfield-normal.png b/Runtime/Resources/Textures/chesterfield-normal.png new file mode 100644 index 000000000..adcbe1b06 --- /dev/null +++ b/Runtime/Resources/Textures/chesterfield-normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:665a57fbb7a6083f68728f0b3af9f23f9f2c4c0023590e39ae08c7b386e589a6 +size 2171872 diff --git a/Runtime/Resources/Textures/chesterfield-normal.png.meta b/Runtime/Resources/Textures/chesterfield-normal.png.meta new file mode 100644 index 000000000..e1bf1f79e --- /dev/null +++ b/Runtime/Resources/Textures/chesterfield-normal.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: be0f8b7f68aca22f893adbe481b89fe2 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/chesterfield.png b/Runtime/Resources/Textures/chesterfield.png new file mode 100644 index 000000000..3004d2626 --- /dev/null +++ b/Runtime/Resources/Textures/chesterfield.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56dbe1415de53f9b8fcaf246b9423d8781da025d4db067de1d1a701846e75f9b +size 1419878 diff --git a/Runtime/Resources/Textures/chesterfield.png.meta b/Runtime/Resources/Textures/chesterfield.png.meta new file mode 100644 index 000000000..98e33cb0c --- /dev/null +++ b/Runtime/Resources/Textures/chesterfield.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 48916fe162e9c2ab89d48291e24ab6bf +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/debug.png b/Runtime/Resources/Textures/debug.png new file mode 100644 index 000000000..30e0da029 --- /dev/null +++ b/Runtime/Resources/Textures/debug.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:102aa53dc22aa7bded80858f0cd3806245cc65a1c047149854fd6ceb19824bea +size 1006379 diff --git a/Runtime/Resources/Textures/debug.png.meta b/Runtime/Resources/Textures/debug.png.meta new file mode 100644 index 000000000..84666fab6 --- /dev/null +++ b/Runtime/Resources/Textures/debug.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: ef8bff559c1ccfb83af15e0d58b99067 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/floor_2-1024x1024.png b/Runtime/Resources/Textures/floor_2-1024x1024.png new file mode 100644 index 000000000..59108311f --- /dev/null +++ b/Runtime/Resources/Textures/floor_2-1024x1024.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6a70658831986dfc94a2598f31c4f500b9f5ba011ebcbb3253398bb5983d25e +size 735455 diff --git a/Runtime/Resources/Textures/floor_2-1024x1024.png.meta b/Runtime/Resources/Textures/floor_2-1024x1024.png.meta new file mode 100644 index 000000000..dfddcbcc9 --- /dev/null +++ b/Runtime/Resources/Textures/floor_2-1024x1024.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 2f5e99ed1658603b5aa80eb4f25ef017 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Textures/green_pixel.png b/Runtime/Resources/Textures/green_pixel.png similarity index 100% rename from Runtime/Textures/green_pixel.png rename to Runtime/Resources/Textures/green_pixel.png diff --git a/Runtime/Textures/green_pixel.png.meta b/Runtime/Resources/Textures/green_pixel.png.meta similarity index 100% rename from Runtime/Textures/green_pixel.png.meta rename to Runtime/Resources/Textures/green_pixel.png.meta diff --git a/Runtime/Resources/Textures/lava.png b/Runtime/Resources/Textures/lava.png new file mode 100644 index 000000000..6a805144b --- /dev/null +++ b/Runtime/Resources/Textures/lava.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f68bde1731dae54ead79464915f14aa14c96d8ebd3c79b1ea5f6def251ecce7 +size 111868 diff --git a/Runtime/Resources/Textures/lava.png.meta b/Runtime/Resources/Textures/lava.png.meta new file mode 100644 index 000000000..004c53aea --- /dev/null +++ b/Runtime/Resources/Textures/lava.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 98828a060748207e7998ef8aaf726d6a +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/m7QiQ.png b/Runtime/Resources/Textures/m7QiQ.png new file mode 100644 index 000000000..52989cd23 --- /dev/null +++ b/Runtime/Resources/Textures/m7QiQ.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80b2f2e8708b8526e785cfd6211a739bf985e59e78d560363c1b2305191d2b1f +size 4024 diff --git a/Runtime/Resources/Textures/m7QiQ.png.meta b/Runtime/Resources/Textures/m7QiQ.png.meta new file mode 100644 index 000000000..260d3d899 --- /dev/null +++ b/Runtime/Resources/Textures/m7QiQ.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 9cfbb178e5a89c471a1012828aa1fdf3 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/Textures/marble.jpg b/Runtime/Resources/Textures/marble.jpg new file mode 100644 index 000000000..ed57e0d78 --- /dev/null +++ b/Runtime/Resources/Textures/marble.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6b572991ba4703994e107f9826579d82be90779cfc0fc75bf5945fc0e1ac3fa +size 133801 diff --git a/Runtime/Resources/Textures/marble.jpg.meta b/Runtime/Resources/Textures/marble.jpg.meta new file mode 100644 index 000000000..4d1785c82 --- /dev/null +++ b/Runtime/Resources/Textures/marble.jpg.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: d6f006565e2e3cd55bccfcd7eb3920ab +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Textures/ui_border.png b/Runtime/Resources/Textures/ui_border.png similarity index 100% rename from Runtime/Textures/ui_border.png rename to Runtime/Resources/Textures/ui_border.png diff --git a/Runtime/Textures/ui_border.png.meta b/Runtime/Resources/Textures/ui_border.png.meta similarity index 94% rename from Runtime/Textures/ui_border.png.meta rename to Runtime/Resources/Textures/ui_border.png.meta index e21f102a9..17b21c1ef 100644 --- a/Runtime/Textures/ui_border.png.meta +++ b/Runtime/Resources/Textures/ui_border.png.meta @@ -1,9 +1,10 @@ fileFormatVersion: 2 guid: 400a66016a26d45479b1ba3aaf1e6ef8 TextureImporter: - fileIDToRecycleName: {} + fileIDToRecycleName: + 2186277476908879412: ImportLogs externalObjects: {} - serializedVersion: 6 + serializedVersion: 9 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -92,6 +93,8 @@ TextureImporter: edges: [] weights: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Runtime/Resources/Textures/zZWys.png b/Runtime/Resources/Textures/zZWys.png new file mode 100644 index 000000000..7ecbc5261 --- /dev/null +++ b/Runtime/Resources/Textures/zZWys.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd161344449f7469aaa339243ccdec92b62f397ce68bb29f2a9bb62d2869fc99 +size 21517 diff --git a/Runtime/Resources/Textures/zZWys.png.meta b/Runtime/Resources/Textures/zZWys.png.meta new file mode 100644 index 000000000..c5e0637ba --- /dev/null +++ b/Runtime/Resources/Textures/zZWys.png.meta @@ -0,0 +1,89 @@ +fileFormatVersion: 2 +guid: 4f8fc7fd43dfaed9892214e9d0dc0703 +TextureImporter: + fileIDToRecycleName: + 2186277476908879412: ImportLogs + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Sampling.meta b/Runtime/Sampling.meta new file mode 100644 index 000000000..af73aa5dc --- /dev/null +++ b/Runtime/Sampling.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 52837807c646749ccbe7305241c3b860 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Sampling/Distributions.cs b/Runtime/Sampling/Distributions.cs new file mode 100644 index 000000000..e3665c438 --- /dev/null +++ b/Runtime/Sampling/Distributions.cs @@ -0,0 +1,434 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace droid.Runtime.Sampling { + /// + /// + /// + [Serializable] + public enum DistributionEnum { + /// + /// + /// + Uniform_, + + /// + /// + /// + Normal_, + + /// + /// + /// + Sloped_, + + /// + /// + /// + Exponential_, + + /// + /// + /// + Linear_ + } + + /// + /// + [Serializable] + public struct DistributionSampler { + Distributions.ConfidenceLevel _conf_level; + public Distributions.DirectionE _Direction; + + public float _factor; + + [SerializeField] DistributionEnum _de; + + public DistributionSampler(DistributionEnum distribution_enum = DistributionEnum.Uniform_, + Distributions.DirectionE d = Distributions.DirectionE.Left_) { + this._de = distribution_enum; + this._conf_level = Distributions.ConfidenceLevel._95; + this._Direction = d; + this._factor = 1.267291f; + } + + /// + /// + /// + /// + /// + /// + /// + public float Range(float min, float max) { + switch (this._de) { + case DistributionEnum.Uniform_: + return Random.Range(min, max); + case DistributionEnum.Normal_: + return Distributions.RandomRangeNormalDistribution(min, max, this._conf_level); + case DistributionEnum.Sloped_: + return Distributions.RandomRangeSlope(min, + max, + this._factor, + this._Direction); + case DistributionEnum.Exponential_: + return Distributions.RandomRangeExponential(min, + max, + this._factor, + this._Direction); + case DistributionEnum.Linear_: + return Distributions.RandomLinear(this._factor); + default: + return Random.Range(min, max); + } + + // + } + } + + public static class Distributions { + //-------------------------------------------------------------------------------------------- + // Normal Distribution + //-------------------------------------------------------------------------------------------- + + public enum ConfidenceLevel { + _60 = 0, + _80, + _90, + _95, + _98, + _99, + _998, + _999 + } + + //-------------------------------------------------------------------------------------------- + // Sloped Distribution (sec^2 distribution) + //-------------------------------------------------------------------------------------------- + + /// + /// + public enum DirectionE { + Right_, + Left_ + } + + static float[] _confidence_to_z_score = { + 0.84162123f, + 1.28155156f, + 1.64485363f, + 1.95996399f, + 2.32634787f, + 2.57582931f, + 3.0902323f, + 3.29052673f + }; + + /// + /// Get a random number from a normal distribution in [min,max]. + /// + /// + /// Get a random number between min [inclusive] and max [inclusive] with probability matching + /// a normal distribution along this range. The width of the distribution is described by the + /// confidence_level_cutoff, which describes what percentage of the bell curve should be over + /// the provided range. For example, a confidence level cutoff of 0.999 will result in a bell + /// curve from min to max that contains 99.9% of the area under the complete curve. 0.80 gives + /// a curve with 80% of the distribution's area. + /// Because a normal distribution flattens of towards the ends, this means that 0.80 will have + /// more even distribution between min and max than 0.999. + /// + /// + /// A random number between min [inclusive] and max [inclusive], with probability described + /// by the distribution. + /// + /// The min value returned [inclusive]. + /// The max min value returned [inclusive]. + /// + /// The percentage of a standard normal distribution that should be represented in the range. + /// + public static float RandomRangeNormalDistribution(float min, + float max, + ConfidenceLevel + confidence_level_cutoff /*, float confidence_level_cutoff*/) { + var mean = 0.5f * (min + max); + + // TODO formula for this? + var z_score_cutoff = _confidence_to_z_score[(int)confidence_level_cutoff]; + + var new_width = (max - min) / 2.0f; + var sigma = new_width / z_score_cutoff; + + // Get random normal from Normal Distribution that's within the confidence level cutoff requested + float random_normal_num; + do { + random_normal_num = RandomNormalDistribution(mean, sigma); + } while (random_normal_num > max || random_normal_num < min); + + // now you have a number selected from a bell curve stretching from min to max! + return random_normal_num; + } + + /// + /// Get a random number from a normal distribution with given mean and standard deviation. + /// + /// + /// Get a random number with probability following a normal distribution with given mean + /// and standard deviation. The likelihood of getting any given number corresponds to + /// its value along the y-axis in the distribution described by the parameters. + /// + /// + /// A random number between -infinity and infinity, with probability described by the distribution. + /// + /// The Mean (or center) of the normal distribution. + /// The Standard Deviation (or Sigma) of the normal distribution. + public static float RandomNormalDistribution(float mean, float std_dev) { + // Get random normal from Standard Normal Distribution + var random_normal_num = RandomFromStandardNormalDistribution(); + + // Stretch distribution to the requested sigma variance + random_normal_num *= std_dev; + + // Shift mean to requested mean: + random_normal_num += mean; + + // now you have a number selected from a normal distribution with requested mean and sigma! + return random_normal_num; + } + + /// + /// Get a random number from the standard normal distribution. + /// + /// + /// A random number in range [-inf, inf] from the standard normal distribution (mean == 1, stand deviation == + /// 1). + /// + public static float RandomFromStandardNormalDistribution() { + // This code follows the polar form of the muller transform: + // https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform#Polar_form + // also known as Marsaglia polar method + // https://en.wikipedia.org/wiki/Marsaglia_polar_method + + // calculate points on a circle + float u, v; + + float s; // this is the hypotenuse squared. + do { + u = Random.Range(-1f, 1f); + v = Random.Range(-1f, 1f); + s = u * u + v * v; + } while (!(s != 0 && s < 1)); // keep going until s is nonzero and less than one + + // TODO allow a user to specify how many random numbers they want! + // choose between u and v for seed (z0 vs z1) + float seed; + if (Random.Range(0, 2) == 0) { + seed = u; + } else { + seed = v; + } + + // create normally distributed number. + var z = seed * Mathf.Sqrt(-2.0f * Mathf.Log(s) / s); + + return z; + } + + /// + /// Returns a random number in range [min,max] from a curved slope following sec^2(x). + /// + /// Random in range [min,max] from a curved left slope. + /// The difference in height between max and min of curve. + public static float RandomRangeSlope(float min, float max, float skew, DirectionE direction) { + return min + RandomFromSlopedDistribution(skew, direction) * (max - min); + } + + /// + /// Returns random in range [0,1] from a curved right slope. + /// + /// Random in range [0,1] from a curved right slope. + /// The difference in height between max and min of curve. + public static float RandomFromSlopedDistribution(float skew, DirectionE direction) { + // the difference in scale is just the same as the max y-value.. + var max_y = skew; + + // our curve will go from 0 to max_x. + var max_x = Inverse_Sec_Sqrd(max_y); + + var max_cdf = Sec_Sqrd_CumulativeDistribution(max_x); + + var u = Random.Range(0.0f, max_cdf); + var x_val = Sec_Sqrd_InverseCumulativeDistribution(u); + + // scale to [0,1] + var value = x_val / max_x; + + if (direction == DirectionE.Left_) { + value = 1.0f - value; + } + + return value; + } + + /// + /// The inverse of the sec^2 function. + /// + /// The y coordinate. if y + /// < 1, returns NaN. + /// + static float Inverse_Sec_Sqrd(float y) { + // Note: arcsec(x) = arccos(1/x) + + // return arcsec(sqrt(y)) + return Mathf.Acos(1.0f / Mathf.Sqrt(y)); + } + + // The integral of sec^2 + static float Sec_Sqrd_CumulativeDistribution(float x) { + // The cumulative distribution function for sec^2 is just the definite integral of sec^2(x) = tan(x) - tan(0) = tan(x) + + return Mathf.Tan(x); + } + + // The inverse of the integral of sec^2 + static float Sec_Sqrd_InverseCumulativeDistribution(float x) { + // The cumulative distribution function for sec^2 is just the definite integral of sec^2(x) = tan(x) - tan(0) = tan(x) + // Then the Inverse cumulative distribution function is just atan(x) + + return Mathf.Atan(x); + } + + //-------------------------------------------------------------------------------------------- + // Linear Distribution + //-------------------------------------------------------------------------------------------- + + // Returns random in range [min, max] with linear distribution of given slope. + public static float RandomRangeLinear(float min, float max, float slope) { + if (slope == 0) { + return Random.Range(min, max); + } + + var val = RandomLinear(slope); + + return min + (max - min) * val; + } + + // Returns random in range [0,1] with linear distribution of given slope. + public static float RandomLinear(float slope) { + var abs_value = RandomFromLinearWithPositiveSlope(Mathf.Abs(slope)); + if (slope < 0) { + return 1 - abs_value; + } + + return abs_value; + } + + // Returns random in range [0,1] with linear distribution of given slope. + static float RandomFromLinearWithPositiveSlope(float slope) { + if (slope == 0) { + return Random.Range(0.0f, 1.0f); + } + + float x, y; + do { + x = Random.Range(0.0f, 1.0f); + y = Random.Range(0.0f, 1.0f); + if (slope < 1) { + y -= (1 - slope) / 2.0f; + } + } while (y > x * slope); + + return x; + } + + //-------------------------------------------------------------------------------------------- + // Exponential Distribution + //-------------------------------------------------------------------------------------------- + + /// + /// Returns a random number in range [min,max] from an exponential distribution. + /// + /// Random number in range [min,max] from given exponential distribution. + /// Minimum random number (inclusive). + /// Maximum random number (inclusive). + /// + /// Exponent for distribution. Must be >= 0. + /// 0 will be uniform distribution; 1 will be linear distribution w/ slope 1. + /// + /// The direction for the curve (right/left). + public static float RandomRangeExponential(float min, float max, float exponent, DirectionE direction) { + return min + RandomFromExponentialDistribution(exponent, direction) * (max - min); + } + + /// + /// Returns a random number in range [0,1] from an exponential distribution. + /// + /// Random number in range [0,1] from given exponential distribution. + /// + /// Exponent for distribution. Must be >= 0. + /// 0 will be uniform distribution; 1 will be linear distribution w/ slope 1. + /// + /// The direction for the curve (right/left). + public static float RandomFromExponentialDistribution(float exponent, DirectionE direction) { + // our curve will go from 0 to 1. + var max_cdf = ExponentialRightCdf(1.0f, exponent); + + var u = Random.Range(0.0f, max_cdf); + var x_val = EponentialRightInverseCdf(u, exponent); + + if (direction == DirectionE.Left_) { + x_val = 1.0f - x_val; + } + + return x_val; + } + + // The inverse of the curve. + static float ExponentialRightInverse(float y, float exponent) { return Mathf.Pow(y, 1.0f / exponent); } + + // The integral of the exponent curve. + static float ExponentialRightCdf(float x, float exponent) { + var integral_exp = exponent + 1.0f; + return Mathf.Pow(x, integral_exp) / integral_exp; + } + + // The inverse of the integral of the exponent curve. + static float EponentialRightInverseCdf(float x, float exponent) { + var integral_exp = exponent + 1.0f; + return Mathf.Pow(integral_exp * x, 1.0f / integral_exp); + } + + //-------------------------------------------------------------------------------------------- + // User-Defined Probability Distribution Function + //-------------------------------------------------------------------------------------------- + + /// + /// Return an index randomly chosen following the distribution specified by a list of probabilities + /// + /// + /// An index in range [0, probabilities.Length) following the distribution specified in probabilites. + /// + /// + /// A list of probabilities from which to choose an index. All values must be >= 0! + /// + public static int RandomChoiceFollowingDistribution(List probabilities) { + // Sum to create CDF: + var cdf = new float[probabilities.Count]; + float sum = 0; + for (var i = 0; i < probabilities.Count; ++i) { + cdf[i] = sum + probabilities[i]; + sum = cdf[i]; + } + + // Choose from CDF: + var cdf_value = Random.Range(0.0f, cdf[probabilities.Count - 1]); + var index = Array.BinarySearch(cdf, cdf_value); + + if (index < 0) { + index = ~index; // if not found (probably won't be) BinarySearch returns bitwise complement of next-highest index. + } + + return index; + } + } +} diff --git a/Runtime/Sampling/Distributions.cs.meta b/Runtime/Sampling/Distributions.cs.meta new file mode 100644 index 000000000..681b46543 --- /dev/null +++ b/Runtime/Sampling/Distributions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75aedefcee84e4137951dbdfdb0c9bfa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Sampling/Perlin.cs b/Runtime/Sampling/Perlin.cs new file mode 100644 index 000000000..630e21f6a --- /dev/null +++ b/Runtime/Sampling/Perlin.cs @@ -0,0 +1,251 @@ +using System; + +namespace droid.Runtime.Sampling { + public class Perlin { + // Original C code derived from + // http://astronomy.swin.edu.au/~pbourke/texture/perlin/perlin.c + // http://astronomy.swin.edu.au/~pbourke/texture/perlin/perlin.h + const int _b = 0x100; + const int _bm = 0xff; + const int _n = 0x1000; + + int[] _p = new int[_b + _b + 2]; + float[,] _g3 = new float[_b + _b + 2, 3]; + float[,] _g2 = new float[_b + _b + 2, 2]; + float[] _g1 = new float[_b + _b + 2]; + + float s_curve(float t) { return t * t * (3.0F - 2.0F * t); } + + float Lerp(float t, float a, float b) { return a + t * (b - a); } + + void Setup(float value, out int b0, out int b1, out float r0, out float r1) { + var t = value + _n; + b0 = (int)t & _bm; + b1 = (b0 + 1) & _bm; + r0 = t - (int)t; + r1 = r0 - 1.0F; + } + + float At2(float rx, float ry, float x, float y) { return rx * x + ry * y; } + float At3(float rx, float ry, float rz, float x, float y, float z) { return rx * x + ry * y + rz * z; } + + public float Noise(float arg) { + float sx, u, v; + this.Setup(arg, + out var bx0, + out var bx1, + out var rx0, + out var rx1); + + sx = this.s_curve(rx0); + u = rx0 * this._g1[this._p[bx0]]; + v = rx1 * this._g1[this._p[bx1]]; + + return this.Lerp(sx, u, v); + } + + public float Noise(float x, float y) { + int b00, b10, b01, b11; + float sx, sy, a, b, u, v; + int i, j; + + this.Setup(x, + out var bx0, + out var bx1, + out var rx0, + out var rx1); + this.Setup(y, + out var by0, + out var by1, + out var ry0, + out var ry1); + + i = this._p[bx0]; + j = this._p[bx1]; + + b00 = this._p[i + by0]; + b10 = this._p[j + by0]; + b01 = this._p[i + by1]; + b11 = this._p[j + by1]; + + sx = this.s_curve(rx0); + sy = this.s_curve(ry0); + + u = this.At2(rx0, + ry0, + this._g2[b00, 0], + this._g2[b00, 1]); + v = this.At2(rx1, + ry0, + this._g2[b10, 0], + this._g2[b10, 1]); + a = this.Lerp(sx, u, v); + + u = this.At2(rx0, + ry1, + this._g2[b01, 0], + this._g2[b01, 1]); + v = this.At2(rx1, + ry1, + this._g2[b11, 0], + this._g2[b11, 1]); + b = this.Lerp(sx, u, v); + + return this.Lerp(sy, a, b); + } + + public float Noise(float x, float y, float z) { + int b00, b10, b01, b11; + float sy, sz, a, b, c, d, t, u, v; + int i, j; + + this.Setup(x, + out var bx0, + out var bx1, + out var rx0, + out var rx1); + this.Setup(y, + out var by0, + out var by1, + out var ry0, + out var ry1); + this.Setup(z, + out var bz0, + out var bz1, + out var rz0, + out var rz1); + + i = this._p[bx0]; + j = this._p[bx1]; + + b00 = this._p[i + by0]; + b10 = this._p[j + by0]; + b01 = this._p[i + by1]; + b11 = this._p[j + by1]; + + t = this.s_curve(rx0); + sy = this.s_curve(ry0); + sz = this.s_curve(rz0); + + u = this.At3(rx0, + ry0, + rz0, + this._g3[b00 + bz0, 0], + this._g3[b00 + bz0, 1], + this._g3[b00 + bz0, 2]); + v = this.At3(rx1, + ry0, + rz0, + this._g3[b10 + bz0, 0], + this._g3[b10 + bz0, 1], + this._g3[b10 + bz0, 2]); + a = this.Lerp(t, u, v); + + u = this.At3(rx0, + ry1, + rz0, + this._g3[b01 + bz0, 0], + this._g3[b01 + bz0, 1], + this._g3[b01 + bz0, 2]); + v = this.At3(rx1, + ry1, + rz0, + this._g3[b11 + bz0, 0], + this._g3[b11 + bz0, 1], + this._g3[b11 + bz0, 2]); + b = this.Lerp(t, u, v); + + c = this.Lerp(sy, a, b); + + u = this.At3(rx0, + ry0, + rz1, + this._g3[b00 + bz1, 0], + this._g3[b00 + bz1, 2], + this._g3[b00 + bz1, 2]); + v = this.At3(rx1, + ry0, + rz1, + this._g3[b10 + bz1, 0], + this._g3[b10 + bz1, 1], + this._g3[b10 + bz1, 2]); + a = this.Lerp(t, u, v); + + u = this.At3(rx0, + ry1, + rz1, + this._g3[b01 + bz1, 0], + this._g3[b01 + bz1, 1], + this._g3[b01 + bz1, 2]); + v = this.At3(rx1, + ry1, + rz1, + this._g3[b11 + bz1, 0], + this._g3[b11 + bz1, 1], + this._g3[b11 + bz1, 2]); + b = this.Lerp(t, u, v); + + d = this.Lerp(sy, a, b); + + return this.Lerp(sz, c, d); + } + + static void Normalize2(ref float x, ref float y) { + float s; + + s = (float)Math.Sqrt(x * x + y * y); + x = y / s; + y = y / s; + } + + void Normalize3(ref float x, ref float y, ref float z) { + float s; + s = (float)Math.Sqrt(x * x + y * y + z * z); + x = y / s; + y = y / s; + z = z / s; + } + + public Perlin() { this.SetSeed(42); } + + public void SetSeed(int seed) { + int i, j, k; + var rnd = new Random(seed); + + for (i = 0; i < _b; i++) { + this._p[i] = i; + this._g1[i] = (float)(rnd.Next(_b + _b) - _b) / _b; + + for (j = 0; j < 2; j++) { + this._g2[i, j] = (float)(rnd.Next(_b + _b) - _b) / _b; + } + + Normalize2(ref this._g2[i, 0], ref this._g2[i, 1]); + + for (j = 0; j < 3; j++) { + this._g3[i, j] = (float)(rnd.Next(_b + _b) - _b) / _b; + } + + this.Normalize3(ref this._g3[i, 0], ref this._g3[i, 1], ref this._g3[i, 2]); + } + + while (--i != 0) { + k = this._p[i]; + this._p[i] = this._p[j = rnd.Next(_b)]; + this._p[j] = k; + } + + for (i = 0; i < _b + 2; i++) { + this._p[_b + i] = this._p[i]; + this._g1[_b + i] = this._g1[i]; + for (j = 0; j < 2; j++) { + this._g2[_b + i, j] = this._g2[i, j]; + } + + for (j = 0; j < 3; j++) { + this._g3[_b + i, j] = this._g3[i, j]; + } + } + } + } +} diff --git a/Runtime/Sampling/Perlin.cs.meta b/Runtime/Sampling/Perlin.cs.meta new file mode 100644 index 000000000..35dc8b8f4 --- /dev/null +++ b/Runtime/Sampling/Perlin.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc3de7bd13c745e2907cdf6b0ed42144 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a861b8894568348a9a71a5b438e2ef74, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Noise/ProjectileSpammer.cs b/Runtime/Sampling/ProjectileSpammer.cs similarity index 86% rename from Runtime/Utilities/Noise/ProjectileSpammer.cs rename to Runtime/Sampling/ProjectileSpammer.cs index cc1b8cc9b..8677eda3f 100644 --- a/Runtime/Utilities/Noise/ProjectileSpammer.cs +++ b/Runtime/Sampling/ProjectileSpammer.cs @@ -1,16 +1,16 @@ using UnityEngine; -namespace Neodroid.Runtime.Utilities.Noise { +namespace droid.Runtime.Sampling { public class ProjectileSpammer : MonoBehaviour { - [SerializeField] Transform _target; - [SerializeField] float _spawn_rate = 0.5f; - [SerializeField] float _spawn_radius = 20f; - [SerializeField] float _projectile_multiplier = 100f; - [SerializeField] Vector2 _mass_range = new Vector2(1f, 4f); - [SerializeField, Range(.0f, 1.0f)] float _scale_modifier = 0.2f; - [SerializeField, Range(.0f, 3.0f)] float _life_time = 2f; [SerializeField] string _assigned_tag = "Obstruction"; float _last_spawn = 0f; + [SerializeField] [Range(.0f, 3.0f)] float _life_time = 2f; + [SerializeField] Vector2 _mass_range = new Vector2(1f, 4f); + [SerializeField] float _projectile_multiplier = 100f; + [SerializeField] [Range(.0f, 1.0f)] float _scale_modifier = 0.2f; + [SerializeField] float _spawn_radius = 20f; + [SerializeField] float _spawn_rate = 0.5f; + [SerializeField] Transform _target = null; void Update() { if (this._last_spawn + 1 / this._spawn_rate < Time.time) { @@ -38,4 +38,4 @@ void SpawnRandomProjectile() { sf.LifeTime = this._life_time; } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Noise/ProjectileSpammer.cs.meta b/Runtime/Sampling/ProjectileSpammer.cs.meta similarity index 100% rename from Runtime/Utilities/Noise/ProjectileSpammer.cs.meta rename to Runtime/Sampling/ProjectileSpammer.cs.meta diff --git a/Runtime/Sampling/README.md b/Runtime/Sampling/README.md new file mode 100644 index 000000000..b289d9f88 --- /dev/null +++ b/Runtime/Sampling/README.md @@ -0,0 +1,3 @@ +# Sampling + +This set of tools enables sampling from various distributions. diff --git a/Runtime/Sampling/README.md.meta b/Runtime/Sampling/README.md.meta new file mode 100644 index 000000000..f50a21344 --- /dev/null +++ b/Runtime/Sampling/README.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fd394b43592d414481c1163d20f9301f +timeCreated: 1567897875 \ No newline at end of file diff --git a/Runtime/Sampling/RandomWalk.cs b/Runtime/Sampling/RandomWalk.cs new file mode 100644 index 000000000..13d5ffc98 --- /dev/null +++ b/Runtime/Sampling/RandomWalk.cs @@ -0,0 +1,144 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace droid.Runtime.Sampling { + public class RandomWalk : MonoBehaviour //Self-Avoiding Random Walk algorithm + { + //How many steps do we want to take before we stop? + public int stepsToTake; + + //Final random walk positions + List _random_walk_positions; + + //The walk directions we can take + List _all_possible_directions = new List { + new Vector3(0f, 0f, 1f), + new Vector3(0f, 0f, -1f), + new Vector3(-1f, 0f, 0f), + new Vector3(1f, 0f, 0f) + }; + + void Update() { + if (Input.GetKeyDown(KeyCode.Return)) { + this._random_walk_positions = this.GenerateSelfAvoidingRandomWalk(); + + //Debug.Log(randomWalkPositions.Count); + } + + //Display the path with lines + if (this._random_walk_positions != null && this._random_walk_positions.Count > 1) { + for (var i = 1; i < this._random_walk_positions.Count; i++) { + Debug.DrawLine(this._random_walk_positions[i - 1], this._random_walk_positions[i]); + } + } + } + + public List GenerateSelfAvoidingRandomWalk() { + //Create the node we are starting from + var start_pos = Vector3.zero; + + var current_node = new WalkNode(start_pos, null, new List(this._all_possible_directions)); + + //How many steps have we taken, so we know when to stop the algorithm + var steps_so_far = 0; + + //So we dont visit the same node more than once + var visited_nodes = new List {start_pos}; + + while (true) { + //Check if we have walked enough steps + if (steps_so_far == this.stepsToTake) { + //Debug.Log("Found path"); + + break; + } + + //Need to backtrack if we cant move in any direction from the current node + while (current_node._PossibleDirections.Count == 0) { + current_node = current_node._PreviousNode; + + //Dont need to remove nodes thats not a part of the final path from the list of visited nodes + //because there's no point in visiting them again because we know we cant find a path from those nodes + + steps_so_far -= 1; + } + + //Walk in a random direction from this node + var random_dir_pos = Random.Range(0, current_node._PossibleDirections.Count); + + var random_dir = current_node._PossibleDirections[random_dir_pos]; + + //Remove this direction from the list of possible directions we can take from this node + current_node._PossibleDirections.RemoveAt(random_dir_pos); + + //Whats the position after we take a step in this direction + var next_node_pos = current_node._Pos + random_dir; + + //Have we visited this position before? + if (!this.HasVisitedNode(next_node_pos, visited_nodes)) { + //Walk to this node + current_node = new WalkNode(next_node_pos, + current_node, + new List(this._all_possible_directions)); + + visited_nodes.Add(next_node_pos); + + steps_so_far += 1; + } + } + + //Generate the final path + var random_walk_positions = new List(); + + while (current_node._PreviousNode != null) { + random_walk_positions.Add(current_node._Pos); + + current_node = current_node._PreviousNode; + } + + random_walk_positions.Add(current_node._Pos); + + //Reverse the list so it begins at the step we started from + random_walk_positions.Reverse(); + + return random_walk_positions; + } + + //Checks if a position is in a list of positions + bool HasVisitedNode(Vector3 pos, List list_pos) { + var has_visited = false; + + foreach (var t in list_pos) { + var dist_sqr = Vector3.SqrMagnitude(pos - t); + + //Cant compare exactly because of floating point precisions + if (dist_sqr < 0.001f) { + has_visited = true; + + break; + } + } + + return has_visited; + } + + //Help class to keep track of the steps + class WalkNode { + //The position of this node in the world + public Vector3 _Pos; + + public WalkNode _PreviousNode; + + //Which steps can we take from this node? + public List _PossibleDirections; + + public WalkNode(Vector3 pos, WalkNode previous_node, List possible_directions) { + this._Pos = pos; + + this._PreviousNode = previous_node; + + this._PossibleDirections = possible_directions; + } + } + } +} diff --git a/Runtime/Sampling/RandomWalk.cs.meta b/Runtime/Sampling/RandomWalk.cs.meta new file mode 100644 index 000000000..918e75285 --- /dev/null +++ b/Runtime/Sampling/RandomWalk.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c7f115455daa4dc3bd8163ab2ea991fb +timeCreated: 1557154736 \ No newline at end of file diff --git a/Runtime/Utilities/Noise/SelfDestruct.cs b/Runtime/Sampling/SelfDestruct.cs similarity index 87% rename from Runtime/Utilities/Noise/SelfDestruct.cs rename to Runtime/Sampling/SelfDestruct.cs index 063cc604b..2627e2453 100644 --- a/Runtime/Utilities/Noise/SelfDestruct.cs +++ b/Runtime/Sampling/SelfDestruct.cs @@ -1,9 +1,9 @@ using UnityEngine; -namespace Neodroid.Runtime.Utilities.Noise { +namespace droid.Runtime.Sampling { public class SelfDestruct : MonoBehaviour { - public float LifeTime { get; set; } = 10f; float _spawn_time; + public float LifeTime { get; set; } = 10f; void Awake() { this._spawn_time = Time.time; } @@ -13,4 +13,4 @@ void Update() { } } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Noise/SelfDestruct.cs.meta b/Runtime/Sampling/SelfDestruct.cs.meta similarity index 100% rename from Runtime/Utilities/Noise/SelfDestruct.cs.meta rename to Runtime/Sampling/SelfDestruct.cs.meta diff --git a/Runtime/ScriptableObjects.meta b/Runtime/ScriptableObjects.meta index 2dc68bf29..c02f4e128 100644 --- a/Runtime/ScriptableObjects.meta +++ b/Runtime/ScriptableObjects.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ee9541153a7a642ed982388daaebe597 +guid: 0fa648f4863021db8ac7ad38b1b9eecd folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/ScriptableObjects/Deprecated.meta b/Runtime/ScriptableObjects/Deprecated.meta new file mode 100644 index 000000000..474e83545 --- /dev/null +++ b/Runtime/ScriptableObjects/Deprecated.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 651c307716264a879458a41d0ab69083 +timeCreated: 1552770454 \ No newline at end of file diff --git a/Runtime/ScriptableObjects/Deprecated/Curriculum.cs b/Runtime/ScriptableObjects/Deprecated/Curriculum.cs new file mode 100644 index 000000000..703958097 --- /dev/null +++ b/Runtime/ScriptableObjects/Deprecated/Curriculum.cs @@ -0,0 +1,25 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.ScriptableObjects.Deprecated { + [CreateAssetMenu(fileName = "Curriculum", + menuName = ScriptableObjectMenuPath._ScriptableObjectMenuPath + "Curriculum", + order = 1)] + public class Curriculum : ScriptableObject { + public Level[] _Levels; + } + + [Serializable] + public struct Level { + public ConfigurableEntry[] _Configurable_Entries; + public float _Min_Reward; + public float _Max_Reward; + } + + [Serializable] + public struct ConfigurableEntry { + public string _Configurable_Name; + public float _Min_Value; + public float _Max_Value; + } +} diff --git a/Runtime/Utilities/ScriptableObjects/Curriculum.cs.meta b/Runtime/ScriptableObjects/Deprecated/Curriculum.cs.meta similarity index 100% rename from Runtime/Utilities/ScriptableObjects/Curriculum.cs.meta rename to Runtime/ScriptableObjects/Deprecated/Curriculum.cs.meta diff --git a/Runtime/ScriptableObjects/Deprecated/NeodroidTask.cs b/Runtime/ScriptableObjects/Deprecated/NeodroidTask.cs new file mode 100644 index 000000000..f2b901752 --- /dev/null +++ b/Runtime/ScriptableObjects/Deprecated/NeodroidTask.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +namespace droid.Runtime.ScriptableObjects.Deprecated { + [CreateAssetMenu(fileName = "NeodroidTask", + menuName = ScriptableObjectMenuPath._ScriptableObjectMenuPath + "NeodroidTask", + order = 1)] + public class NeodroidTask : ScriptableObject { + public Vector3 _Position; + public float _Radius; + } +} diff --git a/Runtime/Utilities/ScriptableObjects/NeodroidTask.cs.meta b/Runtime/ScriptableObjects/Deprecated/NeodroidTask.cs.meta similarity index 100% rename from Runtime/Utilities/ScriptableObjects/NeodroidTask.cs.meta rename to Runtime/ScriptableObjects/Deprecated/NeodroidTask.cs.meta diff --git a/Runtime/ScriptableObjects/PlayerMotions.cs b/Runtime/ScriptableObjects/PlayerMotions.cs new file mode 100644 index 000000000..9005c2f16 --- /dev/null +++ b/Runtime/ScriptableObjects/PlayerMotions.cs @@ -0,0 +1,68 @@ +using System; +using System.Text.RegularExpressions; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.ScriptableObjects { + /// + /// + /// + [CreateAssetMenu(fileName = "PlayerMotions", + menuName = ScriptableObjectMenuPath._ScriptableObjectMenuPath + "PlayerMotions", + order = 1)] + public class PlayerMotions : ScriptableObject { + /// + /// + public PlayerMotion[] _Motions; + + void OnValidate() { +/* + foreach (var motion in this._Motions) { + foreach (var motion2 in this._Motions) { + if (motion._Key == motion2._Key) { + Debug.LogWarning($"{motion} and {motion2} has the same Key"); + } + } + } + */ + var copy = this._Motions; + if (copy != null) { + for (var i = 0; i < copy.Length; i++) { + var actor = copy[i]._Actor; + if (actor != null) { + copy[i]._Actor = Regex.Replace(actor, "[^\\w\\._]", ""); + } + + var actuator = copy[i]._Actuator; + if (actuator != null) { + copy[i]._Actuator = Regex.Replace(actuator, "[^\\w\\._]", ""); + } + } + } + + this._Motions = copy; + } + } + + /// + /// + [Serializable] + public struct PlayerMotion { + /// + /// + [SearchableEnum] + public KeyCode _Key; + + /// + /// + public string _Actor; + + /// + /// + public string _Actuator; + + /// + /// + public float _Strength; + } +} diff --git a/Runtime/Utilities/ScriptableObjects/PlayerMotions.cs.meta b/Runtime/ScriptableObjects/PlayerMotions.cs.meta similarity index 100% rename from Runtime/Utilities/ScriptableObjects/PlayerMotions.cs.meta rename to Runtime/ScriptableObjects/PlayerMotions.cs.meta diff --git a/Runtime/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset b/Runtime/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset deleted file mode 100644 index ea637c056..000000000 --- a/Runtime/ScriptableObjects/PlayerMotions/DefaultActorTransformMotions.asset +++ /dev/null @@ -1,38 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1aa96101fe55749209a8963174b3defa, type: 3} - m_Name: DefaultActorTransformMotions - m_EditorClassIdentifier: - _Motions: - - _Key: 119 - _Actor: ActorActor - _Motor: ActorTransformZ - _Strength: -1 - - _Key: 97 - _Actor: ActorActor - _Motor: ActorTransformX - _Strength: -1 - - _Key: 115 - _Actor: ActorActor - _Motor: ActorTransformZ - _Strength: 1 - - _Key: 100 - _Actor: ActorActor - _Motor: ActorTransformX - _Strength: 1 - - _Key: 113 - _Actor: ActorActor - _Motor: ActorTransformY - _Strength: 1 - - _Key: 101 - _Actor: ActorActor - _Motor: ActorTransformY - _Strength: -1 diff --git a/Runtime/ScriptableObjects/ScriptableObjectMenuPath.cs b/Runtime/ScriptableObjects/ScriptableObjectMenuPath.cs new file mode 100644 index 000000000..fdb9b7e1e --- /dev/null +++ b/Runtime/ScriptableObjects/ScriptableObjectMenuPath.cs @@ -0,0 +1,9 @@ +namespace droid.Runtime.ScriptableObjects { + /// + /// + public static class ScriptableObjectMenuPath { + /// + /// + public const string _ScriptableObjectMenuPath = "Neodroid/" + "ScriptableObjects/"; + } +} diff --git a/Runtime/ScriptableObjects/ScriptableObjectMenuPath.cs.meta b/Runtime/ScriptableObjects/ScriptableObjectMenuPath.cs.meta new file mode 100644 index 000000000..b08d5e837 --- /dev/null +++ b/Runtime/ScriptableObjects/ScriptableObjectMenuPath.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ccc4c053f7da49789b5d511f29f82498 +timeCreated: 1552770527 \ No newline at end of file diff --git a/Runtime/ScriptableObjects/Segmentation.cs b/Runtime/ScriptableObjects/Segmentation.cs new file mode 100644 index 000000000..a36b49ee8 --- /dev/null +++ b/Runtime/ScriptableObjects/Segmentation.cs @@ -0,0 +1,16 @@ +using droid.Runtime.Structs; +using UnityEngine; + +namespace droid.Runtime.ScriptableObjects { + /// + /// + /// + [CreateAssetMenu(fileName = "Segmentation", + menuName = ScriptableObjectMenuPath._ScriptableObjectMenuPath + "Segmentation", + order = 1)] + public class Segmentation : ScriptableObject { + /// + /// + public ColorByCategory[] _color_by_categories; + } +} diff --git a/Runtime/Utilities/ScriptableObjects/Segmentation.cs.meta b/Runtime/ScriptableObjects/Segmentation.cs.meta similarity index 100% rename from Runtime/Utilities/ScriptableObjects/Segmentation.cs.meta rename to Runtime/ScriptableObjects/Segmentation.cs.meta diff --git a/Runtime/ScriptableObjects/Segmentations/DefaultSegmentation.asset b/Runtime/ScriptableObjects/Segmentations/DefaultSegmentation.asset deleted file mode 100644 index 79068d7f3..000000000 --- a/Runtime/ScriptableObjects/Segmentations/DefaultSegmentation.asset +++ /dev/null @@ -1,24 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f16b790dafe9a465ab9da94499ded055, type: 3} - m_Name: DefaultSegmentation - m_EditorClassIdentifier: - _Color_By_Tags: - - _Tag: Actor - _Col: {r: 0, g: 0, b: 1, a: 1} - - _Tag: Goal - _Col: {r: 0, g: 1, b: 0, a: 1} - - _Tag: Obstruction - _Col: {r: 1, g: 0, b: 0, a: 1} - - _Tag: Box - _Col: {r: 1, g: 0, b: 1, a: 1} - - _Tag: Player - _Col: {r: 0, g: 0, b: 1, a: 1} diff --git a/Runtime/Utilities/SerialisableDictionary.meta b/Runtime/ScriptableObjects/SerialisableDictionary.meta similarity index 100% rename from Runtime/Utilities/SerialisableDictionary.meta rename to Runtime/ScriptableObjects/SerialisableDictionary.meta diff --git a/Runtime/ScriptableObjects/SerialisableDictionary/Example.cs b/Runtime/ScriptableObjects/SerialisableDictionary/Example.cs new file mode 100644 index 000000000..7f171cfaa --- /dev/null +++ b/Runtime/ScriptableObjects/SerialisableDictionary/Example.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace droid.Runtime.ScriptableObjects.SerialisableDictionary { + /// + /// + /// + [CreateAssetMenu(fileName = "Example Asset", + menuName = ScriptableObjectMenuPath._ScriptableObjectMenuPath + "Example Asset", + order = 1)] + public class Example : ScriptableObject { + /// + /// + [SerializeField] + GameObjectFloatDictionary _game_object_float_store = + GameObjectFloatDictionary.New(); + + /// + /// + [SerializeField] + StringIntDictionary _string_integer_store = StringIntDictionary.New(); + + /// + /// + Dictionary StringIntegers { get { return this._string_integer_store._Dict; } } + + /// + /// + Dictionary Screenshots { get { return this._game_object_float_store._Dict; } } + } +} diff --git a/Runtime/Utilities/SerialisableDictionary/Example.cs.meta b/Runtime/ScriptableObjects/SerialisableDictionary/Example.cs.meta similarity index 100% rename from Runtime/Utilities/SerialisableDictionary/Example.cs.meta rename to Runtime/ScriptableObjects/SerialisableDictionary/Example.cs.meta diff --git a/Runtime/Utilities/SerialisableDictionary/SerializableDictionary.cs b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionary.cs similarity index 93% rename from Runtime/Utilities/SerialisableDictionary/SerializableDictionary.cs rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionary.cs index b96f93c81..346c458f4 100644 --- a/Runtime/Utilities/SerialisableDictionary/SerializableDictionary.cs +++ b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionary.cs @@ -1,14 +1,13 @@ using System.Collections.Generic; using UnityEngine; -namespace Neodroid.Runtime.Utilities.SerialisableDictionary { +namespace droid.Runtime.ScriptableObjects.SerialisableDictionary { public abstract class SerializableDictionary : ISerializationCallbackReceiver { + public Dictionary _Dict; [SerializeField] TK[] _keys; [SerializeField] TV[] _values; - public Dictionary _Dict; - public void OnAfterDeserialize() { var c = this._keys.Length; this._Dict = new Dictionary(c); @@ -40,4 +39,4 @@ public void OnBeforeSerialize() { return result; } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/SerialisableDictionary/SerializableDictionary.cs.meta b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionary.cs.meta similarity index 100% rename from Runtime/Utilities/SerialisableDictionary/SerializableDictionary.cs.meta rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionary.cs.meta diff --git a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawer.cs b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawer.cs similarity index 83% rename from Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawer.cs rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawer.cs index 3663fe96a..83bd0e7f4 100644 --- a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawer.cs +++ b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawer.cs @@ -1,9 +1,10 @@ -#if UNITY_EDITOR using System.Collections.Generic; using UnityEditor; using UnityEngine; -namespace Neodroid.Runtime.Utilities.SerialisableDictionary { +#if UNITY_EDITOR + +namespace droid.Runtime.ScriptableObjects.SerialisableDictionary { public abstract class SerializableKeyValueTemplate : ScriptableObject { public TK _Key; public TV _Value; @@ -81,12 +82,10 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten for (var i = 0; i < num_lines; i++) // Try to replace existing value { - if (SerializedPropertyExtension.EqualBasics( - this.GetIndexedItemProp(keys_prop, i), - this.GetTemplateKeyProp(property))) { - SerializedPropertyExtension.CopyBasics( - this.GetTemplateValueProp(property), - this.GetIndexedItemProp(values_prop, i)); + if (SerializedPropertyExtension.EqualBasics(this.GetIndexedItemProp(keys_prop, i), + this.GetTemplateKeyProp(property))) { + SerializedPropertyExtension.CopyBasics(this.GetTemplateValueProp(property), + this.GetIndexedItemProp(values_prop, i)); assignment = true; break; } @@ -96,12 +95,10 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten // Create a new value keys_prop.arraySize += 1; values_prop.arraySize += 1; - SerializedPropertyExtension.CopyBasics( - this.GetTemplateKeyProp(property), - this.GetIndexedItemProp(keys_prop, num_lines)); - SerializedPropertyExtension.CopyBasics( - this.GetTemplateValueProp(property), - this.GetIndexedItemProp(values_prop, num_lines)); + SerializedPropertyExtension.CopyBasics(this.GetTemplateKeyProp(property), + this.GetIndexedItemProp(keys_prop, num_lines)); + SerializedPropertyExtension.CopyBasics(this.GetTemplateValueProp(property), + this.GetIndexedItemProp(values_prop, num_lines)); } } @@ -161,11 +158,9 @@ SerializedProperty GetTemplateValueProp(SerializedProperty main_prop) { return this.GetTemplateProp(this._template_value_prop, main_prop); } - SerializedProperty GetTemplateProp( - Dictionary source, - SerializedProperty main_prop) { - SerializedProperty p; - if (!source.TryGetValue(main_prop.GetObjectCode(), out p)) { + SerializedProperty GetTemplateProp(Dictionary source, + SerializedProperty main_prop) { + if (!source.TryGetValue(main_prop.GetObjectCode(), out var p)) { var template_object = this.GetTemplate(); var template_serialized_object = new SerializedObject(template_object); var k_prop = template_serialized_object.FindProperty("key"); @@ -186,13 +181,11 @@ SerializedProperty GetValuesProp(SerializedProperty main_prop) { return this.GetCachedProp(main_prop, "values", this._values_props); } - SerializedProperty GetCachedProp( - SerializedProperty main_prop, - string relative_property_name, - Dictionary source) { - SerializedProperty p; + SerializedProperty GetCachedProp(SerializedProperty main_prop, + string relative_property_name, + Dictionary source) { var object_code = main_prop.GetObjectCode(); - if (!source.TryGetValue(object_code, out p)) { + if (!source.TryGetValue(object_code, out var p)) { source[object_code] = p = main_prop.FindPropertyRelative(relative_property_name); } @@ -200,14 +193,12 @@ SerializedProperty GetCachedProp( } SerializedProperty GetIndexedItemProp(SerializedProperty array_prop, int index) { - Dictionary d; - if (!this._indexed_property_dicts.TryGetValue(array_prop.GetObjectCode(), out d)) { + if (!this._indexed_property_dicts.TryGetValue(array_prop.GetObjectCode(), out var d)) { this._indexed_property_dicts[array_prop.GetObjectCode()] = d = new Dictionary(); } - SerializedProperty result; - if (!d.TryGetValue(index, out result)) { + if (!d.TryGetValue(index, out var result)) { d[index] = result = array_prop.FindPropertyRelative($"Array.data[{index}]"); } @@ -215,4 +206,4 @@ SerializedProperty GetIndexedItemProp(SerializedProperty array_prop, int index) } } } -#endif \ No newline at end of file +#endif diff --git a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawer.cs.meta b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawer.cs.meta similarity index 100% rename from Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawer.cs.meta rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawer.cs.meta diff --git a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs similarity index 94% rename from Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs index b81632d82..755ccdad1 100644 --- a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs +++ b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs @@ -1,8 +1,9 @@ -#if UNITY_EDITOR using UnityEditor; using UnityEngine; -namespace Neodroid.Runtime.Utilities.SerialisableDictionary { +#if UNITY_EDITOR + +namespace droid.Runtime.ScriptableObjects.SerialisableDictionary { [CustomPropertyDrawer(typeof(StringIntDictionary))] public class StringIntDictionaryDrawer : SerializableDictionaryDrawer { protected override SerializableKeyValueTemplate GetTemplate() { @@ -30,4 +31,4 @@ protected override SerializableKeyValueTemplate GetTemplate( class SerializableStringGameObjectTemplate : SerializableKeyValueTemplate { } } -#endif \ No newline at end of file +#endif diff --git a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs.meta b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs.meta similarity index 100% rename from Runtime/Utilities/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs.meta rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryDrawerImplementations.cs.meta diff --git a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryImplementations.cs b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryImplementations.cs similarity index 83% rename from Runtime/Utilities/SerialisableDictionary/SerializableDictionaryImplementations.cs rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryImplementations.cs index 42e5c51b8..e72db35a8 100644 --- a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryImplementations.cs +++ b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryImplementations.cs @@ -1,10 +1,10 @@ using System; using UnityEngine; -namespace Neodroid.Runtime.Utilities.SerialisableDictionary { +namespace droid.Runtime.ScriptableObjects.SerialisableDictionary { [Serializable] public class StringIntDictionary : SerializableDictionary { } [Serializable] public class GameObjectFloatDictionary : SerializableDictionary { } [Serializable] public class StringGameObjectDictionary : SerializableDictionary { } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/SerialisableDictionary/SerializableDictionaryImplementations.cs.meta b/Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryImplementations.cs.meta similarity index 100% rename from Runtime/Utilities/SerialisableDictionary/SerializableDictionaryImplementations.cs.meta rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializableDictionaryImplementations.cs.meta diff --git a/Runtime/Utilities/SerialisableDictionary/SerializedPropertyExtension.cs b/Runtime/ScriptableObjects/SerialisableDictionary/SerializedPropertyExtension.cs similarity index 98% rename from Runtime/Utilities/SerialisableDictionary/SerializedPropertyExtension.cs rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializedPropertyExtension.cs index 91dd089ac..00d523925 100644 --- a/Runtime/Utilities/SerialisableDictionary/SerializedPropertyExtension.cs +++ b/Runtime/ScriptableObjects/SerialisableDictionary/SerializedPropertyExtension.cs @@ -1,10 +1,10 @@ -#if UNITY_EDITOR using System; using UnityEditor; -namespace Neodroid.Runtime.Utilities.SerialisableDictionary { +#if UNITY_EDITOR + +namespace droid.Runtime.ScriptableObjects.SerialisableDictionary { /// - /// /// public static class SerializedPropertyExtension { public static int GetObjectCode(this SerializedProperty p) { @@ -181,4 +181,4 @@ public static void CopyBasics(SerializedProperty source, SerializedProperty targ } } } -#endif \ No newline at end of file +#endif diff --git a/Runtime/Utilities/SerialisableDictionary/SerializedPropertyExtension.cs.meta b/Runtime/ScriptableObjects/SerialisableDictionary/SerializedPropertyExtension.cs.meta similarity index 100% rename from Runtime/Utilities/SerialisableDictionary/SerializedPropertyExtension.cs.meta rename to Runtime/ScriptableObjects/SerialisableDictionary/SerializedPropertyExtension.cs.meta diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset b/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset deleted file mode 100644 index 29fdac916..000000000 --- a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependent.asset +++ /dev/null @@ -1,33 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0ff5f73ed10ef42709ef975f07e9b1a3, type: 3} - m_Name: DefaultIndependent - m_EditorClassIdentifier: - _apply_resolution_settings: 0 - _full_screen: 0 - _width: 500 - _height: 500 - _quality_level: 1 - _frame_finishes: 1 - _reset_iterations: 1 - _frame_skips: 0 - _simulation_type: 2 - _step_execution_phase: 1 - _time_scale: 1 - _target_frame_rate: -1 - _ip_address: localhost - _port: 6969 - _always_serialise_unobservables: 0 - _always_serialise_indidual_observables: 0 - _update_fixed_time_scale: 0 - _max_reply_interval: 0 - _num_of_environments: 0 - _replay_reaction_in_skips: 0 diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependentIndividualObs.asset b/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependentIndividualObs.asset deleted file mode 100644 index 6ff756e14..000000000 --- a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultIndependentIndividualObs.asset +++ /dev/null @@ -1,34 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0ff5f73ed10ef42709ef975f07e9b1a3, type: 3} - m_Name: DefaultIndependentIndividualObs - m_EditorClassIdentifier: - _apply_resolution_settings: 0 - _full_screen: 0 - _width: 500 - _height: 500 - _quality_level: 1 - _frame_finishes: 1 - _reset_iterations: 1 - _frame_skips: 0 - _simulation_type: 2 - _step_execution_phase: 1 - _time_scale: 1 - _target_frame_rate: -1 - _ip_address: localhost - _port: 6969 - _always_serialise_unobservables: 0 - _always_serialise_indidual_observables: 1 - _update_fixed_time_scale: 0 - _max_reply_interval: 0 - _num_of_environments: 0 - _replay_reaction_in_skips: 0 diff --git a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset b/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset deleted file mode 100644 index 3b36b5309..000000000 --- a/Runtime/ScriptableObjects/SimulatorConfigurations/DefaultPhysicsDependent.asset +++ /dev/null @@ -1,33 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0ff5f73ed10ef42709ef975f07e9b1a3, type: 3} - m_Name: DefaultPhysicsDependent - m_EditorClassIdentifier: - _apply_resolution_settings: 0 - _full_screen: 0 - _width: 500 - _height: 500 - _quality_level: 1 - _frame_finishes: 1 - _reset_iterations: 1 - _frame_skips: 0 - _simulation_type: 1 - _step_execution_phase: 1 - _time_scale: 100 - _target_frame_rate: 1 - _ip_address: localhost - _port: 6969 - _always_serialise_unobservables: 1 - _always_serialise_indidual_observables: 0 - _update_fixed_time_scale: 0 - _max_reply_interval: 0 - _num_of_environments: 0 - _replay_reaction_in_skips: 0 diff --git a/Runtime/Shaders/Compute.meta b/Runtime/Shaders/Compute.meta new file mode 100644 index 000000000..5124b10e8 --- /dev/null +++ b/Runtime/Shaders/Compute.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 672297f83d0b4da69dcf78953871ad4a +timeCreated: 1559122305 \ No newline at end of file diff --git a/Runtime/Shaders/Compute/Gamma.compute b/Runtime/Shaders/Compute/Gamma.compute new file mode 100644 index 000000000..6c505781f --- /dev/null +++ b/Runtime/Shaders/Compute/Gamma.compute @@ -0,0 +1,10 @@ +#pragma kernel CSMain + +RWTexture2D Result; + +[numthreads(32,32,1)] +void CSMain (uint3 id : SV_DispatchThreadID) { + float3 sRGB = Result[id.xy].xyz; + float3 RGB = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878); + Result[id.xy] = float4(RGB, 1.0); +} \ No newline at end of file diff --git a/Runtime/Shaders/Compute/Gamma.compute.meta b/Runtime/Shaders/Compute/Gamma.compute.meta new file mode 100644 index 000000000..345508613 --- /dev/null +++ b/Runtime/Shaders/Compute/Gamma.compute.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f463584312944f7cb11289a988f2ebe9 +timeCreated: 1559122290 \ No newline at end of file diff --git a/Runtime/Shaders/Compute/NewComputeShader.compute b/Runtime/Shaders/Compute/NewComputeShader.compute new file mode 100644 index 000000000..0637e4bbd --- /dev/null +++ b/Runtime/Shaders/Compute/NewComputeShader.compute @@ -0,0 +1,14 @@ +// Each #kernel tells which function to compile; you can have many kernels +#pragma kernel CSMain + +// Create a RenderTexture with enableRandomWrite flag and set it +// with cs.SetTexture +RWTexture2D Result; + +[numthreads(8,8,1)] +void CSMain (uint3 id : SV_DispatchThreadID) +{ + // TODO: insert actual code here! + + Result[id.xy] = float4(id.x & id.y, (id.x & 15)/15.0, (id.y & 15)/15.0, 0.0); +} diff --git a/Runtime/Shaders/Compute/NewComputeShader.compute.meta b/Runtime/Shaders/Compute/NewComputeShader.compute.meta new file mode 100644 index 000000000..020cf3b05 --- /dev/null +++ b/Runtime/Shaders/Compute/NewComputeShader.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8d09943f8789906a944aec28a98391f +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 2228224 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Depth.shader b/Runtime/Shaders/Depth.shader deleted file mode 100644 index dcd67354e..000000000 --- a/Runtime/Shaders/Depth.shader +++ /dev/null @@ -1,143 +0,0 @@ -Shader "Neodroid/Depth"{ - Properties{ - _Color("Color", Color) = (1,1,1,1) - } - - SubShader{ - Tags{ - "RenderType"="Opaque" // What RenderType shaders to replace there is a copy of this exact shame shader below with the "Transparent" RenderType - } - - ZWrite On - - Pass{ - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata - { - float4 vertex : POSITION; - }; - - struct v2f - { - float4 vertex : SV_POSITION; - float depth : DEPTH; - }; - - v2f vert (appdata v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - //o.depth = -mul(UNITY_MATRIX_MV, v.vertex).z *_ProjectionParams.w; - o.depth = -UnityObjectToViewPos(v.vertex).z *_ProjectionParams.w; //Faster according to unity - return o; - } - - half4 _Color; - - fixed4 frag (v2f i) : SV_Target - { - float invert = 1 - i.depth; - - //return fixed4(invert, invert, invert, 1) * _Color; // With color - return fixed4(invert, invert, invert, 1); - } - ENDCG - } - } - -// SubShader -// { -// Tags -// { -// "RenderType"="Transparent" // Replaces shaders with "Transparent" as RenderType -// } -// -// ZWrite On -// -// Pass -// { -// CGPROGRAM -// #pragma vertex vert -// #pragma fragment frag -// -// #include "UnityCG.cginc" -// -// struct appdata -// { -// float4 vertex : POSITION; -// }; -// -// struct v2f -// { -// float4 vertex : SV_POSITION; -// float depth : DEPTH; -// }; -// -// v2f vert (appdata v) -// { -// v2f o; -// o.vertex = UnityObjectToClipPos(v.vertex); -// o.depth = -mul(UNITY_MATRIX_MV, v.vertex).z *_ProjectionParams.w; -// return o; -// } -// -// half4 _Color; -// -// fixed4 frag (v2f i) : SV_Target -// { -// float invert = 1 - i.depth; -// -// //return fixed4(invert, invert, invert, 1) * _Color; // With color -// return fixed4(invert, invert, invert, 1); -// } -// ENDCG -// } -// } - - SubShader{ - Tags{ - "RenderType"="Transparent" // Replaces shaders with "Transparent" as RenderType - } - - ZWrite Off // Dont show depth on transparent objects - Blend SrcAlpha OneMinusSrcAlpha - - Pass{ - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata - { - float4 vertex : POSITION; - }; - - struct v2f - { - float4 vertex : SV_POSITION; - }; - - v2f vert (appdata v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - return o; - } - - half4 _Color; - - fixed4 frag (v2f i) : SV_Target - { - return _Color; - } - ENDCG - } - } -} diff --git a/Runtime/Shaders/Experimental.meta b/Runtime/Shaders/Experimental.meta new file mode 100644 index 000000000..ac19553d7 --- /dev/null +++ b/Runtime/Shaders/Experimental.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e981b0bd16eaaa7db850f164e53609f7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/AllShader.shader b/Runtime/Shaders/Experimental/AllShader.shader new file mode 100644 index 000000000..8d2206c92 --- /dev/null +++ b/Runtime/Shaders/Experimental/AllShader.shader @@ -0,0 +1,73 @@ +/* + struct vertexInput { + float4 vertex : POSITION; // position (in object coordinates, + // i.e. local or model coordinates) + float4 tangent : TANGENT; + // vector orthogonal to the surface normal + float3 normal : NORMAL; // surface normal vector (in object + // coordinates; usually normalized to unit length) + float4 texcoord : TEXCOORD0; // 0th set of texture + // coordinates (a.k.a. “UV”; between 0 and 1) + float4 texcoord1 : TEXCOORD1; // 1st set of tex. coors. + float4 texcoord2 : TEXCOORD2; // 2nd set of tex. coors. + float4 texcoord3 : TEXCOORD3; // 3rd set of tex. coors. + fixed4 color : COLOR; // color (usually constant) + }; +*/ + +Shader "Excluded/AllShaders"{ + SubShader { + Lighting Off + Cull Off + //ZWrite Off + //ZTest Always + + Pass { + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + struct vertexInput { + float4 vertex : POSITION; + float4 tangent : TANGENT; + float3 normal : NORMAL; + float4 texcoord : TEXCOORD0; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + float4 texcoord3 : TEXCOORD3; + fixed4 color : COLOR; + }; + struct vertexOutput { + float4 pos : SV_POSITION; + float4 col : TEXCOORD0; + }; + + vertexOutput vert(vertexInput input){ + vertexOutput output; + + output.pos = UnityObjectToClipPos(input.vertex); + //output.col = input.texcoord; // set the output color + + // other possibilities to play with: + + // output.col = input.vertex; + output.col = input.tangent; + // output.col = float4(input.normal, 1.0); + // output.col = input.texcoord; + // output.col = input.texcoord1; + // output.col = input.texcoord2; + // output.col = input.texcoord3; + // output.col = input.color; + + return output; + } + + float4 frag(vertexOutput input) : COLOR { + return input.col; + } + + ENDCG + } + } +} diff --git a/Runtime/Shaders/Experimental/AllShader.shader.meta b/Runtime/Shaders/Experimental/AllShader.shader.meta new file mode 100644 index 000000000..aa82a8dad --- /dev/null +++ b/Runtime/Shaders/Experimental/AllShader.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2e3d91ce577946fbb9657986f858b11b +timeCreated: 1548277287 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/CopyFrameBuffer.shader b/Runtime/Shaders/Experimental/CopyFrameBuffer.shader new file mode 100644 index 000000000..afd05d57d --- /dev/null +++ b/Runtime/Shaders/Experimental/CopyFrameBuffer.shader @@ -0,0 +1,191 @@ +Shader "Neodroid/Experimental/CopyFrameBuffer" { + + CGINCLUDE + #include "UnityCG.cginc" + #pragma multi_compile ___ UNITY_HDR_ON + #pragma multi_compile ___ OFFSCREEN + #pragma multi_compile ___ TRANSPARENCY_ON + + sampler2D _TmpFrameBuffer; + sampler2D _CameraGBufferTexture0; + sampler2D _CameraGBufferTexture1; + sampler2D _CameraGBufferTexture2; + sampler2D _CameraGBufferTexture3; + sampler2D_float _CameraDepthTexture; + sampler2D_half _CameraMotionVectorsTexture; + sampler2D _TmpRenderTarget; + + struct v2f { + float4 pos : POSITION; + float4 spos : TEXCOORD0; + }; + + v2f vert(appdata_img v){ + v2f o; + o.pos = o.spos = v.vertex; + return o; + } + + float2 get_texcoord(v2f i){ + float2 t = i.spos.xy * 0.5 + 0.5; + return t; + } + + float2 get_texcoord_gb(v2f i){ + float2 t = i.spos.xy * 0.5 + 0.5; + + #if !defined(UNITY_UV_STARTS_AT_TOP) + t.y = 1.0 - t.y; + #endif + + return t; + } + + half4 copy_framebuffer(v2f I) : SV_Target{ + float2 t = get_texcoord(I); + + #if !defined(OFFSCREEN) //|| !defined(UNITY_UV_STARTS_AT_TOP) + t.y = 1.0 - t.y; + #endif + + half4 O = tex2D(_TmpFrameBuffer, t); + + #if !defined(TRANSPARENCY_ON) + O.a = 1.0; + #endif + + return O; + } + + // render target (for offscreen-recorder) + half4 copy_rendertarget(v2f I) : SV_Target{ + half4 O = tex2D(_TmpRenderTarget, get_texcoord_gb(I)); + return O; + } + + + // gbuffer + struct gbuffer_out{ + half4 albedo : SV_Target0; + half4 occlusion : SV_Target1; + half4 specular : SV_Target2; + half4 smoothness : SV_Target3; + half4 normal : SV_Target4; + half4 emission : SV_Target5; + half4 depth : SV_Target6; + }; + + gbuffer_out copy_gbuffer(v2f I){ + float2 t = get_texcoord_gb(I); + half4 ao = tex2D(_CameraGBufferTexture0, t); + half4 ss = tex2D(_CameraGBufferTexture1, t); + half4 normal = tex2D(_CameraGBufferTexture2, t); + half4 emission = tex2D(_CameraGBufferTexture3, t); + half depth = tex2D(_CameraDepthTexture, get_texcoord_gb(I)); + + #if defined(UNITY_REVERSED_Z) + depth = 1.0 - depth; + #endif + + gbuffer_out O; + O.albedo = half4(ao.rgb, 1.0); + O.occlusion = half4(ao.aaa, 1.0); + O.specular = half4(ss.rgb, 1.0); + O.smoothness = half4(ss.aaa, 1.0); + O.normal = half4(normal.rgb, 1.0); + O.emission = emission; + + #ifndef UNITY_HDR_ON + O.emission.rgb = -log2(O.emission.rgb); + #endif + + O.depth = half4(depth.rrr, 1.0); + return O; + } + + + // clear gbuffer + struct clear_out{ + half4 gb0 : SV_Target0; + half4 gb1 : SV_Target1; + half4 gb2 : SV_Target2; + half4 gb3 : SV_Target3; + float depth : SV_Depth; + }; + + clear_out clear_gbuffer(v2f I){ + clear_out O; + O.gb0.xyzw = 0.0; + O.gb1.xyzw = 0.0; + O.gb2.xyzw = 0.0; + O.gb3.xyzw = 0.0; + O.depth = 1.0; + return O; + } + + // velocity + struct velocity_out{ + half4 velocity : SV_Target0; + }; + + velocity_out copy_velocity(v2f I){ + float2 t = get_texcoord_gb(I); + half2 velocity = tex2D(_CameraMotionVectorsTexture, t).rg; + + velocity_out O; + O.velocity = half4(velocity, 1.0, 1.0); + return O; + } + + ENDCG + +Subshader { + + Pass { // Pass 0: framebuffer + Blend Off Cull Off ZTest Off ZWrite Off + CGPROGRAM + #pragma vertex vert + #pragma fragment copy_framebuffer + ENDCG + } + + + Pass { // Pass 1: render target + Blend Off Cull Off ZTest Off ZWrite Off + CGPROGRAM + #pragma vertex vert + #pragma fragment copy_rendertarget + ENDCG + } + + + Pass{ // Pass 2: gbuffer + Blend Off Cull Off ZTest Off ZWrite Off + CGPROGRAM + #pragma exclude_renderers d3d9 + #pragma vertex vert + #pragma fragment copy_gbuffer + ENDCG + } + + + Pass { // Pass 3: clear + Blend Off Cull Off ZTest Off ZWrite Off + CGPROGRAM + #pragma vertex vert + #pragma fragment clear_gbuffer + ENDCG + } + + + Pass{ // Pass 4: velocity + Blend Off Cull Off ZTest Off ZWrite Off + CGPROGRAM + #pragma vertex vert + #pragma fragment copy_velocity + ENDCG + } +} + +Fallback off +} diff --git a/Runtime/Shaders/Experimental/CopyFrameBuffer.shader.meta b/Runtime/Shaders/Experimental/CopyFrameBuffer.shader.meta new file mode 100644 index 000000000..2cbbfa4b1 --- /dev/null +++ b/Runtime/Shaders/Experimental/CopyFrameBuffer.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9ef031f3fb374c09be803378295ffba1 +timeCreated: 1552815553 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/DepthCamera.shader b/Runtime/Shaders/Experimental/DepthCamera.shader new file mode 100644 index 000000000..144211394 --- /dev/null +++ b/Runtime/Shaders/Experimental/DepthCamera.shader @@ -0,0 +1,54 @@ +Shader "DepthCamera" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + + SubShader + { + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + float2 uv : TEXCOORD0; + float2 depth : DEPTH; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + o.depth = o.vertex.zw; + return o; + } + + float4 frag (v2f i) : SV_Target + { + float d = Linear01Depth(i.depth.x / i.depth.y); + // float4 color = tex2D(_MainTex, i.uv); + // float intensity = (color.r + color.g + color.b) / 3; + // intensity = intensity * pow(1.0 - depth, 8)); + d = pow(d, 0.4); + return float4(d, d, d, 1); + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Experimental/DepthCamera.shader.meta b/Runtime/Shaders/Experimental/DepthCamera.shader.meta new file mode 100644 index 000000000..40e558f2c --- /dev/null +++ b/Runtime/Shaders/Experimental/DepthCamera.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f9f96fc7c25e7de6c9e8cff030f91ac4 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/EdgeHighLight.shader b/Runtime/Shaders/Experimental/EdgeHighLight.shader new file mode 100644 index 000000000..dafe251b3 --- /dev/null +++ b/Runtime/Shaders/Experimental/EdgeHighLight.shader @@ -0,0 +1,76 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + + +Shader "Custom/StandardOccluded" +{ + Properties { + _Color ("Color", Color) = (1,1,1,1) + _MainTex ("Albedo (RGB)", 2D) = "white" {} + _Glossiness ("Smoothness", Range(0,1)) = 0.5 + _Metallic ("Metallic", Range(0,1)) = 0.0 + _OccludedColor("Occluded Color", Color) = (1,1,1,1) + } + SubShader { + + Pass + { + Tags { "Queue"="Geometry+1" } + ZTest Greater + ZWrite Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma fragmentoption ARB_precision_hint_fastest + + half4 _OccludedColor; + + float4 vert(float4 pos : POSITION) : SV_POSITION + { + float4 viewPos = UnityObjectToClipPos(pos); + return viewPos; + } + + half4 frag(float4 pos : SV_POSITION) : COLOR + { + return _OccludedColor; + } + + ENDCG + } + + Tags { "RenderType"="Opaque" "Queue"="Geometry+1"} + LOD 200 + ZWrite On + ZTest LEqual + + CGPROGRAM + // Physically based Standard lighting model, and enable shadows on all light types + #pragma surface surf Standard fullforwardshadows + + // Use shader model 3.0 target, to get nicer looking lighting + #pragma target 3.0 + + sampler2D _MainTex; + + struct Input { + float2 uv_MainTex; + }; + + half _Glossiness; + half _Metallic; + fixed4 _Color; + + void surf (Input IN, inout SurfaceOutputStandard o) { + // Albedo comes from a texture tinted by color + fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; + o.Albedo = c.rgb; + // Metallic and smoothness come from slider variables + o.Metallic = _Metallic; + o.Smoothness = _Glossiness; + o.Alpha = c.a; + } + ENDCG + } + FallBack "Diffuse" +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/EdgeHighLight.shader.meta b/Runtime/Shaders/Experimental/EdgeHighLight.shader.meta new file mode 100644 index 000000000..5b0d3c7f1 --- /dev/null +++ b/Runtime/Shaders/Experimental/EdgeHighLight.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d82bb346be2d8d074abbb1e718de2f51 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/FisheyeShader.shader b/Runtime/Shaders/Experimental/FisheyeShader.shader new file mode 100644 index 000000000..505d411c1 --- /dev/null +++ b/Runtime/Shaders/Experimental/FisheyeShader.shader @@ -0,0 +1,61 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "DuckieBot/FisheyeShader" { + Properties { + _MainTex ("Base (RGB)", 2D) = "" {} + } + + // Shader code pasted into all further CGPROGRAM blocks + CGINCLUDE + + #include "UnityCG.cginc" + + struct v2f { + float4 pos : POSITION; + float2 uv : TEXCOORD0; + }; + + sampler2D _MainTex; + + float2 intensity; + + v2f vert( appdata_img v ) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + return o; + } + + half4 frag(v2f i) : COLOR + { + half2 coords = i.uv; + coords = (coords - 0.5) * 2.0; + + half2 realCoordOffs; + realCoordOffs.x = (1-coords.y * coords.y) * intensity.y * (coords.x); + realCoordOffs.y = (1-coords.x * coords.x) * intensity.x * (coords.y); + + half4 color = tex2D (_MainTex, i.uv - realCoordOffs); + + return color; + } + + ENDCG + +Subshader { + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + CGPROGRAM + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment frag + ENDCG + } +} + +Fallback off + +} // shader \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/FisheyeShader.shader.meta b/Runtime/Shaders/Experimental/FisheyeShader.shader.meta new file mode 100644 index 000000000..a8bc3d15c --- /dev/null +++ b/Runtime/Shaders/Experimental/FisheyeShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f6bf3648a409c4551987b2eb0d1b23ef +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/FlatColor.shader b/Runtime/Shaders/Experimental/FlatColor.shader similarity index 91% rename from Runtime/Shaders/FlatColor.shader rename to Runtime/Shaders/Experimental/FlatColor.shader index abeb3aef0..20c000719 100644 --- a/Runtime/Shaders/FlatColor.shader +++ b/Runtime/Shaders/Experimental/FlatColor.shader @@ -1,6 +1,4 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Neodroid/FlatColor" +Shader "Neodroid/FlatColor" { Properties { diff --git a/Runtime/Shaders/FlatColor.shader.meta b/Runtime/Shaders/Experimental/FlatColor.shader.meta similarity index 100% rename from Runtime/Shaders/FlatColor.shader.meta rename to Runtime/Shaders/Experimental/FlatColor.shader.meta diff --git a/Runtime/Shaders/Experimental/FlatSegmentation.shader b/Runtime/Shaders/Experimental/FlatSegmentation.shader new file mode 100644 index 000000000..81a55baef --- /dev/null +++ b/Runtime/Shaders/Experimental/FlatSegmentation.shader @@ -0,0 +1,98 @@ +Shader "Neodroid/Segmentation/FlatSegmentation"{ //Draws objects with shader on top always + +Properties{ + _SegmentationColor ("_SegmentationColor", Color) = (.5,.5,.5,1.) +} + + SubShader{ + //Tags + //{ + // "RenderType"="Opaque" // What RenderType shaders to replace there is a copy of this exact shame shader below with the "Transparent" RenderType + //} + //Tags{ + // "Queue" = "Transparent" + //} + + //ZTest Always // Ignore what is the depth buffer draw pixels anyway + //ZWrite Off // has same effect as above ^, this never write to the depth buffer + Lighting Off // Turn off lighting + //Cull Off // No culling + + Pass{ + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + fixed4 _SegmentationColor; + + v2f vert(appdata v) { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + + return o; + } + + fixed4 frag(v2f i) : SV_Target { + return _SegmentationColor; + } + ENDCG + } + + //Blend One One // additive blend + +// Pass { +// CGPROGRAM +// #pragma vertex vert +// #pragma fragment frag +// +// #include "UnityCG.cginc" +// +// struct appdata +// { +// float4 vertex : POSITION; +// }; +// +// struct v2f +// { +// float4 vertex : SV_POSITION; +// }; +// +// v2f vert(appdata v) +// { +// v2f o; +// o.vertex = UnityObjectToClipPos(v.vertex); +// return o; +// } +// +// half4 _SegmentationColor; +// +// fixed4 frag(v2f i) : SV_Target +// { +// return _SegmentationColor; +// } +// ENDCG +// } + + //Pass{ + // ZTest Greater + // Color[_SegmentationColor] + //} + //Pass{ + // ZTest Less + // Color[_SegmentationColor] + //} + } +} diff --git a/Runtime/Shaders/Segmentation.shader.meta b/Runtime/Shaders/Experimental/FlatSegmentation.shader.meta similarity index 100% rename from Runtime/Shaders/Segmentation.shader.meta rename to Runtime/Shaders/Experimental/FlatSegmentation.shader.meta diff --git a/Runtime/Shaders/Experimental/FlatSurfaceShading.shader b/Runtime/Shaders/Experimental/FlatSurfaceShading.shader new file mode 100644 index 000000000..f1b40e962 --- /dev/null +++ b/Runtime/Shaders/Experimental/FlatSurfaceShading.shader @@ -0,0 +1,53 @@ +Shader "Neodroid/Experimental/FlatSurfaceShader" { + Properties { + _Color ("Color", Color) = (1,1,1,1) + _MainTex ("Albedo (RGB)", 2D) = "white" {} + } + SubShader { + Tags { "RenderType"="Opaque" } + + CGPROGRAM + #pragma surface surf Standard fullforwardshadows vertex:vert + #pragma target 3.0 + + sampler2D _MainTex; + + struct Input { + float2 uv_MainTex; + float3 cameraRelativeWorldPos; + float3 worldNormal; + INTERNAL_DATA + }; + + half _Glossiness; + half _Metallic; + fixed4 _Color; + + // pass camera relative world position from vertex to fragment + void vert(inout appdata_full v, out Input o) + { + UNITY_INITIALIZE_OUTPUT(Input,o); + o.cameraRelativeWorldPos = mul(unity_ObjectToWorld, float4(v.vertex.xyz, 1.0)) - _WorldSpaceCameraPos.xyz; + } + + void surf (Input IN, inout SurfaceOutputStandard o) { + + fixed4 c = tex2D (_MainTex, IN.uv_MainTex); + o.Albedo = c.rgb * _Color.rgb; + + // flat world normal from position derivatives + half3 flatWorldNormal = normalize(cross(ddy(IN.cameraRelativeWorldPos.xyz), ddx(IN.cameraRelativeWorldPos.xyz))); + + // construct world to tangent matrix + half3 worldT = WorldNormalVector(IN, half3(1,0,0)); + half3 worldB = WorldNormalVector(IN, half3(0,1,0)); + half3 worldN = WorldNormalVector(IN, half3(0,0,1)); + half3x3 tbn = half3x3(worldT, worldB, worldN); + + // apply world to tangent transform to flat world normal + o.Normal = mul(tbn, flatWorldNormal); + } + ENDCG + } + FallBack "Diffuse" +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/FlatSurfaceShading.shader.meta b/Runtime/Shaders/Experimental/FlatSurfaceShading.shader.meta new file mode 100644 index 000000000..13ae33701 --- /dev/null +++ b/Runtime/Shaders/Experimental/FlatSurfaceShading.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9220d74d8f484acf9937cc663c91aa1c +timeCreated: 1553251962 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/Gamma.shader b/Runtime/Shaders/Experimental/Gamma.shader new file mode 100644 index 000000000..53e9a8070 --- /dev/null +++ b/Runtime/Shaders/Experimental/Gamma.shader @@ -0,0 +1,28 @@ +Shader "Neodroid/Gamma" { + Properties { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader { + Tags { "RenderType" = "Opaque" } + CGPROGRAM + #pragma surface surf Lambert finalcolor:mycolor + struct Input { + float2 uv_MainTex; + }; + + void mycolor (Input IN, SurfaceOutput o, inout fixed4 color) + { + float3 sRGB = color.xyz; + + float3 RGB = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878); + + color.xyz = RGB; + } + sampler2D _MainTex; + void surf (Input IN, inout SurfaceOutput o) { + o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; + } + ENDCG + } + Fallback "Diffuse" + } \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/Gamma.shader.meta b/Runtime/Shaders/Experimental/Gamma.shader.meta new file mode 100644 index 000000000..4ec31a779 --- /dev/null +++ b/Runtime/Shaders/Experimental/Gamma.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 46d4db2c83294a2cbf433f83f1dff94b +timeCreated: 1559127170 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/GrabPassInvert.shader b/Runtime/Shaders/Experimental/GrabPassInvert.shader new file mode 100644 index 000000000..b8274075a --- /dev/null +++ b/Runtime/Shaders/Experimental/GrabPassInvert.shader @@ -0,0 +1,50 @@ +Shader "GrabPassInvert" +{ + SubShader + { + // Draw ourselves after all opaque geometry + Tags { "Queue" = "Transparent" } + + // Grab the screen behind the object into _BackgroundTexture + GrabPass + { + "_BackgroundTexture" + } + + // Render the object with the texture generated above, and invert the colors + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct v2f + { + float4 grabPos : TEXCOORD0; + float4 pos : SV_POSITION; + }; + + v2f vert(appdata_base v) { + v2f o; + // use UnityObjectToClipPos from UnityCG.cginc to calculate + // the clip-space of the vertex + o.pos = UnityObjectToClipPos(v.vertex); + // use ComputeGrabScreenPos function from UnityCG.cginc + // to get the correct texture coordinate + o.grabPos = ComputeGrabScreenPos(o.pos); + return o; + } + + sampler2D _BackgroundTexture; + + half4 frag(v2f i) : SV_Target + { + half4 bgcolor = tex2Dproj(_BackgroundTexture, i.grabPos); + return 1 - bgcolor; + } + ENDCG + } + + } +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/GrabPassInvert.shader.meta b/Runtime/Shaders/Experimental/GrabPassInvert.shader.meta new file mode 100644 index 000000000..528ac6797 --- /dev/null +++ b/Runtime/Shaders/Experimental/GrabPassInvert.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6cd9aee482af45bfb95ca56eb7b1876e +timeCreated: 1552748730 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/LidarShader.shader b/Runtime/Shaders/Experimental/LidarShader.shader new file mode 100644 index 000000000..52af7aba5 --- /dev/null +++ b/Runtime/Shaders/Experimental/LidarShader.shader @@ -0,0 +1,113 @@ +/** + * Copyright (c) 2018 LG Electronics, Inc. + * + * This software contains code licensed as described in LICENSE. + * + */ + +Shader "LidarShader" +{ + Properties + { + _MainTex ("Albedo", 2D) = "white" {} + _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 + } + + CGINCLUDE + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + float2 uv : TEXCOORD0; + float3 viewPos : TEXCOORD1; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + v2f vert(appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + o.viewPos = UnityObjectToViewPos(v.vertex); + return o; + } + + void AlphaCutoff(float alpha); + + float2 frag(v2f i) : SV_Target + { + float4 color = tex2D(_MainTex, i.uv); + AlphaCutoff(color.a); + + float depth = length(i.viewPos); + //float depth = LinearEyeDepth(i.vertex.z); + + float intensity = (color.r + color.g + color.b) / 3; + + return float2(depth, intensity); + } + ENDCG + + SubShader + { + Tags{ "RenderType" = "Opaque" } + + Pass + { + CGPROGRAM + void AlphaCutoff(float alpha) + { + } + ENDCG + } + } + + SubShader + { + Tags { "RenderType" = "TransparentCutout" } + + Pass + { + CGPROGRAM + float _Cutoff; + void AlphaCutoff(float alpha) + { + if (alpha < _Cutoff) + { + discard; + } + } + ENDCG + } + } + + SubShader + { + Tags { "RenderType" = "Transparent" } + + Pass + { + CGPROGRAM + float _Cutoff; + void AlphaCutoff(float alpha) + { + if (alpha < _Cutoff) + { + discard; + } + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Experimental/LidarShader.shader.meta b/Runtime/Shaders/Experimental/LidarShader.shader.meta new file mode 100644 index 000000000..aa10a71c1 --- /dev/null +++ b/Runtime/Shaders/Experimental/LidarShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: af5911562d79ee45ea284e1b3f9133ad +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/MultiMode.shader b/Runtime/Shaders/Experimental/MultiMode.shader new file mode 100644 index 000000000..7d1699e4e --- /dev/null +++ b/Runtime/Shaders/Experimental/MultiMode.shader @@ -0,0 +1,451 @@ +// Based on builtin Internal-DepthNormalsTexture.shader +// EncodeDepthNormal() is replaced with custom Output() function + +Shader "Neodroid/Experimental/MultiMode" { +Properties { + _MainTex ("", 2D) = "white" {} + _Cutoff ("", Float) = 0.5 + _Color ("", Color) = (1,1,1,1) + + _ObjectIdColor ("Object Id Color", Color) = (1,1,1,1) + _MaterialIdColor ("Material Id Color", Color) = (0,1,0,1) + _CategoryColor ("Category Color", Color) = (0,1,0,1) + _OutputMode ("Output Mode", int)=0 +} + +SubShader { +CGINCLUDE + +fixed4 _ObjectIdColor; +fixed4 _MaterialIdColor; +fixed4 _CategoryColor; +int _OutputMode; + +// remap depth: [0 @ eye .. 1 @ far] => [0 @ near .. 1 @ far] +inline float Linear01FromEyeToLinear01FromNear(float depth01) +{ + float near = _ProjectionParams.y; + float far = _ProjectionParams.z; + return (depth01 - near/far) * (1 + near/far); +} + +float4 Output(float depth01, float3 normal) +{ + /* see ImageSynthesis.cs + enum ReplacelementModes { + ObjectId = 0, + CategoryId = 1, + DepthCompressed = 2, + DepthMultichannel = 3, + Normals = 4, + MaterialId = 5 + };*/ + + if (_OutputMode == 0){ // ObjectId + return _ObjectIdColor; + }else if (_OutputMode == 1) {// CatergoryId + return _CategoryColor; + }else if (_OutputMode == 2) { // DepthCompressed + float linearZFromNear = Linear01FromEyeToLinear01FromNear(depth01); + float k = 0.25; // compression factor + return pow(linearZFromNear, k); + }else if (_OutputMode == 3) {// DepthMultichannel + float lowBits = frac(depth01 * 256); + float highBits = depth01 - lowBits / 256; + return float4(lowBits, highBits, depth01, 1); + }else if (_OutputMode == 4) { // Normals + // [-1 .. 1] => [0 .. 1] + float3 c = normal * 0.5 + 0.5; + return float4(c, 1); + }else if(_OutputMode == 5){ + return _MaterialIdColor; + } + + return float4(1, 0.5, 0.5, 1); // unsupported _OutputMode +} +ENDCG + +// Support for different RenderTypes +// The following code is based on builtin Internal-DepthNormalsTexture.shader + + Tags { "RenderType"="Opaque" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TransparentCutout" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +uniform float4 _MainTex_ST; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +uniform fixed4 _Color; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a*_Color.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeBark" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertBark(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag( v2f i ) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeLeaf" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertLeaf(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag( v2f i ) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeOpaque" "DisableBatching"="True" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeTransparentCutout" "DisableBatching"="True" } + Pass { + Cull Back +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + Pass { + Cull Front +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = -COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + +} + +SubShader { + Tags { "RenderType"="TreeBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert (appdata_tree_billboard v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainBillboardTree(v.vertex, v.texcoord1.xy, v.texcoord.y); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv.x = v.texcoord.x; + o.uv.y = v.texcoord.y > 0; + o.nz.xyz = float3(0,0,1); + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - 0.001 ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="GrassBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassBillboardVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="Grass" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} +Fallback Off +} diff --git a/Runtime/Shaders/Experimental/MultiMode.shader.meta b/Runtime/Shaders/Experimental/MultiMode.shader.meta new file mode 100644 index 000000000..f9459d1d0 --- /dev/null +++ b/Runtime/Shaders/Experimental/MultiMode.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 106a7bfad8c599727ab5499e52b6f53e +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/Normal-Diffuse-Offset.shader b/Runtime/Shaders/Experimental/Normal-Diffuse-Offset.shader new file mode 100644 index 000000000..40d48084c --- /dev/null +++ b/Runtime/Shaders/Experimental/Normal-Diffuse-Offset.shader @@ -0,0 +1,37 @@ +/* +* Copyright (C) 2016, Jaguar Land Rover +* This program is licensed under the terms and conditions of the +* Mozilla Public License, version 2.0. The full text of the +* Mozilla Public License is at https://www.mozilla.org/MPL/2.0/ +*/ + +Shader "Diffuse-Offset" { +Properties { + _Color ("Main Color", Color) = (1,1,1,1) + _MainTex ("Base (RGB)", 2D) = "white" {} +} +SubShader { + Tags { "RenderType"="Opaque" } + LOD 200 + Offset -1,-1 + +CGPROGRAM +#pragma surface surf Lambert + +sampler2D _MainTex; +fixed4 _Color; + +struct Input { + float2 uv_MainTex; +}; + +void surf (Input IN, inout SurfaceOutput o) { + fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; + o.Albedo = c.rgb; + o.Alpha = c.a; +} +ENDCG +} + +Fallback "VertexLit" +} diff --git a/Runtime/Shaders/Experimental/Normal-Diffuse-Offset.shader.meta b/Runtime/Shaders/Experimental/Normal-Diffuse-Offset.shader.meta new file mode 100644 index 000000000..c1a7c75d6 --- /dev/null +++ b/Runtime/Shaders/Experimental/Normal-Diffuse-Offset.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a09f46333b8a4131d8da47681b0cac4c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/OpticalFlow.shader b/Runtime/Shaders/Experimental/OpticalFlow.shader new file mode 100644 index 000000000..01b2f705c --- /dev/null +++ b/Runtime/Shaders/Experimental/OpticalFlow.shader @@ -0,0 +1,88 @@ +Shader "Neodroid/OpticalFlow"{ + Properties { + _Sensitivity("Sensitivity", Float) = 1 + } + SubShader { + // No culling or depth + Lighting Off + Cull Off + ZWrite Off + ZTest Always + + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + float4 _CameraMotionVectorsTexture_ST; + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _CameraMotionVectorsTexture); + return o; + } + + sampler2D _CameraMotionVectorsTexture; + + float3 Hue(float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R,G,B)); + } + + float3 HSVtoRGB(float3 HSV) + { + return float3(((Hue(HSV.x) - 1) * HSV.y + 1) * HSV.z); + } + + float _Sensitivity; + float3 MotionVectorsToOpticalFlow(float2 motion) + { + // Currently is based on HSV encoding from: + // "Optical Flow in a Smart Sensor Based on Hybrid Analog-Digital Architecture" by P. Guzman et al + // http://www.mdpi.com/1424-8220/10/4/2975 + + // Analogous to http://docs.opencv.org/trunk/d7/d8b/tutorial_py_lucas_kanade.html + // but might need to swap or rotate axis! + + // @TODO: support other HSV encodings (using lookup texture) + // https://www.microsoft.com/en-us/research/wp-content/uploads/2007/10/ofdatabase_iccv_07.pdf + // https://people.csail.mit.edu/celiu/SIFTflow/ + // some MATLAB code: https://github.com/suhangpro/epicflow/blob/master/utils/flow-code-matlab/computeColor.m + + float angle = atan2(-motion.y, -motion.x); + float hue = angle / (UNITY_PI * 2.0) + 0.5; // convert motion angle to Hue + float value = length(motion) * _Sensitivity; // convert motion strength to Value + return HSVtoRGB(float3(hue, 1, value)); // HSV -> RGB + } + + fixed4 frag (v2f i) : SV_Target + { + float2 motion = tex2D(_CameraMotionVectorsTexture, i.uv).rg; + float3 rgb = MotionVectorsToOpticalFlow(motion); + return float4(rgb, 1); + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Experimental/OpticalFlow.shader.meta b/Runtime/Shaders/Experimental/OpticalFlow.shader.meta new file mode 100644 index 000000000..48e72a5c8 --- /dev/null +++ b/Runtime/Shaders/Experimental/OpticalFlow.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fca9ac1a3b2c2a7888072482c5224f58 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/Outline.shader b/Runtime/Shaders/Experimental/Outline.shader new file mode 100644 index 000000000..0038cbc71 --- /dev/null +++ b/Runtime/Shaders/Experimental/Outline.shader @@ -0,0 +1,138 @@ +Shader "Neodroid/Outline" +{ + Properties + { + _SegmentationColor ("_SegmentationColor", Color) = (.5,.5,.5,1.) + _MainTex("Texture", 2D) = "white" {} + + _OutlineColor("Outline color", Color) = (0,0,0,1) + _OutlineWidthFactor("Outlines width", Range(0.0, 2.0)) = 1.1 +/* + _SecondOutlineColor("Outline color", Color) = (0,0,0,1) + _SecondOutlineWidth("Outlines width", Range(0.0, 2.0)) = 1.1 +*/ + _Angle("Switch shader on angle", Range(0.0, 180.0)) = 85 + } + + CGINCLUDE + #include "UnityCG.cginc" + + struct appdata{ + float4 vertex : POSITION; + float4 normal : NORMAL; + }; + + struct v2f{ + float4 pos : POSITION; + }; + + uniform float4 _FirstOutlineColor; + uniform float _FirstOutlineWidth; + + /*uniform float4 _SecondOutlineColor; + uniform float _SecondOutlineWidth; +*/ + uniform sampler2D _MainTex; + uniform float4 _Color; + uniform float _Angle; + + ENDCG + + SubShader{ + Tags{ "Queue" = "Transparent" + //"Queue" = "Transparent" + "IgnoreProjector" = "True" } + + //First outline + Pass{ + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + Cull Back + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + v2f vert(appdata v){ + appdata original = v; + + float3 scaleDir = normalize(v.vertex.xyz - float4(0,0,0,1)); + //This shader consists of 2 ways of generating outline that are dynamically switched based on demiliter angle + //If vertex normal is pointed away from object origin then custom outline generation is used (based on scaling along the origin-vertex vector) + //Otherwise the old-school normal vector scaling is used + //This way prevents weird artifacts from being created when using either of the methods + if ( degrees(acos(dot(scaleDir.xyz, v.normal.xyz))) > _Angle) { + v.vertex.xyz += normalize(v.normal.xyz) * _FirstOutlineWidth; + }else { + v.vertex.xyz += scaleDir *_FirstOutlineWidth; + } + + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + return o; + } + + half4 frag(v2f i) : COLOR{ + return _FirstOutlineColor; + } + + ENDCG + } + + //Second outline + /*Pass{ + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + Cull Back + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + v2f vert(appdata v) { + appdata original = v; + + float3 scaleDir = normalize(v.vertex.xyz - float4(0,0,0,1)); + //This shader consists of 2 ways of generating outline that are dynamically switched based on demiliter angle + //If vertex normal is pointed away from object origin then custom outline generation is used (based on scaling along the origin-vertex vector) + //Otherwise the old-school normal vector scaling is used + //This way prevents weird artifacts from being created when using either of the methods + if (degrees(acos(dot(scaleDir.xyz, v.normal.xyz))) > _Angle) { + v.vertex.xyz += normalize(v.normal.xyz) * _SecondOutlineWidth; + } + else { + v.vertex.xyz += scaleDir *_SecondOutlineWidth; + } + + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + return o; + } + + half4 frag(v2f i) : COLOR{ + return _SecondOutlineColor; + } + + ENDCG + } +*/ + + //Surface shader + Tags{ "Queue" = "Geometry" } + CGPROGRAM + #pragma surface surf Lambert + + struct Input { + float2 uv_MainTex; + }; + + void surf(Input IN, inout SurfaceOutput o) { + fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; + o.Albedo = c.rgb; + o.Alpha = c.a; + } + ENDCG + } + + Fallback "Diffuse" +} diff --git a/Runtime/Shaders/Experimental/Outline.shader.meta b/Runtime/Shaders/Experimental/Outline.shader.meta new file mode 100644 index 000000000..0d5daaeec --- /dev/null +++ b/Runtime/Shaders/Experimental/Outline.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: adb4cdcf68b278e708a4a00cc4b4c7c3 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/PointCloud.shader b/Runtime/Shaders/Experimental/PointCloud.shader new file mode 100644 index 000000000..2e7dd107c --- /dev/null +++ b/Runtime/Shaders/Experimental/PointCloud.shader @@ -0,0 +1,78 @@ +Shader "Unlit/PointCloud" +{ + Properties + { + _Color("Color", Color) = (1,0,0,0) + _Size ("Size", Float) = 0.04 + [Toggle(ConstantSize)] + _ConstSize("Constant Size", Float) = 1 + } + SubShader + { + Pass + { + Cull Off + + CGPROGRAM + #pragma target 4.0 + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + + fixed4 _Color; + float _Size; + float _ConstSize; + + float4x4 _LidarToWorld; + + StructuredBuffer PointCloud; + + struct g2f + { + float4 vertex : SV_POSITION; + }; + + float4 vert(uint id : SV_VertexID) : POSITION + { + return mul(_LidarToWorld, float4(PointCloud[id].xyz, 1)); + } + + [maxvertexcount(3)] + void geom (point float4 pt[1] : POSITION, inout TriangleStream triStream) + { + g2f output; + + // lidar ray did not hit anything + if (dot(pt[0], pt[0]) == 0) return; + + float4 vertex = pt[0]; + float3 vertToCam_World = _WorldSpaceCameraPos - vertex; + float3 tangent = normalize(cross(float3(0, 1, 0), vertToCam_World)); + float3 up = normalize(cross(vertToCam_World, tangent)); + + float4 vertex_view = mul(UNITY_MATRIX_V, vertex) + float4(0, 0, 0.1, 0); + float4 vertex_proj = mul(UNITY_MATRIX_P, vertex_view); + + output.vertex = _ConstSize * (vertex_proj + float4(float3(1, 0, 0) * -_Size / 5.33 * vertex_proj.a / 1.5, 0)) + + (1 - _ConstSize) * (vertex_proj + mul(UNITY_MATRIX_VP, float4(tangent * -_Size / 1.5, 0))); + triStream.Append(output); + + output.vertex = _ConstSize * (vertex_proj + float4(float3(0, -1, 0) * _Size / 5.33 * vertex_proj.a, 0)) + + (1 - _ConstSize) * (vertex_proj + mul(UNITY_MATRIX_VP, float4(up * _Size, 0))); + triStream.Append(output); + + output.vertex = _ConstSize * (vertex_proj + float4(float3(1, 0, 0) * _Size / 5.33 * vertex_proj.a / 1.5, 0)) + + (1 - _ConstSize) * (vertex_proj + mul(UNITY_MATRIX_VP, float4(tangent * _Size / 1.5, 0))); + triStream.Append(output); + } + + float4 frag (g2f i) : COLOR + { + return _Color; + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Experimental/PointCloud.shader.meta b/Runtime/Shaders/Experimental/PointCloud.shader.meta new file mode 100644 index 000000000..991d2c916 --- /dev/null +++ b/Runtime/Shaders/Experimental/PointCloud.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b8dd270d606a5966c937aa5405cf7f7d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/PositionShader.shader b/Runtime/Shaders/Experimental/PositionShader.shader new file mode 100644 index 000000000..e98e90fb7 --- /dev/null +++ b/Runtime/Shaders/Experimental/PositionShader.shader @@ -0,0 +1,35 @@ +Shader "Neodroid/Spaces/Experimental/PositionShader" { + SubShader + { + Tags{ "RenderType" = "Opaque" } + LOD 200 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + struct vertInput { + float4 pos : POSITION; + }; + + struct vertOutput { + float4 pos : SV_POSITION; + float3 worldPos : TEXCOORD0; + }; + + vertOutput vert(vertInput input) { + vertOutput o; + o.pos = UnityObjectToClipPos(input.pos); + o.worldPos = mul(unity_ObjectToWorld, input.pos).xyz; + return o; + } + + float4 frag(vertOutput output) : COLOR{ + return float4(output.worldPos.xyz, 1.0); + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/PositionShader.shader.meta b/Runtime/Shaders/Experimental/PositionShader.shader.meta new file mode 100644 index 000000000..941137940 --- /dev/null +++ b/Runtime/Shaders/Experimental/PositionShader.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: af8b151b1f0e4cd3bf49abab1eac4665 +timeCreated: 1553237934 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/ScreenPosition.shader b/Runtime/Shaders/Experimental/ScreenPosition.shader new file mode 100644 index 000000000..43caa090d --- /dev/null +++ b/Runtime/Shaders/Experimental/ScreenPosition.shader @@ -0,0 +1,56 @@ +Shader "Neodroid/Experimental/ScreenPosition" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.0 + + // note: no SV_POSITION in this struct + struct v2f { + float2 uv : TEXCOORD0; + }; + + v2f vert ( + float4 vertex : POSITION, // vertex position input + float2 uv : TEXCOORD0, // texture coordinate input + out float4 outpos : SV_POSITION // clip space position output + ) + { + v2f o; + o.uv = uv; + outpos = UnityObjectToClipPos(vertex); + return o; + } + + sampler2D _MainTex; + + fixed4 frag (v2f i, UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target + { + // screenPos.xy will contain pixel integer coordinates. + // use them to implement a checkerboard pattern that skips rendering + // 4x4 blocks of pixels + + // checker value will be negative for 4x4 blocks of pixels + // in a checkerboard pattern + screenPos.xy = floor(screenPos.xy * 0.25) * 0.5; + float checker = -frac(screenPos.r + screenPos.g); + + // clip HLSL instruction stops rendering a pixel if value is negative + clip(checker); + + // for pixels that were kept, read the texture and output it + fixed4 c = tex2D (_MainTex, i.uv); + return c; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/ScreenPosition.shader.meta b/Runtime/Shaders/Experimental/ScreenPosition.shader.meta new file mode 100644 index 000000000..9d6576f5c --- /dev/null +++ b/Runtime/Shaders/Experimental/ScreenPosition.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f55d4ae571654e1aaabafee765f7b55a +timeCreated: 1553250766 \ No newline at end of file diff --git a/Runtime/Shaders/ScreenSpaceFlow.shader b/Runtime/Shaders/Experimental/ScreenSpaceFlow.shader similarity index 96% rename from Runtime/Shaders/ScreenSpaceFlow.shader rename to Runtime/Shaders/Experimental/ScreenSpaceFlow.shader index bca387c6d..fdc17eea3 100644 --- a/Runtime/Shaders/ScreenSpaceFlow.shader +++ b/Runtime/Shaders/Experimental/ScreenSpaceFlow.shader @@ -4,7 +4,10 @@ Shader "Neodroid/ScreenSpaceFlow" { } Subshader { Pass { - ZTest Always Cull Off ZWrite Off + //ZTest Always + //Cull Off + //ZWrite Off + //ZWrite On CGPROGRAM #include "UnityCG.cginc" @@ -78,4 +81,4 @@ Shader "Neodroid/ScreenSpaceFlow" { ENDCG } } -} \ No newline at end of file +} diff --git a/Runtime/Shaders/ScreenSpaceFlow.shader.meta b/Runtime/Shaders/Experimental/ScreenSpaceFlow.shader.meta similarity index 100% rename from Runtime/Shaders/ScreenSpaceFlow.shader.meta rename to Runtime/Shaders/Experimental/ScreenSpaceFlow.shader.meta diff --git a/Runtime/Shaders/Experimental/SegmentColorer.shader b/Runtime/Shaders/Experimental/SegmentColorer.shader new file mode 100644 index 000000000..fbd625cac --- /dev/null +++ b/Runtime/Shaders/Experimental/SegmentColorer.shader @@ -0,0 +1,163 @@ +// +// TODO: support deferred rendering path + +// +Shader "SegmentColorer" +{ + CGINCLUDE + float4 vert(float4 vertex : POSITION) : SV_POSITION + { + return UnityObjectToClipPos(vertex); + } + ENDCG + + SubShader + { + Tags { "SegmentColor" = "Car" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0x12/255.0, 0x0E / 255.0, 0x97 / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "Road" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0x7A / 255.0, 0x3F / 255.0, 0x83 / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "Vegetation" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0x71 / 255.0, 0xC0 / 255.0, 0x2F / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "Sidewalk" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0xBA / 255.0, 0x83 / 255.0, 0x50 / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "Building" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0x23 / 255.0, 0x86 / 255.0, 0x88 / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "Sign" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0xC0 / 255.0, 0xC0 / 255.0, 0x00 / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "TrafficLight" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0xFF / 255.0, 0xFF / 255.0, 0x00 / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "Obstacle" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0xFF / 255.0, 0xFF / 255.0, 0xFF / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "Shoulder" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0xFF / 255.0, 0x00 / 255.0, 0xFF / 255.0, 1.0); + } + ENDCG + } + } + + SubShader + { + Tags { "SegmentColor" = "Pedestrian" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + fixed4 frag(float4 vertex : SV_POSITION) : SV_Target + { + return fixed4(0xFF / 255.0, 0x00 / 255.0, 0x00 / 255.0, 1.0); + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Experimental/SegmentColorer.shader.meta b/Runtime/Shaders/Experimental/SegmentColorer.shader.meta new file mode 100644 index 000000000..791de728e --- /dev/null +++ b/Runtime/Shaders/Experimental/SegmentColorer.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0adff21951cd14a5296756c427618142 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/Skybox Shaders.meta b/Runtime/Shaders/Experimental/Skybox Shaders.meta new file mode 100644 index 000000000..3b43a452a --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 31ade4a7bc8934a70b375922ddbf441b +folderAsset: yes +DefaultImporter: + userData: diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Editor.meta b/Runtime/Shaders/Experimental/Skybox Shaders/Editor.meta new file mode 100644 index 000000000..1c6c500bd --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 6b8d5e2281a1c45aa9f2f36561a56c0d +folderAsset: yes +DefaultImporter: + userData: diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Editor/GradientSkyboxInspector.cs b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/GradientSkyboxInspector.cs new file mode 100644 index 000000000..0062748d7 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/GradientSkyboxInspector.cs @@ -0,0 +1,45 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace droid.Runtime.Shaders.Experimental.Skybox_Shaders.Editor { + public class GradientSkyboxInspector : MaterialEditor { + public override void OnInspectorGUI() { + this.serializedObject.Update(); + + if (this.isVisible) { + EditorGUI.BeginChangeCheck(); + + this.ColorProperty(GetMaterialProperty(this.targets, "_Color2"), "Top Color"); + this.ColorProperty(GetMaterialProperty(this.targets, "_Color1"), "Bottom Color"); + this.FloatProperty(GetMaterialProperty(this.targets, "_Intensity"), "Intensity"); + this.FloatProperty(GetMaterialProperty(this.targets, "_Exponent"), "Exponent"); + + var dp = GetMaterialProperty(this.targets, "_UpVectorPitch"); + var dy = GetMaterialProperty(this.targets, "_UpVectorYaw"); + + if (dp.hasMixedValue || dy.hasMixedValue) { + EditorGUILayout.HelpBox("Editing angles is disabled because they have mixed values.", + MessageType.Warning); + } else { + this.FloatProperty(dp, "Pitch"); + this.FloatProperty(dy, "Yaw"); + } + + if (EditorGUI.EndChangeCheck()) { + var rp = dp.floatValue * Mathf.Deg2Rad; + var ry = dy.floatValue * Mathf.Deg2Rad; + + var up_vector = new Vector4(Mathf.Sin(rp) * Mathf.Sin(ry), + Mathf.Cos(rp), + Mathf.Sin(rp) * Mathf.Cos(ry), + 0.0f); + GetMaterialProperty(this.targets, "_UpVector").vectorValue = up_vector; + + this.PropertiesChanged(); + } + } + } + } +} +#endif diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Editor/GradientSkyboxInspector.cs.meta b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/GradientSkyboxInspector.cs.meta new file mode 100644 index 000000000..30ba51ff1 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/GradientSkyboxInspector.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ac6bec5910bc48009b72ea8c1df8924 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Editor/HorizonWithSunSkyboxInspector.cs b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/HorizonWithSunSkyboxInspector.cs new file mode 100644 index 000000000..5b6f42146 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/HorizonWithSunSkyboxInspector.cs @@ -0,0 +1,76 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace droid.Runtime.Shaders.Experimental.Skybox_Shaders.Editor { + public class HorizonWithSunSkyboxInspector : MaterialEditor { + public override void OnInspectorGUI() { + this.serializedObject.Update(); + + if (this.isVisible) { + EditorGUI.BeginChangeCheck(); + + GUILayout.Label("Background Parameters"); + + EditorGUILayout.Space(); + + this.ColorProperty(GetMaterialProperty(this.targets, "_SkyColor1"), "Top Color"); + this.FloatProperty(GetMaterialProperty(this.targets, "_SkyExponent1"), "Exponential Factor"); + + EditorGUILayout.Space(); + + this.ColorProperty(GetMaterialProperty(this.targets, "_SkyColor2"), "Horizon Color"); + + EditorGUILayout.Space(); + + this.ColorProperty(GetMaterialProperty(this.targets, "_SkyColor3"), "Bottom Color"); + this.FloatProperty(GetMaterialProperty(this.targets, "_SkyExponent2"), "Exponential Factor"); + + EditorGUILayout.Space(); + + this.FloatProperty(GetMaterialProperty(this.targets, "_SkyIntensity"), "Intensity"); + + EditorGUILayout.Space(); + + GUILayout.Label("Sun Parameters"); + + EditorGUILayout.Space(); + + this.ColorProperty(GetMaterialProperty(this.targets, "_SunColor"), "Color"); + this.FloatProperty(GetMaterialProperty(this.targets, "_SunIntensity"), "Intensity"); + + EditorGUILayout.Space(); + + this.FloatProperty(GetMaterialProperty(this.targets, "_SunAlpha"), "Alpha"); + this.FloatProperty(GetMaterialProperty(this.targets, "_SunBeta"), "Beta"); + + EditorGUILayout.Space(); + + var az = GetMaterialProperty(this.targets, "_SunAzimuth"); + var al = GetMaterialProperty(this.targets, "_SunAltitude"); + + if (az.hasMixedValue || al.hasMixedValue) { + EditorGUILayout.HelpBox("Editing angles is disabled because they have mixed values.", + MessageType.Warning); + } else { + this.FloatProperty(az, "Azimuth"); + this.FloatProperty(al, "Altitude"); + } + + if (EditorGUI.EndChangeCheck()) { + var raz = az.floatValue * Mathf.Deg2Rad; + var ral = al.floatValue * Mathf.Deg2Rad; + + var up_vector = new Vector4(Mathf.Cos(ral) * Mathf.Sin(raz), + Mathf.Sin(ral), + Mathf.Cos(ral) * Mathf.Cos(raz), + 0.0f); + GetMaterialProperty(this.targets, "_SunVector").vectorValue = up_vector; + + this.PropertiesChanged(); + } + } + } + } +} +#endif diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Editor/HorizonWithSunSkyboxInspector.cs.meta b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/HorizonWithSunSkyboxInspector.cs.meta new file mode 100644 index 000000000..1c083bd0b --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/HorizonWithSunSkyboxInspector.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e197dfda576864589a8bff65326c6ac9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Editor/RgbmCubedSkyboxInspector.cs b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/RgbmCubedSkyboxInspector.cs new file mode 100644 index 000000000..56aad4079 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/RgbmCubedSkyboxInspector.cs @@ -0,0 +1,40 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace droid.Runtime.Shaders.Experimental.Skybox_Shaders.Editor { + public class RgbmCubedSkyboxInspector : MaterialEditor { + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + + if (this.isVisible) { + var material = this.target as Material; + + var use_linear = false; + foreach (var keyword in material.shaderKeywords) { + if (keyword == "USE_LINEAR") { + use_linear = true; + break; + } + } + + EditorGUI.BeginChangeCheck(); + + use_linear = EditorGUILayout.Toggle("Linear Space Lighting", use_linear); + + if (EditorGUI.EndChangeCheck()) { + if (use_linear) { + material.EnableKeyword("USE_LINEAR"); + material.DisableKeyword("USE_GAMMA"); + } else { + material.DisableKeyword("USE_LINEAR"); + material.EnableKeyword("USE_GAMMA"); + } + + EditorUtility.SetDirty(this.target); + } + } + } + } +} +#endif diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Editor/RgbmCubedSkyboxInspector.cs.meta b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/RgbmCubedSkyboxInspector.cs.meta new file mode 100644 index 000000000..e6865b6c8 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Editor/RgbmCubedSkyboxInspector.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4496fbd6b28d3426e9c827c3e5332cf1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Horizon With Sun Skybox.shader b/Runtime/Shaders/Experimental/Skybox Shaders/Horizon With Sun Skybox.shader new file mode 100644 index 000000000..ef5a9eb08 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Horizon With Sun Skybox.shader @@ -0,0 +1,103 @@ + +Shader "Skybox/Horizon With Sun Skybox" +{ + Properties + { + _SkyColor1("Top Color", Color) = (0.37, 0.52, 0.73, 0) + _SkyExponent1("Top Exponent", Float) = 8.5 + + _SkyColor2("Horizon Color", Color) = (0.89, 0.96, 1, 0) + + _SkyColor3("Bottom Color", Color) = (0.89, 0.89, 0.89, 0) + _SkyExponent2("Bottom Exponent", Float) = 3.0 + + _SkyIntensity("Sky Intensity", Float) = 1.0 + + _SunColor("Sun Color", Color) = (1, 0.99, 0.87, 1) + _SunIntensity("Sun Intensity", float) = 2.0 + + _SunAlpha("Sun Alpha", float) = 550 + _SunBeta("Sun Beta", float) = 1 + + _SunVector("Sun Vector", Vector) = (0.269, 0.615, 0.740, 0) + + _SunAzimuth("Sun Azimuth (editor only)", float) = 20 + _SunAltitude("Sun Altitude (editor only)", float) = 38 + } + + CGINCLUDE + + #include "UnityCG.cginc" + + struct appdata + { + float4 position : POSITION; + float3 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 position : SV_POSITION; + float3 texcoord : TEXCOORD0; + }; + + half3 _SkyColor1; + half _SkyExponent1; + + half3 _SkyColor2; + + half3 _SkyColor3; + half _SkyExponent2; + + half _SkyIntensity; + + half3 _SunColor; + half _SunIntensity; + + half _SunAlpha; + half _SunBeta; + + half3 _SunVector; + + v2f vert(appdata v) + { + v2f o; + o.position = UnityObjectToClipPos(v.position); + o.texcoord = v.texcoord; + return o; + } + + half4 frag(v2f i) : COLOR + { + float3 v = normalize(i.texcoord); + + float p = v.y; + float p1 = 1 - pow(min(1, 1 - p), _SkyExponent1); + float p3 = 1 - pow(min(1, 1 + p), _SkyExponent2); + float p2 = 1 - p1 - p3; + + half3 c_sky = _SkyColor1 * p1 + _SkyColor2 * p2 + _SkyColor3 * p3; + half3 c_sun = _SunColor * min(pow(max(0, dot(v, _SunVector)), _SunAlpha) * _SunBeta, 1); + + return half4(c_sky * _SkyIntensity + c_sun * _SunIntensity, 0); + } + + ENDCG + + SubShader + { + Tags { "RenderType"="Background" "Queue"="Background" } + Pass + { + ZWrite Off + Cull Off + Fog { Mode Off } + CGPROGRAM + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment frag + ENDCG + } + } + CustomEditor "HorizonWithSunSkyboxInspector" +} diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/Horizon With Sun Skybox.shader.meta b/Runtime/Shaders/Experimental/Skybox Shaders/Horizon With Sun Skybox.shader.meta new file mode 100644 index 000000000..f814d1280 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/Horizon With Sun Skybox.shader.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: e62beaebaf9ec4da8ae22bfefe5cbb79 +ShaderImporter: + defaultTextures: [] + userData: diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/RGBM Cubed Skybox.shader b/Runtime/Shaders/Experimental/Skybox Shaders/RGBM Cubed Skybox.shader new file mode 100644 index 000000000..5c90fa515 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/RGBM Cubed Skybox.shader @@ -0,0 +1,87 @@ + +Shader "Skybox/RGBM Cubed Skybox" +{ + Properties + { + _Cubemap("Cubemap", Cube) = "white" {} + _Exposure("Exposure", Float) = 1 + _YawAngle("Yaw Angle", Float) = 0 + } + + CGINCLUDE + + #include "UnityCG.cginc" + + struct appdata_t + { + float4 position : POSITION; + float3 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 position : POSITION; + float3 texcoord : TEXCOORD0; + }; + + samplerCUBE _Cubemap; + half _Exposure; + float _YawAngle; + + float4x4 MakeRotationMatrix() + { + float radian = 0.01745329251 * _YawAngle; + float sn = sin(radian); + float cs = cos(radian); + return float4x4( + cs, 0, sn, 0, + 0, 1, 0, 0, + -sn, 0, cs, 0, + 0, 0, 0, 1 + ); + } + + v2f vert(appdata_t v) + { + v2f o; + float4 p = mul(MakeRotationMatrix(), v.position); + o.position = UnityObjectToClipPos(p); + o.texcoord = v.texcoord; + return o; + } + + half4 frag(v2f i) : COLOR + { + float4 c = texCUBE(_Cubemap, i.texcoord); +#if USE_LINEAR + half e = c.a * _Exposure * 8.0f; + half e2 = e * e; + half lin_e = dot(half2(0.7532f, 0.2468f), half2(e2, e2 * e)); + c.rgb = c.rgb * lin_e; +#else + c.rgb = c.rgb * c.a * _Exposure * 8.0f; +#endif + c.a = 1.0f; + return c; + } + + ENDCG + + SubShader + { + Tags { "Queue"="Background" "RenderType"="Background" } + Cull Off + ZWrite Off + Fog { Mode Off } + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma fragmentoption ARB_precision_hint_fastest + #pragma multi_compile USE_GAMMA USE_LINEAR + ENDCG + } + } + CustomEditor "RgbmCubedSkyboxInspector" +} diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/RGBM Cubed Skybox.shader.meta b/Runtime/Shaders/Experimental/Skybox Shaders/RGBM Cubed Skybox.shader.meta new file mode 100644 index 000000000..622b5085f --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/RGBM Cubed Skybox.shader.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: d289571c071b643e7a210f11c0f5d0fb +ShaderImporter: + defaultTextures: [] + userData: diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/a.shader b/Runtime/Shaders/Experimental/Skybox Shaders/a.shader new file mode 100644 index 000000000..eadabe33a --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/a.shader @@ -0,0 +1,84 @@ +Shader "Kumo Kairo/Gradient Moon Skybox" +{ + Properties + { + _SkyTint("Sky Tint", Color) = (.5, .5, .5, 1) + _GroundColor("Ground", Color) = (.369, .349, .341, 1) + _Exponent("Exponent", Range(0, 15)) = 1.0 + _SunPosition("Sun Position", Vector) = (0.0, 0.0, 1.0) + + _SunColor("Sun Color", Color) = (1.0, 1.0, 1.0, 1.0) + _SunSize("Sun Size", Range(0, 1)) = 0.04 + _SunHardness("Sun Hardness", Float) = 0.1 + _SunGradient("Sun Gradient", Range(0, 1)) = 0.0 + } + + CGINCLUDE + + #include "Lighting.cginc" + #include "UnityCG.cginc" + + uniform half3 _SkyTint, _GroundColor, _SunPosition, _SunColor; + uniform half _SunSize, _Exposure, _Exponent, _SunHardness, _SkyGradient; + + #define HARDNESS_EXPONENT_BASE 0.125 + + struct appdata + { + float4 position : POSITION; + float3 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 position : SV_POSITION; + float3 texcoord : TEXCOORD0; + }; + + half calcSunSpot(half3 sunDirPos, half3 skyDirPos) + { + half3 delta = sunDirPos - skyDirPos; + half dist = length(delta); + half spot = 1.0 - smoothstep(0.0, _SunSize, dist); + return 1.0 - pow(HARDNESS_EXPONENT_BASE, spot * _SunHardness); + } + + v2f vert(appdata v) + { + v2f o; + o.position = UnityObjectToClipPos(v.position); + o.texcoord = v.texcoord; + return o; + } + + half4 frag(v2f i) : COLOR + { + half p = i.texcoord.y; + + float p1 = pow(min(1.0f, 1.0f - p), _Exponent); + float p2 = 1.0f - p1; + + half3 mie = calcSunSpot(_SunPosition.xyz, i.texcoord.xyz) * _SunColor; + half3 col = _GroundColor * p1 + mie * p2; + col += _SkyTint * p2; + + return half4(col, 1.0); + } + + ENDCG + + SubShader + { + Tags{ "RenderType" = "Skybox" "Queue" = "Background" } + Pass + { + ZWrite Off + Cull Off + Fog { Mode Off } + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + ENDCG + } + } +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/Skybox Shaders/a.shader.meta b/Runtime/Shaders/Experimental/Skybox Shaders/a.shader.meta new file mode 100644 index 000000000..1f10b32f0 --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox Shaders/a.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8f33c66e01d0eee3e9eace55366263b5 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/Skybox2CubeBlend.shader b/Runtime/Shaders/Experimental/Skybox2CubeBlend.shader new file mode 100644 index 000000000..50d8f476c --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox2CubeBlend.shader @@ -0,0 +1,72 @@ +Shader "Custom/Skybox2CubeBlend" { + Properties { + _Blend ("Blend", Range (0, 1) ) = 0.0 + _Rotation ("Rotation", Range(0, 360)) = 0 + _Tex ("Cubemap (HDR)", Cube) = "grey" {} + _OverlayTex ("CubemapOverlay (HDR)", Cube) = "grey" {} +} + +SubShader { + Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" } + Cull Off ZWrite Off + + Pass { + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 2.0 + + #include "UnityCG.cginc" + + samplerCUBE _Tex; + samplerCUBE _OverlayTex; + half4 _Tex_HDR; + half4 _Tint; + half _Exposure; + float _Rotation; + float _Blend; + + float3 RotateAroundYInDegrees (float3 vertex, float degrees) + { + float alpha = degrees * UNITY_PI / 180.0; + float sina, cosa; + sincos(alpha, sina, cosa); + float2x2 m = float2x2(cosa, -sina, sina, cosa); + return float3(mul(m, vertex.xz), vertex.y).xzy; + } + + struct appdata_t { + float4 vertex : POSITION; + }; + + struct v2f { + float4 vertex : SV_POSITION; + float3 texcoord : TEXCOORD0; + }; + + v2f vert (appdata_t v) + { + v2f o; + float3 rotated = RotateAroundYInDegrees(v.vertex, _Rotation); + o.vertex = UnityObjectToClipPos(rotated); + o.texcoord = v.vertex.xyz; + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + half4 tex = texCUBE (_Tex, i.texcoord); + half4 tex2 = texCUBE (_OverlayTex, i.texcoord); + float4 env = lerp( tex, tex2, _Blend ); + + half3 c = DecodeHDR (env, _Tex_HDR); + + return half4(c, 1); + } + ENDCG + } +} +Fallback Off + +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/Skybox2CubeBlend.shader.meta b/Runtime/Shaders/Experimental/Skybox2CubeBlend.shader.meta new file mode 100644 index 000000000..237814beb --- /dev/null +++ b/Runtime/Shaders/Experimental/Skybox2CubeBlend.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cad243acb81e1ce97a7c579fdb5fa3d1 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/StandardTwoSideShader.shader b/Runtime/Shaders/Experimental/StandardTwoSideShader.shader new file mode 100644 index 000000000..0a1658d64 --- /dev/null +++ b/Runtime/Shaders/Experimental/StandardTwoSideShader.shader @@ -0,0 +1,344 @@ +// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt) + +Shader "Custom/Standard(Two Side)" +{ + Properties + { + _Color("Color", Color) = (1,1,1,1) + _MainTex("Albedo", 2D) = "white" {} + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 + _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0 + [Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0 + + [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 + _MetallicGlossMap("Metallic", 2D) = "white" {} + + [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0 + [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0 + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + _Parallax("Height Scale", Range(0.005, 0.08)) = 0.02 + _ParallaxMap("Height Map", 2D) = "black" {} + + _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0 + _OcclusionMap("Occlusion", 2D) = "white" {} + + _EmissionColor("Color", Color) = (0,0,0) + _EmissionMap("Emission", 2D) = "white" {} + + _DetailMask("Detail Mask", 2D) = "white" {} + + _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {} + _DetailNormalMapScale("Scale", Float) = 1.0 + _DetailNormalMap("Normal Map", 2D) = "bump" {} + + [Enum(UV0,0,UV1,1)] _UVSec("UV Set for secondary textures", Float) = 0 + + + // Blending state + [HideInInspector] _Mode("__mode", Float) = 0.0 + [HideInInspector] _SrcBlend("__src", Float) = 1.0 + [HideInInspector] _DstBlend("__dst", Float) = 0.0 + [HideInInspector] _ZWrite("__zw", Float) = 1.0 + } + + CGINCLUDE +#define UNITY_SETUP_BRDF_INPUT MetallicSetup + ENDCG + + SubShader + { + Tags{ "RenderType" = "Opaque" "PerformanceChecks" = "False" } + LOD 300 + + + // ------------------------------------------------------------------ + // Base forward pass (directional light, emission, lightmaps, ...) + Pass + { + Name "FORWARD" + Tags{ "LightMode" = "ForwardBase" } + Cull Off + + Blend[_SrcBlend][_DstBlend] + ZWrite[_ZWrite] + + CGPROGRAM +#pragma target 3.0 + + // ------------------------------------- + +#pragma shader_feature _NORMALMAP +#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON +#pragma shader_feature _EMISSION +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature ___ _DETAIL_MULX2 +#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A +#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF +#pragma shader_feature _ _GLOSSYREFLECTIONS_OFF +#pragma shader_feature _PARALLAXMAP + +#pragma multi_compile_fwdbase +#pragma multi_compile_fog +#pragma multi_compile_instancing + +#pragma vertex vertBase +#pragma fragment fragBase +#include "UnityStandardCoreForward.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Additive forward pass (one light per pass) + Pass + { + Name "FORWARD_DELTA" + Tags{ "LightMode" = "ForwardAdd" } + Blend[_SrcBlend] One + Fog{ Color(0,0,0,0) } // in additive pass fog should be black + ZWrite Off + ZTest LEqual + Cull Off + + CGPROGRAM +#pragma target 3.0 + + // ------------------------------------- + + +#pragma shader_feature _NORMALMAP +#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A +#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF +#pragma shader_feature ___ _DETAIL_MULX2 +#pragma shader_feature _PARALLAXMAP + +#pragma multi_compile_fwdadd_fullshadows +#pragma multi_compile_fog + +#pragma vertex vertAdd +#pragma fragment fragAdd +#include "UnityStandardCoreForward.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass{ + Name "ShadowCaster" + Tags{ "LightMode" = "ShadowCaster" } + Cull Off + + ZWrite On ZTest LEqual + + CGPROGRAM +#pragma target 3.0 + + // ------------------------------------- + + +#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature _PARALLAXMAP +#pragma multi_compile_shadowcaster +#pragma multi_compile_instancing + +#pragma vertex vertShadowCaster +#pragma fragment fragShadowCaster + +#include "UnityStandardShadow.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Deferred pass + Pass + { + Name "DEFERRED" + Tags{ "LightMode" = "Deferred" } + Cull Off + + CGPROGRAM +#pragma target 3.0 +#pragma exclude_renderers nomrt + + + // ------------------------------------- + +#pragma shader_feature _NORMALMAP +#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON +#pragma shader_feature _EMISSION +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A +#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF +#pragma shader_feature ___ _DETAIL_MULX2 +#pragma shader_feature _PARALLAXMAP + +#pragma multi_compile_prepassfinal +#pragma multi_compile_instancing + +#pragma vertex vertDeferred +#pragma fragment fragDeferred + +#include "UnityStandardCore.cginc" + + ENDCG + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags{ "LightMode" = "Meta" } + + Cull Off + + CGPROGRAM +#pragma vertex vert_meta +#pragma fragment frag_meta + +#pragma shader_feature _EMISSION +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A +#pragma shader_feature ___ _DETAIL_MULX2 +#pragma shader_feature EDITOR_VISUALIZATION + +#include "UnityStandardMeta.cginc" + ENDCG + } + } + + SubShader + { + Tags{ "RenderType" = "Opaque" "PerformanceChecks" = "False" } + LOD 150 + + // ------------------------------------------------------------------ + // Base forward pass (directional light, emission, lightmaps, ...) + Pass + { + Name "FORWARD" + Tags{ "LightMode" = "ForwardBase" } + + Blend[_SrcBlend][_DstBlend] + ZWrite[_ZWrite] + Cull Off + + CGPROGRAM +#pragma target 2.0 + +#pragma shader_feature _NORMALMAP +#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON +#pragma shader_feature _EMISSION +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A +#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF +#pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + // SM2.0: NOT SUPPORTED shader_feature ___ _DETAIL_MULX2 + // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP + +#pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED + +#pragma multi_compile_fwdbase +#pragma multi_compile_fog + +#pragma vertex vertBase +#pragma fragment fragBase +#include "UnityStandardCoreForward.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Additive forward pass (one light per pass) + Pass + { + Name "FORWARD_DELTA" + Tags{ "LightMode" = "ForwardAdd" } + Blend[_SrcBlend] One + Fog{ Color(0,0,0,0) } // in additive pass fog should be black + ZWrite Off + ZTest LEqual + Cull Off + + CGPROGRAM +#pragma target 2.0 + +#pragma shader_feature _NORMALMAP +#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A +#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF +#pragma shader_feature ___ _DETAIL_MULX2 + // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP +#pragma skip_variants SHADOWS_SOFT + +#pragma multi_compile_fwdadd_fullshadows +#pragma multi_compile_fog + +#pragma vertex vertAdd +#pragma fragment fragAdd +#include "UnityStandardCoreForward.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass{ + Name "ShadowCaster" + Tags{ "LightMode" = "ShadowCaster" } + + ZWrite On ZTest LEqual Cull Off + + CGPROGRAM +#pragma target 2.0 + +#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON +#pragma shader_feature _METALLICGLOSSMAP +#pragma skip_variants SHADOWS_SOFT +#pragma multi_compile_shadowcaster + +#pragma vertex vertShadowCaster +#pragma fragment fragShadowCaster + +#include "UnityStandardShadow.cginc" + + ENDCG + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags{ "LightMode" = "Meta" } + + Cull Off + + CGPROGRAM +#pragma vertex vert_meta +#pragma fragment frag_meta + +#pragma shader_feature _EMISSION +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A +#pragma shader_feature ___ _DETAIL_MULX2 +#pragma shader_feature EDITOR_VISUALIZATION + +#include "UnityStandardMeta.cginc" + ENDCG + } + } + + + FallBack "VertexLit" + CustomEditor "StandardShaderGUI" +} diff --git a/Runtime/Shaders/Experimental/StandardTwoSideShader.shader.meta b/Runtime/Shaders/Experimental/StandardTwoSideShader.shader.meta new file mode 100644 index 000000000..ea6213a37 --- /dev/null +++ b/Runtime/Shaders/Experimental/StandardTwoSideShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bf2e80678089457eab53d40b3d9a01a7 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/StereoEyeIndexColor.shader b/Runtime/Shaders/Experimental/StereoEyeIndexColor.shader new file mode 100644 index 000000000..e7f9f224b --- /dev/null +++ b/Runtime/Shaders/Experimental/StereoEyeIndexColor.shader @@ -0,0 +1,64 @@ +Shader "Neodroid/Experimental/StereoEyeIndexColor" +{ + Properties + { + _LeftEyeColor("Left Eye Color", COLOR) = (0,1,0,1) + _RightEyeColor("Right Eye Color", COLOR) = (1,0,0,1) + _UseRight("Use Right Output",float)=0 + } + + SubShader + { + Tags { "RenderType" = "Opaque" } + + Pass + { + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + float4 _LeftEyeColor; + float4 _RightEyeColor; + float _UseRight; + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 vertex : SV_POSITION; + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert (appdata v) + { + v2f o; + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + o.vertex = UnityObjectToClipPos(v.vertex); + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + + return lerp(_LeftEyeColor, _RightEyeColor, _UseRight); + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/StereoEyeIndexColor.shader.meta b/Runtime/Shaders/Experimental/StereoEyeIndexColor.shader.meta new file mode 100644 index 000000000..6ae5255e9 --- /dev/null +++ b/Runtime/Shaders/Experimental/StereoEyeIndexColor.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 114c011c88ef43a8a4ef65dac5b1c999 +timeCreated: 1550580315 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/Uv2.shader b/Runtime/Shaders/Experimental/Uv2.shader new file mode 100644 index 000000000..14d1d66db --- /dev/null +++ b/Runtime/Shaders/Experimental/Uv2.shader @@ -0,0 +1,34 @@ +Shader "Unlit/Show UVs" +{ + SubShader + { + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + struct v2f { + float2 uv : TEXCOORD0; + float4 pos : SV_POSITION; + }; + + v2f vert ( + float4 vertex : POSITION, // vertex position input + float2 uv : TEXCOORD0 // first texture coordinate input + ) + { + v2f o; + o.pos = UnityObjectToClipPos(vertex); + o.uv = uv; + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + return fixed4(i.uv, 1, 0); + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/Uv2.shader.meta b/Runtime/Shaders/Experimental/Uv2.shader.meta new file mode 100644 index 000000000..f43b0707d --- /dev/null +++ b/Runtime/Shaders/Experimental/Uv2.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 612b6e5ec1a94745980e11d4185547bd +timeCreated: 1553250903 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/Uv21.shader b/Runtime/Shaders/Experimental/Uv21.shader new file mode 100644 index 000000000..0ddb21529 --- /dev/null +++ b/Runtime/Shaders/Experimental/Uv21.shader @@ -0,0 +1,36 @@ +Shader "Debug/UV 1" { +SubShader { + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + // vertex input: position, UV + struct appdata { + float4 vertex : POSITION; + float4 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 pos : SV_POSITION; + float4 uv : TEXCOORD0; // OR TEXCOORD1 for second uv map + }; + + v2f vert (appdata v) { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex ); + o.uv = float4( v.texcoord.xy, 0, 0 ); + return o; + } + + half4 frag( v2f i ) : SV_Target { + half4 c = frac( i.uv ); + if (any(saturate(i.uv) - i.uv)) + c.b = 0.5; + return c; + } + ENDCG + } +} +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/Uv21.shader.meta b/Runtime/Shaders/Experimental/Uv21.shader.meta new file mode 100644 index 000000000..972419be0 --- /dev/null +++ b/Runtime/Shaders/Experimental/Uv21.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9c51c1a4db54457cbb2cf363d8a06071 +timeCreated: 1553251068 \ No newline at end of file diff --git a/Runtime/Utilities/Plotting/ValueRangePlotter.shader b/Runtime/Shaders/Experimental/ValueRangePlotter.shader similarity index 100% rename from Runtime/Utilities/Plotting/ValueRangePlotter.shader rename to Runtime/Shaders/Experimental/ValueRangePlotter.shader diff --git a/Runtime/Utilities/Plotting/ValueRangePlotter.shader.meta b/Runtime/Shaders/Experimental/ValueRangePlotter.shader.meta similarity index 100% rename from Runtime/Utilities/Plotting/ValueRangePlotter.shader.meta rename to Runtime/Shaders/Experimental/ValueRangePlotter.shader.meta diff --git a/Runtime/Shaders/Experimental/VertexId.shader b/Runtime/Shaders/Experimental/VertexId.shader new file mode 100644 index 000000000..501752ec2 --- /dev/null +++ b/Runtime/Shaders/Experimental/VertexId.shader @@ -0,0 +1,37 @@ +Shader "Neodroid/Experimental/Random/VertexId" +{ + SubShader + { + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.5 + + struct v2f { + fixed4 color : TEXCOORD0; + float4 pos : SV_POSITION; + }; + + v2f vert ( + float4 vertex : POSITION, // vertex position input + uint vid : SV_VertexID // vertex ID, needs to be uint + ) + { + v2f o; + o.pos = UnityObjectToClipPos(vertex); + // output funky colors based on vertex ID + float f = (float)vid; + o.color = half4(sin(f/10),sin(f/100),sin(f/1000),0) * 0.5 + 0.5; + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + return i.color; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/VertexId.shader.meta b/Runtime/Shaders/Experimental/VertexId.shader.meta new file mode 100644 index 000000000..4d19c4842 --- /dev/null +++ b/Runtime/Shaders/Experimental/VertexId.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f31e0f02c4f8ebbfc8338cda0d550ee6 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/VerticalFlipper.shader b/Runtime/Shaders/Experimental/VerticalFlipper.shader new file mode 100644 index 000000000..e916d81f4 --- /dev/null +++ b/Runtime/Shaders/Experimental/VerticalFlipper.shader @@ -0,0 +1,42 @@ +Shader "Neodroid/Experimental/VerticalFlipper" { + Properties{_MainTex("Texture", any) = "" {}} + +CGINCLUDE +#include "UnityCG.cginc" + +uniform sampler2D _MainTex; + +struct v2f +{ + float4 pos : SV_Position; + float2 uv : TEXCOORD0; +}; + +v2f vert(appdata_img v) +{ + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord; + return o; +} + +half4 copy_and_flip_verticaly(v2f i) : SV_Target{ + float2 uv = i.uv; + uv.y = 1.0 - uv.y; + return tex2D(_MainTex, uv); +} + +ENDCG + +Subshader { + Pass{ + Blend Off Cull Off ZTest Off ZWrite Off + CGPROGRAM + #pragma vertex vert + #pragma fragment copy_and_flip_verticaly + ENDCG + } +} + +Fallback off +} diff --git a/Runtime/Shaders/Experimental/VerticalFlipper.shader.meta b/Runtime/Shaders/Experimental/VerticalFlipper.shader.meta new file mode 100644 index 000000000..ac399791d --- /dev/null +++ b/Runtime/Shaders/Experimental/VerticalFlipper.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 231e2b824b3349d9a3d3fd60bea2483b +timeCreated: 1552824370 \ No newline at end of file diff --git a/Runtime/Shaders/Experimental/WorldCoordDiffuse.shader b/Runtime/Shaders/Experimental/WorldCoordDiffuse.shader new file mode 100644 index 000000000..c96526fba --- /dev/null +++ b/Runtime/Shaders/Experimental/WorldCoordDiffuse.shader @@ -0,0 +1,47 @@ +Shader "Debug/WorldCoordinates" { +Properties { + _Color ("Main Color", Color) = (1,1,1,1) + _MainTex ("Base (RGB)", 2D) = "white" {} + _BaseScale ("Base Tiling", Vector) = (1,1,1,0) +} + +SubShader { + Tags { "RenderType"="Opaque" } + LOD 150 + +CGPROGRAM +#pragma surface surf Lambert + +sampler2D _MainTex; + +fixed4 _Color; +fixed3 _BaseScale; + +struct Input { + float2 uv_MainTex; + float3 worldPos; + float3 worldNormal; + +}; + +void surf (Input IN, inout SurfaceOutput o) { + fixed4 texXY = tex2D(_MainTex, IN.worldPos.xy * _BaseScale.z);// IN.uv_MainTex); + fixed4 texXZ = tex2D(_MainTex, IN.worldPos.xz * _BaseScale.y);// IN.uv_MainTex); + fixed4 texYZ = tex2D(_MainTex, IN.worldPos.yz * _BaseScale.x);// IN.uv_MainTex); + fixed3 mask = fixed3( + dot (IN.worldNormal, fixed3(0,0,1)), + dot (IN.worldNormal, fixed3(0,1,0)), + dot (IN.worldNormal, fixed3(1,0,0))); + + fixed4 tex = + texXY * abs(mask.x) + + texXZ * abs(mask.y) + + texYZ * abs(mask.z); + fixed4 c = tex * _Color; + o.Albedo = c.rgb; +} +ENDCG +} + +FallBack "Diffuse" +} diff --git a/Runtime/Shaders/Experimental/WorldCoordDiffuse.shader.meta b/Runtime/Shaders/Experimental/WorldCoordDiffuse.shader.meta new file mode 100644 index 000000000..20807d169 --- /dev/null +++ b/Runtime/Shaders/Experimental/WorldCoordDiffuse.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8ab05313904c31cbeb7fc31b60aa9fe8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Experimental/XR.shader b/Runtime/Shaders/Experimental/XR.shader new file mode 100644 index 000000000..ab48c8cb6 --- /dev/null +++ b/Runtime/Shaders/Experimental/XR.shader @@ -0,0 +1,75 @@ +Shader "Neodroid/Experimental/XR" +{ + Properties + { + _LeftEye("Left Eye", float) = 0 + } + + SubShader + { + Tags { "RenderType" = "Opaque" } + + Pass + { + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + float4 _LeftEyeColor; + float4 _RightEyeColor; + + #include "UnityCG.cginc" + + +struct appdata +{ + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + + UNITY_VERTEX_INPUT_INSTANCE_ID //Insert +}; + +//v2f output struct + +struct v2f +{ + + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + + UNITY_VERTEX_OUTPUT_STEREO //Insert +}; + +v2f vert (appdata v) +{ + v2f o; + + UNITY_SETUP_INSTANCE_ID(v); //Insert + UNITY_INITIALIZE_OUTPUT(v2f, o); //Insert + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); //Insert + + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + return o; +} + +UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex); //Insert + +fixed4 frag (v2f i) : SV_Target +{ + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); //Insert + + fixed4 col = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, i.uv); //Insert + + // invert the colors + + col = 1 - col; + + return col; + } + ENDCG + } + } +} + diff --git a/Runtime/Shaders/Experimental/XR.shader.meta b/Runtime/Shaders/Experimental/XR.shader.meta new file mode 100644 index 000000000..8eefd8ada --- /dev/null +++ b/Runtime/Shaders/Experimental/XR.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 504cfd6a5e3cbfe1ea571314c3f6a660 +timeCreated: 1550580315 \ No newline at end of file diff --git a/Runtime/Shaders/ImageManipulation.meta b/Runtime/Shaders/ImageManipulation.meta new file mode 100644 index 000000000..41a778acf --- /dev/null +++ b/Runtime/Shaders/ImageManipulation.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e9b232b4614a410dab7671afb5d88250 +timeCreated: 1568302548 \ No newline at end of file diff --git a/Runtime/Shaders/ImageManipulation/Flip.shader b/Runtime/Shaders/ImageManipulation/Flip.shader new file mode 100644 index 000000000..253fd2fce --- /dev/null +++ b/Runtime/Shaders/ImageManipulation/Flip.shader @@ -0,0 +1,48 @@ +Shader "Neodroid/PostProcessing/Flip" +{ + HLSLINCLUDE + + #include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl" + + TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex); + float _Flip_x; + float _Flip_y; + + VaryingsDefault Vert(AttributesDefault v){ + VaryingsDefault o; + o.vertex = float4(v.vertex.xy, 0.0, 1.0) * float4(_Flip_x, _Flip_y, 1.0, 1.0); + o.texcoord = TransformTriangleVertexToUV(v.vertex.xy); + + #if UNITY_UV_STARTS_AT_TOP + o.texcoord = o.texcoord * float2(1.0, -1.0) + float2(0.0, 1.0); + #endif + + o.texcoordStereo = TransformStereoScreenSpaceTex(o.texcoord, 1.0); + + return o; + } + + float4 Frag(VaryingsDefault i) : SV_Target { + float4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord); + return color; + } + + ENDHLSL + + SubShader + { + Cull Off + ZWrite Off + ZTest Always + + Pass + { + HLSLPROGRAM + + #pragma vertex Vert //VertDefault + #pragma fragment Frag + + ENDHLSL + } + } +} diff --git a/Runtime/Shaders/ImageManipulation/Flip.shader.meta b/Runtime/Shaders/ImageManipulation/Flip.shader.meta new file mode 100644 index 000000000..0f0205543 --- /dev/null +++ b/Runtime/Shaders/ImageManipulation/Flip.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fd12b1b088324dcfabdd86aaab4ee853 +timeCreated: 1568234847 \ No newline at end of file diff --git a/Runtime/Shaders/ImageManipulation/Grayscale.shader b/Runtime/Shaders/ImageManipulation/Grayscale.shader new file mode 100644 index 000000000..cc714f053 --- /dev/null +++ b/Runtime/Shaders/ImageManipulation/Grayscale.shader @@ -0,0 +1,35 @@ +Shader "Neodroid/PostProcessing/Grayscale" +{ + HLSLINCLUDE + + #include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl" + + TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex); + float _Blend; + + float4 Frag(VaryingsDefault i) : SV_Target { + float4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord); + float luminance = dot(color.rgb, float3(0.2126729, 0.7151522, 0.0721750)); + color.rgb = lerp(color.rgb, luminance.xxx, _Blend.xxx); + return color; + } + + ENDHLSL + + SubShader + { + Cull Off + ZWrite Off + ZTest Always + + Pass + { + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + ENDHLSL + } + } +} diff --git a/Runtime/Shaders/ImageManipulation/Grayscale.shader.meta b/Runtime/Shaders/ImageManipulation/Grayscale.shader.meta new file mode 100644 index 000000000..b4e338385 --- /dev/null +++ b/Runtime/Shaders/ImageManipulation/Grayscale.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 683e685eb167409eb4f124aec50ff199 +timeCreated: 1568186835 \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation.meta b/Runtime/Shaders/Segmentation.meta new file mode 100644 index 000000000..a98c07e1e --- /dev/null +++ b/Runtime/Shaders/Segmentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 048b2bb6e07295d49aaa41be5d143984 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Segmentation.shader b/Runtime/Shaders/Segmentation.shader deleted file mode 100644 index 6a66a5a66..000000000 --- a/Runtime/Shaders/Segmentation.shader +++ /dev/null @@ -1,97 +0,0 @@ -Shader "Neodroid/Segmentation"{ //Draws objects with shader on top always - SubShader{ - //Tags - //{ - // "RenderType"="Opaque" // What RenderType shaders to replace there is a copy of this exact shame shader below with the "Transparent" RenderType - //} - //Tags{ - // "Queue" = "Transparent" - //} - - //ZTest Always // Ignore what is the depth buffer draw pixels anyway - //ZWrite Off // has same effect as above ^, this never write to the depth buffer - Lighting Off // Turn off lighting - //Cull Off // No culling - - Pass{ - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata - { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - }; - - struct v2f - { - float2 uv : TEXCOORD0; - float4 vertex : SV_POSITION; - }; - - fixed4 _Color; - - v2f vert(appdata v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.uv = v.uv; - - return o; - } - - fixed4 frag(v2f i) : SV_Target - { - return _Color; - } - ENDCG - } - - //Blend One One // additive blend - -// Pass { -// CGPROGRAM -// #pragma vertex vert -// #pragma fragment frag -// -// #include "UnityCG.cginc" -// -// struct appdata -// { -// float4 vertex : POSITION; -// }; -// -// struct v2f -// { -// float4 vertex : SV_POSITION; -// }; -// -// v2f vert(appdata v) -// { -// v2f o; -// o.vertex = UnityObjectToClipPos(v.vertex); -// return o; -// } -// -// half4 _SegmentationColor; -// -// fixed4 frag(v2f i) : SV_Target -// { -// return _SegmentationColor; -// } -// ENDCG -// } - - //Pass{ - // ZTest Greater - // Color[_SegmentationColor] - //} - //Pass{ - // ZTest Less - // Color[_SegmentationColor] - //} - } -} \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation/CategorySegmentation.shader b/Runtime/Shaders/Segmentation/CategorySegmentation.shader new file mode 100644 index 000000000..c153f3941 --- /dev/null +++ b/Runtime/Shaders/Segmentation/CategorySegmentation.shader @@ -0,0 +1,430 @@ +Shader "Neodroid/Segmentation/CategorySegmentation" { +Properties { + _MainTex ("", 2D) = "white" {} + _Cutoff ("", Float) = 0.5 + _Color ("", Color) = (1,1,1,1) + + _ObjectIdColor ("Object Id Color", Color) = (1,1,1,1) + _MaterialIdColor ("Material Id Color", Color) = (0,1,0,1) + _LayerColor ("Layer Color", Color) = (1,1,0,1) + _TagColor ("Tag Color", Color) = (0,1,1,1) + _OutputMode ("Output Mode", int)=0 +} + +SubShader { +CGINCLUDE + +fixed4 _ObjectIdColor; +fixed4 _MaterialIdColor; +fixed4 _LayerColor; +fixed4 _TagColor; +int _OutputMode; + +// remap depth: [0 @ eye .. 1 @ far] => [0 @ near .. 1 @ far] +inline float Linear01FromEyeToLinear01FromNear(float depth01) +{ + float near = _ProjectionParams.y; + float far = _ProjectionParams.z; + return (depth01 - near/far) * (1 + near/far); +} + +float4 Output(float depth01, float3 normal) +{ + if (_OutputMode == 0){ // ObjectId + return _ObjectIdColor; + }else if (_OutputMode == 1) {// MaterialId + return _MaterialIdColor; + }else if (_OutputMode == 2) { // Layer + return _LayerColor; + }else if(_OutputMode == 3){ // Tag + return _TagColor; + } + + return float4(1, 0.5, 0.5, 1); // unsupported _OutputMode +} +ENDCG + +// Support for different RenderTypes +// The following code is based on builtin Internal-DepthNormalsTexture.shader + + Tags { "RenderType"="Opaque" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TransparentCutout" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +uniform float4 _MainTex_ST; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +uniform fixed4 _Color; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a*_Color.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeBark" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertBark(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag( v2f i ) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeLeaf" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertLeaf(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag( v2f i ) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeOpaque" "DisableBatching"="True" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeTransparentCutout" "DisableBatching"="True" } + Pass { + Cull Back +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + Pass { + Cull Front +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = -COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + +} + +SubShader { + Tags { "RenderType"="TreeBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert (appdata_tree_billboard v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainBillboardTree(v.vertex, v.texcoord1.xy, v.texcoord.y); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv.x = v.texcoord.x; + o.uv.y = v.texcoord.y > 0; + o.nz.xyz = float3(0,0,1); + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - 0.001 ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="GrassBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassBillboardVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="Grass" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} +Fallback Off +} diff --git a/Runtime/Shaders/Segmentation/CategorySegmentation.shader.meta b/Runtime/Shaders/Segmentation/CategorySegmentation.shader.meta new file mode 100644 index 000000000..abadb9dc1 --- /dev/null +++ b/Runtime/Shaders/Segmentation/CategorySegmentation.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9a914f9642584a6f837872b80550c1f3 +timeCreated: 1550694237 \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation/Individual.meta b/Runtime/Shaders/Segmentation/Individual.meta new file mode 100644 index 000000000..b651e15fb --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6b6da9a1e3484233aabb75cd0cf690f6 +timeCreated: 1550699822 \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation/Individual/LayerSegmentation.shader b/Runtime/Shaders/Segmentation/Individual/LayerSegmentation.shader new file mode 100644 index 000000000..26594328d --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/LayerSegmentation.shader @@ -0,0 +1,414 @@ +Shader "Neodroid/Segmentation/LayerSegmentation" { +Properties { + _MainTex ("", 2D) = "white" {} + _Cutoff ("", Float) = 0.5 + _Color ("", Color) = (1,1,1,1) + + _LayerColor ("Layer Color", Color) = (1,1,1,1) +} + +SubShader { + CGINCLUDE + + fixed4 _LayerColor; + + float4 Output(float depth01, float3 normal) { + return _LayerColor; + } + + + // remap depth: [0 @ eye .. 1 @ far] => [0 @ near .. 1 @ far] + inline float Linear01FromEyeToLinear01FromNear(float depth01) + { + float near = _ProjectionParams.y; + float far = _ProjectionParams.z; + return (depth01 - near/far) * (1 + near/far); + } + + + ENDCG + +// Support for different RenderTypes +// The following code is based on builtin Internal-DepthNormalsTexture.shader + + Tags { "RenderType"="Opaque" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; + } + fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); + } + ENDCG + } +} + +SubShader { + Tags { "RenderType"="TransparentCutout" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +uniform float4 _MainTex_ST; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +uniform fixed4 _Color; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a*_Color.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeBark" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertBark(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag( v2f i ) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeLeaf" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertLeaf(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag( v2f i ) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeOpaque" "DisableBatching"="True" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeTransparentCutout" "DisableBatching"="True" } + Pass { + Cull Back +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + Pass { + Cull Front +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = -COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + +} + +SubShader { + Tags { "RenderType"="TreeBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert (appdata_tree_billboard v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainBillboardTree(v.vertex, v.texcoord1.xy, v.texcoord.y); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv.x = v.texcoord.x; + o.uv.y = v.texcoord.y > 0; + o.nz.xyz = float3(0,0,1); + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - 0.001 ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="GrassBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassBillboardVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="Grass" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} +Fallback Off +} diff --git a/Runtime/Shaders/Segmentation/Individual/LayerSegmentation.shader.meta b/Runtime/Shaders/Segmentation/Individual/LayerSegmentation.shader.meta new file mode 100644 index 000000000..05cbbe58d --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/LayerSegmentation.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d700b8effb9a06de89e30a220972fe80 +timeCreated: 1550699550 \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation/Individual/Mask.shader b/Runtime/Shaders/Segmentation/Individual/Mask.shader new file mode 100644 index 000000000..4d5783f45 --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/Mask.shader @@ -0,0 +1,31 @@ +Shader "Neodroid/Mask" { + SubShader{ + Tags{ + "Queue" = "Transparent" + } + + Cull Off + ZWrite Off + ZTest Always + Blend One Zero + + Pass + { + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + float4 vert (float4 vertex : POSITION) : SV_POSITION + { + return UnityObjectToClipPos(vertex); + } + + fixed4 frag() : SV_Target{ + return 1; + } + + ENDCG + } + } +} diff --git a/Runtime/Shaders/Segmentation/Individual/Mask.shader.meta b/Runtime/Shaders/Segmentation/Individual/Mask.shader.meta new file mode 100644 index 000000000..83174c95a --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/Mask.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b770c7b1542a812fcb2332b249713b12 +timeCreated: 1550694237 \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation/Individual/MaterialIdSegmentation.shader b/Runtime/Shaders/Segmentation/Individual/MaterialIdSegmentation.shader new file mode 100644 index 000000000..0db1169a3 --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/MaterialIdSegmentation.shader @@ -0,0 +1,413 @@ +Shader "Neodroid/Segmentation/MaterialIdSegmentation" { +Properties { + _MainTex ("", 2D) = "white" {} + _Cutoff ("", Float) = 0.5 + _Color ("", Color) = (1,1,1,1) + + _MaterialIdColor ("Material Id Color", Color) = (0,1,0,1) +} + +SubShader { +CGINCLUDE + +fixed4 _MaterialIdColor; + + +// remap depth: [0 @ eye .. 1 @ far] => [0 @ near .. 1 @ far] +inline float Linear01FromEyeToLinear01FromNear(float depth01) +{ + float near = _ProjectionParams.y; + float far = _ProjectionParams.z; + return (depth01 - near/far) * (1 + near/far); +} + +float4 Output(float depth01, float3 normal) +{ + return _MaterialIdColor; +} +ENDCG + +// Support for different RenderTypes +// The following code is based on builtin Internal-DepthNormalsTexture.shader + + Tags { "RenderType"="Opaque" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TransparentCutout" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +uniform float4 _MainTex_ST; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +uniform fixed4 _Color; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a*_Color.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeBark" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertBark(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag( v2f i ) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeLeaf" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertLeaf(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag( v2f i ) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeOpaque" "DisableBatching"="True" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeTransparentCutout" "DisableBatching"="True" } + Pass { + Cull Back +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + Pass { + Cull Front +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = -COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + +} + +SubShader { + Tags { "RenderType"="TreeBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert (appdata_tree_billboard v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainBillboardTree(v.vertex, v.texcoord1.xy, v.texcoord.y); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv.x = v.texcoord.x; + o.uv.y = v.texcoord.y > 0; + o.nz.xyz = float3(0,0,1); + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - 0.001 ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="GrassBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassBillboardVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="Grass" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} +Fallback Off +} diff --git a/Runtime/Shaders/Segmentation/Individual/MaterialIdSegmentation.shader.meta b/Runtime/Shaders/Segmentation/Individual/MaterialIdSegmentation.shader.meta new file mode 100644 index 000000000..6e966a33a --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/MaterialIdSegmentation.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cf1860839d9116438895181a0b52e813 +timeCreated: 1550699868 \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation/Individual/ObjectIdSegmentation.shader b/Runtime/Shaders/Segmentation/Individual/ObjectIdSegmentation.shader new file mode 100644 index 000000000..bf43643c8 --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/ObjectIdSegmentation.shader @@ -0,0 +1,413 @@ +Shader "Neodroid/Segmentation/ObjectIdSegmentation" { +Properties { + _MainTex ("", 2D) = "white" {} + _Cutoff ("", Float) = 0.5 + _Color ("", Color) = (1,1,1,1) + + _ObjectIdColor ("Object Id Color", Color) = (1,1,1,1) +} + +SubShader { +CGINCLUDE + +fixed4 _ObjectIdColor; + + +// remap depth: [0 @ eye .. 1 @ far] => [0 @ near .. 1 @ far] +inline float Linear01FromEyeToLinear01FromNear(float depth01) +{ + float near = _ProjectionParams.y; + float far = _ProjectionParams.z; + return (depth01 - near/far) * (1 + near/far); +} + +float4 Output(float depth01, float3 normal) +{ + return _ObjectIdColor; +} +ENDCG + +// Support for different RenderTypes +// The following code is based on builtin Internal-DepthNormalsTexture.shader + + Tags { "RenderType"="Opaque" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TransparentCutout" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +uniform float4 _MainTex_ST; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +uniform fixed4 _Color; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a*_Color.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeBark" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertBark(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag( v2f i ) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeLeaf" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertLeaf(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag( v2f i ) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeOpaque" "DisableBatching"="True" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeTransparentCutout" "DisableBatching"="True" } + Pass { + Cull Back +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + Pass { + Cull Front +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = -COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + +} + +SubShader { + Tags { "RenderType"="TreeBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert (appdata_tree_billboard v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainBillboardTree(v.vertex, v.texcoord1.xy, v.texcoord.y); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv.x = v.texcoord.x; + o.uv.y = v.texcoord.y > 0; + o.nz.xyz = float3(0,0,1); + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - 0.001 ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="GrassBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassBillboardVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="Grass" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} +Fallback Off +} diff --git a/Runtime/Shaders/Segmentation/Individual/ObjectIdSegmentation.shader.meta b/Runtime/Shaders/Segmentation/Individual/ObjectIdSegmentation.shader.meta new file mode 100644 index 000000000..257320820 --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/ObjectIdSegmentation.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8fd7ede99a3748d686ce9bf8cd8dd2d7 +timeCreated: 1550699868 \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation/Individual/TagSegmentation.shader b/Runtime/Shaders/Segmentation/Individual/TagSegmentation.shader new file mode 100644 index 000000000..f2ef59ea2 --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/TagSegmentation.shader @@ -0,0 +1,412 @@ +Shader "Neodroid/Segmentation/TagSegmentation" { +Properties { + _MainTex ("", 2D) = "white" {} + _Cutoff ("", Float) = 0.5 + _Color ("", Color) = (1,1,1,1) + + _TagColor ("Tag Color", Color) = (1,1,1,1) +} + +SubShader { + CGINCLUDE + + fixed4 _TagColor; + + float4 Output(float depth01, float3 normal) { + return _TagColor; + } + + // remap depth: [0 @ eye .. 1 @ far] => [0 @ near .. 1 @ far] + inline float Linear01FromEyeToLinear01FromNear(float depth01) { + float near = _ProjectionParams.y; + float far = _ProjectionParams.z; + return (depth01 - near/far) * (1 + near/far); + } + + + ENDCG + +// Support for different RenderTypes +// The following code is based on builtin Internal-DepthNormalsTexture.shader + + Tags { "RenderType"="Opaque" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TransparentCutout" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +uniform float4 _MainTex_ST; +v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +uniform fixed4 _Color; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a*_Color.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeBark" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertBark(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag( v2f i ) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeLeaf" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "UnityBuiltin3xTreeLibrary.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert( appdata_full v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TreeVertLeaf(v); + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag( v2f i ) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeOpaque" "DisableBatching"="True" } + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="TreeTransparentCutout" "DisableBatching"="True" } + Pass { + Cull Back +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + half alpha = tex2D(_MainTex, i.uv).a; + + clip (alpha - _Cutoff); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + Pass { + Cull Front +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; +v2f vert( appdata v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainAnimateTree(v.vertex, v.color.w); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = -COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } + +} + +SubShader { + Tags { "RenderType"="TreeBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; +v2f vert (appdata_tree_billboard v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + TerrainBillboardTree(v.vertex, v.texcoord1.xy, v.texcoord.y); + o.pos = UnityObjectToClipPos(v.vertex); + o.uv.x = v.texcoord.x; + o.uv.y = v.texcoord.y > 0; + o.nz.xyz = float3(0,0,1); + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + clip( texcol.a - 0.001 ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="GrassBillboard" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" + +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassBillboardVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord.xy; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} + +SubShader { + Tags { "RenderType"="Grass" } + Pass { + Cull Off +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "TerrainEngine.cginc" +struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + float4 nz : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata_full v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + WavingGrassVert (v); + o.color = v.color; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord; + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; +} +uniform sampler2D _MainTex; +uniform fixed _Cutoff; +fixed4 frag(v2f i) : SV_Target { + fixed4 texcol = tex2D( _MainTex, i.uv ); + fixed alpha = texcol.a * i.color.a; + clip( alpha - _Cutoff ); + return Output (i.nz.w, i.nz.xyz); +} +ENDCG + } +} +Fallback Off +} diff --git a/Runtime/Shaders/Segmentation/Individual/TagSegmentation.shader.meta b/Runtime/Shaders/Segmentation/Individual/TagSegmentation.shader.meta new file mode 100644 index 000000000..53efc08ba --- /dev/null +++ b/Runtime/Shaders/Segmentation/Individual/TagSegmentation.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d34875293dcb4a329bbbacec570f78f6 +timeCreated: 1550699550 \ No newline at end of file diff --git a/Runtime/Shaders/Segmentation/OutlinedSegmentation.shader b/Runtime/Shaders/Segmentation/OutlinedSegmentation.shader new file mode 100644 index 000000000..c8eadd63b --- /dev/null +++ b/Runtime/Shaders/Segmentation/OutlinedSegmentation.shader @@ -0,0 +1,95 @@ +Shader "Neodroid/Segmentation/OutlinedSegmentation" { + + Properties { + _SegmentationColor ("_SegmentationColor", Color) = (.5,.5,.5,1.) + _OutlineColor ("_OutlineColor", Color) = (1.,.0,1.,1.) + _OutlineWidthFactor ("_OutlineWidthFactor", Range (0, 2)) = 1.1 + } + + + CGINCLUDE + #include "UnityCG.cginc" + + struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + }; + + struct v2f { + float4 pos : POSITION; + float4 color : COLOR; + }; + + uniform float _OutlineWidthFactor; + uniform float4 _OutlineColor; + + v2f vert(appdata v) { + v2f o; + + + //float3 scaleDir = normalize(v.vertex.xyz - float4(0,0,0,1)); + + v.vertex.xyz += normalize(v.normal.xyz) * _OutlineWidthFactor; + + // v.vertex.xyz += scaleDir *_OutlineWidthFactor; + +// float outline_width = _OutlineWidthFactor/(1/UnityObjectToClipPos(v.vertex).z); + // v.vertex *= 1+outline_width; + + o.pos = UnityObjectToClipPos(v.vertex); + + o.color = _OutlineColor; + return o; + + + + } + ENDCG + + SubShader { + Lighting Off + + CGPROGRAM + #pragma surface surf NoLighting noforwardadd + + uniform float4 _SegmentationColor; + + struct Input { + float2 uv_MainTex; + }; + + void surf (Input IN, inout SurfaceOutput o) { + fixed4 c = _SegmentationColor; + o.Albedo = c.rgb; + o.Alpha = c.a; + } + + fixed4 LightingNoLighting(SurfaceOutput s, fixed3 lightDir, fixed atten){ + fixed4 c; + c.rgb = s.Albedo; + c.a = s.Alpha; + return c; + } + ENDCG + + Pass { // note that a vertex shader is specified here but its using the one above + Lighting Off + Name "OUTLINE" + Cull Front + ZWrite On + ColorMask RGB + Blend SrcAlpha OneMinusSrcAlpha + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + half4 frag(v2f i) :COLOR { + return i.color; + } + ENDCG + } + } + + fallback "Unlit/Color" +} diff --git a/Runtime/Shaders/Segmentation/OutlinedSegmentation.shader.meta b/Runtime/Shaders/Segmentation/OutlinedSegmentation.shader.meta new file mode 100644 index 000000000..559598df9 --- /dev/null +++ b/Runtime/Shaders/Segmentation/OutlinedSegmentation.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 65c1b5085509542dea35733cfc881720 +timeCreated: 1508609556 +licenseType: Pro +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Skybox.meta b/Runtime/Shaders/Skybox.meta new file mode 100644 index 000000000..6084b4fdd --- /dev/null +++ b/Runtime/Shaders/Skybox.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 615c1b8a588f15e70b7524e53f2d75c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Skybox/CleanRoomSkybox.shader b/Runtime/Shaders/Skybox/CleanRoomSkybox.shader new file mode 100644 index 000000000..9ee8d3337 --- /dev/null +++ b/Runtime/Shaders/Skybox/CleanRoomSkybox.shader @@ -0,0 +1,65 @@ +Shader "Neodroid/CleanRoomSkybox"{ + Properties { + _SkyColor("Sky Color", Color) = (1.0, 1.0, 1.0, 0.0) + _HorizonColor("Horizon Color", Color) = (0.8, 0.8, 0.8, 0.0) + _GroundColor("Ground Color", Color) = (0.98, 0.98, 0.98, 0.0) + _Exponent1("Sky Exponent", Float) = 4.35 + _Exponent2("Ground Exponent", Float) = 3.58 + _Intensity("Intensity", Float) = 1.21 + } + SubShader { + Tags { + "Queue" = "Background" + "RenderType" = "Background" + "PreviewType" = "Skybox" + } + Cull Off + ZWrite Off + + Pass { + CGPROGRAM + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + half3 _SkyColor; + half3 _HorizonColor; + half3 _GroundColor; + half _Exponent1; + half _Exponent2; + half _Intensity; + + struct appdata { + float4 position : POSITION; + float3 uv : TEXCOORD0; + }; + + struct v2f { + float4 position : SV_POSITION; + float3 uv : TEXCOORD0; + }; + + v2f vert(appdata v) { + v2f o; + o.position = UnityObjectToClipPos(v.position); + o.uv = v.uv; + return o; + } + + half4 frag (v2f i) : SV_Target { + float y = normalize(i.uv).y; + float c1 = 1.0 - pow(min(1.0, 1.0 - y), _Exponent1); + float c3 = 1.0 - pow(min(1.0, 1.0 + y), _Exponent2); + float c2 = 1.0 - c1 - c3; + + half3 color = (_SkyColor*c1 + _HorizonColor*c2 + _GroundColor*c3)*_Intensity; + return half4(color, 1.0); + } + ENDCG + } + } + + Fallback Off +} diff --git a/Runtime/Shaders/Skybox/CleanRoomSkybox.shader.meta b/Runtime/Shaders/Skybox/CleanRoomSkybox.shader.meta new file mode 100644 index 000000000..7f667e40f --- /dev/null +++ b/Runtime/Shaders/Skybox/CleanRoomSkybox.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1c7c196301cbce067a9791aee8777b22 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Spaces.meta b/Runtime/Shaders/Spaces.meta new file mode 100644 index 000000000..c5329eec9 --- /dev/null +++ b/Runtime/Shaders/Spaces.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 42d751f453339ec34a837c486784c30d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Spaces/CompressedDepth.shader b/Runtime/Shaders/Spaces/CompressedDepth.shader new file mode 100644 index 000000000..2142294c9 --- /dev/null +++ b/Runtime/Shaders/Spaces/CompressedDepth.shader @@ -0,0 +1,197 @@ +Shader "Neodroid/Spaces/CompressedDepth"{ + Properties{ + _Color("Color", Color) = (1,1,1,1) + _Compression_Factor("Compression Factor", float) = 0.25 + } + SubShader{ + Tags { "RenderType"="Opaque" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + + float _Compression_Factor; + + inline float Linear01FromEyeToLinear01FromNear(float depth01) { + float near = _ProjectionParams.y; + float far = _ProjectionParams.z; + return (depth01 - near/far) * (1 + near/far); + } + + float4 Output(float depth01, float3 normal) { // DepthCompressed + //float linearZFromNear = Linear01FromEyeToLinear01FromNear(depth01); + //return pow(linearZFromNear, _Compression_Factor); + + float linearZFromNear = Linear01FromEyeToLinear01FromNear(depth01); + float k = 0.25; // compression factor + return pow(linearZFromNear, k); + } + + v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; + } + + fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); + } + + ENDCG + } + } +/* + SubShader{ + Tags{ + "RenderType"="Opaque" // What RenderType shaders to replace there is a copy of this exact shame shader below with the "Transparent" RenderType + } + + ZWrite On + + Pass{ + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + float depth : DEPTH; + }; + + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + //o.depth = -mul(UNITY_MATRIX_MV, v.vertex).z *_ProjectionParams.w; + o.depth = -UnityObjectToViewPos(v.vertex).z *_ProjectionParams.w; //Faster according to unity + + + return o; +} + + + half4 _Color; + + fixed4 frag (v2f i) : SV_Target + { + float invert = 1 - i.depth; + + //return fixed4(invert, invert, invert, 1) * _Color; // With color + return fixed4(invert, invert, invert, 1); + } + ENDCG + } + } + */ + +// SubShader +// { +// Tags +// { +// "RenderType"="Transparent" // Replaces shaders with "Transparent" as RenderType +// } +// +// ZWrite On +// +// Pass +// { +// CGPROGRAM +// #pragma vertex vert +// #pragma fragment frag +// +// #include "UnityCG.cginc" +// +// struct appdata +// { +// float4 vertex : POSITION; +// }; +// +// struct v2f +// { +// float4 vertex : SV_POSITION; +// float depth : DEPTH; +// }; +// +// v2f vert (appdata v) +// { +// v2f o; +// o.vertex = UnityObjectToClipPos(v.vertex); +// o.depth = -mul(UNITY_MATRIX_MV, v.vertex).z *_ProjectionParams.w; +// return o; +// } +// +// half4 _Color; +// +// fixed4 frag (v2f i) : SV_Target +// { +// float invert = 1 - i.depth; +// +// //return fixed4(invert, invert, invert, 1) * _Color; // With color +// return fixed4(invert, invert, invert, 1); +// } +// ENDCG +// } +// } + + SubShader{ + Tags{ + "RenderType"="Transparent" // Replaces shaders with "Transparent" as RenderType + } + + ZWrite Off // Do not show depth on transparent objects + Blend SrcAlpha OneMinusSrcAlpha + + Pass{ + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + return o; + } + + half4 _Color; + + fixed4 frag (v2f i) : SV_Target + { + return _Color; + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Spaces/CompressedDepth.shader.meta b/Runtime/Shaders/Spaces/CompressedDepth.shader.meta new file mode 100644 index 000000000..2c8d25ea8 --- /dev/null +++ b/Runtime/Shaders/Spaces/CompressedDepth.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ecaae557ba4c4fc1a80e878b62be711d +timeCreated: 1551388005 \ No newline at end of file diff --git a/Runtime/Shaders/Spaces/Model.meta b/Runtime/Shaders/Spaces/Model.meta new file mode 100644 index 000000000..f4cd9127f --- /dev/null +++ b/Runtime/Shaders/Spaces/Model.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9889bce2e0756b442bd074269c4c4a30 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Normal.shader b/Runtime/Shaders/Spaces/Model/Normal.shader similarity index 100% rename from Runtime/Shaders/Normal.shader rename to Runtime/Shaders/Spaces/Model/Normal.shader diff --git a/Runtime/Shaders/Normal.shader.meta b/Runtime/Shaders/Spaces/Model/Normal.shader.meta similarity index 100% rename from Runtime/Shaders/Normal.shader.meta rename to Runtime/Shaders/Spaces/Model/Normal.shader.meta diff --git a/Runtime/Shaders/Spaces/Model/Tangents.shader b/Runtime/Shaders/Spaces/Model/Tangents.shader new file mode 100644 index 000000000..77b4699e2 --- /dev/null +++ b/Runtime/Shaders/Spaces/Model/Tangents.shader @@ -0,0 +1,41 @@ +Shader "Neodroid/Spaces/Model/Tangents" { + SubShader { + Lighting Off + Cull Off + //ZWrite Off + //ZTest Always + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + // vertex input: position, tangent + struct appdata { + float4 vertex : POSITION; + float4 tangent : TANGENT; + }; + + struct v2f { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + }; + + v2f vert (appdata v) { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex ); + o.color = v.tangent * 0.5 + 0.5; + //o.color = .5 * (v.tangent + 1); + o.color.w = 1.0; + return o; + } + + fixed4 frag (v2f i) : SV_Target { + return i.color; + } + ENDCG + } + } + fallback "Unlit/Color" +} diff --git a/Runtime/Shaders/Spaces/Model/Tangents.shader.meta b/Runtime/Shaders/Spaces/Model/Tangents.shader.meta new file mode 100644 index 000000000..3db9df549 --- /dev/null +++ b/Runtime/Shaders/Spaces/Model/Tangents.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f7ec6ef2b94336a8f8c74e04ffd808a5 +timeCreated: 1508609556 +licenseType: Pro +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Spaces/Model/UVs.shader b/Runtime/Shaders/Spaces/Model/UVs.shader new file mode 100644 index 000000000..43eaabb47 --- /dev/null +++ b/Runtime/Shaders/Spaces/Model/UVs.shader @@ -0,0 +1,66 @@ +Shader "Neodroid/Spaces/Model/UVs" { +Properties { + _MainTex ("Base (RGB)", 2D) = "white" {} + } + SubShader { + Tags { "RenderType"="Opaque" } + LOD 200 + + CGPROGRAM + #pragma surface surf Lambert + + sampler2D _MainTex; + + struct Input { + float2 uv_MainTex; + }; + + void surf (Input IN, inout SurfaceOutput o) { + o.Emission = float3(IN.uv_MainTex.rg,1); + //o.Alpha = 0; + } + ENDCG + } +/* + SubShader { + //Lighting Off + //Cull Off + //ZWrite Off + //ZTest Always + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + // vertex input: position, UV + struct appdata { + float4 vertex : POSITION; + float4 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 pos : SV_POSITION; + float4 uv : TEXCOORD0; + }; + + v2f vert (appdata v) { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex ); + o.uv = float4( v.texcoord.xy, 0, 0 ); + return o; + } + + half4 frag( v2f i ) : SV_Target { + half4 c = frac( i.uv ); + if (any(saturate(i.uv) - i.uv)) + c.b = 0.5; + return c; + } + ENDCG + } + } +*/ + fallback "Unlit/Color" +} diff --git a/Runtime/Shaders/Spaces/Model/UVs.shader.meta b/Runtime/Shaders/Spaces/Model/UVs.shader.meta new file mode 100644 index 000000000..76935135c --- /dev/null +++ b/Runtime/Shaders/Spaces/Model/UVs.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 333867bbd39e226998d1bfd376f7ea56 +timeCreated: 1508609556 +licenseType: Pro +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Spaces/Model/Us.shader b/Runtime/Shaders/Spaces/Model/Us.shader new file mode 100644 index 000000000..161cb7b78 --- /dev/null +++ b/Runtime/Shaders/Spaces/Model/Us.shader @@ -0,0 +1,66 @@ +Shader "Neodroid/Spaces/Model/Us" { +Properties { + _MainTex ("Base (RGB)", 2D) = "white" {} + } + SubShader { + Tags { "RenderType"="Opaque" } + LOD 200 + + CGPROGRAM + #pragma surface surf Lambert + + sampler2D _MainTex; + + struct Input { + float2 uv_MainTex; + }; + + void surf (Input IN, inout SurfaceOutput o) { + o.Emission = float3(IN.uv_MainTex.r,0,1); + o.Alpha = 0; + } + ENDCG + } +/* + SubShader { + //Lighting Off + //Cull Off + //ZWrite Off + //ZTest Always + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + // vertex input: position, UV + struct appdata { + float4 vertex : POSITION; + float4 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 pos : SV_POSITION; + float4 uv : TEXCOORD0; + }; + + v2f vert (appdata v) { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex ); + o.uv = float4( v.texcoord.xy, 0, 0 ); + return o; + } + + half4 frag( v2f i ) : SV_Target { + half4 c = frac( i.uv ); + if (any(saturate(i.uv) - i.uv)) + c.b = 0.5; + return c; + } + ENDCG + } + } +*/ + fallback "Unlit/Color" +} diff --git a/Runtime/Shaders/Spaces/Model/Us.shader.meta b/Runtime/Shaders/Spaces/Model/Us.shader.meta new file mode 100644 index 000000000..7d6d261ad --- /dev/null +++ b/Runtime/Shaders/Spaces/Model/Us.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f0f776e767c948816bfdca7bda1ebc72 +timeCreated: 1508609556 +licenseType: Pro +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Spaces/Model/Vs.shader b/Runtime/Shaders/Spaces/Model/Vs.shader new file mode 100644 index 000000000..550b7bdba --- /dev/null +++ b/Runtime/Shaders/Spaces/Model/Vs.shader @@ -0,0 +1,66 @@ +Shader "Neodroid/Spaces/Model/Vs" { +Properties { + _MainTex ("Base (RGB)", 2D) = "white" {} + } + SubShader { + Tags { "RenderType"="Opaque" } + LOD 200 + + CGPROGRAM + #pragma surface surf Lambert + + sampler2D _MainTex; + + struct Input { + float2 uv_MainTex; + }; + + void surf (Input IN, inout SurfaceOutput o) { + o.Emission = float3(0, IN.uv_MainTex.g, 1); + o.Alpha = 0; + } + ENDCG + } +/* + SubShader { + //Lighting Off + //Cull Off + //ZWrite Off + //ZTest Always + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + // vertex input: position, UV + struct appdata { + float4 vertex : POSITION; + float4 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 pos : SV_POSITION; + float4 uv : TEXCOORD0; + }; + + v2f vert (appdata v) { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex ); + o.uv = float4( v.texcoord.xy, 0, 0 ); + return o; + } + + half4 frag( v2f i ) : SV_Target { + half4 c = frac( i.uv ); + if (any(saturate(i.uv) - i.uv)) + c.b = 0.5; + return c; + } + ENDCG + } + } +*/ + fallback "Unlit/Color" +} diff --git a/Runtime/Shaders/Spaces/Model/Vs.shader.meta b/Runtime/Shaders/Spaces/Model/Vs.shader.meta new file mode 100644 index 000000000..2890b2d08 --- /dev/null +++ b/Runtime/Shaders/Spaces/Model/Vs.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 043c4327de3a39ce7b6086de2593d097 +timeCreated: 1508609556 +licenseType: Pro +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Spaces/MultiChannelDepth.shader b/Runtime/Shaders/Spaces/MultiChannelDepth.shader new file mode 100644 index 000000000..4ac24ee88 --- /dev/null +++ b/Runtime/Shaders/Spaces/MultiChannelDepth.shader @@ -0,0 +1,193 @@ +Shader "Neodroid/Spaces/MutliChannelDepth"{ + Properties{ + _Color("Color", Color) = (1,1,1,1) + } + SubShader{ + Tags { "RenderType"="Opaque" } + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct v2f { + float4 pos : SV_POSITION; + float4 nz : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + + inline float Linear01FromEyeToLinear01FromNear(float depth01) { + float near = _ProjectionParams.y; + float far = _ProjectionParams.z; + return (depth01 - near/far) * (1 + near/far); + } + + float4 Output(float depth01, float3 normal) { + // MultiChannelDepth // (depth01*256)-floor(depth01*256) // #RGB24 is 8 bit per channel, 2**8 = 256 + float lowBits = frac(depth01 * 256); + float highBits = depth01 - lowBits / 256; + return float4(lowBits, highBits, depth01, 1); + + } + + v2f vert( appdata_base v ) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.pos = UnityObjectToClipPos(v.vertex); + o.nz.xyz = COMPUTE_VIEW_NORMAL; + o.nz.w = COMPUTE_DEPTH_01; + return o; + } + + fixed4 frag(v2f i) : SV_Target { + return Output (i.nz.w, i.nz.xyz); + } + + ENDCG + } + } +/* + SubShader{ + Tags{ + "RenderType"="Opaque" // What RenderType shaders to replace there is a copy of this exact shame shader below with the "Transparent" RenderType + } + + ZWrite On + + Pass{ + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + float depth : DEPTH; + }; + + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + //o.depth = -mul(UNITY_MATRIX_MV, v.vertex).z *_ProjectionParams.w; + o.depth = -UnityObjectToViewPos(v.vertex).z *_ProjectionParams.w; //Faster according to unity + + + return o; +} + + + half4 _Color; + + fixed4 frag (v2f i) : SV_Target + { + float invert = 1 - i.depth; + + //return fixed4(invert, invert, invert, 1) * _Color; // With color + return fixed4(invert, invert, invert, 1); + } + ENDCG + } + } + */ + +// SubShader +// { +// Tags +// { +// "RenderType"="Transparent" // Replaces shaders with "Transparent" as RenderType +// } +// +// ZWrite On +// +// Pass +// { +// CGPROGRAM +// #pragma vertex vert +// #pragma fragment frag +// +// #include "UnityCG.cginc" +// +// struct appdata +// { +// float4 vertex : POSITION; +// }; +// +// struct v2f +// { +// float4 vertex : SV_POSITION; +// float depth : DEPTH; +// }; +// +// v2f vert (appdata v) +// { +// v2f o; +// o.vertex = UnityObjectToClipPos(v.vertex); +// o.depth = -mul(UNITY_MATRIX_MV, v.vertex).z *_ProjectionParams.w; +// return o; +// } +// +// half4 _Color; +// +// fixed4 frag (v2f i) : SV_Target +// { +// float invert = 1 - i.depth; +// +// //return fixed4(invert, invert, invert, 1) * _Color; // With color +// return fixed4(invert, invert, invert, 1); +// } +// ENDCG +// } +// } + + SubShader{ + Tags{ + "RenderType"="Transparent" // Replaces shaders with "Transparent" as RenderType + } + + ZWrite Off // Do not show depth on transparent objects + Blend SrcAlpha OneMinusSrcAlpha + + Pass{ + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + return o; + } + + half4 _Color; + + fixed4 frag (v2f i) : SV_Target + { + return _Color; + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Depth.shader.meta b/Runtime/Shaders/Spaces/MultiChannelDepth.shader.meta similarity index 100% rename from Runtime/Shaders/Depth.shader.meta rename to Runtime/Shaders/Spaces/MultiChannelDepth.shader.meta diff --git a/Runtime/Shaders/Spaces/Position.meta b/Runtime/Shaders/Spaces/Position.meta new file mode 100644 index 000000000..0242516d6 --- /dev/null +++ b/Runtime/Shaders/Spaces/Position.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0bf31c4e0bcc4f72a2ef40a8cef39ba3 +timeCreated: 1553237900 \ No newline at end of file diff --git a/Runtime/Shaders/Spaces/Position/ObjectSpace.shader b/Runtime/Shaders/Spaces/Position/ObjectSpace.shader new file mode 100644 index 000000000..012b8a05e --- /dev/null +++ b/Runtime/Shaders/Spaces/Position/ObjectSpace.shader @@ -0,0 +1,110 @@ + +Shader "Neodroid/Spaces/ObjectSpace" { + + Properties { + + _Scalar("Scaling Factor", float) = 1 + //_XColor ("_XColor", Color) = (1,0,0,1.) + //_YColor ("_YColor", Color) = (0,1,0,1.) + //_ZColor ("_ZColor", Color) = (0,0,1,1.) + } +/* + SubShader { + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata { + float4 vertex : POSITION; + }; + + struct v2f { + float4 pos : SV_POSITION; + float4 objPos: COLOR; + }; + + v2f vert (appdata v) { + v2f o; + o.pos = UnityObjectToClipPos (v.vertex); + o.objPos = v.vertex; + //o.objPos = mul(unity_ObjectToWorld, v.vertex); + //o.objPos = mul(unity_WorldToObject, o.objPos); + return o; + } + + //float4 _XColor; + //float4 _YColor; + //float4 _ZColor; + + fixed4 frag( v2f i) : SV_Target { + // float4 p = .5 * (i.objPos + 1.0); + //p.w = 1.0; + float4 p = float4(i.objPos.xyz, 1.0); + + return p; + } + ENDCG + } + } +*/ + + + SubShader { + //Blend One Zero + Pass { + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + void vert(float4 vertexPos : POSITION, + out float4 pos : SV_POSITION, + out float4 col : TEXCOORD0){ + pos = UnityObjectToClipPos(vertexPos); + col = vertexPos + float4(0.5, 0.5, 0.5, 0.0); + return; + } + + //float _Scalar; + + float4 frag(float4 pos : SV_POSITION, + float4 col : TEXCOORD0) : COLOR { + return col; + } + + ENDCG + } + } + + + + +/* + SubShader { + Tags { "RenderType"="Opaque" } + LOD 200 + + CGPROGRAM + #pragma surface surf Lambert vertex:vert + + struct Input { + float3 objPos; + }; + + void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + o.objPos = v.vertex; + } + + void surf (Input IN, inout SurfaceOutput o) { + o.Albedo = IN.objPos; + o.Alpha = 1; + } + ENDCG + } +*/ + + Fallback "Unlit/Color" +} diff --git a/Runtime/Shaders/Spaces/Position/ObjectSpace.shader.meta b/Runtime/Shaders/Spaces/Position/ObjectSpace.shader.meta new file mode 100644 index 000000000..d25c2f31a --- /dev/null +++ b/Runtime/Shaders/Spaces/Position/ObjectSpace.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e0709f4aa78e4226abc13a3c2116a306 +timeCreated: 1548272887 \ No newline at end of file diff --git a/Runtime/Shaders/Spaces/Position/ViewSpace.shader b/Runtime/Shaders/Spaces/Position/ViewSpace.shader new file mode 100644 index 000000000..2b9377aad --- /dev/null +++ b/Runtime/Shaders/Spaces/Position/ViewSpace.shader @@ -0,0 +1,42 @@ +Shader "Neodroid/Spaces/ViewSpace" { + + Properties { + + } + + SubShader { + Blend One Zero + + Pass { + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + struct vertexInput { + float4 vertex : POSITION; + }; + struct vertexOutput { + float4 pos : SV_POSITION; + float4 position_in_view_space : TEXCOORD0; + }; + + vertexOutput vert(vertexInput input) { + vertexOutput output; + + output.pos = UnityObjectToClipPos(input.vertex); // Transformation all the way to clip space + output.position_in_view_space = mul(UNITY_MATRIX_V,mul(unity_ObjectToWorld, input.vertex)); // transformation of input.vertex from object to world to view coordinates; + return output; + } + + float4 frag(vertexOutput input) : COLOR { + return float4((input.position_in_view_space.xyz* .5 + 1.0) , 1.0); + } + + ENDCG + } + } + + + Fallback "Unlit/Color" +} diff --git a/Runtime/Shaders/Spaces/Position/ViewSpace.shader.meta b/Runtime/Shaders/Spaces/Position/ViewSpace.shader.meta new file mode 100644 index 000000000..75e417d45 --- /dev/null +++ b/Runtime/Shaders/Spaces/Position/ViewSpace.shader.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 501f6fba7e4e464caa1fc0a8491a2ddd +timeCreated: 1569827462 \ No newline at end of file diff --git a/Runtime/Shaders/Spaces/Position/WorldSpace.shader b/Runtime/Shaders/Spaces/Position/WorldSpace.shader new file mode 100644 index 000000000..37355596a --- /dev/null +++ b/Runtime/Shaders/Spaces/Position/WorldSpace.shader @@ -0,0 +1,44 @@ +Shader "Neodroid/Spaces/WorldSpace" { + + Properties { + _from_center_span ("_from_center_span", Vector) = (10,10,10) + } + + SubShader { + Blend One Zero + + Pass { + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + float3 _from_center_span; + + struct vertexInput { + float4 vertex : POSITION; + }; + struct vertexOutput { + float4 pos : SV_POSITION; + float4 position_in_world_space : TEXCOORD0; + }; + + vertexOutput vert(vertexInput input) { + vertexOutput output; + + output.pos = UnityObjectToClipPos(input.vertex); + output.position_in_world_space = mul(unity_ObjectToWorld, input.vertex); // transformation of input.vertex from object coordinates to world coordinates; + return output; + } + + float4 frag(vertexOutput input) : COLOR { + return float4(input.position_in_world_space.xyz, 1.0); + } + + ENDCG + } + } + + + Fallback "Unlit/Color" +} diff --git a/Runtime/Shaders/Spaces/Position/WorldSpace.shader.meta b/Runtime/Shaders/Spaces/Position/WorldSpace.shader.meta new file mode 100644 index 000000000..d8c7d358c --- /dev/null +++ b/Runtime/Shaders/Spaces/Position/WorldSpace.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a1fe4d82f3c0be1aa917ece055794af2 +timeCreated: 1508609556 +licenseType: Pro +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe.meta b/Runtime/Shaders/Wireframe.meta new file mode 100644 index 000000000..d76df5089 --- /dev/null +++ b/Runtime/Shaders/Wireframe.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbfcc737cd9a610b7b5f5bfe04bc8301 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/Resources.meta b/Runtime/Shaders/Wireframe/Resources.meta new file mode 100644 index 000000000..eff6a2a1f --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3b979e1ca97ce894c892a696977098ad +folderAsset: yes +timeCreated: 1514327153 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/Resources/Wireframe-Global.shader b/Runtime/Shaders/Wireframe/Resources/Wireframe-Global.shader new file mode 100644 index 000000000..124101535 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources/Wireframe-Global.shader @@ -0,0 +1,25 @@ +Shader "Wireframe/Hid/Global" +{ + SubShader + { + // Each color represents a meter. + + Tags { "RenderType"="Opaque" } + + Pass + { + // Wireframe shader based on the the following + // http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + #include "../Wireframe.cginc" + + ENDCG + } + } +} diff --git a/Runtime/Shaders/Wireframe/Resources/Wireframe-Global.shader.meta b/Runtime/Shaders/Wireframe/Resources/Wireframe-Global.shader.meta new file mode 100644 index 000000000..bf8fbe490 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources/Wireframe-Global.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: eda14fadbcd8360489e3b44c67587d85 +timeCreated: 1510336028 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/Resources/WireframeShaded-Unlit-Global.shader b/Runtime/Shaders/Wireframe/Resources/WireframeShaded-Unlit-Global.shader new file mode 100644 index 000000000..98af1fc78 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources/WireframeShaded-Unlit-Global.shader @@ -0,0 +1,147 @@ +Shader "Wireframe/Hid/Shaded-Unlit-Global" +{ + Properties + { + _MainTex ("MainTex", 2D) = "white" {} + _Color ("Base Color", Color) = (0.0, 0.0, 0.0, 1.0) + } + + SubShader + { + Tags { + "RenderType"="Opaque" + } + + Pass + { + // Wireframe shader based on the the following + // http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + + uniform sampler2D _MainTex; uniform float4 _MainTex_ST; + uniform float4 _Color; + uniform float _WireThickness = 100; + uniform float _WireSmoothness = 3; + uniform float4 _WireColor = float4(0.0, 1.0, 0.0, 1.0); + uniform float4 _BaseColor = float4(0.0, 0.0, 0.0, 0.0); + uniform float _MaxTriSize = 25.0; + + struct appdata + { + float4 vertex : POSITION; + float2 texcoord0 : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2g + { + float4 projectionSpaceVertex : SV_POSITION; + float2 uv0 : TEXCOORD0; + float4 worldSpacePosition : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + struct g2f + { + float4 projectionSpaceVertex : SV_POSITION; + float2 uv0 : TEXCOORD0; + float4 worldSpacePosition : TEXCOORD1; + float4 dist : TEXCOORD2; + float4 area : TEXCOORD3; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2g vert (appdata v) + { + v2g o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.projectionSpaceVertex = UnityObjectToClipPos(v.vertex); + o.worldSpacePosition = mul(unity_ObjectToWorld, v.vertex); + o.uv0 = TRANSFORM_TEX(v.texcoord0, _MainTex); + return o; + } + + [maxvertexcount(3)] + void geom(triangle v2g i[3], inout TriangleStream triangleStream) + { + float2 p0 = i[0].projectionSpaceVertex.xy / i[0].projectionSpaceVertex.w; + float2 p1 = i[1].projectionSpaceVertex.xy / i[1].projectionSpaceVertex.w; + float2 p2 = i[2].projectionSpaceVertex.xy / i[2].projectionSpaceVertex.w; + + float2 edge0 = p2 - p1; + float2 edge1 = p2 - p0; + float2 edge2 = p1 - p0; + + float4 worldEdge0 = i[0].worldSpacePosition - i[1].worldSpacePosition; + float4 worldEdge1 = i[1].worldSpacePosition - i[2].worldSpacePosition; + float4 worldEdge2 = i[0].worldSpacePosition - i[2].worldSpacePosition; + + // To find the distance to the opposite edge, we take the + // formula for finding the area of a triangle Area = Base/2 * Height, + // and solve for the Height = (Area * 2)/Base. + // We can get the area of a triangle by taking its cross product + // divided by 2. However we can avoid dividing our area/base by 2 + // since our cross product will already be double our area. + float area = abs(edge1.x * edge2.y - edge1.y * edge2.x); + float wireThickness = 800 - _WireThickness; + + g2f o; + + o.area = float4(0, 0, 0, 0); + o.area.x = max(length(worldEdge0), max(length(worldEdge1), length(worldEdge2))); + + o.uv0 = i[0].uv0; + o.worldSpacePosition = i[0].worldSpacePosition; + o.projectionSpaceVertex = i[0].projectionSpaceVertex; + o.dist.xyz = float3( (area / length(edge0)), 0.0, 0.0) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[0], o); + triangleStream.Append(o); + + o.uv0 = i[1].uv0; + o.worldSpacePosition = i[1].worldSpacePosition; + o.projectionSpaceVertex = i[1].projectionSpaceVertex; + o.dist.xyz = float3(0.0, (area / length(edge1)), 0.0) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[1], o); + triangleStream.Append(o); + + o.uv0 = i[2].uv0; + o.worldSpacePosition = i[2].worldSpacePosition; + o.projectionSpaceVertex = i[2].projectionSpaceVertex; + o.dist.xyz = float3(0.0, 0.0, (area / length(edge2))) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[2], o); + triangleStream.Append(o); + } + + fixed4 frag (g2f i) : SV_Target + { + float minDistanceToEdge = min(i.dist[0], min(i.dist[1], i.dist[2])) * i.dist[3]; + + float4 baseColor = _Color * _BaseColor * tex2D(_MainTex, i.uv0); + + // Early out if we know we are not on a line segment. + if(minDistanceToEdge > 0.9 || i.area.x > _MaxTriSize) + { + return fixed4(baseColor.rgb,0); + } + + // Smooth our line out + float t = exp2(_WireSmoothness * -1.0 * minDistanceToEdge * minDistanceToEdge); + fixed4 finalColor = lerp(baseColor, _WireColor, t); + finalColor.a = t; + + return finalColor; + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Wireframe/Resources/WireframeShaded-Unlit-Global.shader.meta b/Runtime/Shaders/Wireframe/Resources/WireframeShaded-Unlit-Global.shader.meta new file mode 100644 index 000000000..f744d83b3 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources/WireframeShaded-Unlit-Global.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7f40228a07d09584498b18aefbdfa409 +timeCreated: 1514327156 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/Resources/WireframeTransparent-Global.shader b/Runtime/Shaders/Wireframe/Resources/WireframeTransparent-Global.shader new file mode 100644 index 000000000..ae5405315 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources/WireframeTransparent-Global.shader @@ -0,0 +1,31 @@ +Shader "Wireframe/Hid/Transparent-Global" +{ + SubShader + { + Tags { + "IgnoreProjector"="True" + "Queue"="Transparent" + "RenderType"="Opaque" + } + + Pass + { + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + Cull Off + + // Wireframe shader based on the the following + // http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + #include "../Wireframe.cginc" + + ENDCG + } + } +} diff --git a/Runtime/Shaders/Wireframe/Resources/WireframeTransparent-Global.shader.meta b/Runtime/Shaders/Wireframe/Resources/WireframeTransparent-Global.shader.meta new file mode 100644 index 000000000..2cef42bad --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources/WireframeTransparent-Global.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7d21a827a79cb6c4d829ef32a8286794 +timeCreated: 1510336028 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/Resources/WireframeTransparentCulled-Global.shader b/Runtime/Shaders/Wireframe/Resources/WireframeTransparentCulled-Global.shader new file mode 100644 index 000000000..0cdd4d3d3 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources/WireframeTransparentCulled-Global.shader @@ -0,0 +1,33 @@ +Shader "Wireframe/Hid/Transparent-Culled-Global" +{ + SubShader + { + // Each color represents a meter. + + Tags { + "IgnoreProjector"="True" + "Queue"="Transparent" + "RenderType"="Opaque" + } + + Pass + { + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + Cull Back + + // Wireframe shader based on the the following + // http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + #include "../Wireframe.cginc" + + ENDCG + } + } +} diff --git a/Runtime/Shaders/Wireframe/Resources/WireframeTransparentCulled-Global.shader.meta b/Runtime/Shaders/Wireframe/Resources/WireframeTransparentCulled-Global.shader.meta new file mode 100644 index 000000000..101c8cc95 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Resources/WireframeTransparentCulled-Global.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f4edd4b0c688c744a9dda3dccba8553e +timeCreated: 1510336028 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/Wireframe.cginc b/Runtime/Shaders/Wireframe/Wireframe.cginc new file mode 100644 index 000000000..25961d5e1 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Wireframe.cginc @@ -0,0 +1,106 @@ + +uniform float _WireThickness = 100; +uniform float _WireSmoothness = 3; +uniform float4 _WireColor = float4(0.0, 1.0, 0.0, 1.0); +uniform float4 _BaseColor = float4(0.0, 0.0, 0.0, 0.0); +uniform float _MaxTriSize = 25.0; + +struct appdata +{ + float4 vertex : POSITION; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct v2g +{ + float4 projectionSpaceVertex : SV_POSITION; + float4 worldSpacePosition : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +struct g2f +{ + float4 projectionSpaceVertex : SV_POSITION; + float4 worldSpacePosition : TEXCOORD0; + float4 dist : TEXCOORD1; + float4 area : TEXCOORD2; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2g vert (appdata v) +{ + v2g o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.projectionSpaceVertex = UnityObjectToClipPos(v.vertex); + o.worldSpacePosition = mul(unity_ObjectToWorld, v.vertex); + return o; +} + +[maxvertexcount(3)] +void geom(triangle v2g i[3], inout TriangleStream triangleStream) +{ + float2 p0 = i[0].projectionSpaceVertex.xy / i[0].projectionSpaceVertex.w; + float2 p1 = i[1].projectionSpaceVertex.xy / i[1].projectionSpaceVertex.w; + float2 p2 = i[2].projectionSpaceVertex.xy / i[2].projectionSpaceVertex.w; + + float2 edge0 = p2 - p1; + float2 edge1 = p2 - p0; + float2 edge2 = p1 - p0; + + float4 worldEdge0 = i[0].worldSpacePosition - i[1].worldSpacePosition; + float4 worldEdge1 = i[1].worldSpacePosition - i[2].worldSpacePosition; + float4 worldEdge2 = i[0].worldSpacePosition - i[2].worldSpacePosition; + + // To find the distance to the opposite edge, we take the + // formula for finding the area of a triangle Area = Base/2 * Height, + // and solve for the Height = (Area * 2)/Base. + // We can get the area of a triangle by taking its cross product + // divided by 2. However we can avoid dividing our area/base by 2 + // since our cross product will already be double our area. + float area = abs(edge1.x * edge2.y - edge1.y * edge2.x); + float wireThickness = 800 - _WireThickness; + + g2f o; + + o.area = float4(0, 0, 0, 0); + o.area.x = max(length(worldEdge0), max(length(worldEdge1), length(worldEdge2))); + + o.worldSpacePosition = i[0].worldSpacePosition; + o.projectionSpaceVertex = i[0].projectionSpaceVertex; + o.dist.xyz = float3( (area / length(edge0)), 0.0, 0.0) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[0], o); + triangleStream.Append(o); + + o.worldSpacePosition = i[1].worldSpacePosition; + o.projectionSpaceVertex = i[1].projectionSpaceVertex; + o.dist.xyz = float3(0.0, (area / length(edge1)), 0.0) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[1], o); + triangleStream.Append(o); + + o.worldSpacePosition = i[2].worldSpacePosition; + o.projectionSpaceVertex = i[2].projectionSpaceVertex; + o.dist.xyz = float3(0.0, 0.0, (area / length(edge2))) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[2], o); + triangleStream.Append(o); +} + +fixed4 frag(g2f i) : SV_Target +{ + float minDistanceToEdge = min(i.dist[0], min(i.dist[1], i.dist[2])) * i.dist[3]; + + // Early out if we know we are not on a line segment. + if(minDistanceToEdge > 0.9 || i.area.x > _MaxTriSize) + { + return fixed4(_BaseColor.rgb,0); + } + + // Smooth our line out + float t = exp2(_WireSmoothness * -1.0 * minDistanceToEdge * minDistanceToEdge); + fixed4 finalColor = lerp(_BaseColor, _WireColor, t); + + return finalColor; +} \ No newline at end of file diff --git a/Runtime/Shaders/Wireframe/Wireframe.cginc.meta b/Runtime/Shaders/Wireframe/Wireframe.cginc.meta new file mode 100644 index 000000000..41355df71 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Wireframe.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b693f100d417e6e4d801acc7f073311e +timeCreated: 1514327156 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/Wireframe.shader b/Runtime/Shaders/Wireframe/Wireframe.shader new file mode 100644 index 000000000..97c934352 --- /dev/null +++ b/Runtime/Shaders/Wireframe/Wireframe.shader @@ -0,0 +1,34 @@ +Shader "Wireframe/S" +{ + Properties + { + _WireThickness ("Wire Thickness", RANGE(0, 800)) = 100 + _WireSmoothness ("Wire Smoothness", RANGE(0, 20)) = 3 + _WireColor ("Wire Color", Color) = (0.0, 1.0, 0.0, 1.0) + _BaseColor ("Base Color", Color) = (0.0, 0.0, 0.0, 1.0) + _MaxTriSize ("Max Tri Size", RANGE(0, 200)) = 25 + } + + SubShader + { + Tags { + "RenderType"="Opaque" + } + + Pass + { + // Wireframe shader based on the the following + // http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + #include "Wireframe.cginc" + + ENDCG + } + } +} diff --git a/Runtime/Shaders/Wireframe/Wireframe.shader.meta b/Runtime/Shaders/Wireframe/Wireframe.shader.meta new file mode 100644 index 000000000..cec9e6caa --- /dev/null +++ b/Runtime/Shaders/Wireframe/Wireframe.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a7de4bf0f370ca243b4604b8cd314ffc +timeCreated: 1510335795 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/WireframeShaded-Unlit.shader b/Runtime/Shaders/Wireframe/WireframeShaded-Unlit.shader new file mode 100644 index 000000000..5035dba8b --- /dev/null +++ b/Runtime/Shaders/Wireframe/WireframeShaded-Unlit.shader @@ -0,0 +1,140 @@ +Shader "Wireframe/Shaded-Unlit" +{ + Properties + { + _MainTex ("MainTex", 2D) = "white" {} + _WireThickness ("Wire Thickness", RANGE(0, 800)) = 100 + _WireSmoothness ("Wire Smoothness", RANGE(0, 20)) = 3 + _WireColor ("Wire Color", Color) = (0.0, 1.0, 0.0, 1.0) + _BaseColor ("Base Color", Color) = (0.0, 0.0, 0.0, 1.0) + } + + SubShader + { + Tags { + "RenderType"="Opaque" + } + + Pass + { + // Wireframe shader based on the the following + // http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + + uniform sampler2D _MainTex; uniform float4 _MainTex_ST; + uniform float _WireThickness; + uniform float _WireSmoothness; + uniform float4 _WireColor; + uniform float4 _BaseColor; + + struct appdata + { + float4 vertex : POSITION; + float2 texcoord0 : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2g + { + float4 projectionSpaceVertex : SV_POSITION; + float2 uv0 : TEXCOORD0; + float4 worldSpacePosition : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + struct g2f + { + float4 projectionSpaceVertex : SV_POSITION; + float2 uv0 : TEXCOORD0; + float4 worldSpacePosition : TEXCOORD1; + float4 dist : TEXCOORD2; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2g vert (appdata v) + { + v2g o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.projectionSpaceVertex = UnityObjectToClipPos(v.vertex); + o.worldSpacePosition = mul(unity_ObjectToWorld, v.vertex); + o.uv0 = TRANSFORM_TEX(v.texcoord0, _MainTex); + return o; + } + + [maxvertexcount(3)] + void geom(triangle v2g i[3], inout TriangleStream triangleStream) + { + float2 p0 = i[0].projectionSpaceVertex.xy / i[0].projectionSpaceVertex.w; + float2 p1 = i[1].projectionSpaceVertex.xy / i[1].projectionSpaceVertex.w; + float2 p2 = i[2].projectionSpaceVertex.xy / i[2].projectionSpaceVertex.w; + + float2 edge0 = p2 - p1; + float2 edge1 = p2 - p0; + float2 edge2 = p1 - p0; + + // To find the distance to the opposite edge, we take the + // formula for finding the area of a triangle Area = Base/2 * Height, + // and solve for the Height = (Area * 2)/Base. + // We can get the area of a triangle by taking its cross product + // divided by 2. However we can avoid dividing our area/base by 2 + // since our cross product will already be double our area. + float area = abs(edge1.x * edge2.y - edge1.y * edge2.x); + float wireThickness = 800 - _WireThickness; + + g2f o; + + o.uv0 = i[0].uv0; + o.worldSpacePosition = i[0].worldSpacePosition; + o.projectionSpaceVertex = i[0].projectionSpaceVertex; + o.dist.xyz = float3( (area / length(edge0)), 0.0, 0.0) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[0], o); + triangleStream.Append(o); + + o.uv0 = i[1].uv0; + o.worldSpacePosition = i[1].worldSpacePosition; + o.projectionSpaceVertex = i[1].projectionSpaceVertex; + o.dist.xyz = float3(0.0, (area / length(edge1)), 0.0) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[1], o); + triangleStream.Append(o); + + o.uv0 = i[2].uv0; + o.worldSpacePosition = i[2].worldSpacePosition; + o.projectionSpaceVertex = i[2].projectionSpaceVertex; + o.dist.xyz = float3(0.0, 0.0, (area / length(edge2))) * o.projectionSpaceVertex.w * wireThickness; + o.dist.w = 1.0 / o.projectionSpaceVertex.w; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[2], o); + triangleStream.Append(o); + } + + fixed4 frag (g2f i) : SV_Target + { + float minDistanceToEdge = min(i.dist[0], min(i.dist[1], i.dist[2])) * i.dist[3]; + + float4 baseColor = _BaseColor * tex2D(_MainTex, i.uv0); + + // Early out if we know we are not on a line segment. + if(minDistanceToEdge > 0.9) + { + return fixed4(baseColor.rgb,0); + } + + // Smooth our line out + float t = exp2(_WireSmoothness * -1.0 * minDistanceToEdge * minDistanceToEdge); + fixed4 finalColor = lerp(baseColor, _WireColor, t); + finalColor.a = t; + + return finalColor; + } + ENDCG + } + } +} diff --git a/Runtime/Shaders/Wireframe/WireframeShaded-Unlit.shader.meta b/Runtime/Shaders/Wireframe/WireframeShaded-Unlit.shader.meta new file mode 100644 index 000000000..301c0044d --- /dev/null +++ b/Runtime/Shaders/Wireframe/WireframeShaded-Unlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 349737f389860b042946c40afa327524 +timeCreated: 1514327156 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/WireframeTransparent.shader b/Runtime/Shaders/Wireframe/WireframeTransparent.shader new file mode 100644 index 000000000..63f071dd8 --- /dev/null +++ b/Runtime/Shaders/Wireframe/WireframeTransparent.shader @@ -0,0 +1,40 @@ +Shader "Wireframe/Transparent" +{ + Properties + { + _WireThickness ("Wire Thickness", RANGE(0, 800)) = 100 + _WireSmoothness ("Wire Smoothness", RANGE(0, 20)) = 3 + _WireColor ("Wire Color", Color) = (0.0, 1.0, 0.0, 1.0) + _BaseColor ("Base Color", Color) = (0.0, 0.0, 0.0, 0.0) + _MaxTriSize ("Max Tri Size", RANGE(0, 200)) = 25 + } + + SubShader + { + Tags { + "IgnoreProjector"="True" + "Queue"="Transparent" + "RenderType"="Transparent" + } + + Pass + { + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + Cull Off + + // Wireframe shader based on the the following + // http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + #include "Wireframe.cginc" + + ENDCG + } + } +} diff --git a/Runtime/Shaders/Wireframe/WireframeTransparent.shader.meta b/Runtime/Shaders/Wireframe/WireframeTransparent.shader.meta new file mode 100644 index 000000000..15d527fc7 --- /dev/null +++ b/Runtime/Shaders/Wireframe/WireframeTransparent.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 90cadb91a7902754f9fe5b4563306677 +timeCreated: 1510335794 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/Wireframe/WireframeTransparentCulled.shader b/Runtime/Shaders/Wireframe/WireframeTransparentCulled.shader new file mode 100644 index 000000000..03230882a --- /dev/null +++ b/Runtime/Shaders/Wireframe/WireframeTransparentCulled.shader @@ -0,0 +1,40 @@ +Shader "Wireframe/Transparent-Culled" +{ + Properties + { + _WireThickness ("Wire Thickness", RANGE(0, 800)) = 100 + _WireSmoothness ("Wire Smoothness", RANGE(0, 20)) = 3 + _WireColor ("Wire Color", Color) = (0.0, 1.0, 0.0, 1.0) + _BaseColor ("Base Color", Color) = (0.0, 0.0, 0.0, 0.0) + _MaxTriSize ("Max Tri Size", RANGE(0, 200)) = 25 + } + + SubShader + { + Tags { + "IgnoreProjector"="True" + "Queue"="Transparent" + "RenderType"="Transparent" + } + + Pass + { + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + Cull Back + + // Wireframe shader based on the the following + // http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + #include "Wireframe.cginc" + + ENDCG + } + } +} diff --git a/Runtime/Shaders/Wireframe/WireframeTransparentCulled.shader.meta b/Runtime/Shaders/Wireframe/WireframeTransparentCulled.shader.meta new file mode 100644 index 000000000..764bf90e3 --- /dev/null +++ b/Runtime/Shaders/Wireframe/WireframeTransparentCulled.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a64caad055200da45b6df1c7c80839ed +timeCreated: 1510335794 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs.meta b/Runtime/Structs.meta new file mode 100644 index 000000000..7d4e49d5e --- /dev/null +++ b/Runtime/Structs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e27925e98451431c284451442e7fe279 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/OutPose.cs b/Runtime/Structs/OutPose.cs new file mode 100644 index 000000000..87a843d19 --- /dev/null +++ b/Runtime/Structs/OutPose.cs @@ -0,0 +1,71 @@ +using UnityEngine; + +namespace droid.Runtime.Structs { + public class OutPose { + /// Encapsulates a rotation and a translation. This is a convenience class that allows + /// construction and value access either by Matrix4x4 or Quaternion + Vector3 types. + /// Right-handed to left-handed matrix converter (and vice versa). + protected static readonly Matrix4x4 _FlipZ = Matrix4x4.Scale(new Vector3(1, 1, -1)); + + /// The translation component of the pose. + public Vector3 Position { get; protected set; } + + /// The rotation component of the pose. + public Quaternion Orientation { get; protected set; } + + /// The pose as a matrix in Unity gameobject convention (left-handed). + public Matrix4x4 Matrix { get; protected set; } + + /// The pose as a matrix in right-handed coordinates. + public Matrix4x4 RightHandedMatrix { get { return _FlipZ * this.Matrix * _FlipZ; } } + + /// Default constructor. + /// Initializes position to the origin and orientation to the identity rotation. + public OutPose() { + this.Position = Vector3.zero; + this.Orientation = Quaternion.identity; + this.Matrix = Matrix4x4.identity; + } + + /// Constructor that takes a Vector3 and a Quaternion. + public OutPose(Vector3 position, Quaternion orientation) { this.Set(position, orientation); } + + /// Constructor that takes a Matrix4x4. + public OutPose(Matrix4x4 matrix) { this.Set(matrix); } + + /// + /// + /// + /// + /// + protected void Set(Vector3 position, Quaternion orientation) { + this.Position = position; + this.Orientation = orientation; + this.Matrix = Matrix4x4.TRS(position, orientation, Vector3.one); + } + + /// + /// + /// + /// + protected void Set(Matrix4x4 matrix) { + this.Matrix = matrix; + this.Position = matrix.GetColumn(3); + this.Orientation = Quaternion.LookRotation(matrix.GetColumn(2), matrix.GetColumn(1)); + } + } + + /// + /// + /// + public class MutableOutPose : OutPose { + /// Sets the position and orientation from a Vector3 + Quaternion. + public new void Set(Vector3 position, Quaternion orientation) { base.Set(position, orientation); } + + /// Sets the position and orientation from a Matrix4x4. + public new void Set(Matrix4x4 matrix) { base.Set(matrix); } + + /// Sets the position and orientation from a right-handed Matrix4x4. + public void SetRightHanded(Matrix4x4 matrix) { this.Set(_FlipZ * matrix * _FlipZ); } + } +} diff --git a/Runtime/Structs/OutPose.cs.meta b/Runtime/Structs/OutPose.cs.meta new file mode 100644 index 000000000..719a522f1 --- /dev/null +++ b/Runtime/Structs/OutPose.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 839013eec29e4e60bc53db80e62cd149 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 118bb18f79adc4eb89be353f47adae5c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Points.cs b/Runtime/Structs/Points.cs new file mode 100644 index 000000000..0e1717e95 --- /dev/null +++ b/Runtime/Structs/Points.cs @@ -0,0 +1,60 @@ +using UnityEngine; + +namespace droid.Runtime.Structs { + /// + /// + /// + public class Points : MonoBehaviour { + /// + /// + /// + public struct StringPoint { + /// + /// + /// + public Vector3 _Pos; + + /// + /// + /// + public float _Size; + + /// + /// + /// + public string _Val; + + public StringPoint(Vector3 pos, string val, float size) { + this._Pos = pos; + this._Val = val; + this._Size = size; + } + } + + /// + /// + /// + public struct ValuePoint { + /// + /// + /// + public Vector3 _Pos; + + /// + /// + /// + public float _Size; + + /// + /// + /// + public float _Val; + + public ValuePoint(Vector3 pos, float val, float size) { + this._Pos = pos; + this._Val = val; + this._Size = size; + } + } + } +} diff --git a/Runtime/Structs/Points.cs.meta b/Runtime/Structs/Points.cs.meta new file mode 100644 index 000000000..196a10efd --- /dev/null +++ b/Runtime/Structs/Points.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a58a7e1cfe8a84a7682ce2569744b864 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 118bb18f79adc4eb89be353f47adae5c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/SegmentationColor.cs b/Runtime/Structs/SegmentationColor.cs new file mode 100644 index 000000000..af28648f8 --- /dev/null +++ b/Runtime/Structs/SegmentationColor.cs @@ -0,0 +1,30 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Structs { + /// + /// + [Serializable] + public struct ColorByCategory { + /// + /// + public string _Category_Name; + + /// + /// + public Color _Color; + } + + /// + /// + [Serializable] + public struct ColorByInstance { + /// + /// + public GameObject _Game_Object; + + /// + /// + public Color _Color; + } +} diff --git a/Runtime/Structs/SegmentationColor.cs.meta b/Runtime/Structs/SegmentationColor.cs.meta new file mode 100644 index 000000000..7f7303c83 --- /dev/null +++ b/Runtime/Structs/SegmentationColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 902dd37b51e3945448da855ee131cf3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 118bb18f79adc4eb89be353f47adae5c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/SimulatorConfiguration.cs b/Runtime/Structs/SimulatorConfiguration.cs new file mode 100644 index 000000000..99b8813f9 --- /dev/null +++ b/Runtime/Structs/SimulatorConfiguration.cs @@ -0,0 +1,349 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.ScriptableObjects; +using droid.Runtime.Utilities; +using UnityEngine; + +namespace droid.Runtime.Structs { + /// + /// + /// Contains everything relevant to configuring simulation environments engine specific settings + /// + [CreateAssetMenu(fileName = "SimulatorConfiguration", + menuName = ScriptableObjectMenuPath._ScriptableObjectMenuPath + "SimulatorConfiguration", + order = 1)] + [Serializable] + public class SimulatorConfiguration : ScriptableObject, + ISimulatorConfiguration { + [Header("Performance (Disable for faster serialisation, but with loss of functionality)")] + [SerializeField] + bool _always_serialise_unobservables = true; + + [SerializeField] bool _always_serialise_individual_observables = true; + + [SerializeField] bool _always_serialise_aggregated_float_array = true; + + [Header("Graphics")] [SerializeField] bool _apply_resolution_settings = false; + + [SerializeField] bool _optimiseWindow_for_speed = false; + + [SerializeField] bool _apply_quality_settings = false; + + [SerializeField] [Range(1, 9999)] int _height = 500; + + [SerializeField] [Range(1, 9999)] int _width = 500; + [SerializeField] [Range(1, 4)] int _quality_level = 1; + [SerializeField] [Range(0, 4)] int _v_sync_count = 0; + [SerializeField] bool _full_screen = false; + [SerializeField] bool _resizable_window = true; + [SerializeField] ColorSpace _color_space = ColorSpace.Linear; + + /// + /// + [Header("Simulation")] + [SerializeField] + [SearchableEnum] + FrameFinishes _frame_finishes = FrameFinishes.On_post_render_; + + /// + /// + [SerializeField] + [Range(0, 99)] + int _frame_skips = 0; + + /// + /// + [Header("Connection")] + [SerializeField] + string _ip_address = "localhost"; + + /// + /// + [SerializeField] + [Range(0, 9999)] + float _max_reply_interval = 0; + + /// + /// + [SerializeField] + [Range(0, 999)] + int _num_of_environments = 0; + + /// + /// + [SerializeField] + int _port = 6969; + + [SerializeField] bool _replay_reaction_in_skips; + + /// + /// + [SerializeField] + [SearchableEnum] + SimulationType _simulation_type = SimulationType.Independent_; + + /// + /// + [SerializeField] + [SearchableEnum] + ExecutionPhase _step_execution_phase = ExecutionPhase.Middle_; + + /// + /// Target frame rate = -1 means that no waiting/v-syncing is done and the simulation can run as fast as + /// possible. + /// + [SerializeField] + [Range(-1, 9999)] + int _target_frame_rate = -1; + + /// + /// Allows physics loop to be run more often than frame loop + /// + [Header("Time")] + [SerializeField] + [Range(0f, 100f)] + float _time_scale = 1; + + /// + /// WARNING When _update_fixed_time_scale is true, MAJOR slow downs due to PHYSX updates on change. + /// + [Header("Experimental (Warning, it is important to read docs before use!)")] + [SerializeField] + bool _update_fixed_time_scale = false; + + /// + /// + public void SetToDefault() { + this.Width = 500; + this.Height = 500; + this.FullScreen = false; + this.QualityLevel = 1; + this.TimeScale = 1; + this.TargetFrameRate = -1; + this.SimulationType = SimulationType.Frame_dependent_; + this.FrameFinishes = FrameFinishes.Late_update_; + this.FrameSkips = 0; + this.MaxReplyInterval = 0; + this.NumOfEnvironments = 1; + this.ResizableWindow = true; + this.ColorSpace = ColorSpace.Linear; + this.VSyncCount = 0; + } + + #region Getter Setters + + /// + /// + public int FrameSkips { + get { return this._frame_skips; } + set { + if (value >= 0) { + this._frame_skips = value; + } + } + } + + /// + /// + public SimulationType SimulationType { + get { return this._simulation_type; } + set { this._simulation_type = value; } + } + + /// + /// + /// + public bool ApplyResolutionSettings { + get { return this._apply_resolution_settings; } + set { this._apply_resolution_settings = value; } + } + + /// + /// + /// + public bool ApplyQualitySettings { + get { return this._apply_quality_settings; } + set { this._apply_quality_settings = value; } + } + + /// + /// + /// + public Boolean ResizableWindow { + get { return this._resizable_window; } + set { this._resizable_window = value; } + } + + /// + /// + /// + public ColorSpace ColorSpace { get { return this._color_space; } set { this._color_space = value; } } + + /// + /// + /// + public int VSyncCount { get { return this._v_sync_count = 0; } set { this._v_sync_count = value; } } + + /// + /// + public int Width { + get { return this._width; } + set { + if (value >= 0) { + this._width = value; + } + } + } + + /// + /// + public int Height { + get { return this._height; } + set { + if (value >= 0) { + this._height = value; + } + } + } + + /// + /// + public bool FullScreen { get { return this._full_screen; } set { this._full_screen = value; } } + + /// + /// + public int NumOfEnvironments { + get { return this._num_of_environments; } + set { this._num_of_environments = value; } + } + + /// + /// + public int TargetFrameRate { + get { return this._target_frame_rate; } + set { + if (value >= -1) { + this._target_frame_rate = value; + } + } + } + + /// + /// + public int QualityLevel { + get { return this._quality_level; } + set { + if (value >= 1 && value <= 4) { + this._quality_level = value; + } + } + } + + /// + /// + public float TimeScale { + get { return this._time_scale; } + set { + if (value >= 0) { + this._time_scale = value; + } + } + } + + /// + /// + public float MaxReplyInterval { + get { return this._max_reply_interval; } + set { this._max_reply_interval = value; } + } + + /// + /// + public FrameFinishes FrameFinishes { + get { return this._frame_finishes; } + set { this._frame_finishes = value; } + } + + /// + /// + public ExecutionPhase StepExecutionPhase { + get { return this._step_execution_phase; } + set { this._step_execution_phase = value; } + } + + /// + /// WARNING When _update_fixed_time_scale is true, MAJOR slow downs due to PHYSX updates on change. + /// + public bool UpdateFixedTimeScale { + get { return this._update_fixed_time_scale; } + set { this._update_fixed_time_scale = value; } + } + + /// + /// + /// + public Boolean AlwaysSerialiseAggregatedFloatArray { + get { return this._always_serialise_aggregated_float_array; } + set { this._always_serialise_aggregated_float_array = value; } + } + + /// + /// + /// + public bool AlwaysSerialiseUnobservables { + get { return this._always_serialise_unobservables; } + set { this._always_serialise_unobservables = value; } + } + + /// + /// + /// + public bool AlwaysSerialiseIndividualObservables { + get { return this._always_serialise_individual_observables; } + set { this._always_serialise_individual_observables = value; } + } + + /// + /// + /// + public bool ReplayReactionInSkips { + get { return this._replay_reaction_in_skips; } + set { this._replay_reaction_in_skips = value; } + } + + /// + /// + /// + public Int32 Port { get { return this._port; } set { this._port = value; } } + + /// + /// + public String IpAddress { get { return this._ip_address; } set { this._ip_address = value; } } + + /// + /// + /// + public Boolean OptimiseWindowForSpeed { + get { return this._optimiseWindow_for_speed; } + set { this._optimiseWindow_for_speed = value; } + } + + #endregion + + /// + /// + /// + /// + public override String ToString() { + var e = ""; + + e += this.name; + e += ", "; + e += this.SimulationType.ToString(); + + return e; + } + } +} diff --git a/Runtime/Utilities/ScriptableObjects/SimulatorConfiguration.cs.meta b/Runtime/Structs/SimulatorConfiguration.cs.meta similarity index 100% rename from Runtime/Utilities/ScriptableObjects/SimulatorConfiguration.cs.meta rename to Runtime/Structs/SimulatorConfiguration.cs.meta diff --git a/Runtime/Structs/Space.meta b/Runtime/Structs/Space.meta new file mode 100644 index 000000000..f77840eb7 --- /dev/null +++ b/Runtime/Structs/Space.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96594771e514fe5b9bcbcb70876ee5a8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Space/Sample.meta b/Runtime/Structs/Space/Sample.meta new file mode 100644 index 000000000..86c0c23d0 --- /dev/null +++ b/Runtime/Structs/Space/Sample.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 177eb606ae034cdc85a1a4e9edb7d67f +timeCreated: 1567406109 \ No newline at end of file diff --git a/Runtime/Structs/Space/Sample/SampleSpace1.cs b/Runtime/Structs/Space/Sample/SampleSpace1.cs new file mode 100644 index 000000000..b576a0ab1 --- /dev/null +++ b/Runtime/Structs/Space/Sample/SampleSpace1.cs @@ -0,0 +1,61 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Sampling; +using UnityEngine; + +namespace droid.Runtime.Structs.Space.Sample { + /// + /// + /// + [Serializable] + public struct SampleSpace1 : ISamplable { + #region Fields + + [Header("Sampling", order = 103)] + [SerializeField] + internal Space1 _space; + + /// + /// + /// + [SerializeField] + internal DistributionSampler _distribution_sampler; + + #endregion + + /// + /// + /// + public DistributionSampler DistributionSampler { + get { return this._distribution_sampler; } + set { this._distribution_sampler = value; } + } + + public SampleSpace1(string unused = null) { + this._space = Space1.ZeroOne; + this._distribution_sampler = new DistributionSampler(); + } + + /// + /// + /// + /// + public dynamic Sample() { + switch (this._space.Normalised) { + case Normalisation.None_: + return this._space.Round(this.DistributionSampler.Range(this._space.Min, this._space.Max)); + case Normalisation.Zero_one_: + return this.DistributionSampler.Range(0, 1); + case Normalisation.Minus_one_one_: + return this.DistributionSampler.Range(-1, 1); + default: throw new ArgumentOutOfRangeException(); + } + } + + /// + /// + /// + public ISpace Space { get { return this._space; } set { this._space = (Space1)value; } } + } +} diff --git a/Runtime/Structs/Space/Sample/SampleSpace1.cs.meta b/Runtime/Structs/Space/Sample/SampleSpace1.cs.meta new file mode 100644 index 000000000..1a801808e --- /dev/null +++ b/Runtime/Structs/Space/Sample/SampleSpace1.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: abe58c55b29e4653b16f32471036387d +timeCreated: 1567406117 \ No newline at end of file diff --git a/Runtime/Structs/Space/Sample/SampleSpace2.cs b/Runtime/Structs/Space/Sample/SampleSpace2.cs new file mode 100644 index 000000000..ddcdc3cdf --- /dev/null +++ b/Runtime/Structs/Space/Sample/SampleSpace2.cs @@ -0,0 +1,68 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Sampling; +using UnityEngine; + +namespace droid.Runtime.Structs.Space.Sample { + /// + /// + /// + [Serializable] + public struct SampleSpace2 : ISamplable { + #region Fields + + [Header("Sampling", order = 103)] + [SerializeField] + internal Space2 _space; + + /// + /// + /// + [SerializeField] + internal DistributionSampler _distribution_sampler; + + #endregion + + /// + /// + /// + public DistributionSampler DistributionSampler { + get { return this._distribution_sampler; } + set { this._distribution_sampler = value; } + } + + public SampleSpace2(string unused = null) { + this._space = Space2.ZeroOne; + this._distribution_sampler = new DistributionSampler(); + } + + /// + /// + /// + /// + public dynamic Sample() { + Single x; + Single y; + switch(this._space.Normalised) { + case Normalisation.None_: + x = this._space.Round(this.DistributionSampler.Range(this._space.Min.x, this._space.Max.x)); + y = this._space.Round(this.DistributionSampler.Range(this._space.Min.y, this._space.Max.y)); + break; + case Normalisation.Zero_one_: + x = this.DistributionSampler.Range(0, 1); + y = this.DistributionSampler.Range(0, 1); + break; + case Normalisation.Minus_one_one_: + x = this.DistributionSampler.Range(-1, 1); + y = this.DistributionSampler.Range(-1, 1); + break; + default: throw new ArgumentOutOfRangeException(); + } + + return new Vector2(x, y); + } + + public ISpace Space { get { return this._space; } set { this._space = (Space2)value; } } + } +} diff --git a/Runtime/Structs/Space/Sample/SampleSpace2.cs.meta b/Runtime/Structs/Space/Sample/SampleSpace2.cs.meta new file mode 100644 index 000000000..b5cc955aa --- /dev/null +++ b/Runtime/Structs/Space/Sample/SampleSpace2.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0d27a5850f914b5c81dc2deda5b75aea +timeCreated: 1567406172 \ No newline at end of file diff --git a/Runtime/Structs/Space/Sample/SampleSpace3.cs b/Runtime/Structs/Space/Sample/SampleSpace3.cs new file mode 100644 index 000000000..ac676b70f --- /dev/null +++ b/Runtime/Structs/Space/Sample/SampleSpace3.cs @@ -0,0 +1,74 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Sampling; +using UnityEngine; + +namespace droid.Runtime.Structs.Space.Sample { + /// + /// + /// + [Serializable] + public struct SampleSpace3 : ISamplable { + #region Fields + + [Header("Sampling", order = 103)] + [SerializeField] + internal Space3 _space; + + /// + /// + /// + [SerializeField] + internal DistributionSampler _distribution_sampler; + + #endregion + + /// + /// + /// + public DistributionSampler DistributionSampler { + get { return this._distribution_sampler; } + set { this._distribution_sampler = value; } + } + + public SampleSpace3(string unused = null) { + this._space = Space3.ZeroOne; + this._distribution_sampler = new DistributionSampler(); + } + + + + /// + /// + /// + /// + public dynamic Sample() { + Single x; + Single y; + Single z; + switch(this._space.Normalised) { + case Normalisation.None_: + x = this._space.Round(this.DistributionSampler.Range(this._space.Min.x, this._space.Max.x)); + y = this._space.Round(this.DistributionSampler.Range(this._space.Min.y, this._space.Max.y)); + z = this._space.Round(this.DistributionSampler.Range(this._space.Min.z, this._space.Max.z)); + break; + case Normalisation.Zero_one_: + x = this.DistributionSampler.Range(0, 1); + y = this.DistributionSampler.Range(0, 1); + z = this.DistributionSampler.Range(0, 1); + break; + case Normalisation.Minus_one_one_: + x = this.DistributionSampler.Range(-1, 1); + y = this.DistributionSampler.Range(-1, 1); + z = this.DistributionSampler.Range(-1, 1); + break; + default: throw new ArgumentOutOfRangeException(); + } + + return new Vector3(x, y, z); + } + + public ISpace Space { get { return this._space; } set { this._space = (Space3)value; } } + } +} diff --git a/Runtime/Structs/Space/Sample/SampleSpace3.cs.meta b/Runtime/Structs/Space/Sample/SampleSpace3.cs.meta new file mode 100644 index 000000000..1b63e2a9e --- /dev/null +++ b/Runtime/Structs/Space/Sample/SampleSpace3.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: eb58006c395f4c6799407d5f27978d66 +timeCreated: 1567406176 \ No newline at end of file diff --git a/Runtime/Structs/Space/Sample/SampleSpace4.cs b/Runtime/Structs/Space/Sample/SampleSpace4.cs new file mode 100644 index 000000000..0e3a74e9f --- /dev/null +++ b/Runtime/Structs/Space/Sample/SampleSpace4.cs @@ -0,0 +1,74 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Sampling; +using UnityEngine; + +namespace droid.Runtime.Structs.Space.Sample { + /// + /// + [Serializable] + public struct SampleSpace4 : ISamplable { + #region Fields + + [Header("Sampling", order = 103)] + [SerializeField] + internal Space4 _space; + + [SerializeField] internal DistributionSampler _distribution_sampler; + + #endregion + + /// + /// + /// + public DistributionSampler DistributionSampler { + get { return this._distribution_sampler; } + set { this._distribution_sampler = value; } + } + + public SampleSpace4(string unused = null) { + this._space = Space4.ZeroOne; + this._distribution_sampler = new DistributionSampler(); + } + + /// + /// + /// + /// + public dynamic Sample() { + Single x; + Single y; + Single z; + Single w; + switch(this._space.Normalised) { + case Normalisation.None_: + x = this._space.Round(this.DistributionSampler.Range(this._space.Min.x, this._space.Max.x)); + y = this._space.Round(this.DistributionSampler.Range(this._space.Min.y, this._space.Max.y)); + z = this._space.Round(this.DistributionSampler.Range(this._space.Min.z, this._space.Max.z)); + w = this._space.Round(this.DistributionSampler.Range(this._space.Min.w, this._space.Max.w)); + break; + case Normalisation.Zero_one_: + x = this.DistributionSampler.Range(0, 1); + y = this.DistributionSampler.Range(0, 1); + z = this.DistributionSampler.Range(0, 1); + w = this.DistributionSampler.Range(0, 1); + break; + case Normalisation.Minus_one_one_: + x = this.DistributionSampler.Range(-1, 1); + y = this.DistributionSampler.Range(-1, 1); + z = this.DistributionSampler.Range(-1, 1); + w = this.DistributionSampler.Range(-1, 1); + break; + default: throw new ArgumentOutOfRangeException(); + } + + return new Vector4(x, + y, + z, + w); + } + + public ISpace Space { get { return this._space; } set { this._space = (Space4)value; } } + } +} diff --git a/Runtime/Structs/Space/Sample/SampleSpace4.cs.meta b/Runtime/Structs/Space/Sample/SampleSpace4.cs.meta new file mode 100644 index 000000000..c6e9aaf38 --- /dev/null +++ b/Runtime/Structs/Space/Sample/SampleSpace4.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a1a5fc1ed9444bfab702c41dd352b7e4 +timeCreated: 1567406176 \ No newline at end of file diff --git a/Runtime/Structs/Space/Space1.cs b/Runtime/Structs/Space/Space1.cs new file mode 100644 index 000000000..c9462ba01 --- /dev/null +++ b/Runtime/Structs/Space/Space1.cs @@ -0,0 +1,366 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Structs.Space { + /// + /// + /// + [Serializable] + public struct Space1 : ISpace { + #region Fields + + /// + /// + /// + [Header("Space", order = 103)] + [SerializeField] + float _min_; + + /// + /// + /// + [SerializeField] + float _max_; + + /// + /// + /// + /// + [Range(0, 15)] + [SerializeField] + int _decimal_granularity; + + [SerializeField] Normalisation normalised; + + #endregion + + /// + /// + /// + public float Span { get { return this._max_ - this._min_; } } + + /// + /// + /// + /// + /// + /// + /// + static float Clip(float v, float min, float max) { return Mathf.Clamp(v, min, max); } + + /// + /// + /// + /// + /// + float Clip(float v) { return Clip(v, this._min_, this._max_); } + + /// + /// + /// + /// + /// + float ClipRound(float v) { return this.Clip(this.Round(v)); } + + /// + /// + /// + /// + /// + dynamic ClipNormalise01Round(dynamic v) { return this.Round(this.Normalise01(this.Clip(v))); } + + /// + /// + /// + /// + /// + dynamic ClipNormaliseMinusOneOneRound(dynamic v) { + return this.Round(this.NormaliseMinusOneOne(this.Clip(v))); + } + + /// + /// + /// + /// + /// + /// + public dynamic Project(dynamic v) { + switch (this.Normalised) { + case Normalisation.None_: + return ClipRound(v); + case Normalisation.Zero_one_: + return ClipNormalise01Round(v); + case Normalisation.Minus_one_one_: + return ClipNormaliseMinusOneOneRound(v); + default: throw new ArgumentOutOfRangeException(); + } + } + + /// + /// + /// + /// + /// + /// + public dynamic Reproject(dynamic v) { + switch (this.Normalised) { + case Normalisation.None_: + return ClipRound(v); + case Normalisation.Zero_one_: + return ClipRoundDenormalise01Clip(v); + case Normalisation.Minus_one_one_: + return ClipRoundDenormaliseMinusOneOneClip(v); + default: throw new ArgumentOutOfRangeException(); + } + } + + /// + /// + /// + /// + /// + float Normalise01(float v) { + if (v > this._max_ || v < this._min_) { + throw new ArgumentException(); + } + + if (this.Span <= 0) { + return 0; + } + + return (v - this._min_) / this.Span; + } + + /// + /// + /// + /// + /// + float NormaliseMinusOneOne(float v) { + if (v > this._max_ || v < this._min_) { + throw new ArgumentException(); + } + + if (this.Span <= 0) { + return 0; + } + + return (v - this._min_) / this.Span; + } + + /// + /// + /// + /// + public Vector2 ToVector2() { return new Vector2(this._min_, this._max_); } + + /// + /// + /// + /// + public Vector3 ToVector3() { return new Vector3(this._min_, this._max_, this._decimal_granularity); } + + /// + /// + /// + /// + /// + float Denormalise01(float v) { + if (v > 1 || v < 0) { + throw new ArgumentException(); + } + + if (this.Span <= 0) { + return 0; + } + + return v * this.Span + this._min_; + } + + /// + /// + /// + /// + /// + float DenormaliseMinusOneOne(float v) { + if (v > 1 || v < 0) { + throw new ArgumentException(); + } + + if (this.Span <= 0) { + return 0; + } + + return v * this.Span + this._min_; + } + + /// + /// + /// + /// + /// + dynamic ClipRoundDenormalise01Clip(dynamic v) { + return this.Clip(this.Round(this.Denormalise01(Clip(v, 0, 1)))); + } + + /// + /// + /// + /// + /// + dynamic ClipRoundDenormaliseMinusOneOneClip(dynamic v) { + return this.Clip(this.Round(this.DenormaliseMinusOneOne(Clip(v, 0, 1)))); + } + + /// + /// + /// + /// + public static string Vector3Description() { return "Space (min, max, granularity)"; } + + /// + /// + /// + /// + /// + public float Round(float v) { return (float)Math.Round(v, this._decimal_granularity); } + + /// + /// + /// + public static Space1 TwentyEighty { + get { + return new Space1 { + _min_ = 0.2f, + _max_ = 0.8f, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; + } + } + + /// + /// + /// + public static Space1 ZeroOne { + get { + return new Space1 { + _min_ = 0, + _max_ = 1, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; + } + } + + /// + /// + /// + public static Space1 MinusOneOne { + get { + return new Space1 { + _min_ = -1, + _max_ = 1, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; + } + } + + /// + /// + /// + public int DecimalGranularity { + get { return this._decimal_granularity; } + set { this._decimal_granularity = value; } + } + + /// + /// + /// + public Boolean NormalisedBool { + get { return this.normalised == Normalisation.Zero_one_; } + set { this.normalised = value ? Normalisation.Zero_one_ : Normalisation.None_; } + } + + /// + /// + /// + public static Space1 DiscreteMinusOneOne { + get { + return new Space1 {_min_ = -1, _max_ = 1, DecimalGranularity = 0, Normalised = Normalisation.None_}; + } + } + + /// + /// + /// + public static Space1 DiscreteZeroOne { + get { + return new Space1 {_min_ = 0, _max_ = 1, DecimalGranularity = 0, Normalised = Normalisation.None_}; + } + } + + /// + /// + /// + public dynamic Precision { get { return 1.0f / (this._decimal_granularity + 1.0f); } } + + /// + /// + /// + public dynamic Min { get { return this._min_; } set { this._min_ = value; } } + + /// + /// + /// + public dynamic Max { get { return this._max_; } set { this._max_ = value; } } + + /// + /// + /// + public Normalisation Normalised { get { return this.normalised; } set { this.normalised = value; } } + + /// + /// + /// + /// + public void FromVector3(Vector3 vector3_field) { + this._decimal_granularity = (int)vector3_field.z; + this._max_ = vector3_field.y; + this._min_ = vector3_field.x; + } + + /// + /// + /// + /// + /// + /// + public static Space1 operator*(Space1 a, float b) { + a.Max *= b; + a.Min *= b; + return a; + } + + /// + /// + /// + /// + /// + /// + /// + public static Space1 FromCenterExtent(float extent, + Normalisation normalisation = Normalisation.Zero_one_, + int decimal_granularity = 4) { + return new Space1 { + _min_ = -extent, + Max = extent, + normalised = normalisation, + DecimalGranularity = decimal_granularity + }; + } + } +} diff --git a/Runtime/Structs/Space/Space1.cs.meta b/Runtime/Structs/Space/Space1.cs.meta new file mode 100644 index 000000000..0bf09d21f --- /dev/null +++ b/Runtime/Structs/Space/Space1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 785f2393e46a816f08791a41aced1b96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Space/Space2.cs b/Runtime/Structs/Space/Space2.cs new file mode 100644 index 000000000..2bfd151ea --- /dev/null +++ b/Runtime/Structs/Space/Space2.cs @@ -0,0 +1,272 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Structs.Space { + /// + /// + /// + [Serializable] + public struct Space2 : ISpace { + #region Fields + + public Normalisation Normalised { get { return this.normalised; } set { this.normalised = value; } } + + /// + /// + /// + [Header("Space", order = 103)] + [SerializeField] + Vector2 _min_; + + /// + /// + /// + [SerializeField] + Vector2 _max_; + + [Range(0, 15)] [SerializeField] int _decimal_granularity; + [SerializeField] Normalisation normalised; + + + #endregion + + /// + /// + /// + public Vector2 Span { get { return this._max_ - this._min_; } } + + /// + /// + /// + public int DecimalGranularity { + get { return this._decimal_granularity; } + set { this._decimal_granularity = value; } + } + + /// + /// + /// + public Space1 Xspace { + get { + return new Space1 { + Min = this._min_.x, + Max = this._max_.x, + DecimalGranularity = this.DecimalGranularity + }; + } + } + + /// + /// + /// + public Space1 Yspace { + get { + return new Space1 { + Min = this._min_.y, + Max = this._max_.y, + DecimalGranularity = this.DecimalGranularity + }; + } + } + + public Vector2 Clip(Vector2 v, Vector2 min, Vector2 max) { + return new Vector2(Mathf.Clamp(v.x, min.x, max.x), Mathf.Clamp(v.y, min.y, max.y)); + } + + public Vector2 Clip(Vector2 v) { return this.Clip(v, this._min_, this._max_); } + + /// + /// + /// + /// + /// + Vector2 ClipRound(Vector2 v) { return this.Clip(this.Round(v)); } + + dynamic ClipRoundDenormalise01Clip(dynamic configuration_configurable_value) { + return this.Clip(this.Round(this.Denormalise01(Clip(configuration_configurable_value, + Vector2.zero, + Vector2.one)))); + } + + /// + /// + /// + /// + /// + /// + public dynamic Project(dynamic v) { + switch (this.Normalised) { + case Normalisation.None_: + return ClipRound(v); + case Normalisation.Zero_one_: + return ClipNormalise01Round(v); + case Normalisation.Minus_one_one_: + return ClipNormalise01Round(v); //return ClipNormaliseMinusOneOneRound(v); + default: throw new ArgumentOutOfRangeException(); + } + } + + /// + /// + /// + /// + /// + /// + public dynamic Reproject(dynamic v) { + switch (this.Normalised) { + case Normalisation.None_: + return ClipRound(v); + case Normalisation.Zero_one_: + return ClipRoundDenormalise01Clip(v); + case Normalisation.Minus_one_one_: + return ClipRoundDenormalise01Clip(v); // return ClipRoundDenormaliseMinusOneOneClip(v); + default: throw new ArgumentOutOfRangeException(); + } + } + + /// + /// + /// + /// + /// + dynamic ClipNormalise01Round(dynamic v) { + if (v.x > this._max_.x) { + v.x = this._max_.x; + } else if (v.x < this._min_.x) { + v.x = this._min_.x; + } + + if (this.Span.x > 0) { + v.x = this.Round((v.x - this._min_.x) / this.Span.x); + } else { + v.x = 0; + } + + if (v.y > this._max_.y) { + v.y = this._max_.y; + } else if (v.y < this._min_.y) { + v.y = this._min_.y; + } + + if (this.Span.y > 0) { + v.y = this.Round((v.y - this._min_.y) / this.Span.y); + } else { + v.y = 0; + } + + return v; + } + + /// + /// + /// + /// + public float Round(float v) { return (float)Math.Round(v, this.DecimalGranularity); } + + /// + /// + /// + /// + /// + public Vector2 Round(Vector2 v) { + v.x = this.Round(v.x); + v.y = this.Round(v.y); + return v; + } + + /// + /// + /// + public static Space2 ZeroOne { + get { + return new Space2 { + _min_ = Vector2.zero, + Max = Vector2.one, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; + } + } + + /// + /// + /// + public static Space2 TwentyEighty { + get { + return new Space2 { + _min_ = Vector2.one * 0.2f, + Max = Vector2.one * 0.8f, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; + } + } + + public static Space2 MinusOneOne { + get { + return new Space2 { + _min_ = -Vector2.one, + Max = Vector2.one, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; + } + } + + /// + /// + /// + public dynamic Min { get { return this._min_; } set { this._min_ = value; } } + + /// + /// + /// + public dynamic Max { get { return this._max_; } set { this._max_ = value; } } + + /// + /// + /// + /// + /// + Vector2 Denormalise01(Vector2 v) { return v * this.Span + this._min_; } + + /// + /// + /// + /// + /// + Vector2 Normalise01(Vector2 v) { return (v - this._min_) / this.Span; } + + /// + /// + /// + /// + /// + /// + public static Space2 operator*(Space2 a, float b) { + a.Max *= b; + a.Min *= b; + return a; + } + + /// + /// + /// + /// + /// + /// + /// + public static Space2 FromCenterExtents(Vector2 bounds_extents, + Normalisation normalised = Normalisation.Zero_one_, + int decimal_granularity = 4) { + return new Space2 { + _min_ = -bounds_extents, + Max = bounds_extents, + normalised = normalised, + _decimal_granularity = decimal_granularity + }; + } + } +} diff --git a/Runtime/Structs/Space/Space2.cs.meta b/Runtime/Structs/Space/Space2.cs.meta new file mode 100644 index 000000000..3b56731f1 --- /dev/null +++ b/Runtime/Structs/Space/Space2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b08187ced46894fa94f99ced00293b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Space/Space3.cs b/Runtime/Structs/Space/Space3.cs new file mode 100644 index 000000000..d2c7fefba --- /dev/null +++ b/Runtime/Structs/Space/Space3.cs @@ -0,0 +1,325 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities.Extensions; +using UnityEngine; + +namespace droid.Runtime.Structs.Space { + /// + /// + /// + [Serializable] + public struct Space3 : ISpace { + #region Fields + public Normalisation Normalised { get { return this.normalised; } set { this.normalised = value; } } + [Header("Space", order = 103)] + [SerializeField] + Vector3 _min_; + + [SerializeField] Vector3 _max_; + [Range(0, 15)] [SerializeField] int _decimal_granularity; + [SerializeField] Normalisation normalised; + + #endregion + + + /// + /// + /// + public int DecimalGranularity { + get { return this._decimal_granularity; } + set { this._decimal_granularity = value; } + } + + + /// + /// + /// + public Vector3 Span { get { return this._max_ - this._min_; } } + + + /// + /// + /// + /// + /// + /// + public dynamic Project(dynamic v) { + switch (this.Normalised) { + case Normalisation.None_: + return ClipRound(v); + case Normalisation.Zero_one_: + return ClipNormalise01Round(v); + case Normalisation.Minus_one_one_: + return ClipNormalise01Round(v); //return ClipNormaliseMinusOneOneRound(v); + default: throw new ArgumentOutOfRangeException(); + } + } + + /// + /// + /// + /// + /// + /// + public dynamic Reproject(dynamic v) { + switch (this.Normalised) { + case Normalisation.None_: + return ClipRound(v); + case Normalisation.Zero_one_: + return ClipRoundDenormalise01Clip(v); + case Normalisation.Minus_one_one_: + return ClipRoundDenormalise01Clip(v); // return ClipRoundDenormaliseMinusOneOneClip(v); + default: throw new ArgumentOutOfRangeException(); + } + } + + + /// + /// + /// + /// + /// + /// + /// + public static Vector3 Clip(Vector3 v, Vector3 min, Vector3 max) { + return new Vector3(Mathf.Clamp(v.x, min.x, max.x), + Mathf.Clamp(v.y, min.y, max.y), + Mathf.Clamp(v.z, min.z, max.z)); + } + + /// + /// + /// + /// + /// + public Vector3 Clip(Vector3 v) { return Clip(v, this._min_, this._max_); } + + /// + /// + /// + /// + /// + Vector3 ClipRound(Vector3 v) { return this.Clip(this.Round(v)); } + + dynamic ClipRoundDenormalise01Clip(dynamic configuration_configurable_value) { + return this.Clip(this.Round(this.Denormalise01(Clip(configuration_configurable_value, + Vector3.zero, + Vector3.one)))); + } + + /// + /// + /// + /// + /// + dynamic ClipNormalise01Round(dynamic v) { + if (v.x > this._max_.x) { + v.x = this._max_.x; + } else if (v.x < this._min_.x) { + v.x = this._min_.x; + } + + if (this.Span.x > 0) { + v.x = this.Round((v.x - this._min_.x) / this.Span.x); + } else { + v.x = 0; + } + + if (v.y > this._max_.y) { + v.y = this._max_.y; + } else if (v.y < this._min_.y) { + v.y = this._min_.y; + } + + if (this.Span.y > 0) { + v.y = this.Round((v.y - this._min_.y) / this.Span.y); + } else { + v.y = 0; + } + + if (v.z > this._max_.z) { + v.z = this._max_.z; + } else if (v.z < this._min_.z) { + v.z = this._min_.z; + } + + if (this.Span.z > 0) { + v.z = this.Round((v.z - this._min_.z) / this.Span.z); + } else { + v.z = 0; + } + + return v; + } + + /// + /// + /// + /// + /// + public float Round(float v) { return (float)Math.Round(v, this.DecimalGranularity); } + + /// + /// + /// + /// + /// + public Vector3 Round(Vector3 v) { + v.x = this.Round(v.x); + v.y = this.Round(v.y); + v.z = this.Round(v.z); + return v; + } + + + /// + /// + /// + public Space1 Xspace { + get { return new Space1 {Min = this._min_.x, Max = this._max_.x,DecimalGranularity = this.DecimalGranularity}; } + } + + /// + /// + /// + public Space1 Yspace { + get { return new Space1 {Min = this._min_.y, Max = this._max_.y,DecimalGranularity = this.DecimalGranularity}; } + } + + /// + /// + /// + public Space1 Zspace { + get { return new Space1 {Min = this._min_.z, Max = this._max_.z,DecimalGranularity = this.DecimalGranularity}; } + } + + /// + /// + /// + /// + /// + /// + public static Space3 operator+(Space3 b, Vector3 c) { + b._min_ += c; + b._max_ += c; + return b; + } + + /// + /// + /// + /// + /// + /// + public static Space3 operator-(Space3 b, Vector3 c) { + b._min_ -= c; + b._max_ -= c; + return b; + } + + /// + /// + /// + /// + /// + /// + public static Space3 operator-(Vector3 c, Space3 b) { + b._min_ -= c; + b._max_ -= c; + return b; + } + + /// + /// + /// + /// + /// + /// + public static Space3 operator+(Vector3 c, Space3 b) { + b._min_ += c; + b._max_ += c; + return b; + } + + /// + /// + /// + /// + /// + /// + public static Space3 operator*(Space3 a, float b) { + a.Max *= b; + a.Min *= b; + return a; + } + + /// + /// + /// + /// + public static Space3 ZeroOne { get { return new Space3 {_min_ = Vector3.zero, Max = Vector3.one, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; } } + + /// + /// + /// + public static Space3 TwentyEighty { + get { return new Space3 {Min = Vector3.one * 0.2f, _max_ = Vector3.one * 0.8f, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; } + } + + /// + /// + /// + public static Space3 MinusOneOne { get { return new Space3 {_min_ = -Vector3.one, Max = Vector3.one, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; } } + + + + /// + /// + /// + public dynamic Min { get { return this._min_; } set { this._min_ = value; } } + + /// + /// + /// + public dynamic Max { get { return this._max_; } set { this._max_ = value; } } + + /// + /// + /// + /// + /// + Vector3 Denormalise01(Vector3 v) { return v.Multiply(this.Span) + this._min_; } + + /// + /// + /// + /// + /// + Vector3 Normalise01(Vector3 v) { return (v - this._min_).Divide(this.Span); } + + /// + /// Return Space3 with the negative and positive extents respectively as min and max for each dimension + /// + /// + /// + public static Space3 + FromCenterExtents(Vector3 bounds_extents, Normalisation normalised=Normalisation.Zero_one_, int decimal_granularity = 4) { + return new Space3 { + _min_ = -bounds_extents, + Max = bounds_extents, + normalised = normalised, + _decimal_granularity = decimal_granularity + }; + } + } +} diff --git a/Runtime/Structs/Space/Space3.cs.meta b/Runtime/Structs/Space/Space3.cs.meta new file mode 100644 index 000000000..87c00b174 --- /dev/null +++ b/Runtime/Structs/Space/Space3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce59670c8a7aff7f9a2a3e4d079c8161 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Space/Space4.cs b/Runtime/Structs/Space/Space4.cs new file mode 100644 index 000000000..9ad167d49 --- /dev/null +++ b/Runtime/Structs/Space/Space4.cs @@ -0,0 +1,281 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Interfaces; +using droid.Runtime.Utilities.Extensions; +using UnityEngine; + +namespace droid.Runtime.Structs.Space { + /// + /// + [Serializable] + public struct Space4 : ISpace { + #region Fields + public Normalisation Normalised { get { return this.normalised; } set { this.normalised = value; } } + /// + /// + /// + [Header("Space", order = 103)] + [SerializeField] + Vector4 _min_; + + /// + /// + /// + [SerializeField] + Vector4 _max_; + + /// + /// + /// + [Range(0, 15)] + [SerializeField] + int _decimal_granularity; + + [SerializeField] Normalisation normalised; + + #endregion + + + + /// + /// + /// + public Vector4 Span { get { return this._max_ - this._min_; } } + + /// + /// + /// + /// + /// + /// + public dynamic Project(dynamic v) { + switch (this.Normalised) { + case Normalisation.None_: + return ClipRound(v); + case Normalisation.Zero_one_: + return ClipNormalise01Round(v); + case Normalisation.Minus_one_one_: + return ClipNormalise01Round(v); //return ClipNormaliseMinusOneOneRound(v); + default: throw new ArgumentOutOfRangeException(); + } + } + + /// + /// + /// + /// + /// + /// + public dynamic Reproject(dynamic v) { + switch (this.Normalised) { + case Normalisation.None_: + return ClipRound(v); + case Normalisation.Zero_one_: + return ClipRoundDenormalise01Clip(v); + case Normalisation.Minus_one_one_: + return ClipRoundDenormalise01Clip(v); // return ClipRoundDenormaliseMinusOneOneClip(v); + default: throw new ArgumentOutOfRangeException(); + } + } + + + /// + /// + /// + public int DecimalGranularity { + get { return this._decimal_granularity; } + set { this._decimal_granularity = value; } + } + + /// + /// + /// + public Space1 Xspace { + get { return new Space1 {Min = this._min_.x, Max = this._max_.x,DecimalGranularity = this.DecimalGranularity}; } + } + + /// + /// + /// + public Space1 Yspace { + get { return new Space1 {Min = this._min_.y, Max = this._max_.y,DecimalGranularity = this.DecimalGranularity}; } + } + + /// + /// + /// + public Space1 Zspace { + get { return new Space1 {Min = this._min_.z, Max = this._max_.z,DecimalGranularity = this.DecimalGranularity}; } + } + + /// + /// + /// + public Space1 Wspace { + get { return new Space1 {Min = this._min_.w, Max = this._max_.w,DecimalGranularity = this.DecimalGranularity}; } + } + + public Vector4 Clip(Vector4 v, Vector4 min, Vector4 max) { + return new Vector4(Mathf.Clamp(v.x, min.x, max.x), + Mathf.Clamp(v.y, min.y, max.y), + Mathf.Clamp(v.z, min.z, max.z), + Mathf.Clamp(v.w, min.w, max.w)); + } + + public Vector4 Clip(Vector4 v) { return this.Clip(v, this._min_, this._max_); } + + /// + /// + /// + /// + /// + Vector4 ClipRound(Vector4 v) { return this.Clip(this.Round(v)); } + + /// + /// + /// + /// + /// + public Vector4 Round(Vector4 v) { + v.x = this.Round(v.x); + v.y = this.Round(v.y); + v.w = this.Round(v.z); + v.z = this.Round(v.w); + return v; + } + + dynamic ClipRoundDenormalise01Clip(dynamic configuration_configurable_value) { + return this.Clip(this.Round(this.Denormalise01(Clip(configuration_configurable_value, + Vector4.zero, + Vector4.one)))); + } + + /// + /// + /// + /// + /// + dynamic ClipNormalise01Round(dynamic v) { + if (v.x > this._max_.x) { + v.x = this._max_.x; + } else if (v.x < this._min_.x) { + v = this._min_; + } + + if (this.Span.x > 0) { + v.x = this.Round((v.x - this._min_.x) / this.Span.x); + } else { + v.x = 0; + } + + if (v.y > this._max_.y) { + v.y = this._max_.y; + } else if (v.y < this._min_.y) { + v = this._min_; + } + + if (this.Span.y > 0) { + v.y = this.Round((v.y - this._min_.y) / this.Span.y); + } else { + v.y = 0; + } + + if (v.z > this._max_.z) { + v.z = this._max_.z; + } else if (v.z < this._min_.z) { + v = this._min_; + } + + if (this.Span.z > 0) { + v.z = this.Round((v.z - this._min_.z) / this.Span.z); + } else { + v.z = 0; + } + + if (v.w > this._max_.w) { + v.w = this._max_.w; + } else if (v.w < this._min_.w) { + v = this._min_; + } + + if (this.Span.w > 0) { + v.w = this.Round((v.w - this._min_.w) / this.Span.w); + } else { + v.w = 0; + } + + return v; + } + + /// + /// + /// + /// + /// + public float Round(float v) { return (float)Math.Round(v, this.DecimalGranularity); } + + /// + /// + /// + public static Space4 ZeroOne { get { return new Space4 {_min_ = Vector4.zero, Max = Vector4.one, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; } } + + /// + /// + /// + public static Space4 TwentyEighty { + get { return new Space4 {_min_ = Vector4.one * 0.2f, Max = Vector4.one * 0.8f, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; } + } + + /// + /// + /// + public static Space4 MinusOneOne { + get { return new Space4 {_min_ = -Vector4.one, Max = Vector4.one, + DecimalGranularity = 4, + Normalised = Normalisation.Zero_one_ + }; } + } + + /// + /// + /// + public dynamic Max { get { return this._max_; } set { this._max_ = value; } } + + /// + /// + /// + public dynamic Min { get { return this._min_; } set { this._min_ = value; } } + + /// + /// + /// + /// + /// + Vector4 Denormalise01(Vector4 v) { return v.Multiply(this.Span) + this._min_; } + + /// + /// + /// + /// + /// + Vector4 Normalise01(Vector4 v) { return (v - this._min_).Divide(this.Span); } + + /// + /// + /// + /// + /// + /// + public static Space4 operator*(Space4 a, float b) { + a.Max *= b; + a.Min *= b; + return a; + } + } +} diff --git a/Runtime/Structs/Space/Space4.cs.meta b/Runtime/Structs/Space/Space4.cs.meta new file mode 100644 index 000000000..0a72472fe --- /dev/null +++ b/Runtime/Structs/Space/Space4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa7e5b263becd786fbfd241aee1d1c17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Space/SphericalSpace.cs b/Runtime/Structs/Space/SphericalSpace.cs new file mode 100644 index 000000000..8278d0cad --- /dev/null +++ b/Runtime/Structs/Space/SphericalSpace.cs @@ -0,0 +1,248 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Structs.Space { +//Adapted from http://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/ +//http://en.wikipedia.org/wiki/Spherical_coordinate_system + /// + /// + /// + [Serializable] + public struct SphericalSpace { + // Determine what happen when a limit is reached, repeat or clamp. + /// + /// + /// + [SerializeField] + bool _LoopPolar; + + /// + /// + /// + [SerializeField] + bool _LoopElevation; + + [SerializeField] float _radius; + [SerializeField] float _polar; + [SerializeField] float _elevation; + [SerializeField] float _min_radius; + [SerializeField] float _max_radius; + [SerializeField] float _min_polar; + [SerializeField] float _max_polar; + [SerializeField] float _min_elevation; + [SerializeField] float _max_elevation; + + public SphericalSpace(float radius, + float polar, + float elevation, + float min_radius = 1f, + float max_radius = 20f, + float min_polar = 0f, + float max_polar = Mathf.PI * 2f, + float min_elevation = 0f, + float max_elevation = Mathf.PI / 3f, + bool loop_polar = true, + bool loop_elevation = false) { + this._min_radius = min_radius; + this._max_radius = max_radius; + this._min_polar = min_polar; + this._max_polar = max_polar; + this._min_elevation = min_elevation; + this._max_elevation = max_elevation; + this._LoopPolar = loop_polar; + this._LoopElevation = loop_elevation; + + this._radius = Mathf.Clamp(radius, this._min_radius, this._max_radius); + + this._polar = LoopOrClamp(polar, + this._min_polar, + this._max_polar, + loop_polar); + + this._elevation = LoopOrClamp(elevation, + this._min_elevation, + this._max_elevation, + loop_elevation); + } + + static float LoopOrClamp(float v, float min, float max, bool loop) { + return loop ? Mathf.Repeat(v, max - min) : Mathf.Clamp(v, min, max); + } + + /// + /// + /// + public Single Elevation { + get { return this._elevation; } + set { + this._elevation = LoopOrClamp(value, + this._min_elevation, + this._max_elevation, + this._LoopElevation); + } + } + + /// + /// + /// + public Single Polar { + get { return this._polar; } + set { + this._polar = LoopOrClamp(value, + this._min_polar, + this._max_polar, + this._LoopPolar); + ; + } + } + + /// + /// + /// + public Single Radius { + get { return this._radius; } + set { this._radius = Mathf.Clamp(value, this._min_radius, this._max_radius); } + } + + /// + /// Return a 2d vector of the polar and elevation coordinate + /// + public Vector2 ToVector2 { get { return new Vector2(this._polar, this._elevation); } } + + public Vector3 ToVector3 { get { return new Vector3(this._polar, this._elevation, this._radius); } } + + /// + /// + /// + public Vector3 ToCartesian() { + var a = this._radius * Mathf.Cos(this._elevation); + return new Vector3(a * Mathf.Cos(this._polar), + this._radius * Mathf.Sin(this._elevation), + a * Mathf.Sin(this._polar)); + } + + /// + /// + /// + /// + /// + public SphericalSpace UpdateFromCartesian(Vector3 cartesian_coordinate) { + if (Math.Abs(cartesian_coordinate.x) < float.Epsilon) { + cartesian_coordinate.x = Mathf.Epsilon; + } + + this._radius = cartesian_coordinate.magnitude; + + this._polar = Mathf.Atan(cartesian_coordinate.z / cartesian_coordinate.x); + + if (cartesian_coordinate.x < 0f) { + this._polar += Mathf.PI; + } + + this._elevation = Mathf.Asin(cartesian_coordinate.y / this._radius); + + return this; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static SphericalSpace FromCartesian(Vector3 cartesian_coordinate, + float min_radius = 1f, + float max_radius = 20f, + float min_polar = 0f, + float max_polar = Mathf.PI * 2f, + float min_elevation = 0f, + float max_elevation = Mathf.PI / 3f) { + var spherical = new SphericalSpace { + _min_radius = min_radius, + _max_radius = max_radius, + _min_polar = min_polar, + _max_polar = max_polar, + _min_elevation = min_elevation, + _max_elevation = max_elevation + }; + + if (Math.Abs(cartesian_coordinate.x) < float.Epsilon) { + cartesian_coordinate.x = Mathf.Epsilon; + } + + spherical._radius = cartesian_coordinate.magnitude; + + spherical._polar = Mathf.Atan(cartesian_coordinate.z / cartesian_coordinate.x); + + if (cartesian_coordinate.x < 0f) { + spherical._polar += Mathf.PI; + } + + spherical._elevation = Mathf.Asin(cartesian_coordinate.y / spherical._radius); + + return spherical; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static SphericalSpace FromTransform(Transform T, + float min_radius = 1f, + float max_radius = 20f, + float min_polar = 0f, + float max_polar = Mathf.PI * 2f, + float min_elevation = 0f, + float max_elevation = Mathf.PI / 3f) { + return FromCartesian(T.position, + min_radius, + max_radius, + min_polar, + max_polar, + min_elevation, + max_elevation); + } + + /// + /// + /// + /// + public override string ToString() { + return $"Radius:{this.Radius}, Polar:{this.Polar}, Elevation:{this.Elevation}."; + } + + /// + /// + /// + /// + /// + public SphericalSpace TranslateRadius(Single scroll_speed) { + this.Radius += scroll_speed; + return this; + } + + /// + /// + /// + /// + /// + /// + public SphericalSpace Rotate(Single polar_delta, Single elevation_delta) { + this.Polar += polar_delta; + this.Elevation += elevation_delta; + return this; + } + } +} diff --git a/Runtime/Structs/Space/SphericalSpace.cs.meta b/Runtime/Structs/Space/SphericalSpace.cs.meta new file mode 100644 index 000000000..aa9afbb45 --- /dev/null +++ b/Runtime/Structs/Space/SphericalSpace.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f14bb5c76f4c4755ab8a5f26e8192c34 +timeCreated: 1569099011 \ No newline at end of file diff --git a/Runtime/Structs/Vectors.meta b/Runtime/Structs/Vectors.meta new file mode 100644 index 000000000..61cf8ba06 --- /dev/null +++ b/Runtime/Structs/Vectors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd84e2b5767d83a768ecbcb4104cb547 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Vectors/DoubleVector3.cs b/Runtime/Structs/Vectors/DoubleVector3.cs new file mode 100644 index 000000000..611845aaa --- /dev/null +++ b/Runtime/Structs/Vectors/DoubleVector3.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Structs.Vectors { + [Serializable] + public struct DoubleVector3 { + [SerializeField] double _X; + [SerializeField] double _Y; + [SerializeField] double _Z; + + public DoubleVector3(Vector3 vec3) { + this._X = vec3.x; + this._Y = vec3.y; + this._Z = vec3.z; + } + + public static DoubleVector3 operator+(DoubleVector3 a, DoubleVector3 b) { + a._X += b._X; + a._Y += b._Y; + a._Z += b._Z; + return a; + } + + public DoubleVector3(double x, double y, double z) { + this._X = x; + this._Y = y; + this._Z = z; + } + + public Double X { get { return this._X; } set { this._X = value; } } + + public Double Y { get { return this._Y; } set { this._Y = value; } } + + public Double Z { get { return this._Z; } set { this._Z = value; } } + } +} diff --git a/Runtime/Structs/Vectors/DoubleVector3.cs.meta b/Runtime/Structs/Vectors/DoubleVector3.cs.meta new file mode 100644 index 000000000..25579f15f --- /dev/null +++ b/Runtime/Structs/Vectors/DoubleVector3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f20a1d5cd56521e08a3d84fc939c5e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Vectors/DoubleVector4.cs b/Runtime/Structs/Vectors/DoubleVector4.cs new file mode 100644 index 000000000..33aece1a0 --- /dev/null +++ b/Runtime/Structs/Vectors/DoubleVector4.cs @@ -0,0 +1,54 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Structs.Vectors { + [Serializable] + public struct DoubleVector4 { + [SerializeField] double _X; + [SerializeField] double _Y; + [SerializeField] double _Z; + [SerializeField] double _W; + + public DoubleVector4(Vector4 vec3) { + this._X = vec3.x; + this._Y = vec3.y; + this._Z = vec3.z; + this._W = vec3.w; + } + + public static DoubleVector4 operator+(DoubleVector4 a, DoubleVector4 b) { + a._X += b._X; + a._Y += b._Y; + a._Z += b._Z; + a._W += b._W; + return a; + } + + public DoubleVector4(double x, double y, double z, double w) { + this._X = x; + this._Y = y; + this._Z = z; + this._W = w; + } + + public Double X { get { return this._X; } set { this._X = value; } } + + public Double Y { get { return this._Y; } set { this._Y = value; } } + + public Double Z { get { return this._Z; } set { this._Z = value; } } + + public Double W { get { return this._W; } set { this._W = value; } } + + /// + /// + /// + public static DoubleVector4 Zero { + get { + return new DoubleVector4(0, + 0, + 0, + 0); + } + } + } +} diff --git a/Runtime/Structs/Vectors/DoubleVector4.cs.meta b/Runtime/Structs/Vectors/DoubleVector4.cs.meta new file mode 100644 index 000000000..93fc9cd9d --- /dev/null +++ b/Runtime/Structs/Vectors/DoubleVector4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1f2cd3d83bbd1911a9dbd4859a71ae3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Vectors/IntVector3.cs b/Runtime/Structs/Vectors/IntVector3.cs new file mode 100644 index 000000000..7f657f2fb --- /dev/null +++ b/Runtime/Structs/Vectors/IntVector3.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Structs.Vectors { + [Serializable] + public struct IntVector3 { + [SerializeField] public int _X; + [SerializeField] public int _Y; + [SerializeField] public int _Z; + + public IntVector3(Vector3 vec3) { + this._X = Mathf.RoundToInt(vec3.x); + this._Y = Mathf.RoundToInt(vec3.y); + this._Z = Mathf.RoundToInt(vec3.z); + } + + public static IntVector3 operator+(IntVector3 a, IntVector3 b) { + a._X += b._X; + a._Y += b._Y; + a._Z += b._Z; + return a; + } + + public IntVector3(int x, int y, int z) { + this._X = x; + this._Y = y; + this._Z = z; + } + + public int X { get { return this._X; } set { this._X = value; } } + + public int Y { get { return this._Y; } set { this._Y = value; } } + + public int Z { get { return this._Z; } set { this._Z = value; } } + } +} diff --git a/Runtime/Structs/Vectors/IntVector3.cs.meta b/Runtime/Structs/Vectors/IntVector3.cs.meta new file mode 100644 index 000000000..0499c19a1 --- /dev/null +++ b/Runtime/Structs/Vectors/IntVector3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a6273c01689708f1924942af51f9079 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Vectors/IntVector4.cs b/Runtime/Structs/Vectors/IntVector4.cs new file mode 100644 index 000000000..8b48930fa --- /dev/null +++ b/Runtime/Structs/Vectors/IntVector4.cs @@ -0,0 +1,61 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Structs.Vectors { + [Serializable] + public struct IntVector4 { + [SerializeField] public int _X; + [SerializeField] public int _Y; + [SerializeField] public int _Z; + [SerializeField] public int _W; + + public IntVector4(Vector4 vec3) { + this._X = (int)vec3.x; + this._Y = (int)vec3.y; + this._Z = (int)vec3.z; + this._W = (int)vec3.w; + } + + public static IntVector4 operator+(IntVector4 a, IntVector4 b) { + a._X += b._X; + a._Y += b._Y; + a._Z += b._Z; + a._W += b._W; + return a; + } + + public IntVector4(int x, int y, int z, int w) { + this._X = x; + this._Y = y; + this._Z = z; + this._W = w; + } + + public IntVector4(float x, float y, float z, float w) { + this._X = (int)x; + this._Y = (int)y; + this._Z = (int)z; + this._W = (int)w; + } + + public int X { get { return this._X; } set { this._X = value; } } + + public int Y { get { return this._Y; } set { this._Y = value; } } + + public int Z { get { return this._Z; } set { this._Z = value; } } + + public int W { get { return this._W; } set { this._W = value; } } + + /// + /// + /// + public static IntVector4 Zero { + get { + return new IntVector4(0, + 0, + 0, + 0); + } + } + } +} diff --git a/Runtime/Structs/Vectors/IntVector4.cs.meta b/Runtime/Structs/Vectors/IntVector4.cs.meta new file mode 100644 index 000000000..2dfb342e7 --- /dev/null +++ b/Runtime/Structs/Vectors/IntVector4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 795f6a243b388c6b59b7f07185cd4b3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/BoundingBoxes/BoundingBox.cs b/Runtime/Utilities/BoundingBoxes/BoundingBox.cs deleted file mode 100644 index e55fb7952..000000000 --- a/Runtime/Utilities/BoundingBoxes/BoundingBox.cs +++ /dev/null @@ -1,457 +0,0 @@ -using System.Collections.Generic; -using UnityEditor; -using UnityEngine; - -#if UNITY_EDITOR -#endif - -namespace Neodroid.Runtime.Utilities.BoundingBoxes { - /// - /// - /// - [ExecuteInEditMode] - public class BoundingBox : MonoBehaviour { - /// - /// - /// - Vector3 _bottom_back_left; - - /// - /// - /// - Vector3 _bottom_back_right; - - /// - /// - /// - Vector3 _bottom_front_left; - - /// - /// - /// - Vector3 _bottom_front_right; - - /// - /// - /// - [HideInInspector] - protected Bounds _Bounds; - - /// - /// - /// - [HideInInspector] - protected Vector3 _Bounds_Offset; - - /// - /// - /// - public DrawBoundingBoxOnCamera _Camera; - - /// - /// - /// - Collider[] _children_colliders; - - /// - /// - /// - MeshFilter[] _children_meshes; - - /// - /// - /// - public bool _Collider_Based; - - /// - /// - /// - Vector3[] _corners; - - /// - /// - /// - public bool _Freeze = true; - - /// - /// - /// - public bool _Include_Children = true; - - // Vector3 startingBoundSize; - // Vector3 startingBoundCenterLocal; - Vector3 _last_position; - Quaternion _last_rotation; - - /// - /// - /// - [HideInInspector] - //public Vector3 startingScale; - Vector3 _last_scale; - - /// - /// - /// - public Color _Line_Color = new Color(1f, 0.36f, 0.38f, 0.74f); - - /// - /// - /// - Vector3[,] _lines; - - /// - /// - /// - Quaternion _rotation; - - /// - /// - /// - public bool _Setup_On_Awake; - - Vector3 _top_back_left; - Vector3 _top_back_right; - - Vector3 _top_front_left; - Vector3 _top_front_right; - - List _lines_list = new List(); - - public Vector3[] BoundingBoxCoordinates { - get { - return new[] { - this._top_front_left, - this._top_front_right, - this._top_back_left, - this._top_back_right, - this._bottom_front_left, - this._bottom_front_right, - this._bottom_back_left, - this._bottom_back_right - }; - } - } - - public Bounds Bounds { - get { return this._Bounds; } - } - - public Vector3 Max { - get { return this._Bounds.max; } - } - - public Vector3 Min { - get { return this._Bounds.min; } - } - - /// - /// - /// - public string BoundingBoxCoordinatesAsString { - get { - var str_rep = ""; - str_rep += "\"_top_front_left\":" + this.BoundingBoxCoordinates[0] + ", "; - str_rep += "\"_top_front_right\":" + this.BoundingBoxCoordinates[1] + ", "; - str_rep += "\"_top_back_left\":" + this.BoundingBoxCoordinates[2] + ", "; - str_rep += "\"_top_back_right\":" + this.BoundingBoxCoordinates[3] + ", "; - str_rep += "\"_bottom_front_left\":" + this.BoundingBoxCoordinates[4] + ", "; - str_rep += "\"_bottom_front_right\":" + this.BoundingBoxCoordinates[5] + ", "; - str_rep += "\"_bottom_back_left\":" + this.BoundingBoxCoordinates[6] + ", "; - str_rep += "\"_bottom_back_right\":" + this.BoundingBoxCoordinates[7]; - return str_rep; - } - } - - /// - /// - /// - public string BoundingBoxCoordinatesAsJson { - get { - var str_rep = "{"; - str_rep += "\"_top_front_left\":" + this.JsonifyVec3(this.BoundingBoxCoordinates[0]) + ", "; - str_rep += "\"_bottom_back_right\":" + this.JsonifyVec3(this.BoundingBoxCoordinates[7]); - str_rep += "}"; - return str_rep; - } - } - - /// - /// - /// - /// - /// - string JsonifyVec3(Vector3 vec) { return $"[{vec.x},{vec.y},{vec.z}]"; } - - /// - /// - /// - void Reset() { - this.Awake(); - this.Start(); - } - - /// - /// - /// - void Start() { - if (!this._Setup_On_Awake) { - this.Setup(); - } - } - - /// - /// - /// - void Awake() { - if (this._Setup_On_Awake) { - this.Setup(); - } - } - - /// - /// - /// - void Setup() { - this._last_position = this.transform.position; - this._last_rotation = this.transform.rotation; - this._last_scale = this.transform.localScale; - - this._Camera = FindObjectOfType(); - this._children_meshes = this.GetComponentsInChildren(); - this._children_colliders = this.GetComponentsInChildren(); - - this.CalculateBounds(); - this.Initialise(); - } - - /// - /// - /// - public void Initialise() { - this.RecalculatePoints(); - this.RecalculateLines(); - } - - /// - /// - /// - void LateUpdate() { - if (this._Freeze) { - return; - } - - if (this._children_meshes != this.GetComponentsInChildren()) { - this.Reset(); - } - - if (this._children_colliders != this.GetComponentsInChildren()) { - this.Reset(); - } - - if (this.transform.localScale != this._last_scale) { - this.ScaleBounds(); - this.RecalculatePoints(); - } - - if (this.transform.position != this._last_position - || this.transform.rotation != this._last_rotation - || this.transform.localScale != this._last_scale) { - this.RecalculateLines(); - this._last_rotation = this.transform.rotation; - this._last_position = this.transform.position; - this._last_scale = this.transform.localScale; - } - - if (this._Camera) { - this._Camera.SetOutlines(this._lines, this._Line_Color, new Vector3[0, 0]); - } - } - - /// - /// - /// - public void ScaleBounds() { - //this._Bounds.size = new Vector3(startingBoundSize.x * transform.localScale.x / startingScale.x, startingBoundSize.y * transform.localScale.y / startingScale.y, startingBoundSize.z * transform.localScale.z / startingScale.z); - //this._Bounds.center = transform.TransformPoint(startingBoundCenterLocal); - } - - /// - /// - /// - void FitBoundingBoxToChildrenColliders() { - var col = this.GetComponent(); - var bounds = new Bounds(this.transform.position, Vector3.zero); // position and size - - if (col) { - bounds.Encapsulate(col.bounds); - } - - if (this._Include_Children) { - foreach (var child_col in this._children_colliders) { - if (child_col != col) { - bounds.Encapsulate(child_col.bounds); - } - } - } - - this._Bounds = bounds; - this._Bounds_Offset = bounds.center - this.transform.position; - } - - /// - /// - /// - void FitBoundingBoxToChildrenRenders() { - var bounds = new Bounds(this.transform.position, Vector3.zero); - - var mesh = this.GetComponent(); - if (mesh) { - var ms = mesh.sharedMesh; - var vc = ms.vertexCount; - for (var i = 0; i < vc; i++) { - bounds.Encapsulate(mesh.transform.TransformPoint(ms.vertices[i])); - } - } - - foreach (var t in this._children_meshes) { - if (t) { - var ms = t.sharedMesh; - if (ms) { - var vc = ms.vertexCount; - for (var j = 0; j < vc; j++) { - bounds.Encapsulate(t.transform.TransformPoint(ms.vertices[j])); - } - } - } - } - - this._Bounds = bounds; - this._Bounds_Offset = this._Bounds.center - this.transform.position; - } - - /// - /// - /// - void CalculateBounds() { - this._rotation = this.transform.rotation; - this.transform.rotation = Quaternion.Euler(0f, 0f, 0f); - - if (this._Collider_Based) { - this.FitBoundingBoxToChildrenColliders(); - } else { - this.FitBoundingBoxToChildrenRenders(); - } - - this.transform.rotation = this._rotation; - } - - /// - /// - /// - void RecalculatePoints() { - this._Bounds.size = new Vector3( - this._Bounds.size.x * this.transform.localScale.x / this._last_scale.x, - this._Bounds.size.y * this.transform.localScale.y / this._last_scale.y, - this._Bounds.size.z * this.transform.localScale.z / this._last_scale.z); - this._Bounds_Offset = new Vector3( - this._Bounds_Offset.x * this.transform.localScale.x / this._last_scale.x, - this._Bounds_Offset.y * this.transform.localScale.y / this._last_scale.y, - this._Bounds_Offset.z * this.transform.localScale.z / this._last_scale.z); - - this._top_front_right = this._Bounds_Offset + Vector3.Scale(this._Bounds.extents, new Vector3(1, 1, 1)); - this._top_front_left = this._Bounds_Offset + Vector3.Scale(this._Bounds.extents, new Vector3(-1, 1, 1)); - this._top_back_left = this._Bounds_Offset + Vector3.Scale(this._Bounds.extents, new Vector3(-1, 1, -1)); - this._top_back_right = this._Bounds_Offset + Vector3.Scale(this._Bounds.extents, new Vector3(1, 1, -1)); - this._bottom_front_right = - this._Bounds_Offset + Vector3.Scale(this._Bounds.extents, new Vector3(1, -1, 1)); - this._bottom_front_left = - this._Bounds_Offset + Vector3.Scale(this._Bounds.extents, new Vector3(-1, -1, 1)); - this._bottom_back_left = - this._Bounds_Offset + Vector3.Scale(this._Bounds.extents, new Vector3(-1, -1, -1)); - this._bottom_back_right = - this._Bounds_Offset + Vector3.Scale(this._Bounds.extents, new Vector3(1, -1, -1)); - - this._corners = new[] { - this._top_front_right, - this._top_front_left, - this._top_back_left, - this._top_back_right, - this._bottom_front_right, - this._bottom_front_left, - this._bottom_back_left, - this._bottom_back_right - }; - } - - /// - /// - /// - void RecalculateLines() { - var rot = this.transform.rotation; - var pos = this.transform.position; - - this._lines_list.Clear(); - //int linesCount = 12; - - for (var i = 0; i < 4; i++) { - //width - var line = new[] {rot * this._corners[2 * i] + pos, rot * this._corners[2 * i + 1] + pos}; - this._lines_list.Add(line); - - //height - line = new[] {rot * this._corners[i] + pos, rot * this._corners[i + 4] + pos}; - this._lines_list.Add(line); - - //depth - line = new[] {rot * this._corners[2 * i] + pos, rot * this._corners[2 * i + 3 - 4 * (i % 2)] + pos}; - this._lines_list.Add(line); - } - - this._lines = new Vector3[this._lines_list.Count, 2]; - for (var j = 0; j < this._lines_list.Count; j++) { - this._lines[j, 0] = this._lines_list[j][0]; - this._lines[j, 1] = this._lines_list[j][1]; - } - } - - /// - /// - /// - void OnMouseDown() { - //if (_permanent) - // return; - this.enabled = !this.enabled; - } - - #if UNITY_EDITOR - /// - /// - /// - void OnValidate() { - if (EditorApplication.isPlaying) { - return; - } - - this.Initialise(); - } - - #endif - - /// - /// - /// - void OnDrawGizmos() { - if (this.enabled) { - if (this.enabled) { - Gizmos.color = this._Line_Color; - if (this._lines != null) { - for (var i = 0; i < this._lines.GetLength(0); i++) { - Gizmos.DrawLine(this._lines[i, 0], this._lines[i, 1]); - } - } - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/BoundingBoxes/Corners.cs b/Runtime/Utilities/BoundingBoxes/Corners.cs deleted file mode 100644 index 8e2f9ca18..000000000 --- a/Runtime/Utilities/BoundingBoxes/Corners.cs +++ /dev/null @@ -1,105 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.BoundingBoxes { - /// - /// - /// - public static class Corners { - public static Vector3[] ExtractCorners( - Vector3 v3_center, - Vector3 v3_extents, - Transform reference_transform = null) { - var v3_front_top_left = new Vector3( - v3_center.x - v3_extents.x, - v3_center.y + v3_extents.y, - v3_center.z - v3_extents.z); // Front top left corner - var v3_front_top_right = new Vector3( - v3_center.x + v3_extents.x, - v3_center.y + v3_extents.y, - v3_center.z - v3_extents.z); // Front top right corner - var v3_front_bottom_left = new Vector3( - v3_center.x - v3_extents.x, - v3_center.y - v3_extents.y, - v3_center.z - v3_extents.z); // Front bottom left corner - var v3_front_bottom_right = new Vector3( - v3_center.x + v3_extents.x, - v3_center.y - v3_extents.y, - v3_center.z - v3_extents.z); // Front bottom right corner - var v3_back_top_left = new Vector3( - v3_center.x - v3_extents.x, - v3_center.y + v3_extents.y, - v3_center.z + v3_extents.z); // Back top left corner - var v3_back_top_right = new Vector3( - v3_center.x + v3_extents.x, - v3_center.y + v3_extents.y, - v3_center.z + v3_extents.z); // Back top right corner - var v3_back_bottom_left = new Vector3( - v3_center.x - v3_extents.x, - v3_center.y - v3_extents.y, - v3_center.z + v3_extents.z); // Back bottom left corner - var v3_back_bottom_right = new Vector3( - v3_center.x + v3_extents.x, - v3_center.y - v3_extents.y, - v3_center.z + v3_extents.z); // Back bottom right corner - if (reference_transform) { - v3_front_top_left = reference_transform.TransformPoint(v3_front_top_left); - v3_front_top_right = reference_transform.TransformPoint(v3_front_top_right); - v3_front_bottom_left = reference_transform.TransformPoint(v3_front_bottom_left); - v3_front_bottom_right = reference_transform.TransformPoint(v3_front_bottom_right); - v3_back_top_left = reference_transform.TransformPoint(v3_back_top_left); - v3_back_top_right = reference_transform.TransformPoint(v3_back_top_right); - v3_back_bottom_left = reference_transform.TransformPoint(v3_back_bottom_left); - v3_back_bottom_right = reference_transform.TransformPoint(v3_back_bottom_right); - } - - return new[] { - v3_front_top_left, - v3_front_top_right, - v3_front_bottom_left, - v3_front_bottom_right, - v3_back_top_left, - v3_back_top_right, - v3_back_bottom_left, - v3_back_bottom_right - }; - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public static void DrawBox( - Vector3 v3_front_top_left, - Vector3 v3_front_top_right, - Vector3 v3_front_bottom_left, - Vector3 v3_front_bottom_right, - Vector3 v3_back_top_left, - Vector3 v3_back_top_right, - Vector3 v3_back_bottom_left, - Vector3 v3_back_bottom_right, - Color color) { - Debug.DrawLine(v3_front_top_left, v3_front_top_right, color); - Debug.DrawLine(v3_front_top_right, v3_front_bottom_right, color); - Debug.DrawLine(v3_front_bottom_right, v3_front_bottom_left, color); - Debug.DrawLine(v3_front_bottom_left, v3_front_top_left, color); - - Debug.DrawLine(v3_back_top_left, v3_back_top_right, color); - Debug.DrawLine(v3_back_top_right, v3_back_bottom_right, color); - Debug.DrawLine(v3_back_bottom_right, v3_back_bottom_left, color); - Debug.DrawLine(v3_back_bottom_left, v3_back_top_left, color); - - Debug.DrawLine(v3_front_top_left, v3_back_top_left, color); - Debug.DrawLine(v3_front_top_right, v3_back_top_right, color); - Debug.DrawLine(v3_front_bottom_right, v3_back_bottom_right, color); - Debug.DrawLine(v3_front_bottom_left, v3_back_bottom_left, color); - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxOnCamera.cs b/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxOnCamera.cs deleted file mode 100644 index 36ec7e016..000000000 --- a/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxOnCamera.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.BoundingBoxes { - /// - /// - /// - [RequireComponent(typeof(Camera)), ExecuteInEditMode] - public class DrawBoundingBoxOnCamera : MonoBehaviour { - List _colors = new List(); - [SerializeField] Material _line_material; - List _outlines = new List(); - List _triangles = new List(); - - void Awake() { - if (!this._line_material) { - var shader = Shader.Find("Unlit/Color"); - this._line_material = new Material(shader); - } - } - - void OnPostRender() { - if (this._outlines == null) { - return; - } - - if (this._line_material) { - this._line_material.SetPass(0); - } - - GL.Begin(GL.LINES); - for (var j = 0; j < this._outlines.Count; j++) { - GL.Color(this._colors[j]); - for (var i = 0; i < this._outlines[j].GetLength(0); i++) { - GL.Vertex(this._outlines[j][i, 0]); - GL.Vertex(this._outlines[j][i, 1]); - } - } - - GL.End(); - - GL.Begin(GL.TRIANGLES); - - for (var j = 0; j < this._triangles.Count; j++) { - GL.Color(this._colors[j]); - for (var i = 0; i < this._triangles[j].GetLength(0); i++) { - GL.Vertex(this._triangles[j][i, 0]); - GL.Vertex(this._triangles[j][i, 1]); - GL.Vertex(this._triangles[j][i, 2]); - } - } - - GL.End(); - } - - /// - /// - /// - /// - /// - public void SetOutlines(Vector3[,] new_outlines, Color newcolor) { - if (new_outlines == null) { - return; - } - - if (this._outlines == null) { - return; - } - - if (new_outlines.GetLength(0) > 0) { - this._outlines.Add(new_outlines); - this._colors.Add(newcolor); - } - } - - /// - /// - /// - /// - /// - /// - public void SetOutlines(Vector3[,] new_outlines, Color newcolor, Vector3[,] new_triangles) { - if (new_outlines == null) { - return; - } - - if (this._outlines == null) { - return; - } - - if (new_outlines.GetLength(0) > 0) { - this._outlines.Add(new_outlines); - this._colors.Add(newcolor); - this._triangles.Add(new_triangles); - } - } - - void Update() { - this._outlines.Clear(); - this._colors.Clear(); - this._triangles.Clear(); - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxOnCamera.cs.meta b/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxOnCamera.cs.meta deleted file mode 100644 index ef908118a..000000000 --- a/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxOnCamera.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 8ef1e70b0e1574993a2c4d202ea421f4 -timeCreated: 1514237453 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: - - lineMaterial: {fileID: 2100000, guid: 982b0c6dd4bcd894b9576f123b17edd3, type: 2} - executionOrder: 0 - icon: {fileID: 2800000, guid: af4792457046746828ff2d22efe682aa, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxes.cs b/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxes.cs deleted file mode 100644 index 48bd71ee9..000000000 --- a/Runtime/Utilities/BoundingBoxes/DrawBoundingBoxes.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.BoundingBoxes { - [ExecuteInEditMode] - public class ShowBoundingBoxes : MonoBehaviour { - public GameObject _Line_Object; - Dictionary _lines = new Dictionary(); - - MeshFilter[] _mesh_filter_objects; - public Color _Color = Color.green; - - void ReallocateLineRenderers() { - this._mesh_filter_objects = FindObjectsOfType(); - this._lines.Clear(); - } - - void Update() { - if (this._lines == null || this._mesh_filter_objects == null) { - this.ReallocateLineRenderers(); - } - - this.CalcPositonsAndDrawBoxes(); - } - - void CalcPositonsAndDrawBoxes() { - foreach (var mesh_filter_object in this._mesh_filter_objects) { - if (mesh_filter_object.gameObject.CompareTag("Target")) { - GameObject liner; - if (!this._lines.ContainsKey(mesh_filter_object.gameObject)) { - liner = Instantiate(this._Line_Object, this._Line_Object.transform); - this._lines.Add(mesh_filter_object.gameObject, liner); - } else { - Debug.Log("found Target"); - liner = this._lines[mesh_filter_object.gameObject]; - } - - var bounds = mesh_filter_object.mesh.bounds; - - //Bounds bounds; - //BoxCollider bc = GetComponent(); - //if (bc != null) - // bounds = bc.bounds; - //else - //return; - - var v3_center = bounds.center; - var v3_extents = bounds.extents; - - var corners = Corners.ExtractCorners(v3_center, v3_extents, mesh_filter_object.transform); - - liner.GetComponent().SetPosition(0, corners[4]); - liner.GetComponent().SetPosition(1, corners[5]); - - Corners.DrawBox( - corners[0], - corners[1], - corners[2], - corners[3], - corners[4], - corners[5], - corners[6], - corners[7], - this._Color); - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/BoundingBoxes/Experimental/BoundingBoxUtilities.cs b/Runtime/Utilities/BoundingBoxes/Experimental/BoundingBoxUtilities.cs deleted file mode 100644 index 89ef766ed..000000000 --- a/Runtime/Utilities/BoundingBoxes/Experimental/BoundingBoxUtilities.cs +++ /dev/null @@ -1,198 +0,0 @@ -using Neodroid.Runtime.Utilities.Sensors; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.BoundingBoxes.Experimental { - public static class Utilities { - public static void DrawBoxFromCenter(Vector3 p, float r, Color c) { - // p is pos.yition of the center, r is "radius" and c is the color of the box - //Bottom lines - Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(r + p.x, -r + p.y, -r + p.z), c); - Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(-r + p.x, -r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(-r + p.x, -r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(r + p.x, -r + p.y, -r + p.z), c); - - //Vertical lines - Debug.DrawLine(new Vector3(-r + p.x, r + p.y, -r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); - Debug.DrawLine(new Vector3(-r + p.x, r + p.y, -r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, r + p.y, r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, r + p.y, r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); - - //Top lines - Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(-r + p.x, r + p.y, -r + p.z), c); - Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, -r + p.y, -r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(r + p.x, r + p.y, r + p.z), c); - } - - public static void RegisterCollisionTriggerCallbacksOnChildren( - Transform transform, - ChildColliderSensor.OnChildCollisionEnterDelegate on_collision_enter_child, - ChildColliderSensor.OnChildTriggerEnterDelegate on_trigger_enter_child, - ChildColliderSensor.OnChildCollisionExitDelegate on_collision_exit_child, - ChildColliderSensor.OnChildTriggerExitDelegate on_trigger_exit_child, - bool debug = false) { - var children_with_colliders = transform.GetComponentsInChildren(transform.gameObject); - - foreach (var child in children_with_colliders) { - var child_sensor = child.gameObject.AddComponent(); - child_sensor.OnCollisionEnterDelegate = on_collision_enter_child; - child_sensor.OnTriggerEnterDelegate = on_trigger_enter_child; - child_sensor.OnCollisionExitDelegate = on_collision_exit_child; - child_sensor.OnTriggerExitDelegate = on_trigger_exit_child; - if (debug) { - Debug.Log(transform.name + " has " + child_sensor.name + " registered"); - } - } - } - - public static void DrawRect(float x_size, float y_size, float z_size, Vector3 pos, Color color) { - var x = x_size / 2; - var y = y_size / 2; - var z = z_size / 2; - - //Vertical lines - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(-x + pos.x, y + pos.y, -z + pos.z), - color); - Debug.DrawLine( - new Vector3(x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(x + pos.x, y + pos.y, -z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, z + pos.z), - new Vector3(-x + pos.x, y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(x + pos.x, -y + pos.y, z + pos.z), - new Vector3(x + pos.x, y + pos.y, z + pos.z), - color); - - //Horizontal top - Debug.DrawLine( - new Vector3(-x + pos.x, y + pos.y, -z + pos.z), - new Vector3(x + pos.x, y + pos.y, -z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, y + pos.y, z + pos.z), - new Vector3(x + pos.x, y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, y + pos.y, -z + pos.z), - new Vector3(-x + pos.x, y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(x + pos.x, y + pos.y, -z + pos.z), - new Vector3(x + pos.x, y + pos.y, z + pos.z), - color); - - //Horizontal bottom - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(x + pos.x, -y + pos.y, -z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, z + pos.z), - new Vector3(x + pos.x, -y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(-x + pos.x, -y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(x + pos.x, -y + pos.y, z + pos.z), - color); - } - - public static bool DidTransformsChange( - Transform[] old_transforms, - Transform[] newly_acquired_transforms) { - if (old_transforms.Length != newly_acquired_transforms.Length) { - return true; - } - - var i = 0; - foreach (var old in old_transforms) { - if (old.position != newly_acquired_transforms[i].position - || old.rotation != newly_acquired_transforms[i].rotation) { - return true; - } - - i++; - } - - return false; - } - - public static Bounds GetTotalMeshFilterBounds(Transform object_transform) { - var mesh_filter = object_transform.GetComponent(); - - var result = mesh_filter != null ? mesh_filter.mesh.bounds : new Bounds(); - - foreach (Transform transform in object_transform) { - var bounds = GetTotalMeshFilterBounds(transform); - result.Encapsulate(bounds.min); - result.Encapsulate(bounds.max); - } - - /*var bounds1 = GetTotalColliderBounds(objectTransform); - result.Encapsulate(bounds1.min); - result.Encapsulate(bounds1.max); - */ - /* - foreach (Transform transform in objectTransform) { - var bounds = GetTotalColliderBounds(transform); - result.Encapsulate(bounds.min); - result.Encapsulate(bounds.max); - } - */ - var scaled_min = result.min; - scaled_min.Scale(object_transform.localScale); - result.min = scaled_min; - var scaled_max = result.max; - scaled_max.Scale(object_transform.localScale); - result.max = scaled_max; - return result; - } - - /// - /// - /// - /// - /// - public static Bounds GetTotalColliderBounds(Transform object_transform) { - var mesh_filter = object_transform.GetComponent(); - - var result = mesh_filter != null ? mesh_filter.bounds : new Bounds(); - - foreach (Transform transform in object_transform) { - var bounds = GetTotalColliderBounds(transform); - result.Encapsulate(bounds.min); - result.Encapsulate(bounds.max); - } - - var scaled_min = result.min; - scaled_min.Scale(object_transform.localScale); - result.min = scaled_min; - var scaled_max = result.max; - scaled_max.Scale(object_transform.localScale); - result.max = scaled_max; - return result; - } - - /// - /// - /// - /// - /// - public static Bounds GetMaxBounds(GameObject g) { - var b = new Bounds(g.transform.position, Vector3.zero); - foreach (var r in g.GetComponentsInChildren()) { - b.Encapsulate(r.bounds); - } - - return b; - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/BoundingBoxes/Experimental/BoundingBoxUtilities.cs.meta b/Runtime/Utilities/BoundingBoxes/Experimental/BoundingBoxUtilities.cs.meta deleted file mode 100644 index 0b3b03c03..000000000 --- a/Runtime/Utilities/BoundingBoxes/Experimental/BoundingBoxUtilities.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 7a00e52ae110c4ae4a3c5fe6b3588001 -timeCreated: 1507146667 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/CameraPivotRotation.cs b/Runtime/Utilities/CameraPivotRotation.cs new file mode 100644 index 000000000..2a0621beb --- /dev/null +++ b/Runtime/Utilities/CameraPivotRotation.cs @@ -0,0 +1,69 @@ +using droid.Runtime.Structs.Space; +using UnityEngine; + +namespace droid.Runtime.Utilities { + /// + /// + /// + public class CameraPivotRotation : MonoBehaviour { + /// + /// + /// + public float rotateSpeed = 1f; + + /// + /// + /// + public float scrollSpeed = 200f; + + /// + /// + /// + public Transform pivot; + + /// + /// + /// + public SphericalSpace _sphericalSpace; + + void Start() { + this._sphericalSpace = SphericalSpace.FromCartesian(this.transform.position, + 3f, + 10f, + 0f, + Mathf.PI * 2f, + 0f, + Mathf.PI / 4f); + // Initialize position + this.transform.position = this._sphericalSpace.ToCartesian() + this.pivot.position; + } + + void Update() { + var kh = Input.GetAxis("Horizontal"); + var kv = Input.GetAxis("Vertical"); + + var any_mouse_button = Input.GetMouseButton(0) | Input.GetMouseButton(1) | Input.GetMouseButton(2); + var mh = any_mouse_button ? Input.GetAxis("Mouse X") : 0f; + var mv = any_mouse_button ? Input.GetAxis("Mouse Y") : 0f; + + var h = kh * kh > mh * mh ? kh : mh; + var v = kv * kv > mv * mv ? kv : mv; + + if (h * h > .1f || v * v > .1f) { + this.transform.position = + this._sphericalSpace.Rotate(h * this.rotateSpeed * Time.deltaTime, + v * this.rotateSpeed * Time.deltaTime).ToCartesian() + + this.pivot.position; + } + + var sw = -Input.GetAxis("Mouse ScrollWheel"); + if (sw * sw > Mathf.Epsilon) { + this.transform.position = + this._sphericalSpace.TranslateRadius(sw * Time.deltaTime * this.scrollSpeed).ToCartesian() + + this.pivot.position; + } + + this.transform.LookAt(this.pivot.position); + } + } +} diff --git a/Runtime/Utilities/CameraPivotRotation.cs.meta b/Runtime/Utilities/CameraPivotRotation.cs.meta new file mode 100644 index 000000000..d89b8b0a4 --- /dev/null +++ b/Runtime/Utilities/CameraPivotRotation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33ce3f3c6cee4007b98a8626a9fafbfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/DebugPrinting.cs b/Runtime/Utilities/DebugPrinting.cs new file mode 100644 index 000000000..3ddcc3adc --- /dev/null +++ b/Runtime/Utilities/DebugPrinting.cs @@ -0,0 +1,35 @@ +using droid.Runtime.Interfaces; +using UnityEngine; + +namespace droid.Runtime.Utilities { + /// + /// + /// + public static class DebugPrinting { + /// + /// + /// + /// + /// + /// + public static void ApplyPrint(bool debugging, + IConfigurableConfiguration configuration, + string identifier) { + if (debugging) { + Debug.Log("Applying " + configuration + " To " + identifier); + } + } + + /// + /// + /// + /// + /// + /// + public static void DisplayPrint(dynamic value, string identifier, bool debugging) { + if (debugging) { + Debug.Log("Applying " + value + " To " + identifier); + } + } + } +} diff --git a/Runtime/Utilities/DebugPrinting.cs.meta b/Runtime/Utilities/DebugPrinting.cs.meta new file mode 100644 index 000000000..8e9e7d2e6 --- /dev/null +++ b/Runtime/Utilities/DebugPrinting.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c3d4c23d33d84dbb83b6018400650b43 +timeCreated: 1541406297 \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Drawing.meta b/Runtime/Utilities/Drawing.meta similarity index 100% rename from Runtime/Utilities/Misc/Drawing.meta rename to Runtime/Utilities/Drawing.meta diff --git a/Runtime/Utilities/Drawing/ArrowRenderer.cs b/Runtime/Utilities/Drawing/ArrowRenderer.cs new file mode 100644 index 000000000..09d6320d9 --- /dev/null +++ b/Runtime/Utilities/Drawing/ArrowRenderer.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace droid.Runtime.Utilities.Drawing { +// Put this script on a Camera + /// + /// + /// + [ExecuteInEditMode] + public class ArrowRenderer : MonoBehaviour { + // Fill/drag these in from the editor + + // Choose the Unlit/Color shader in the Material Settings + // You can change that color, to change the color of the connecting lines + /// + /// + [SerializeField] + Material _line_mat = null; + + /// + /// + [SerializeField] + GameObject _main_point = null; + + [SerializeField] float _offset = 0.3f; + + /// + /// + [SerializeField] + GameObject[] _points = null; + + [SerializeField] Vector3[] _vec3_points = null; + + // Connect all of the `points` to the `main_point_pos` + void DrawConnectingLines(IReadOnlyCollection> vec_pairs) { + if (vec_pairs.Count > 0) { + // Loop through each point to connect to the mainPoint + foreach (var point in vec_pairs) { + var main_point_pos = point.Item1; + var point_pos = point.Item2; + + GL.Begin(GL.LINES); + this._line_mat.SetPass(0); + GL.Color(new Color(this._line_mat.color.r, + this._line_mat.color.g, + this._line_mat.color.b, + this._line_mat.color.a)); + GL.Vertex3(main_point_pos.x, main_point_pos.y, main_point_pos.z); + GL.Vertex3(point_pos.x, point_pos.y, point_pos.z); + // + GL.Vertex3(point_pos.x - this._offset, point_pos.y, point_pos.z); + GL.Vertex3(point_pos.x, point_pos.y - this._offset, point_pos.z); + GL.Vertex3(point_pos.x, point_pos.y, point_pos.z - this._offset); + GL.Vertex3(point_pos.x + this._offset, point_pos.y, point_pos.z); + GL.Vertex3(point_pos.x, point_pos.y + this._offset, point_pos.z); + GL.Vertex3(point_pos.x, point_pos.y, point_pos.z + this._offset); + // + GL.End(); + } + } + } + + // To show the lines in the game window whne it is running + void OnPostRender() { + this._vec3_points = this._points.Select(v => v.transform.position).ToArray(); + var s = this._vec3_points + .Select(v => new Tuple(this._main_point.transform.position, v)).ToArray(); + this.DrawConnectingLines(s); + } + + // To show the lines in the editor + void OnDrawGizmos() { + this._vec3_points = this._points.Select(v => v.transform.position).ToArray(); + var s = this._vec3_points + .Select(v => new Tuple(this._main_point.transform.position, v)).ToArray(); + this.DrawConnectingLines(s); + } + } +} diff --git a/Runtime/Utilities/Drawing/ArrowRenderer.cs.meta b/Runtime/Utilities/Drawing/ArrowRenderer.cs.meta new file mode 100644 index 000000000..b57206b3a --- /dev/null +++ b/Runtime/Utilities/Drawing/ArrowRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c7aaf69891794c98a83b4a0e177a569 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 2714af42bb61e46d7b2cb28089fa2885, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Drawing/CylinderLineRenderer.cs b/Runtime/Utilities/Drawing/CylinderLineRenderer.cs new file mode 100644 index 000000000..d5a3f7c16 --- /dev/null +++ b/Runtime/Utilities/Drawing/CylinderLineRenderer.cs @@ -0,0 +1,146 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Drawing { + public class CylinderLineRenderer : MonoBehaviour { + // Fill in this with the default Unity Cylinder mesh + // We will account for the cylinder pivot/origin being in the middle. + /// + /// + public Mesh _CylinderMesh; + + // Material used for the connecting lines + public Material _LineMat; + + // Connect all of the `points` to the `mainPoint` + public GameObject _MainPoint; + public GameObject[] _Points; + + public float _Radius = 0.05f; + + GameObject[] _ring_game_objects; + + // Use this for initialization + void Start() { + this._ring_game_objects = new GameObject[this._Points.Length]; + //this.connectingRings = new ProceduralRing[points.Length]; + for (var i = 0; i < this._Points.Length; i++) { + // Make a game_object that we will put the ring on + // And then put it as a child on the game_object that has this Command and Control script + this._ring_game_objects[i] = new GameObject {name = "Connecting ring #" + i}; + this._ring_game_objects[i].transform.parent = this.gameObject.transform; + + // We make a offset game_object to counteract the default cylindermesh pivot/origin being in the middle + var ring_offset_cylinder_mesh_object = new GameObject(); + ring_offset_cylinder_mesh_object.transform.parent = this._ring_game_objects[i].transform; + + // Offset the cylinder so that the pivot/origin is at the bottom in relation to the outer ring game_object. + ring_offset_cylinder_mesh_object.transform.localPosition = new Vector3(0f, 1f, 0f); + // Set the radius + ring_offset_cylinder_mesh_object.transform.localScale = new Vector3(this._Radius, 1f, this._Radius); + + // Create the the Mesh and renderer to show the connecting ring + var ring_mesh = ring_offset_cylinder_mesh_object.AddComponent(); + ring_mesh.mesh = this._CylinderMesh; + + var ring_renderer = ring_offset_cylinder_mesh_object.AddComponent(); + ring_renderer.material = this._LineMat; + } + } + + // Update is called once per frame + void Update() { + for (var i = 0; i < this._Points.Length; i++) { + // Move the ring to the point + this._ring_game_objects[i].transform.position = this._Points[i].transform.position; + + // Match the scale to the distance + var cylinder_distance = + 0.5f * Vector3.Distance(this._Points[i].transform.position, this._MainPoint.transform.position); + this._ring_game_objects[i].transform.localScale = + new Vector3(this._ring_game_objects[i].transform.localScale.x, + cylinder_distance, + this._ring_game_objects[i].transform.localScale.z); + + // Make the cylinder look at the main point. + // Since the cylinder is pointing up(y) and the forward is z, we need to offset by 90 degrees. + this._ring_game_objects[i].transform.LookAt(this._MainPoint.transform, Vector3.up); + this._ring_game_objects[i].transform.rotation *= Quaternion.Euler(90, 0, 0); + } + } + } + + /// + /// + /// + public class ConnectPointsWithCubeMesh : MonoBehaviour { + // Fill in this with the default Unity Cube mesh + // We will account for the cube pivot/origin being in the middle. + public Mesh _CubeMesh; + + // Material used for the connecting lines + public Material _LineMat; + + // Connect all of the `points` to the `mainPoint` + public GameObject _MainPoint; + public GameObject[] _Points; + + public float _Radius = 0.05f; + + GameObject[] _ring_game_objects; + + // Use this for initialization + void Start() { + this._ring_game_objects = new GameObject[this._Points.Length]; + //this.connectingRings = new ProceduralRing[points.Length]; + for (var i = 0; i < this._Points.Length; i++) { + // Make a game_object that we will put the ring on + // And then put it as a child on the game_object that has this Command and Control script + this._ring_game_objects[i] = new GameObject(); + this._ring_game_objects[i].name = "Connecting ring #" + i; + this._ring_game_objects[i].transform.parent = this.gameObject.transform; + + // We make a offset game_object to counteract the default cubemesh pivot/origin being in the middle + var ring_offset_cube_mesh_object = new GameObject(); + ring_offset_cube_mesh_object.transform.parent = this._ring_game_objects[i].transform; + + // Offset the cube so that the pivot/origin is at the bottom in relation to the outer ring game_object. + ring_offset_cube_mesh_object.transform.localPosition = new Vector3(0f, 1f, 0f); + // Set the radius + ring_offset_cube_mesh_object.transform.localScale = new Vector3(this._Radius, 1f, this._Radius); + + // Create the the Mesh and renderer to show the connecting ring + var ring_mesh = ring_offset_cube_mesh_object.AddComponent(); + ring_mesh.mesh = this._CubeMesh; + + var ring_renderer = ring_offset_cube_mesh_object.AddComponent(); + ring_renderer.material = this._LineMat; + } + } + + // Update is called once per frame + void Update() { + for (var i = 0; i < this._Points.Length; i++) { + // Move the ring to the point + this._ring_game_objects[i].transform.position = this._Points[i].transform.position; + + this._ring_game_objects[i].transform.position = + 0.5f * (this._Points[i].transform.position + this._MainPoint.transform.position); + var delta = this._Points[i].transform.position - this._MainPoint.transform.position; + this._ring_game_objects[i].transform.position += delta; + + // Match the scale to the distance + var cube_distance = + Vector3.Distance(this._Points[i].transform.position, this._MainPoint.transform.position); + this._ring_game_objects[i].transform.localScale = + new Vector3(this._ring_game_objects[i].transform.localScale.x, + cube_distance, + this._ring_game_objects[i].transform.localScale.z); + + // Make the cube look at the main point. + // Since the cube is pointing up(y) and the forward is z, we need to offset by 90 degrees. + this._ring_game_objects[i].transform.LookAt(this._MainPoint.transform, Vector3.up); + this._ring_game_objects[i].transform.rotation *= Quaternion.Euler(90, 0, 0); + } + } + } +} diff --git a/Runtime/Utilities/Drawing/CylinderLineRenderer.cs.meta b/Runtime/Utilities/Drawing/CylinderLineRenderer.cs.meta new file mode 100644 index 000000000..fbc7d72c9 --- /dev/null +++ b/Runtime/Utilities/Drawing/CylinderLineRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b62da48546494c8db1d580c72f0c1364 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 2714af42bb61e46d7b2cb28089fa2885, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Drawing/DrawString.cs b/Runtime/Utilities/Drawing/DrawString.cs similarity index 84% rename from Runtime/Utilities/Misc/Drawing/DrawString.cs rename to Runtime/Utilities/Drawing/DrawString.cs index 14bbb4f2b..631c82ba8 100644 --- a/Runtime/Utilities/Misc/Drawing/DrawString.cs +++ b/Runtime/Utilities/Drawing/DrawString.cs @@ -2,22 +2,20 @@ using UnityEngine; #if UNITY_EDITOR -namespace Neodroid.Runtime.Utilities.Misc.Drawing { +namespace droid.Runtime.Utilities.Drawing { public static partial class NeodroidUtilities { /// - /// /// /// /// /// /// /// - public static void DrawString( - string text, - Vector3 world_pos, - Color? color = null, - float o_x = 0, - float o_y = 0) { + public static void DrawString(string text, + Vector3 world_pos, + Color? color = null, + float o_x = 0, + float o_y = 0) { Handles.BeginGUI(); var restore_color = GUI.color; @@ -46,7 +44,6 @@ public static void DrawString( } /// - /// /// /// /// @@ -57,7 +54,6 @@ public static Vector3 TransformByPixel(Vector3 position, float x, float y) { } /// - /// /// /// /// @@ -68,4 +64,4 @@ public static Vector3 TransformByPixel(Vector3 position, Vector3 translate_by) { } } } -#endif \ No newline at end of file +#endif diff --git a/Runtime/Utilities/Drawing/DrawString.cs.meta b/Runtime/Utilities/Drawing/DrawString.cs.meta new file mode 100644 index 000000000..3c3ec85dd --- /dev/null +++ b/Runtime/Utilities/Drawing/DrawString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 403ee89ddbca4a78be084b50e26a9170 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 2714af42bb61e46d7b2cb28089fa2885, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Drawing/DrawingUtilities.cs b/Runtime/Utilities/Drawing/DrawingUtilities.cs new file mode 100644 index 000000000..c6c11ca06 --- /dev/null +++ b/Runtime/Utilities/Drawing/DrawingUtilities.cs @@ -0,0 +1,287 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace droid.Runtime.Utilities.Drawing { + /// + /// + public static partial class NeodroidDrawingUtilities { + /// + /// + /// + /// + /// + /// + /// + public static void ForGizmo(Vector3 pos, + Vector3 direction, + Color color, + float arrow_head_length = 0.25f, + float arrow_head_angle = 20.0f) { + Gizmos.DrawRay(pos, direction); + NeodroidDrawingUtilitiesEnd(true, + pos, + direction, + color, + arrow_head_length, + arrow_head_angle); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public static void ForDebug(Vector3 pos, + Vector3 direction, + Color color, + float arrow_head_length = 0.25f, + float arrow_head_angle = 20.0f, + float ray_duration = 0f) { + if (ray_duration > 0) { + Debug.DrawRay(pos, + direction, + color, + ray_duration); + } else { + Debug.DrawRay(pos, direction, color); + } + + NeodroidDrawingUtilitiesEnd(false, + pos, + direction, + color, + arrow_head_length, + arrow_head_angle, + ray_duration); + } + + static void NeodroidDrawingUtilitiesEnd(bool gizmos, + Vector3 pos, + Vector3 direction, + Color color, + float arrow_head_length = 0.25f, + float arrow_head_angle = 20.0f, + float ray_duration = 0f) { + var right = Quaternion.LookRotation(direction) + * Quaternion.Euler(arrow_head_angle, 0, 0) + * Vector3.back; + var left = Quaternion.LookRotation(direction) + * Quaternion.Euler(-arrow_head_angle, 0, 0) + * Vector3.back; + var up = Quaternion.LookRotation(direction) * Quaternion.Euler(0, arrow_head_angle, 0) * Vector3.back; + var down = Quaternion.LookRotation(direction) + * Quaternion.Euler(0, -arrow_head_angle, 0) + * Vector3.back; + if (gizmos) { + Gizmos.color = color; + Gizmos.DrawRay(pos + direction, right * arrow_head_length); + Gizmos.DrawRay(pos + direction, left * arrow_head_length); + Gizmos.DrawRay(pos + direction, up * arrow_head_length); + Gizmos.DrawRay(pos + direction, down * arrow_head_length); + } else { + if (ray_duration > 0) { + Debug.DrawRay(pos + direction, + right * arrow_head_length, + color, + ray_duration); + Debug.DrawRay(pos + direction, + left * arrow_head_length, + color, + ray_duration); + Debug.DrawRay(pos + direction, + up * arrow_head_length, + color, + ray_duration); + Debug.DrawRay(pos + direction, + down * arrow_head_length, + color, + ray_duration); + } else { + Debug.DrawRay(pos + direction, right * arrow_head_length, color); + Debug.DrawRay(pos + direction, left * arrow_head_length, color); + Debug.DrawRay(pos + direction, up * arrow_head_length, color); + Debug.DrawRay(pos + direction, down * arrow_head_length, color); + } + } + +/* + var arrow_size = 2; + Handles.color = Handles.xAxisColor; + Handles.ArrowHandleCap( 0, pos, Quaternion.Euler(direction), arrow_size,EventType.Repaint ); + */ + } + + /// + /// + /// + /// + public static float KineticEnergy(Rigidbody rb) { + return + 0.5f + * rb.mass + * Mathf.Pow(rb.velocity.magnitude, + 2); // mass in kg, velocity in meters per second, result is joules + } + + /// + /// + /// + /// + /// + public static void DrawLine(Vector3 p1, Vector3 p2, float width) { + var count = Mathf.CeilToInt(width); // how many lines are needed. + if (count == 1) { + Gizmos.DrawLine(p1, p2); + } else { + var c = Camera.current; + if (c == null) { + Debug.LogError("Camera.current is null"); + return; + } + + var v1 = (p2 - p1).normalized; // line direction + var v2 = (c.transform.position - p1).normalized; // direction to camera + var n = Vector3.Cross(v1, v2); // normal vector + for (var i = 0; i < count; i++) { + //Vector3 o = n * width ((float)i / (count - 1) - 0.5f); + var o = width * ((float)i / (count - 1) - 0.5f) * n; + Gizmos.DrawLine(p1 + o, p2 + o); + } + } + } + + /// + /// + /// + /// + /// + public static Texture2D RenderTextureImage(Camera camera) { + // From unity documentation, https://docs.unity3d.com/ScriptReference/Camera.Render.html + var current_render_texture = RenderTexture.active; + RenderTexture.active = camera.targetTexture; + camera.Render(); + var target_texture = camera.targetTexture; + var texture = new Texture2D(target_texture.width, target_texture.height); + texture.ReadPixels(new Rect(0, + 0, + target_texture.width, + target_texture.height), + 0, + 0); + texture.Apply(); + RenderTexture.active = current_render_texture; + return texture; + } + + /// + /// + /// + /// + public static string ColorArrayToString(IEnumerable colors) { + var s = ""; + foreach (var color in colors) { + s += color.ToString(); + } + + return s; + } + + /** Contains logic for converting a camera component into a Texture2D. Soft ignored */ + /*public Texture2D ObservationToTex(Camera camera, int width, int height) + { + Camera cam = camera; + Rect oldRec = camera.rect; + cam.rect = new Rect(0f, 0f, 1f, 1f); + bool supportsAntialiasing = false; + bool needsRescale = false; + var depth = 24; + var format = RenderTextureFormat.Default; + var readWrite = RenderTextureReadWrite.Default; + var antiAliasing = (supportsAntialiasing) ? Mathf.Max(1, QualitySettings.antiAliasing) : 1; + + var finalRT = + RenderTexture.GetTemporary(width, height, depth, format, readWrite, antiAliasing); + var renderRT = (!needsRescale) ? finalRT : + RenderTexture.GetTemporary(width, height, depth, format, readWrite, antiAliasing); + var tex = new Texture2D(width, height, TextureFormat.RGB24, false); + + var prevActiveRT = RenderTexture.active; + var prevCameraRT = cam.targetTexture; + + // render to offscreen texture ( from CPU side) + RenderTexture.active = renderRT; + cam.targetTexture = renderRT; + + cam.Render(); + + if (needsRescale) + { + RenderTexture.active = finalRT; + Graphics.Blit(renderRT, finalRT); + RenderTexture.ReleaseTemporary(renderRT); + } + + tex.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0); + tex.Apply(); + cam.targetTexture = prevCameraRT; + cam.rect = oldRec; + RenderTexture.active = prevActiveRT; + RenderTexture.ReleaseTemporary(finalRT); + return tex; + } + + /// Contains logic to convert the agent's cameras into observation list + /// (as list of float arrays) + public List GetObservationMatrixList(List agent_keys) + { + List observation_matrix_list = new List(); + Dictionary> observations = CollectObservations(); + for (int obs_number = 0; obs_number < brainParameters.cameraResolutions.Length; obs_number++) + { + int width = brainParameters.cameraResolutions[obs_number].width; + int height = brainParameters.cameraResolutions[obs_number].height; + bool bw = brainParameters.cameraResolutions[obs_number].blackAndWhite; + int pixels = 0; + if (bw) + pixels = 1; + else + pixels = 3; + float[,,,] observation_matrix = new float[agent_keys.Count + , height + , width + , pixels]; + int i = 0; + foreach (int k in agent_keys) + { + Camera agent_obs = observations[k][obs_number]; + Texture2D tex = ObservationToTex(agent_obs, width, height); + for (int w = 0; w < width; w++) + { + for (int h = 0; h < height; h++) + { + Color c = tex.GetPixel(w, h); + if (!bw) + { + observation_matrix[i, tex.height - h - 1, w, 0] = c.r; + observation_matrix[i, tex.height - h - 1, w, 1] = c.g; + observation_matrix[i, tex.height - h - 1, w, 2] = c.b; + } + else + { + observation_matrix[i, tex.height - h - 1, w, 0] = (c.r + c.g + c.b) / 3; + } + } + } + UnityEngine.Object.DestroyImmediate(tex); + Resources.UnloadUnusedAssets(); + i++; + } + observation_matrix_list.Add(observation_matrix); + } + return observation_matrix_list; + }*/ + } +} diff --git a/Runtime/Utilities/Drawing/DrawingUtilities.cs.meta b/Runtime/Utilities/Drawing/DrawingUtilities.cs.meta new file mode 100644 index 000000000..fa23a4f72 --- /dev/null +++ b/Runtime/Utilities/Drawing/DrawingUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b133a5853bab4929a05f905722b3d9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 2714af42bb61e46d7b2cb28089fa2885, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Drawing/GuiDraw.cs b/Runtime/Utilities/Drawing/GuiDraw.cs new file mode 100644 index 000000000..37caa80b4 --- /dev/null +++ b/Runtime/Utilities/Drawing/GuiDraw.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Drawing { + /// + /// + public static partial class NeodroidUtilities { + static Texture2D _s_line_tex; + + static NeodroidUtilities() { + _s_line_tex = new Texture2D(1, + 3, + TextureFormat.ARGB32, + true); + _s_line_tex.SetPixel(0, + 0, + new Color(1, + 1, + 1, + 0)); + _s_line_tex.SetPixel(0, 1, Color.white); + _s_line_tex.SetPixel(0, + 2, + new Color(1, + 1, + 1, + 0)); + _s_line_tex.Apply(); + } + + /// + /// + /// + /// + /// + /// + public static void DrawLine(Vector2 p_point_a, Vector2 p_point_b, float p_width) { + var save_matrix = GUI.matrix; + var save_color = GUI.color; + + var delta = p_point_b - p_point_a; + GUIUtility.ScaleAroundPivot(new Vector2(delta.magnitude, p_width), Vector2.zero); + GUIUtility.RotateAroundPivot(Vector2.Angle(delta, Vector2.right) * Mathf.Sign(delta.y), Vector2.zero); + GUI.matrix = Matrix4x4.TRS(p_point_a, Quaternion.identity, Vector3.one) * GUI.matrix; + + GUI.DrawTexture(new Rect(Vector2.zero, Vector2.one), _s_line_tex); + + GUI.matrix = save_matrix; + GUI.color = save_color; + } + } +} diff --git a/Runtime/Utilities/Drawing/GuiDraw.cs.meta b/Runtime/Utilities/Drawing/GuiDraw.cs.meta new file mode 100644 index 000000000..4b891d362 --- /dev/null +++ b/Runtime/Utilities/Drawing/GuiDraw.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89a14382585fb4a0883bc149f8600011 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 2714af42bb61e46d7b2cb28089fa2885, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Enums/CoordinateSystem.cs b/Runtime/Utilities/Enums/CoordinateSystem.cs deleted file mode 100644 index 9292b5551..000000000 --- a/Runtime/Utilities/Enums/CoordinateSystem.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Neodroid.Runtime.Utilities.Enums { - /// - /// - /// - public enum CoordinateSystem { - /// - /// - /// - Global_coordinates_, - - /// - /// - /// - Local_coordinates_, - - /// - /// - /// - Relative_to_reference_point_ - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Enums/WaitOn.cs b/Runtime/Utilities/Enums/WaitOn.cs deleted file mode 100644 index fccf9b9ab..000000000 --- a/Runtime/Utilities/Enums/WaitOn.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace Neodroid.Runtime.Utilities.Enums { - /// - /// - /// - public enum WaitOn { - /// - /// - /// - Never_, - - /// - /// // Do not wait from reactions from agent - /// - Update_, - - /// - /// // Frame - /// // Note: unstable physics with the FixedUpdate setting - /// - Fixed_update_ - } -} \ No newline at end of file diff --git a/Runtime/Utilities/EventRecipients/DataPoller.cs b/Runtime/Utilities/EventRecipients/DataPoller.cs deleted file mode 100644 index 617f488c6..000000000 --- a/Runtime/Utilities/EventRecipients/DataPoller.cs +++ /dev/null @@ -1,33 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; - -namespace Neodroid.Runtime.Utilities.EventRecipients { - namespace droid.Neodroid.Utilities.Unsorted { - /// - /// - /// - public abstract class DataPoller : MonoBehaviour { - /// - /// - /// - /// - public abstract void PollData(dynamic data); - - [SerializeField] UnityEvent _poll_event; - - // Update is called once per frame - /// - /// - /// - void Update() { this._poll_event?.Invoke(); } - - /// - /// - /// - public UnityEvent PollEvent { - get { return this._poll_event; } - set { this._poll_event = value; } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/EventRecipients/TextUpdater.cs b/Runtime/Utilities/EventRecipients/TextUpdater.cs deleted file mode 100644 index 2a534531d..000000000 --- a/Runtime/Utilities/EventRecipients/TextUpdater.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Neodroid.Runtime.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted; -using UnityEngine; -using UnityEngine.UI; - -namespace Neodroid.Runtime.Utilities.EventRecipients { - /// - /// - /// - [RequireComponent(typeof(Text)), ExecuteInEditMode] - public class TextUpdater : DataPoller { - /// - /// - /// - [SerializeField] - Text _text; - - // Use this for initialization - /// - /// - /// - void Start() { this._text = this.GetComponent(); } - - /// - /// - /// - /// - public override void PollData(dynamic data) { - if (data is string) { - if (this._text) { - this._text.text = data; - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/EventRecipients/ToggleUpdater.cs b/Runtime/Utilities/EventRecipients/ToggleUpdater.cs deleted file mode 100644 index 23b7e213d..000000000 --- a/Runtime/Utilities/EventRecipients/ToggleUpdater.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Neodroid.Runtime.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted; -using UnityEngine; -using UnityEngine.UI; - -namespace Neodroid.Runtime.Utilities.EventRecipients { - /// - /// - /// - [RequireComponent(typeof(Toggle)), ExecuteInEditMode] - public class ToggleUpdater : DataPoller { - /// - /// - /// - [SerializeField] - Toggle _toggle; - - // Use this for initialization - /// - /// - /// - void Start() { this._toggle = this.GetComponent(); } - - /// - /// - /// - /// - public override void PollData(dynamic data) { - if (data is bool) { - if (this._toggle) { - this._toggle.isOn = data; - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Extensions.meta b/Runtime/Utilities/Extensions.meta similarity index 100% rename from Runtime/Utilities/Misc/Extensions.meta rename to Runtime/Utilities/Extensions.meta diff --git a/Runtime/Utilities/Misc/Extensions/JointFix.cs b/Runtime/Utilities/Extensions/JointFix.cs similarity index 95% rename from Runtime/Utilities/Misc/Extensions/JointFix.cs rename to Runtime/Utilities/Extensions/JointFix.cs index 3ca1444fb..fa7bd2990 100644 --- a/Runtime/Utilities/Misc/Extensions/JointFix.cs +++ b/Runtime/Utilities/Extensions/JointFix.cs @@ -1,7 +1,7 @@ using System; using UnityEngine; -namespace Neodroid.Runtime.Utilities.Misc.Extensions { +namespace droid.Runtime.Utilities.Extensions { /// /// /// @@ -9,6 +9,7 @@ namespace Neodroid.Runtime.Utilities.Misc.Extensions { public class JointFix : MonoBehaviour { JointDrive[] _angular_x_drive; Rigidbody[] _connected_bodies; + bool[] _enable_processings; float[] _force_break_limits; Vector3 _initial_local_position; Quaternion _initial_local_rotation; @@ -16,31 +17,34 @@ public class JointFix : MonoBehaviour { Joint[] _joints; JointLimits[] _limits; + SoftJointLimitSpring[] _linear_limit_springs; + SoftJointLimit[] _linear_limits; Vector3 _local_position_on_disable; Quaternion _local_rotation_on_disable; + JointDrive[] _slerp_drives; + Vector3[] _target_angulars; + Vector3[] _target_positions; Quaternion[] _target_rotations; + Vector3[] _target_velocities; float[] _torque_break_limits; + [SerializeField] bool counting = false; + [SerializeField] int resetAfterFrames = 500; + int _frames_counted; + bool _was_disabled; SoftJointLimit[] _x_ang_high_limits; SoftJointLimit[] _x_ang_low_limits; ConfigurableJointMotion[] _x_ang_motion; + JointDrive[] _x_drives; ConfigurableJointMotion[] _x_motion; ConfigurableJointMotion[] _y_ang_motion; + JointDrive[] _y_drives; ConfigurableJointMotion[] _y_motion; ConfigurableJointMotion[] _z_ang_motion; - ConfigurableJointMotion[] _z_motion; - Vector3[] _target_angulars; - Vector3[] _target_positions; - Vector3[] _target_velocities; - JointDrive[] _x_drives; - JointDrive[] _y_drives; JointDrive[] _z_drives; - SoftJointLimit[] _linear_limits; - SoftJointLimitSpring[] _linear_limit_springs; - JointDrive[] _slerp_drives; - bool[] _enable_processings; + ConfigurableJointMotion[] _z_motion; void Awake() { this.Setup(); } @@ -118,6 +122,15 @@ void OnDisable() { } void Update() { + if (this._frames_counted >= this.resetAfterFrames) { + this.JointReset(); + this._frames_counted = 0; + } + + if (this.counting) { + this._frames_counted++; + } + if (this._was_disabled) { this._was_disabled = false; this.transform.localRotation = this._local_rotation_on_disable; @@ -126,9 +139,8 @@ void Update() { } /// - /// /// - public void Reset() { + public void JointReset() { if (this._joints == null) { this.Setup(); } @@ -173,4 +185,4 @@ public void Reset() { } } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Misc/Extensions/JointFix.cs.meta b/Runtime/Utilities/Extensions/JointFix.cs.meta similarity index 100% rename from Runtime/Utilities/Misc/Extensions/JointFix.cs.meta rename to Runtime/Utilities/Extensions/JointFix.cs.meta diff --git a/Runtime/Utilities/Misc/Extensions/Obstruction.cs b/Runtime/Utilities/Extensions/Obstruction.cs similarity index 90% rename from Runtime/Utilities/Misc/Extensions/Obstruction.cs rename to Runtime/Utilities/Extensions/Obstruction.cs index 3fd6d4472..544f6034e 100644 --- a/Runtime/Utilities/Misc/Extensions/Obstruction.cs +++ b/Runtime/Utilities/Extensions/Obstruction.cs @@ -1,7 +1,10 @@ -using Neodroid.Runtime.Utilities.Misc.Orientation; +using droid.Runtime.Utilities.Orientation; using UnityEngine; -namespace Neodroid.Runtime.Utilities.Misc.Extensions { +namespace droid.Runtime.Utilities.Extensions { + /// + /// + /// public class Obstruction : MonoBehaviour, IMotionTracker { Vector3 _last_recorded_move; @@ -42,4 +45,4 @@ void Start() { void Update() { this.UpdatePreviousTranform(); } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Misc/Extensions/Obstruction.cs.meta b/Runtime/Utilities/Extensions/Obstruction.cs.meta similarity index 100% rename from Runtime/Utilities/Misc/Extensions/Obstruction.cs.meta rename to Runtime/Utilities/Extensions/Obstruction.cs.meta diff --git a/Runtime/Utilities/Misc/Extensions/ParticleController.cs b/Runtime/Utilities/Extensions/ParticleController.cs similarity index 91% rename from Runtime/Utilities/Misc/Extensions/ParticleController.cs rename to Runtime/Utilities/Extensions/ParticleController.cs index ac3f67374..116c6f819 100644 --- a/Runtime/Utilities/Misc/Extensions/ParticleController.cs +++ b/Runtime/Utilities/Extensions/ParticleController.cs @@ -2,7 +2,7 @@ using UnityEngine; -namespace Neodroid.Runtime.Utilities.Misc.Extensions { +namespace droid.Runtime.Utilities.Extensions { [RequireComponent(typeof(ParticleSystem))] public class ParticleController : MonoBehaviour { ParticleSystem _particle_system; @@ -24,4 +24,4 @@ void Update() { } } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Misc/Extensions/ParticleController.cs.meta b/Runtime/Utilities/Extensions/ParticleController.cs.meta similarity index 100% rename from Runtime/Utilities/Misc/Extensions/ParticleController.cs.meta rename to Runtime/Utilities/Extensions/ParticleController.cs.meta diff --git a/Runtime/Utilities/Extensions/RayDirectionHelper.cs b/Runtime/Utilities/Extensions/RayDirectionHelper.cs new file mode 100644 index 000000000..1bdfc9534 --- /dev/null +++ b/Runtime/Utilities/Extensions/RayDirectionHelper.cs @@ -0,0 +1,48 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Utilities.Extensions { + /// + /// + /// + public static class RayDirectionHelper { + const int _num_view_directions = 300; + static readonly Single _golden_ratio = (1 + Mathf.Sqrt(5)) / 2; + static readonly Single _angle_increment = Mathf.PI * 2 * _golden_ratio; + + /// + /// + /// + public static readonly Vector3[] _Directions; + + static RayDirectionHelper() { + _Directions = new Vector3[_num_view_directions]; + + for (var i = 0; i < _num_view_directions; i++) { + var t = (float)i / _num_view_directions; + var inclination = Mathf.Acos(1 - 2 * t); + var azimuth = _angle_increment * i; + + var x = Mathf.Sin(inclination) * Mathf.Cos(azimuth); + var y = Mathf.Sin(inclination) * Mathf.Sin(azimuth); + var z = Mathf.Cos(inclination); + _Directions[i] = new Vector3(x, y, z); + } + } + + /* + * var rayDirections = RayDirectionHelper._Directions; + + foreach (var t in rayDirections) { + var dir = this._cached_transform.TransformDirection(t); + var ray = new Ray(this.position, dir); + if (!Physics.SphereCast(ray, + this._settings.boundsRadius, + this._settings.collisionAvoidDst, + this._settings.obstacleMask)) { + return dir; + } + } + */ + } +} diff --git a/Runtime/Utilities/Extensions/RayDirectionHelper.cs.meta b/Runtime/Utilities/Extensions/RayDirectionHelper.cs.meta new file mode 100644 index 000000000..b222ae1a5 --- /dev/null +++ b/Runtime/Utilities/Extensions/RayDirectionHelper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 18e4e60d8e2b4e109c5576194143c79f +timeCreated: 1566845805 \ No newline at end of file diff --git a/Runtime/Utilities/Extensions/TextureExtensions.cs b/Runtime/Utilities/Extensions/TextureExtensions.cs new file mode 100644 index 000000000..b0f02571c --- /dev/null +++ b/Runtime/Utilities/Extensions/TextureExtensions.cs @@ -0,0 +1,53 @@ +using System.Runtime.InteropServices; +using UnityEngine; + +namespace droid.Runtime.Utilities.Extensions { + /// + /// + /// + public static class TextureExtentions { + /// + /// + /// + [StructLayout(LayoutKind.Explicit)] + public struct Color32Array { + /// + /// + /// + [FieldOffset(0)] + public byte[] byteArray; + + /// + /// + /// + [FieldOffset(0)] + public Color32[] colors; + } + + /// + /// + /// + /// + /// + public static Texture2D ToTexture2D(this WebCamTexture texture) { + var color_array = new Color32Array {colors = new Color32[texture.width * texture.height]}; + texture.GetPixels32(color_array.colors); + var tex = new Texture2D(2, 2); + tex.LoadRawTextureData(color_array.byteArray); + tex.Apply(); + + return tex; + + /* + var ntv_p = texture.GetNativeTexturePtr(); + + return Texture2D.CreateExternalTexture(texture.width, + texture.height, + TextureFormat.RGBAFloat, + false, + true, + ntv_p); + */ + } + } +} diff --git a/Runtime/Utilities/Extensions/TextureExtensions.cs.meta b/Runtime/Utilities/Extensions/TextureExtensions.cs.meta new file mode 100644 index 000000000..afdec54f2 --- /dev/null +++ b/Runtime/Utilities/Extensions/TextureExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f2cfd32b4c6a471395f3a5827f8f8849 +timeCreated: 1565688044 \ No newline at end of file diff --git a/Runtime/Utilities/Extensions/Vector3.cs b/Runtime/Utilities/Extensions/Vector3.cs new file mode 100644 index 000000000..221879f75 --- /dev/null +++ b/Runtime/Utilities/Extensions/Vector3.cs @@ -0,0 +1,41 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Extensions { + /// + /// + /// + public static partial class NeodroidUtilities { + /// + /// + /// + /// + /// + /// + public static Vector3 Divide(this Vector3 a, Vector3 b) { + return new Vector3(a.x / b.x, a.y / b.y, a.z / b.z); + } + + /// + /// + /// + /// + /// + /// + public static Vector3 Multiply(this Vector3 a, Vector3 b) { + return new Vector3(a.x * b.x, a.y * b.y, a.z * b.z); + } + + /// + /// + /// + /// + /// + /// + public static Vector3 Clamp(this ref Vector3 vec, Vector3 min_point, Vector3 max_point) { + vec.x = Mathf.Clamp(vec.x, min_point.x, max_point.x); + vec.y = Mathf.Clamp(vec.y, min_point.y, max_point.y); + vec.z = Mathf.Clamp(vec.z, min_point.z, max_point.z); + return vec; + } + } +} diff --git a/Runtime/Utilities/Extensions/Vector3.cs.meta b/Runtime/Utilities/Extensions/Vector3.cs.meta new file mode 100644 index 000000000..a80dcd72b --- /dev/null +++ b/Runtime/Utilities/Extensions/Vector3.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7934608a0be5470b98ec0fea6c53c0a9 +timeCreated: 1563001725 \ No newline at end of file diff --git a/Runtime/Utilities/Extensions/Vector4.cs b/Runtime/Utilities/Extensions/Vector4.cs new file mode 100644 index 000000000..a2347d1bd --- /dev/null +++ b/Runtime/Utilities/Extensions/Vector4.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Extensions { + /// + /// + /// + public static partial class NeodroidUtilities { + /// + /// + /// + /// + /// + /// + public static Vector4 Divide(this Vector4 a, Vector4 b) { + return new Vector4(a.x / b.x, + a.y / b.y, + a.z / b.z, + a.w / b.w); + } + + /// + /// + /// + /// + /// + /// + public static Vector4 Multiply(this Vector4 a, Vector4 b) { + return new Vector4(a.x * b.x, + a.y * b.y, + a.z * b.z, + a.w * b.w); + } + } +} diff --git a/Runtime/Utilities/Extensions/Vector4.cs.meta b/Runtime/Utilities/Extensions/Vector4.cs.meta new file mode 100644 index 000000000..e52073021 --- /dev/null +++ b/Runtime/Utilities/Extensions/Vector4.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f97c6611ff734b02b93ffacadedf2984 +timeCreated: 1563001974 \ No newline at end of file diff --git a/Runtime/Utilities/Extensions/VectorUtilities.cs b/Runtime/Utilities/Extensions/VectorUtilities.cs new file mode 100644 index 000000000..89fc4cbf7 --- /dev/null +++ b/Runtime/Utilities/Extensions/VectorUtilities.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Extensions { + /// + /// + public static partial class NeodroidVectorUtilities { + /// + /// + /// + /// + /// + public static Vector3 BroadcastVector3(this float a) { return new Vector3 {x = a, y = a, z = a}; } + + /// + /// + /// + /// + /// + public static Vector2 BroadcastVector2(this float a) { return new Vector2 {x = a, y = a}; } + + /// + /// + /// + /// + /// + public static Vector4 BroadcastVector4(this float a) { return new Vector4 {x = a, y = a, z = a}; } + } +} diff --git a/Runtime/Utilities/Extensions/VectorUtilities.cs.meta b/Runtime/Utilities/Extensions/VectorUtilities.cs.meta new file mode 100644 index 000000000..b5e57372b --- /dev/null +++ b/Runtime/Utilities/Extensions/VectorUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a3d3f6055db487659f9fc2c5ca75f0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/GameObjects/PrototypingGameObject.cs b/Runtime/Utilities/GameObjects/PrototypingGameObject.cs deleted file mode 100644 index 9857a2f22..000000000 --- a/Runtime/Utilities/GameObjects/PrototypingGameObject.cs +++ /dev/null @@ -1,214 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using UnityEditor; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.GameObjects { - /// - /// - /// - public abstract class PrototypingGameObject : MonoBehaviour, - IRegisterable { - /// - /// - /// - [SerializeField, Header("Naming", order = 10)] - protected string _Custom_Name = ""; - - /// - /// - /// - [SerializeField] - protected bool _Use_Custom_Name; - - /// - /// - /// - [Header("Development", order = 90), SerializeField] - bool _disables_children; - - #if UNITY_EDITOR - /// - /// - /// - [SerializeField] - bool _editor_reregistering = true; - #endif - - [SerializeField] bool _debugging; - - /// - /// - /// - public bool Debugging { - get { return this._debugging; } - set { this._debugging = value; } - } - - /// - /// - /// - protected void Start() { - try { - if (this.enabled && this.isActiveAndEnabled) { - this.Setup(); - this.UnRegisterComponent(); - this.RegisterComponent(); - } - } catch (ArgumentNullException e) { - Debug.LogWarning(e); - Debug.Log($"Exception happened on {this.GetType()}-{this}"); - } - } - - /// - /// - /// - protected void Awake() { - if (this.enabled && this.isActiveAndEnabled) { - this.Clear(); - } - } - - /// - /// - /// - void OnDisable() { - if (this._disables_children) { - var children = this.GetComponentsInChildren(); - foreach (var child in children) { - if (child.gameObject != this.gameObject) { - child.enabled = false; - child.gameObject.SetActive(false); - } - } - - foreach (Transform child in this.transform) { - if (child != this.transform) { - child.GetComponent()?.CallOnDisable(); - child.gameObject.SetActive(false); - } - } - } - } - - /// - /// - /// - void CallOnDisable() { this.OnDisable(); } - - /// - /// - /// - void CallOnEnable() { this.OnEnable(); } - - /// - /// - /// - void OnEnable() { - if (this._disables_children) { - foreach (Transform child in this.transform) { - if (child != this.transform) { - child.gameObject.SetActive(true); - child.GetComponent()?.CallOnEnable(); - } - } - - var children = this.GetComponentsInChildren(); - foreach (var child in children) { - if (child.gameObject != this.gameObject) { - child.enabled = true; - child.gameObject.SetActive(true); - } - } - } - } - - /// - /// - /// - protected virtual void Setup() { } - - /// - /// - /// - protected virtual void Clear() { } - - #if UNITY_EDITOR - /// - /// - /// - void OnValidate() { // Only called in the editor - if (EditorApplication.isPlaying || !this._editor_reregistering) { - return; - } - - try { - if (this.enabled && this.isActiveAndEnabled) { - this.Setup(); - this.UnRegisterComponent(); - this.RegisterComponent(); - } - } catch (NotImplementedException e) { - Debug.Log(e); - Debug.Log( - $"You must override Register and UnRegisterComponent for component {this.GetType()} for gameobject {this.Identifier} in order to Re-register component on every 'OnValidate' while in edit-mode"); - } - } - #endif - - /// - /// - /// - /// - protected abstract void UnRegisterComponent(); - - /// - /// - /// - /// - protected abstract void RegisterComponent(); - - /// - /// - /// - public void RefreshStart() { - if (this.enabled && this.isActiveAndEnabled) { - this.Start(); - } - } - - /// - /// - /// - public void RefreshAwake() { - if (this.enabled && this.isActiveAndEnabled) { - this.Awake(); - } - } - - /// - /// - /// - public virtual string PrototypingTypeName { - get { return this.GetType().Name; } - } - - /// - /// - /// - public string Identifier { - get { - if (this._Use_Custom_Name) { - return this._Custom_Name; - } - - if (this.PrototypingTypeName != null) { - return this.name + this.PrototypingTypeName; - } - - return "CriticalFailure"; - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Grasping.meta b/Runtime/Utilities/Grasping.meta similarity index 100% rename from Runtime/Utilities/Misc/Grasping.meta rename to Runtime/Utilities/Grasping.meta diff --git a/Runtime/Utilities/Grasping/GraspingUtilities.cs b/Runtime/Utilities/Grasping/GraspingUtilities.cs new file mode 100644 index 000000000..f9195a8e7 --- /dev/null +++ b/Runtime/Utilities/Grasping/GraspingUtilities.cs @@ -0,0 +1,185 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Grasping { + /// + /// + public static class GraspingUtilities { + /// + /// + /// + /// + /// + public static void DrawBoxFromCenter(Vector3 p, float r, Color c) { + // p is pos.yition of the center, r is "radius" and c is the color of the box + //Bottom lines + Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(r + p.x, -r + p.y, -r + p.z), c); + Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(-r + p.x, -r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(-r + p.x, -r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(r + p.x, -r + p.y, -r + p.z), c); + + //Vertical lines + Debug.DrawLine(new Vector3(-r + p.x, r + p.y, -r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); + Debug.DrawLine(new Vector3(-r + p.x, r + p.y, -r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, r + p.y, r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, r + p.y, r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); + + //Top lines + Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(-r + p.x, r + p.y, -r + p.z), c); + Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, -r + p.y, -r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); + Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(r + p.x, r + p.y, r + p.z), c); + } + + /// + /// + /// + /// + /// + /// + /// + public static void DrawRect(float x_size, float y_size, float z_size, Vector3 pos, Color color) { + var x = x_size / 2; + var y = y_size / 2; + var z = z_size / 2; + + //Vertical lines + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(-x + pos.x, y + pos.y, -z + pos.z), + color); + Debug.DrawLine(new Vector3(x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(x + pos.x, y + pos.y, -z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, z + pos.z), + new Vector3(-x + pos.x, y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(x + pos.x, -y + pos.y, z + pos.z), + new Vector3(x + pos.x, y + pos.y, z + pos.z), + color); + + //Horizontal top + Debug.DrawLine(new Vector3(-x + pos.x, y + pos.y, -z + pos.z), + new Vector3(x + pos.x, y + pos.y, -z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, y + pos.y, z + pos.z), + new Vector3(x + pos.x, y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, y + pos.y, -z + pos.z), + new Vector3(-x + pos.x, y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(x + pos.x, y + pos.y, -z + pos.z), + new Vector3(x + pos.x, y + pos.y, z + pos.z), + color); + + //Horizontal bottom + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(x + pos.x, -y + pos.y, -z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, z + pos.z), + new Vector3(x + pos.x, -y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(-x + pos.x, -y + pos.y, z + pos.z), + color); + Debug.DrawLine(new Vector3(x + pos.x, -y + pos.y, -z + pos.z), + new Vector3(x + pos.x, -y + pos.y, z + pos.z), + color); + } + + /// + /// + /// + /// + /// + public static bool DidTransformsChange( + Transform[] old_transforms, + Transform[] newly_acquired_transforms) { + if (old_transforms.Length != newly_acquired_transforms.Length) { + return true; + } + + var i = 0; + foreach (var old in old_transforms) { + if (old.position != newly_acquired_transforms[i].position + || old.rotation != newly_acquired_transforms[i].rotation) { + return true; + } + + i++; + } + + return false; + } + + /// + /// + /// + /// + public static Bounds GetTotalMeshFilterBounds(Transform object_transform) { + var mesh_filter = object_transform.GetComponent(); + + var result = mesh_filter != null ? mesh_filter.mesh.bounds : new Bounds(); + + foreach (Transform transform in object_transform) { + var bounds = GetTotalMeshFilterBounds(transform); + result.Encapsulate(bounds.min); + result.Encapsulate(bounds.max); + } + + /*var bounds1 = GetTotalColliderBounds(objectTransform); + result.Encapsulate(bounds1.min); + result.Encapsulate(bounds1.max); + */ + /* + foreach (Transform transform in objectTransform) { + var bounds = GetTotalColliderBounds(transform); + result.Encapsulate(bounds.min); + result.Encapsulate(bounds.max); + } + */ + var scaled_min = result.min; + scaled_min.Scale(object_transform.localScale); + result.min = scaled_min; + var scaled_max = result.max; + scaled_max.Scale(object_transform.localScale); + result.max = scaled_max; + return result; + } + + /// + /// + /// + /// + public static Bounds GetTotalColliderBounds(Transform object_transform) { + var mesh_filter = object_transform.GetComponent(); + + var result = mesh_filter != null ? mesh_filter.bounds : new Bounds(); + + foreach (Transform transform in object_transform) { + var bounds = GetTotalColliderBounds(transform); + result.Encapsulate(bounds.min); + result.Encapsulate(bounds.max); + } + + var scaled_min = result.min; + scaled_min.Scale(object_transform.localScale); + result.min = scaled_min; + var scaled_max = result.max; + scaled_max.Scale(object_transform.localScale); + result.max = scaled_max; + return result; + } + + /// + /// + /// + /// + public static Bounds GetMaxBounds(GameObject g) { + var b = new Bounds(g.transform.position, Vector3.zero); + foreach (var r in g.GetComponentsInChildren()) { + b.Encapsulate(r.bounds); + } + + return b; + } + } +} diff --git a/Runtime/Utilities/Misc/Grasping/GraspingUtilities.cs.meta b/Runtime/Utilities/Grasping/GraspingUtilities.cs.meta similarity index 100% rename from Runtime/Utilities/Misc/Grasping/GraspingUtilities.cs.meta rename to Runtime/Utilities/Grasping/GraspingUtilities.cs.meta diff --git a/Runtime/Utilities/Misc/Grid.meta b/Runtime/Utilities/Grid.meta similarity index 100% rename from Runtime/Utilities/Misc/Grid.meta rename to Runtime/Utilities/Grid.meta diff --git a/Runtime/Utilities/Misc/Grid/GridCell.cs b/Runtime/Utilities/Grid/GridCell.cs similarity index 93% rename from Runtime/Utilities/Misc/Grid/GridCell.cs rename to Runtime/Utilities/Grid/GridCell.cs index a60f08e25..4ad15e1b2 100644 --- a/Runtime/Utilities/Misc/Grid/GridCell.cs +++ b/Runtime/Utilities/Grid/GridCell.cs @@ -1,7 +1,7 @@ -using Neodroid.Runtime.Utilities.Structs; +using droid.Runtime.Structs.Vectors; using UnityEngine; -namespace Neodroid.Runtime.Utilities.Misc.Grid { +namespace droid.Runtime.Utilities.Grid { public abstract class GridCell : MonoBehaviour { protected Collider _Col; protected Renderer _Rend; @@ -47,4 +47,4 @@ public override void Setup(string n, Material mat) { this.tag = "Goal"; } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Grid/GridCell.cs.meta b/Runtime/Utilities/Grid/GridCell.cs.meta new file mode 100644 index 000000000..f6bbf2158 --- /dev/null +++ b/Runtime/Utilities/Grid/GridCell.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4f25bc6654c4a39a08af2fab94e16d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 7174288486110832750, guid: 0000000000000000d000000000000000, type: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/InternalReactions.meta b/Runtime/Utilities/InternalReactions.meta similarity index 77% rename from Runtime/InternalReactions.meta rename to Runtime/Utilities/InternalReactions.meta index 15bf134cc..8ae6a1d87 100644 --- a/Runtime/InternalReactions.meta +++ b/Runtime/Utilities/InternalReactions.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f1fb9c4a35e654b1daeadf8201c6fa45 +guid: c99b150bdb5e57d9787f81dcc3b96856 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/Utilities/InternalReactions/KeyEventEnabler.cs b/Runtime/Utilities/InternalReactions/KeyEventEnabler.cs new file mode 100644 index 000000000..f29f6c3a1 --- /dev/null +++ b/Runtime/Utilities/InternalReactions/KeyEventEnabler.cs @@ -0,0 +1,20 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.InternalReactions { + /// + /// + /// + public class KeyEventEnabler : MonoBehaviour { + [SerializeField] GameObject _game_object = null; + + [SerializeField] [SearchableEnum] KeyCode _key = KeyCode.None; + + /// + /// + void Update() { + if (Input.GetKeyDown(this._key)) { + this._game_object?.SetActive(!this._game_object.activeSelf); + } + } + } +} diff --git a/Runtime/Utilities/InternalReactions/KeyEventEnabler.cs.meta b/Runtime/Utilities/InternalReactions/KeyEventEnabler.cs.meta new file mode 100644 index 000000000..3801c4baa --- /dev/null +++ b/Runtime/Utilities/InternalReactions/KeyEventEnabler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d40864cd9d964cb7bf5197b12f20ca6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 048bd58cce9bd486199d8be3ee13d777, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/InternalReactions/PlayerReactions.cs b/Runtime/Utilities/InternalReactions/PlayerReactions.cs new file mode 100644 index 000000000..837a421a8 --- /dev/null +++ b/Runtime/Utilities/InternalReactions/PlayerReactions.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using droid.Runtime.Interfaces; +using droid.Runtime.Managers; +using droid.Runtime.Messaging.Messages; +using droid.Runtime.ScriptableObjects; +using UnityEngine; + +namespace droid.Runtime.Utilities.InternalReactions { + /// + /// + /// + [ExecuteInEditMode] + public class PlayerReactions : ScriptedReactions { + /// + /// + [SerializeField] + bool _auto_reset = true; + + /// + /// + [SerializeField] + PlayerMotions _player_motions = null; + + [SerializeField] Boolean terminated; + + /// + /// + void Start() { + this._Manager = FindObjectOfType(); + if (Application.isPlaying) { + var reset_reaction = new ReactionParameters(StepResetObserve.Reset_); + this._Manager.SendToEnvironments(new[] {new Reaction(reset_reaction, "all")}); + } + } + + void Update() { + if (Application.isPlaying) { + if (this._player_motions != null) { + var motions = new List(); + if (this._player_motions._Motions != null) { + foreach (var player_motion in this._player_motions._Motions) { + if (Input.GetKey(player_motion._Key)) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"{player_motion._Actor} {player_motion._Actuator} {player_motion._Strength}"); + } + #endif + + if (player_motion._Actuator == "Reset") { + this.terminated = true; + break; + } + + var motion = new ActuatorMotion(player_motion._Actor, + player_motion._Actuator, + player_motion._Strength); + motions.Add(motion); + } + } + } + + if (this.terminated && this._auto_reset) { + var reset_reaction_parameters = new ReactionParameters(StepResetObserve.Reset_); + this._Manager.SendToEnvironments(new[] {new Reaction(reset_reaction_parameters, "all")}); + this.terminated = this._Manager.GatherSnapshots().Any(e => e.Terminated); + } else if (motions.Count > 0) { + var parameters = new ReactionParameters(StepResetObserve.Step_, true, episode_count : true); + var reaction = new Reaction(parameters, + motions.ToArray(), + null, + null, + null, + "", + reaction_source : "PlayerReactions"); + this._Manager.SendToEnvironments(new[] {reaction}); + this.terminated = this._Manager.GatherSnapshots().Any(e => e.Terminated); + motions.Clear(); + } + } + } else { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log("No PlayerMotions ScriptableObject assigned"); + } + #endif + } + } + } +} diff --git a/Runtime/InternalReactions/PlayerReactions.cs.meta b/Runtime/Utilities/InternalReactions/PlayerReactions.cs.meta similarity index 100% rename from Runtime/InternalReactions/PlayerReactions.cs.meta rename to Runtime/Utilities/InternalReactions/PlayerReactions.cs.meta diff --git a/Runtime/Utilities/InternalReactions/ScriptedReactions.cs b/Runtime/Utilities/InternalReactions/ScriptedReactions.cs new file mode 100644 index 000000000..3f4ae7e4b --- /dev/null +++ b/Runtime/Utilities/InternalReactions/ScriptedReactions.cs @@ -0,0 +1,58 @@ +using droid.Runtime.Managers; +using UnityEditor; +using UnityEngine; + +namespace droid.Runtime.Utilities.InternalReactions { + /// + /// + /// + [ExecuteInEditMode] + public abstract class ScriptedReactions : MonoBehaviour { + #if UNITY_EDITOR + const int _script_execution_order = -10000; + #endif + + /// + /// + [SerializeField] + bool _debugging; + + /// + /// + [SerializeField] + protected AbstractNeodroidManager _Manager; + + /// + /// + public static ScriptedReactions Instance { get; private set; } + + #if NEODROID_DEBUG + /// + /// + public bool Debugging { get { return this._debugging; } set { this._debugging = value; } } + + #endif + /// + /// + void Awake() { + if (Instance == null) { + Instance = this; + } else { + Debug.LogWarning("WARNING! Multiple PlayerReactions in the scene! Only using " + Instance); + } + + #if UNITY_EDITOR + if (!Application.isPlaying) { + var manager_script = MonoScript.FromMonoBehaviour(this); + if (MonoImporter.GetExecutionOrder(manager_script) != _script_execution_order) { + MonoImporter.SetExecutionOrder(manager_script, + _script_execution_order); // Ensures that PreStep is called first, before all other scripts. + Debug.LogWarning("Execution Order changed, you will need to press play again to make everything function correctly!"); + EditorApplication.isPlaying = false; + //TODO: UnityEngine.Experimental.LowLevel.PlayerLoop.SetPlayerLoop(new UnityEngine.Experimental.LowLevel.PlayerLoopSystem()); + } + } + #endif + } + } +} diff --git a/Runtime/Utilities/InternalReactions/ScriptedReactions.cs.meta b/Runtime/Utilities/InternalReactions/ScriptedReactions.cs.meta new file mode 100644 index 000000000..f5ebba7b5 --- /dev/null +++ b/Runtime/Utilities/InternalReactions/ScriptedReactions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d178e7a28816b43f3b71761a024526fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 048bd58cce9bd486199d8be3ee13d777, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/IntersectionUtilities.cs b/Runtime/Utilities/IntersectionUtilities.cs new file mode 100644 index 000000000..d64ec7b38 --- /dev/null +++ b/Runtime/Utilities/IntersectionUtilities.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities { + public static class IntersectionUtilities { + // https://www.geometrictools.com/Documentation/IntersectionSphereCone.pdf + public static bool ConeSphereIntersection(Light spot_light, + Transform dynamic_object, + float boundingSphereRadius = 1) { + // FIXME Optimize computations of boundingSphereRadius^2, 1.0f / Mathf.Sin(angle * 0.5f), Mathf.Sin(angle * 0.5f)^2 and Mathf.Cos(angle * 0.5f)^2 + var sin = Mathf.Sin(spot_light.spotAngle * 0.5f * Mathf.Deg2Rad); + var cos = Mathf.Cos(spot_light.spotAngle * 0.5f * Mathf.Deg2Rad); + var offset = boundingSphereRadius / sin; + var transform = spot_light.transform; + var forward = transform.forward; + var u = transform.position - offset * forward; // Assumes unit length forward. + var d = dynamic_object.transform.position - u; + + var distance = Vector3.Dot(forward, d); // Assumes unit length forward. + + return distance >= d.magnitude * cos && distance <= offset + spot_light.range + boundingSphereRadius; + } + + public static bool SphereSphereIntersection(Light point_light, + Transform dynamic_object, + float boundingSphereRadius = 1) { + var diff = dynamic_object.transform.position - point_light.transform.position; + return diff.magnitude - boundingSphereRadius <= point_light.range; + } + } +} diff --git a/Runtime/Utilities/IntersectionUtilities.cs.meta b/Runtime/Utilities/IntersectionUtilities.cs.meta new file mode 100644 index 000000000..c15b215a8 --- /dev/null +++ b/Runtime/Utilities/IntersectionUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3019dd3f6d54e16ae3e98bff635a376 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Misc.meta b/Runtime/Utilities/Misc.meta deleted file mode 100644 index 4b36d5ce0..000000000 --- a/Runtime/Utilities/Misc.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 99e21c833db4148fa9f8fd2592c6f01d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Drawing/DrawArrow.cs b/Runtime/Utilities/Misc/Drawing/DrawArrow.cs deleted file mode 100644 index 1dfbe19bf..000000000 --- a/Runtime/Utilities/Misc/Drawing/DrawArrow.cs +++ /dev/null @@ -1,96 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Misc.Drawing { - /// - /// - /// - public static class DrawArrow { - /// - /// - /// - /// - /// - /// - /// - /// - public static void ForGizmo( - Vector3 pos, - Vector3 direction, - Color color = default(Color), - float arrow_head_length = 0.25f, - float arrow_head_angle = 20.0f) { - Gizmos.DrawRay(pos, direction); - DrawArrowEnd(true, pos, direction, color, arrow_head_length, arrow_head_angle); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public static void ForDebug( - Vector3 pos, - Vector3 direction, - Color color = default(Color), - float arrow_head_length = 0.25f, - float arrow_head_angle = 20.0f, - float ray_duration = 0f) { - if (ray_duration > 0) { - Debug.DrawRay(pos, direction, color, ray_duration); - } else { - Debug.DrawRay(pos, direction, color); - } - - DrawArrowEnd(false, pos, direction, color, arrow_head_length, arrow_head_angle, ray_duration); - } - - static void DrawArrowEnd( - bool gizmos, - Vector3 pos, - Vector3 direction, - Color color = default(Color), - float arrow_head_length = 0.25f, - float arrow_head_angle = 20.0f, - float ray_duration = 0f) { - var right = Quaternion.LookRotation(direction) - * Quaternion.Euler(arrow_head_angle, 0, 0) - * Vector3.back; - var left = Quaternion.LookRotation(direction) - * Quaternion.Euler(-arrow_head_angle, 0, 0) - * Vector3.back; - var up = Quaternion.LookRotation(direction) * Quaternion.Euler(0, arrow_head_angle, 0) * Vector3.back; - var down = Quaternion.LookRotation(direction) - * Quaternion.Euler(0, -arrow_head_angle, 0) - * Vector3.back; - if (gizmos) { - Gizmos.color = color; - Gizmos.DrawRay(pos + direction, right * arrow_head_length); - Gizmos.DrawRay(pos + direction, left * arrow_head_length); - Gizmos.DrawRay(pos + direction, up * arrow_head_length); - Gizmos.DrawRay(pos + direction, down * arrow_head_length); - } else { - if (ray_duration > 0) { - Debug.DrawRay(pos + direction, right * arrow_head_length, color, ray_duration); - Debug.DrawRay(pos + direction, left * arrow_head_length, color, ray_duration); - Debug.DrawRay(pos + direction, up * arrow_head_length, color, ray_duration); - Debug.DrawRay(pos + direction, down * arrow_head_length, color, ray_duration); - } else { - Debug.DrawRay(pos + direction, right * arrow_head_length, color); - Debug.DrawRay(pos + direction, left * arrow_head_length, color); - Debug.DrawRay(pos + direction, up * arrow_head_length, color); - Debug.DrawRay(pos + direction, down * arrow_head_length, color); - } - } - -/* - var arrow_size = 2; - Handles.color = Handles.xAxisColor; - Handles.ArrowHandleCap( 0, pos, Quaternion.Euler(direction), arrow_size,EventType.Repaint ); - */ - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Drawing/DrawArrow.cs.meta b/Runtime/Utilities/Misc/Drawing/DrawArrow.cs.meta deleted file mode 100644 index 4888e26df..000000000 --- a/Runtime/Utilities/Misc/Drawing/DrawArrow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2b133a5853bab4929a05f905722b3d9f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Drawing/DrawString.cs.meta b/Runtime/Utilities/Misc/Drawing/DrawString.cs.meta deleted file mode 100644 index 7f48a7a37..000000000 --- a/Runtime/Utilities/Misc/Drawing/DrawString.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 403ee89ddbca4a78be084b50e26a9170 -timeCreated: 1526231414 \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Drawing/GuiDraw.cs b/Runtime/Utilities/Misc/Drawing/GuiDraw.cs deleted file mode 100644 index 1603d0795..000000000 --- a/Runtime/Utilities/Misc/Drawing/GuiDraw.cs +++ /dev/null @@ -1,33 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Misc.Drawing { - /// - /// - /// - public static class GuiDraw { - static Texture2D _s_line_tex; - - static GuiDraw() { - _s_line_tex = new Texture2D(1, 3, TextureFormat.ARGB32, true); - _s_line_tex.SetPixel(0, 0, new Color(1, 1, 1, 0)); - _s_line_tex.SetPixel(0, 1, Color.white); - _s_line_tex.SetPixel(0, 2, new Color(1, 1, 1, 0)); - _s_line_tex.Apply(); - } - - public static void DrawLine(Vector2 p_point_a, Vector2 p_point_b, float p_width) { - var save_matrix = GUI.matrix; - var save_color = GUI.color; - - var delta = p_point_b - p_point_a; - GUIUtility.ScaleAroundPivot(new Vector2(delta.magnitude, p_width), Vector2.zero); - GUIUtility.RotateAroundPivot(Vector2.Angle(delta, Vector2.right) * Mathf.Sign(delta.y), Vector2.zero); - GUI.matrix = Matrix4x4.TRS(p_point_a, Quaternion.identity, Vector3.one) * GUI.matrix; - - GUI.DrawTexture(new Rect(Vector2.zero, Vector2.one), _s_line_tex); - - GUI.matrix = save_matrix; - GUI.color = save_color; - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Drawing/GuiDraw.cs.meta b/Runtime/Utilities/Misc/Drawing/GuiDraw.cs.meta deleted file mode 100644 index ff384ca14..000000000 --- a/Runtime/Utilities/Misc/Drawing/GuiDraw.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 89a14382585fb4a0883bc149f8600011 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Drawing/NeodroidUtilities.cs b/Runtime/Utilities/Misc/Drawing/NeodroidUtilities.cs deleted file mode 100644 index ff6026c75..000000000 --- a/Runtime/Utilities/Misc/Drawing/NeodroidUtilities.cs +++ /dev/null @@ -1,411 +0,0 @@ -using System.Collections.Generic; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Sensors; -using UnityEngine; -using UnityEngine.SceneManagement; - -namespace Neodroid.Runtime.Utilities.Misc.Drawing { - /// - /// - /// - public static partial class NeodroidUtilities { - /// - /// - /// - /// - /// - public static float KineticEnergy(Rigidbody rb) { - return - 0.5f - * rb.mass - * Mathf.Pow( - rb.velocity.magnitude, - 2); // mass in kg, velocity in meters per second, result is joules - } - - /// - /// - /// - /// - /// - /// - /// - public static Vector3 Vector3Clamp(ref Vector3 vec, Vector3 min_point, Vector3 max_point) { - vec.x = Mathf.Clamp(vec.x, min_point.x, max_point.x); - vec.y = Mathf.Clamp(vec.y, min_point.y, max_point.y); - vec.z = Mathf.Clamp(vec.z, min_point.z, max_point.z); - return vec; - } - - /// - /// - /// - /// - /// - /// - public static void DrawLine(Vector3 p1, Vector3 p2, float width) { - var count = Mathf.CeilToInt(width); // how many lines are needed. - if (count == 1) { - Gizmos.DrawLine(p1, p2); - } else { - var c = Camera.current; - if (c == null) { - Debug.LogError("Camera.current is null"); - return; - } - - var v1 = (p2 - p1).normalized; // line direction - var v2 = (c.transform.position - p1).normalized; // direction to camera - var n = Vector3.Cross(v1, v2); // normal vector - for (var i = 0; i < count; i++) { - //Vector3 o = n * width ((float)i / (count - 1) - 0.5f); - var o = n * width * ((float)i / (count - 1) - 0.5f); - Gizmos.DrawLine(p1 + o, p2 + o); - } - } - } - - public static AnimationCurve DefaultAnimationCurve() { - return new AnimationCurve(new Keyframe(1, 1), new Keyframe(0, 0)); - } - - /// - /// - /// - /// - public static Gradient DefaultGradient() { - var gradient = new Gradient { - // The number of keys must be specified in this array initialiser - colorKeys = new[] { - // Add your colour and specify the stop point - new GradientColorKey(new Color(1, 1, 1), 0), - new GradientColorKey(new Color(1, 1, 1), 1f), - new GradientColorKey(new Color(1, 1, 1), 0) - }, - // This sets the alpha to 1 at both ends of the gradient - alphaKeys = new[] { - new GradientAlphaKey(1, 0), new GradientAlphaKey(1, 1), new GradientAlphaKey(1, 0) - } - }; - - return gradient; - } - - public static Texture2D RenderTextureImage(Camera camera) { - // From unity documentation, https://docs.unity3d.com/ScriptReference/Camera.Render.html - var current_render_texture = RenderTexture.active; - RenderTexture.active = camera.targetTexture; - camera.Render(); - var texture = new Texture2D(camera.targetTexture.width, camera.targetTexture.height); - texture.ReadPixels(new Rect(0, 0, camera.targetTexture.width, camera.targetTexture.height), 0, 0); - texture.Apply(); - RenderTexture.active = current_render_texture; - return texture; - } - - public static void RegisterCollisionTriggerCallbacksOnChildren( - Component caller, - Transform parent, - ChildColliderSensor.OnChildCollisionEnterDelegate on_collision_enter_child, - ChildColliderSensor.OnChildTriggerEnterDelegate on_trigger_enter_child = null, - ChildColliderSensor.OnChildCollisionExitDelegate on_collision_exit_child = null, - ChildColliderSensor.OnChildTriggerExitDelegate on_trigger_exit_child = null, - ChildColliderSensor.OnChildCollisionStayDelegate on_collision_stay_child = null, - ChildColliderSensor.OnChildTriggerStayDelegate on_trigger_stay_child = null, - bool debug = false) { - var children_with_colliders = parent.GetComponentsInChildren(); - - foreach (var child in children_with_colliders) { - var child_sensors = child.GetComponents(); - ChildColliderSensor collider_sensor = null; - foreach (var child_sensor in child_sensors) { - if (child_sensor.Caller != null && child_sensor.Caller == caller) { - collider_sensor = child_sensor; - break; - } - - if (child_sensor.Caller == null) { - child_sensor.Caller = caller; - collider_sensor = child_sensor; - break; - } - } - - if (collider_sensor == null) { - collider_sensor = child.gameObject.AddComponent(); - collider_sensor.Caller = caller; - } - - if (on_collision_enter_child != null) { - collider_sensor.OnCollisionEnterDelegate = on_collision_enter_child; - } - - if (on_trigger_enter_child != null) { - collider_sensor.OnTriggerEnterDelegate = on_trigger_enter_child; - } - - if (on_collision_exit_child != null) { - collider_sensor.OnCollisionExitDelegate = on_collision_exit_child; - } - - if (on_trigger_exit_child != null) { - collider_sensor.OnTriggerExitDelegate = on_trigger_exit_child; - } - - if (on_trigger_stay_child != null) { - collider_sensor.OnTriggerStayDelegate = on_trigger_stay_child; - } - - if (on_collision_stay_child != null) { - collider_sensor.OnCollisionStayDelegate = on_collision_stay_child; - } - - if (debug) { - Debug.Log( - caller.name - + " has created " - + collider_sensor.name - + " on " - + child.name - + " under parent " - + parent.name); - } - } - } - - /// - /// - /// - /// - /// - public static string ColorArrayToString(IEnumerable colors) { - var s = ""; - foreach (var color in colors) { - s += color.ToString(); - } - - return s; - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public static TRecipient MaybeRegisterComponent( - TRecipient r, - TCaller c, - bool only_parents = false) - where TRecipient : Object, IHasRegister where TCaller : Component, IRegisterable { - TRecipient component = null; - if (r != null) { - component = r; //.GetComponent(); - } else if (c.GetComponentInParent() != null) { - component = c.GetComponentInParent(); - } else if (!only_parents) { - component = Object.FindObjectOfType(); - } - - if (component != null) { - component.Register(c); - } else { - Debug.Log($"Could not find a {typeof(TRecipient)} recipient during registeration"); - } - - return component; - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public static TRecipient MaybeRegisterNamedComponent( - TRecipient r, - TCaller c, - string identifier) - where TRecipient : Object, IHasRegister where TCaller : Component, IRegisterable { - TRecipient component; - if (r != null) { - component = r; - } else if (c.GetComponentInParent() != null) { - component = c.GetComponentInParent(); - } else { - component = Object.FindObjectOfType(); - } - - if (component != null) { - component.Register(c, identifier); - } else { - #if NEODROID_DEBUG - Debug.Log($"Could not find a {typeof(TRecipient)} recipient during registeration"); - #endif - } - - return component; - } - - /// Use this method to get all loaded objects of some type, including inactive objects. - /// This is an alternative to Resources.FindObjectsOfTypeAll (returns project assets, including prefabs), and GameObject.FindObjectsOfTypeAll (deprecated). - public static T[] FindAllObjectsOfTypeInScene() { - //(Scene scene) { - var results = new List(); - for (var i = 0; i < SceneManager.sceneCount; i++) { - var s = SceneManager.GetSceneAt(i); // maybe EditorSceneManager - if (!s.isLoaded) { - continue; - } - - var all_game_objects = s.GetRootGameObjects(); - foreach (var go in all_game_objects) { - results.AddRange(go.GetComponentsInChildren(true)); - } - } - - return results.ToArray(); - } - - /// - /// - /// - /// - /// - public static GameObject[] FindAllGameObjectsExceptLayer(int layer) { - var goa = Object.FindObjectsOfType(); - var game_objects = new List(); - foreach (var go in goa) { - if (go.layer != layer) { - game_objects.Add(go); - } - } - - return game_objects.ToArray(); - } - - /// - /// - /// - /// - /// - /// - public static GameObject[] RecursiveChildGameObjectsExceptLayer(Transform parent, int layer) { - var game_objects = new List(); - foreach (Transform go in parent) { - if (go) { - if (go.gameObject.layer != layer) { - game_objects.Add(go.gameObject); - var children = RecursiveChildGameObjectsExceptLayer(go, layer); - if (children != null && children.Length > 0) { - game_objects.AddRange(children); - } - } - } - } - - return game_objects.ToArray(); - } - - /** Contains logic for coverting a camera component into a Texture2D. */ - /*public Texture2D ObservationToTex(Camera camera, int width, int height) - { - Camera cam = camera; - Rect oldRec = camera.rect; - cam.rect = new Rect(0f, 0f, 1f, 1f); - bool supportsAntialiasing = false; - bool needsRescale = false; - var depth = 24; - var format = RenderTextureFormat.Default; - var readWrite = RenderTextureReadWrite.Default; - var antiAliasing = (supportsAntialiasing) ? Mathf.Max(1, QualitySettings.antiAliasing) : 1; - - var finalRT = - RenderTexture.GetTemporary(width, height, depth, format, readWrite, antiAliasing); - var renderRT = (!needsRescale) ? finalRT : - RenderTexture.GetTemporary(width, height, depth, format, readWrite, antiAliasing); - var tex = new Texture2D(width, height, TextureFormat.RGB24, false); - - var prevActiveRT = RenderTexture.active; - var prevCameraRT = cam.targetTexture; - - // render to offscreen texture ( from CPU side) - RenderTexture.active = renderRT; - cam.targetTexture = renderRT; - - cam.Render(); - - if (needsRescale) - { - RenderTexture.active = finalRT; - Graphics.Blit(renderRT, finalRT); - RenderTexture.ReleaseTemporary(renderRT); - } - - tex.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0); - tex.Apply(); - cam.targetTexture = prevCameraRT; - cam.rect = oldRec; - RenderTexture.active = prevActiveRT; - RenderTexture.ReleaseTemporary(finalRT); - return tex; - } - - /// Contains logic to convert the agent's cameras into observation list - /// (as list of float arrays) - public List GetObservationMatrixList(List agent_keys) - { - List observation_matrix_list = new List(); - Dictionary> observations = CollectObservations(); - for (int obs_number = 0; obs_number < brainParameters.cameraResolutions.Length; obs_number++) - { - int width = brainParameters.cameraResolutions[obs_number].width; - int height = brainParameters.cameraResolutions[obs_number].height; - bool bw = brainParameters.cameraResolutions[obs_number].blackAndWhite; - int pixels = 0; - if (bw) - pixels = 1; - else - pixels = 3; - float[,,,] observation_matrix = new float[agent_keys.Count - , height - , width - , pixels]; - int i = 0; - foreach (int k in agent_keys) - { - Camera agent_obs = observations[k][obs_number]; - Texture2D tex = ObservationToTex(agent_obs, width, height); - for (int w = 0; w < width; w++) - { - for (int h = 0; h < height; h++) - { - Color c = tex.GetPixel(w, h); - if (!bw) - { - observation_matrix[i, tex.height - h - 1, w, 0] = c.r; - observation_matrix[i, tex.height - h - 1, w, 1] = c.g; - observation_matrix[i, tex.height - h - 1, w, 2] = c.b; - } - else - { - observation_matrix[i, tex.height - h - 1, w, 0] = (c.r + c.g + c.b) / 3; - } - } - } - UnityEngine.Object.DestroyImmediate(tex); - Resources.UnloadUnusedAssets(); - i++; - } - observation_matrix_list.Add(observation_matrix); - } - return observation_matrix_list; - }*/ - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Drawing/NeodroidUtilities.cs.meta b/Runtime/Utilities/Misc/Drawing/NeodroidUtilities.cs.meta deleted file mode 100644 index 1df303aaf..000000000 --- a/Runtime/Utilities/Misc/Drawing/NeodroidUtilities.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 074e9de4624c14995a3673ee9f343525 -timeCreated: 1500966461 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Extensions/OnCollision.cs b/Runtime/Utilities/Misc/Extensions/OnCollision.cs deleted file mode 100644 index e8a3988bf..000000000 --- a/Runtime/Utilities/Misc/Extensions/OnCollision.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Misc.Extensions { - /// - /// - /// - [RequireComponent(typeof(Collider))] - public class ChildCollisionPublisher : MonoBehaviour { - /// - /// - /// - /// - public delegate void OnCollisionDelegate(Collision collision); - - OnCollisionDelegate _collision_delegate; - - /// - /// - /// - public OnCollisionDelegate CollisionDelegate { - set { this._collision_delegate = value; } - } - - void OnCollisionEnter(Collision collision) { this._collision_delegate?.Invoke(collision); } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Extensions/OnCollision.cs.meta b/Runtime/Utilities/Misc/Extensions/OnCollision.cs.meta deleted file mode 100644 index aa25167e8..000000000 --- a/Runtime/Utilities/Misc/Extensions/OnCollision.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5e281ca1edd11452ea678ecac688c0c0 -timeCreated: 1501151395 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Grasping/GraspingUtilities.cs b/Runtime/Utilities/Misc/Grasping/GraspingUtilities.cs deleted file mode 100644 index 62bfde757..000000000 --- a/Runtime/Utilities/Misc/Grasping/GraspingUtilities.cs +++ /dev/null @@ -1,204 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Misc.Grasping { - /// - /// - /// - public static class GraspingUtilities { - /// - /// - /// - /// - /// - /// - public static void DrawBoxFromCenter(Vector3 p, float r, Color c) { - // p is pos.yition of the center, r is "radius" and c is the color of the box - //Bottom lines - Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(r + p.x, -r + p.y, -r + p.z), c); - Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(-r + p.x, -r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(-r + p.x, -r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(r + p.x, -r + p.y, -r + p.z), c); - - //Vertical lines - Debug.DrawLine(new Vector3(-r + p.x, r + p.y, -r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); - Debug.DrawLine(new Vector3(-r + p.x, r + p.y, -r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, r + p.y, r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, r + p.y, r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); - - //Top lines - Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, -r + p.z), new Vector3(-r + p.x, r + p.y, -r + p.z), c); - Debug.DrawLine(new Vector3(-r + p.x, -r + p.y, r + p.z), new Vector3(-r + p.x, r + p.y, r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, -r + p.y, -r + p.z), new Vector3(r + p.x, r + p.y, -r + p.z), c); - Debug.DrawLine(new Vector3(r + p.x, -r + p.y, r + p.z), new Vector3(r + p.x, r + p.y, r + p.z), c); - } - - /// - /// - /// - /// - /// - /// - /// - /// - public static void DrawRect(float x_size, float y_size, float z_size, Vector3 pos, Color color) { - var x = x_size / 2; - var y = y_size / 2; - var z = z_size / 2; - - //Vertical lines - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(-x + pos.x, y + pos.y, -z + pos.z), - color); - Debug.DrawLine( - new Vector3(x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(x + pos.x, y + pos.y, -z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, z + pos.z), - new Vector3(-x + pos.x, y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(x + pos.x, -y + pos.y, z + pos.z), - new Vector3(x + pos.x, y + pos.y, z + pos.z), - color); - - //Horizontal top - Debug.DrawLine( - new Vector3(-x + pos.x, y + pos.y, -z + pos.z), - new Vector3(x + pos.x, y + pos.y, -z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, y + pos.y, z + pos.z), - new Vector3(x + pos.x, y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, y + pos.y, -z + pos.z), - new Vector3(-x + pos.x, y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(x + pos.x, y + pos.y, -z + pos.z), - new Vector3(x + pos.x, y + pos.y, z + pos.z), - color); - - //Horizontal bottom - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(x + pos.x, -y + pos.y, -z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, z + pos.z), - new Vector3(x + pos.x, -y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(-x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(-x + pos.x, -y + pos.y, z + pos.z), - color); - Debug.DrawLine( - new Vector3(x + pos.x, -y + pos.y, -z + pos.z), - new Vector3(x + pos.x, -y + pos.y, z + pos.z), - color); - } - - /// - /// - /// - /// - /// - /// - public static bool DidTransformsChange( - Transform[] old_transforms, - Transform[] newly_acquired_transforms) { - if (old_transforms.Length != newly_acquired_transforms.Length) { - return true; - } - - var i = 0; - foreach (var old in old_transforms) { - if (old.position != newly_acquired_transforms[i].position - || old.rotation != newly_acquired_transforms[i].rotation) { - return true; - } - - i++; - } - - return false; - } - - /// - /// - /// - /// - /// - public static Bounds GetTotalMeshFilterBounds(Transform object_transform) { - var mesh_filter = object_transform.GetComponent(); - - var result = mesh_filter != null ? mesh_filter.mesh.bounds : new Bounds(); - - foreach (Transform transform in object_transform) { - var bounds = GetTotalMeshFilterBounds(transform); - result.Encapsulate(bounds.min); - result.Encapsulate(bounds.max); - } - - /*var bounds1 = GetTotalColliderBounds(objectTransform); - result.Encapsulate(bounds1.min); - result.Encapsulate(bounds1.max); - */ - /* - foreach (Transform transform in objectTransform) { - var bounds = GetTotalColliderBounds(transform); - result.Encapsulate(bounds.min); - result.Encapsulate(bounds.max); - } - */ - var scaled_min = result.min; - scaled_min.Scale(object_transform.localScale); - result.min = scaled_min; - var scaled_max = result.max; - scaled_max.Scale(object_transform.localScale); - result.max = scaled_max; - return result; - } - - /// - /// - /// - /// - /// - public static Bounds GetTotalColliderBounds(Transform object_transform) { - var mesh_filter = object_transform.GetComponent(); - - var result = mesh_filter != null ? mesh_filter.bounds : new Bounds(); - - foreach (Transform transform in object_transform) { - var bounds = GetTotalColliderBounds(transform); - result.Encapsulate(bounds.min); - result.Encapsulate(bounds.max); - } - - var scaled_min = result.min; - scaled_min.Scale(object_transform.localScale); - result.min = scaled_min; - var scaled_max = result.max; - scaled_max.Scale(object_transform.localScale); - result.max = scaled_max; - return result; - } - - /// - /// - /// - /// - /// - public static Bounds GetMaxBounds(GameObject g) { - var b = new Bounds(g.transform.position, Vector3.zero); - foreach (var r in g.GetComponentsInChildren()) { - b.Encapsulate(r.bounds); - } - - return b; - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Grid/GridCell.cs.meta b/Runtime/Utilities/Misc/Grid/GridCell.cs.meta deleted file mode 100644 index 5caf7525a..000000000 --- a/Runtime/Utilities/Misc/Grid/GridCell.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d4f25bc6654c4a39a08af2fab94e16d2 -timeCreated: 1516155932 \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Orientation/FollowTarget.cs b/Runtime/Utilities/Misc/Orientation/FollowTarget.cs deleted file mode 100644 index 9d07576a6..000000000 --- a/Runtime/Utilities/Misc/Orientation/FollowTarget.cs +++ /dev/null @@ -1,23 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Misc.Orientation { - /// - /// - /// - [ExecuteInEditMode] - public class FollowTarget : MonoBehaviour { - /// - /// - public Vector3 _Offset = new Vector3(0f, 7.5f, 0f); - - /// - /// - public Transform _Target; - - void LateUpdate() { - if (this._Target) { - this.transform.position = this._Target.position + this._Offset; - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Orientation/FollowTarget.cs.meta b/Runtime/Utilities/Misc/Orientation/FollowTarget.cs.meta deleted file mode 100644 index 28aa66161..000000000 --- a/Runtime/Utilities/Misc/Orientation/FollowTarget.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 246cc59c7a84ea44f87f6b70acfe30c5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Runtime/Utilities/Misc/Orientation/FollowTargetRotation.cs b/Runtime/Utilities/Misc/Orientation/FollowTargetRotation.cs deleted file mode 100644 index a68b1c491..000000000 --- a/Runtime/Utilities/Misc/Orientation/FollowTargetRotation.cs +++ /dev/null @@ -1,29 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Misc.Orientation { - [ExecuteInEditMode] - public class FollowTargetRotation : MonoBehaviour { - /// - /// - /// - public Transform _TargetPose; - - public Quaternion _Rot; - - [SerializeField] Vector3 _forward; - - void LateUpdate() { - if (this._TargetPose) { - this._Rot = this._TargetPose.rotation; - - var projection_on_plane = Vector3.ProjectOnPlane(this._TargetPose.up, Vector3.up); - - var rot = this.transform.rotation; - var normalised_proj = projection_on_plane.normalized; - var view = Quaternion.Euler(0, -90, 0) * normalised_proj; - rot.SetLookRotation(view, Vector3.down); - this.transform.rotation = rot; - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Orientation/FollowTargetRotation.cs.meta b/Runtime/Utilities/Misc/Orientation/FollowTargetRotation.cs.meta deleted file mode 100644 index b0c933fab..000000000 --- a/Runtime/Utilities/Misc/Orientation/FollowTargetRotation.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 322a5eaf053c04a31afeccce10dd4048 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Orientation/MotionTracker.cs b/Runtime/Utilities/Misc/Orientation/MotionTracker.cs deleted file mode 100644 index 92472ca9f..000000000 --- a/Runtime/Utilities/Misc/Orientation/MotionTracker.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Neodroid.Runtime.Utilities.Misc.Orientation { - public interface IMotionTracker { - bool IsInMotion(); - - bool IsInMotion(float sensitivity); - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Orientation/MotionTracker.cs.meta b/Runtime/Utilities/Misc/Orientation/MotionTracker.cs.meta deleted file mode 100644 index 12274833e..000000000 --- a/Runtime/Utilities/Misc/Orientation/MotionTracker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 1618cc7b3c2e16b4192e7330c541ac5e -timeCreated: 1501829051 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Orientation/PointInDirection.cs.meta b/Runtime/Utilities/Misc/Orientation/PointInDirection.cs.meta deleted file mode 100644 index 3a1435ef5..000000000 --- a/Runtime/Utilities/Misc/Orientation/PointInDirection.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 85ccef30fe10a486389326bacc3bdfd4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Procedural/GameObjectCloner.cs b/Runtime/Utilities/Misc/Procedural/GameObjectCloner.cs deleted file mode 100644 index 71fac86c8..000000000 --- a/Runtime/Utilities/Misc/Procedural/GameObjectCloner.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Misc.Procedural { - /// - /// - /// - public class GameObjectCloner : MonoBehaviour { - [SerializeField] GameObject _prefab; - [SerializeField, Range(0, 99)] int _num_clones; - [SerializeField] Vector3 _initial_offset = new Vector3(20, 0); - [SerializeField] Vector3 _offset = new Vector3(20, 0, 20); - - [SerializeField] GameObject[] _clones; - - void Start() { this.InstanciateClones(); } - - void InstanciateClones() { - if (this._clones.Length > 0) { - this.ClearClones(); - } - - var eid = 0; - this._clones = new GameObject[this._num_clones]; - if (this._prefab) { - var clone_coords = NeodroidUtilities.SnakeSpaceFillingGenerator(this._num_clones); - foreach (var clone_coord in clone_coords) { - var go = Instantiate( - this._prefab, - this._initial_offset + Vector3.Scale(this._offset, clone_coord), - Quaternion.identity, - this.transform); - go.name = $"{go.name}{eid}"; - this._clones[eid] = go; - eid++; - } - } - } - - void ClearClones() { - foreach (var clone in this._clones) { - Destroy(clone); - } - } - - void Update() { - if (this._num_clones != this._clones.Length) { - this.InstanciateClones(); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/Procedural/SnakeSpaceFilling.cs.meta b/Runtime/Utilities/Misc/Procedural/SnakeSpaceFilling.cs.meta deleted file mode 100644 index b219da17c..000000000 --- a/Runtime/Utilities/Misc/Procedural/SnakeSpaceFilling.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 261571a3ddc74d5caa40fde7cfa54662 -timeCreated: 1526231353 \ No newline at end of file diff --git a/Runtime/Utilities/Misc/SearchableEnum.meta b/Runtime/Utilities/Misc/SearchableEnum.meta deleted file mode 100644 index 9162cd551..000000000 --- a/Runtime/Utilities/Misc/SearchableEnum.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 82acf384d6ed24fb6891e49604c8b92e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Misc/SearchableEnum/SearchableEnumAttribute.cs b/Runtime/Utilities/Misc/SearchableEnum/SearchableEnumAttribute.cs deleted file mode 100644 index 3765267b2..000000000 --- a/Runtime/Utilities/Misc/SearchableEnum/SearchableEnumAttribute.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Misc.SearchableEnum { - /// - /// - /// Put this attribute on a public (or SerialzeField) enum in a - /// MonoBehaviour or ScriptableObject to get an improved enum selector - /// popup. The enum list is scrollable and can be filtered by typing. - /// - [AttributeUsage(AttributeTargets.Field)] - public class SearchableEnumAttribute : PropertyAttribute { } -} \ No newline at end of file diff --git a/Runtime/Utilities/Misc/SearchableEnum/SearchableEnumAttribute.cs.meta b/Runtime/Utilities/Misc/SearchableEnum/SearchableEnumAttribute.cs.meta deleted file mode 100644 index 624e1e2d7..000000000 --- a/Runtime/Utilities/Misc/SearchableEnum/SearchableEnumAttribute.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5d57bf0a9f2e56043b171bac62dcd313 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/NeodroidCamera.meta b/Runtime/Utilities/NeodroidCamera.meta deleted file mode 100644 index 5d009eed9..000000000 --- a/Runtime/Utilities/NeodroidCamera.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 30b9c145fe1124a2c845832b2bbbd147 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/NeodroidCamera/CameraObservationTextureController.cs b/Runtime/Utilities/NeodroidCamera/CameraObservationTextureController.cs deleted file mode 100644 index 5a1c65e83..000000000 --- a/Runtime/Utilities/NeodroidCamera/CameraObservationTextureController.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.NeodroidCamera { - /// - /// - /// - [ExecuteInEditMode, Serializable] - public class CameraObservationTextureController : MonoBehaviour - { - [SerializeField] - Camera[] _cameras; - - [SerializeField] Texture[] _textures; - - [SerializeField] Vector2Int _size = new Vector2Int(84,84); - [SerializeField] TextureFormat _texture_format = TextureFormat.ARGB32; - [SerializeField] FilterMode _filter_mode = FilterMode.Bilinear; - [SerializeField] TextureWrapMode _wrap_mode = TextureWrapMode.Clamp; - - void Awake() { - this._cameras = FindObjectsOfType(); - - var textures = new List(); - - foreach (var camera1 in this._cameras) { - var target = camera1.targetTexture; - if(target) { - textures.Add(target); - } - } - - this._textures = textures.ToArray(); - - foreach (var texture in this._textures) { - if (texture) { - texture.height = this._size.y; - texture.width = this._size.x; - texture.filterMode = this._filter_mode; - texture.wrapMode = this._wrap_mode; - } - } - } - } -} diff --git a/Runtime/Utilities/NeodroidCamera/DisparityCameraBehaviour.cs b/Runtime/Utilities/NeodroidCamera/DisparityCameraBehaviour.cs deleted file mode 100644 index cf9cd1f19..000000000 --- a/Runtime/Utilities/NeodroidCamera/DisparityCameraBehaviour.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.NeodroidCamera { - /// - /// - /// - public class DisparityCameraBehaviour : MonoBehaviour { - //TODO: Implement - } -} \ No newline at end of file diff --git a/Runtime/Utilities/NeodroidCamera/DisparityCameraBehaviour.cs.meta b/Runtime/Utilities/NeodroidCamera/DisparityCameraBehaviour.cs.meta deleted file mode 100644 index bbe101067..000000000 --- a/Runtime/Utilities/NeodroidCamera/DisparityCameraBehaviour.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 19298aa030ea40c29995fdbbc6646e9b -timeCreated: 1526045130 \ No newline at end of file diff --git a/Runtime/Utilities/NeodroidCamera/FlowCameraBehaviour.cs b/Runtime/Utilities/NeodroidCamera/FlowCameraBehaviour.cs deleted file mode 100644 index 2dbfce6b0..000000000 --- a/Runtime/Utilities/NeodroidCamera/FlowCameraBehaviour.cs +++ /dev/null @@ -1,72 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.NeodroidCamera { - /// - /// - /// - [ExecuteInEditMode, RequireComponent(typeof(Camera))] - public class FlowCameraBehaviour : MonoBehaviour { - /// - /// - /// - [SerializeField] - Color _background_color = Color.white; - - [SerializeField, Range(0, 1)] float _blending = 0.5f; - - [SerializeField, Range(0, 100)] float _overlay_amplitude = 60; - - /// - /// - /// - Material _material; - - /// - /// - /// - [SerializeField] - Shader _shader; - - /// - /// - /// - void Awake() { - this.GetComponent().depthTextureMode |= DepthTextureMode.Depth | DepthTextureMode.MotionVectors; - } - - /// - /// - /// - /// - /// - void OnRenderImage(RenderTexture source, RenderTexture destination) { - if (this._material == null) { - var shader = this._shader; - if (shader != null) { - this._material = new Material(shader) {hideFlags = HideFlags.DontSave}; - } - } - - var material = this._material; - if (material != null) { - material.SetColor("_BackgroundColor", this._background_color); - material.SetFloat("_Blending", this._blending); - material.SetFloat("_Amplitude", this._overlay_amplitude); - Graphics.Blit(source, destination, material); - } - } - - /// - /// - /// - void OnDestroy() { - if (this._material != null) { - if (Application.isPlaying) { - Destroy(this._material); - } else { - DestroyImmediate(this._material); - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/NeodroidCamera/FlowCameraBehaviour.cs.meta b/Runtime/Utilities/NeodroidCamera/FlowCameraBehaviour.cs.meta deleted file mode 100644 index 9a0a6b067..000000000 --- a/Runtime/Utilities/NeodroidCamera/FlowCameraBehaviour.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b2e54ebded2e5489fa2596cf3ab24e37 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/NeodroidCamera/IgnoreLightSource.cs b/Runtime/Utilities/NeodroidCamera/IgnoreLightSource.cs deleted file mode 100644 index 8fe2ba3e4..000000000 --- a/Runtime/Utilities/NeodroidCamera/IgnoreLightSource.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.NeodroidCamera { - /// - /// - /// - [ExecuteInEditMode] - public class IgnoreLightSource : MonoBehaviour { - [SerializeField] bool _ignore_infrared_if_empty = true; - - [SerializeField] Light[] _lights_to_ignore; - - // Use this for initialization - void Start() { - if (this._lights_to_ignore == null - || this._lights_to_ignore.Length == 0 && this._ignore_infrared_if_empty) { - var infrared_light_sources = FindObjectsOfType(); - var lights = new List(); - foreach (var ils in infrared_light_sources) { - lights.Add(ils.GetComponent()); - } - - this._lights_to_ignore = lights.ToArray(); - } - } - - // Update is called once per frame - void Update() { } - - void OnPreCull() { - if (this._lights_to_ignore != null) { - foreach (var l in this._lights_to_ignore) { - if (l) { - l.enabled = false; - } - } - } - } - - void OnPreRender() { - if (this._lights_to_ignore != null) { - foreach (var l in this._lights_to_ignore) { - if (l) { - l.enabled = false; - } - } - } - } - - void OnPostRender() { - if (this._lights_to_ignore != null) { - foreach (var l in this._lights_to_ignore) { - if (l) { - l.enabled = true; - } - } - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/NeodroidCamera/IgnoreLightSource.cs.meta b/Runtime/Utilities/NeodroidCamera/IgnoreLightSource.cs.meta deleted file mode 100644 index cffae937a..000000000 --- a/Runtime/Utilities/NeodroidCamera/IgnoreLightSource.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 90d8486c2d1444fb8ac452a5a74cf74b -timeCreated: 1505979636 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/NeodroidCamera/InfraredLightSource.cs b/Runtime/Utilities/NeodroidCamera/InfraredLightSource.cs deleted file mode 100644 index dc4226f42..000000000 --- a/Runtime/Utilities/NeodroidCamera/InfraredLightSource.cs +++ /dev/null @@ -1,8 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.NeodroidCamera { - /// - /// - /// - public class InfraredLightSource : MonoBehaviour { } -} \ No newline at end of file diff --git a/Runtime/Utilities/NeodroidCamera/InfraredLightSource.cs.meta b/Runtime/Utilities/NeodroidCamera/InfraredLightSource.cs.meta deleted file mode 100644 index e3394b337..000000000 --- a/Runtime/Utilities/NeodroidCamera/InfraredLightSource.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: fb842d57fd4d0474497a6d1b0c477f96 -timeCreated: 1511094267 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/NeodroidCamera/ReplacementShaderEffect.cs b/Runtime/Utilities/NeodroidCamera/ReplacementShaderEffect.cs deleted file mode 100644 index fb9366c22..000000000 --- a/Runtime/Utilities/NeodroidCamera/ReplacementShaderEffect.cs +++ /dev/null @@ -1,29 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.NeodroidCamera { - /// - /// - /// - [ExecuteInEditMode] - public class ReplacementShaderEffect : MonoBehaviour { - [SerializeField] string _replace_render_type = ""; - [SerializeField] Color _color = Color.black; - [SerializeField] Shader _replacement_shader; - - void OnValidate() { - Shader.SetGlobalColor("_OverDrawColor", this._color); - Shader.SetGlobalColor("_SegmentationColor", this._color); - //Shader.SetGlobalColor ("_Color", _color); - } - - void OnEnable() { - if (this._replacement_shader != null) { - this.GetComponent().SetReplacementShader(this._replacement_shader, this._replace_render_type); - } - } - - void OnDisable() { this.GetComponent().ResetReplacementShader(); } - - void OnPreRender() { } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/NeodroidCamera/ReplacementShaderEffect.cs.meta b/Runtime/Utilities/NeodroidCamera/ReplacementShaderEffect.cs.meta deleted file mode 100644 index b33e70790..000000000 --- a/Runtime/Utilities/NeodroidCamera/ReplacementShaderEffect.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 2773a5ee782b3475e9f2cac8306134fa -timeCreated: 1459886437 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/NeodroidCamera/SynchroniseCameraProperties.cs b/Runtime/Utilities/NeodroidCamera/SynchroniseCameraProperties.cs deleted file mode 100644 index 5acdd3e0b..000000000 --- a/Runtime/Utilities/NeodroidCamera/SynchroniseCameraProperties.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.NeodroidCamera { - /// - /// - /// - [RequireComponent(typeof(Camera)), ExecuteInEditMode, Serializable] - public class SynchroniseCameraProperties : MonoBehaviour { - /// - /// - /// - const double _tolerance = Double.Epsilon; - - /// - /// - /// - [SerializeField] - SynchroniseCameraProperties _camera; - - /// - /// - /// - [SerializeField] - SynchroniseCameraProperties[] _cameras; - - /// - /// - /// - [SerializeField] - int _old_culling_mask; - - /// - /// - /// - [SerializeField] - float _old_far_clip_plane; - - /// - /// - /// - [SerializeField] - float _old_near_clip_plane; - - /// - /// - /// - [SerializeField] - float _old_orthographic_size; - - [SerializeField] bool _sync_culling_mask = true; - [SerializeField] bool _sync_far_clip_plane = true; - [SerializeField] bool _sync_near_clip_plane = true; - - [SerializeField] bool _sync_orthographic_size = true; - - /// - /// - /// - public bool SyncOrthographicSize { - get { return this._sync_orthographic_size; } - set { this._sync_orthographic_size = value; } - } - - public bool SyncNearClipPlane { - get { return this._sync_near_clip_plane; } - set { this._sync_near_clip_plane = value; } - } - - public bool SyncFarClipPlane { - get { return this._sync_far_clip_plane; } - set { this._sync_far_clip_plane = value; } - } - - public bool SyncCullingMask { - get { return this._sync_culling_mask; } - set { this._sync_culling_mask = value; } - } - - /// - /// - /// - public void Awake() { - this._camera = this.GetComponent(); - if (this._camera) { - this._old_orthographic_size = this._camera.GetComponent().orthographicSize; - this._old_near_clip_plane = this._camera.GetComponent().nearClipPlane; - this._old_far_clip_plane = this._camera.GetComponent().farClipPlane; - this._old_culling_mask = this._camera.GetComponent().cullingMask; - - this._cameras = FindObjectsOfType(); - } else { - Debug.Log("No camera component found on GameObject"); - } - } - - public void Update() { - if (this._camera) { - if (Math.Abs(this._old_orthographic_size - this._camera.GetComponent().orthographicSize) - > _tolerance) { - if (this._sync_culling_mask) { - this._old_orthographic_size = this._camera.GetComponent().orthographicSize; - foreach (var cam in this._cameras) { - if (cam != this._camera) { - cam.GetComponent().orthographicSize = - this._camera.GetComponent().orthographicSize; - } - } - } - } - - if (Math.Abs(this._old_near_clip_plane - this._camera.GetComponent().nearClipPlane) - > _tolerance) { - if (this._sync_culling_mask) { - this._old_near_clip_plane = this._camera.GetComponent().nearClipPlane; - foreach (var cam in this._cameras) { - if (cam != this._camera) { - cam.GetComponent().nearClipPlane = this._camera.GetComponent().nearClipPlane; - } - } - } - } - - if (Math.Abs(this._old_far_clip_plane - this._camera.GetComponent().farClipPlane) - > _tolerance) { - if (this._sync_culling_mask) { - this._old_far_clip_plane = this._camera.GetComponent().farClipPlane; - foreach (var cam in this._cameras) { - if (cam != this._camera) { - cam.GetComponent().farClipPlane = this._camera.GetComponent().farClipPlane; - } - } - } - } - - if (this._old_culling_mask != this._camera.GetComponent().cullingMask) { - if (this._sync_culling_mask) { - this._old_culling_mask = this._camera.GetComponent().cullingMask; - foreach (var cam in this._cameras) { - if (cam != this._camera) { - cam.GetComponent().cullingMask = this._camera.GetComponent().cullingMask; - } - } - } - } - } else { - Debug.Log("No camera component found on GameObject"); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/NeodroidConstants.cs b/Runtime/Utilities/NeodroidConstants.cs new file mode 100644 index 000000000..fceb515e7 --- /dev/null +++ b/Runtime/Utilities/NeodroidConstants.cs @@ -0,0 +1,36 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities { + /// + /// + /// + public static class NeodroidConstants { + /// + /// + /// + public const int _Default_Observation_Texture_Xy_Size = 128; + + /// + /// + /// + public const int _Default_Width = 128; // ImageNet size 224 + + /// + /// + /// + public const int _Default_Height = _Default_Width; + + /// + /// + /// + public const TextureFormat _Default_TextureFormat = TextureFormat.RGBAFloat; + + /// + /// + public const double _Double_Tolerance = double.Epsilon; + + /// + /// + public const float _Float_Tolerance = float.Epsilon; + } +} diff --git a/Runtime/Utilities/NeodroidConstants.cs.meta b/Runtime/Utilities/NeodroidConstants.cs.meta new file mode 100644 index 000000000..83b311fa5 --- /dev/null +++ b/Runtime/Utilities/NeodroidConstants.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70d30274293a407e8a52ad07c30918a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 7d6a948f99cc34f298317116aebc2c9d, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/NeodroidUtilities.cs b/Runtime/Utilities/NeodroidUtilities.cs new file mode 100644 index 000000000..18f9ec009 --- /dev/null +++ b/Runtime/Utilities/NeodroidUtilities.cs @@ -0,0 +1,38 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities { + /// + /// + public static partial class NeodroidDefaultsUtilities { + /// + /// + /// + /// + public static AnimationCurve DefaultAnimationCurve() { + return new AnimationCurve(new Keyframe(1, 1), new Keyframe(0, 0)); + } + + /// + /// + /// + public static Gradient DefaultGradient() { + var gradient = new Gradient { + // The number of keys must be specified in this array initialiser + colorKeys = new[] { + // Add your colour and specify the stop point + new GradientColorKey(new Color(1, 1, 1), 0), + new GradientColorKey(new Color(1, 1, 1), 1f), + new GradientColorKey(new Color(1, 1, 1), 0) + }, + // This sets the alpha to 1 at both ends of the gradient + alphaKeys = new[] { + new GradientAlphaKey(1, 0), + new GradientAlphaKey(1, 1), + new GradientAlphaKey(1, 0) + } + }; + + return gradient; + } + } +} diff --git a/Runtime/Utilities/NeodroidUtilities.cs.meta b/Runtime/Utilities/NeodroidUtilities.cs.meta new file mode 100644 index 000000000..692886dab --- /dev/null +++ b/Runtime/Utilities/NeodroidUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 074e9de4624c14995a3673ee9f343525 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Noise.meta b/Runtime/Utilities/Noise.meta deleted file mode 100644 index f241651a1..000000000 --- a/Runtime/Utilities/Noise.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2fcc210e5fe7144aabd45ba2dfe893e6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Note.cs b/Runtime/Utilities/Note.cs new file mode 100644 index 000000000..0860fea21 --- /dev/null +++ b/Runtime/Utilities/Note.cs @@ -0,0 +1,31 @@ +using System; +using UnityEngine; + +#if UNITY_EDITOR + +namespace droid.Runtime.Utilities { + /// + /// + /// + [Serializable] + public class Note : MonoBehaviour { + /// + /// + [NonSerialized] + public bool _Editing; + + /// + /// + [TextArea] + [Tooltip("A component for holding notes or comments")] + [SerializeField] + public string _Text; + + /// + /// + public void EditToggle() { this._Editing = !this._Editing; } + + void Start() { this.enabled = false; } + } +} +#endif diff --git a/Editor/Utilities/Note.cs.meta b/Runtime/Utilities/Note.cs.meta similarity index 100% rename from Editor/Utilities/Note.cs.meta rename to Runtime/Utilities/Note.cs.meta diff --git a/Runtime/Utilities/Misc/Orientation.meta b/Runtime/Utilities/Orientation.meta similarity index 100% rename from Runtime/Utilities/Misc/Orientation.meta rename to Runtime/Utilities/Orientation.meta diff --git a/Runtime/Utilities/Orientation/FollowTarget.cs b/Runtime/Utilities/Orientation/FollowTarget.cs new file mode 100644 index 000000000..d9beb2e13 --- /dev/null +++ b/Runtime/Utilities/Orientation/FollowTarget.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Orientation { + /// + /// + /// + [ExecuteInEditMode] + public class FollowTarget : MonoBehaviour { + /// + /// + public Vector3 _Offset = new Vector3(0f, 7.5f, 0f); + + /// + /// + public Transform target; + + void LateUpdate() { + if (this.target) { + this.transform.position = this.target.position + this._Offset; + } + } + } +} diff --git a/Runtime/Utilities/Orientation/FollowTarget.cs.meta b/Runtime/Utilities/Orientation/FollowTarget.cs.meta new file mode 100644 index 000000000..26d3ba173 --- /dev/null +++ b/Runtime/Utilities/Orientation/FollowTarget.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 246cc59c7a84ea44f87f6b70acfe30c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Orientation/FollowTargetRotation.cs b/Runtime/Utilities/Orientation/FollowTargetRotation.cs new file mode 100644 index 000000000..d785b6593 --- /dev/null +++ b/Runtime/Utilities/Orientation/FollowTargetRotation.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Orientation { + [ExecuteInEditMode] + public class FollowTargetRotation : MonoBehaviour { + [SerializeField] Vector3 _forward; + + public Quaternion rot; + + /// + /// + public Transform targetPose; + + void LateUpdate() { + if (this.targetPose) { + this.rot = this.targetPose.rotation; + + var projection_on_plane = Vector3.ProjectOnPlane(this.targetPose.up, Vector3.up); + + var rot = this.transform.rotation; + var normalised_proj = projection_on_plane.normalized; + var view = Quaternion.Euler(0, -90, 0) * normalised_proj; + if (view != Vector3.zero) { + rot.SetLookRotation(view, Vector3.down); + } + + this.transform.rotation = rot; + } + } + } +} diff --git a/Runtime/Utilities/Orientation/FollowTargetRotation.cs.meta b/Runtime/Utilities/Orientation/FollowTargetRotation.cs.meta new file mode 100644 index 000000000..0d4108fb9 --- /dev/null +++ b/Runtime/Utilities/Orientation/FollowTargetRotation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 322a5eaf053c04a31afeccce10dd4048 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Orientation/MotionTracker.cs b/Runtime/Utilities/Orientation/MotionTracker.cs new file mode 100644 index 000000000..67eea8f6c --- /dev/null +++ b/Runtime/Utilities/Orientation/MotionTracker.cs @@ -0,0 +1,7 @@ +namespace droid.Runtime.Utilities.Orientation { + public interface IMotionTracker { + bool IsInMotion(); + + bool IsInMotion(float sensitivity); + } +} diff --git a/Runtime/Utilities/Orientation/MotionTracker.cs.meta b/Runtime/Utilities/Orientation/MotionTracker.cs.meta new file mode 100644 index 000000000..9734ba5f0 --- /dev/null +++ b/Runtime/Utilities/Orientation/MotionTracker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1618cc7b3c2e16b4192e7330c541ac5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Orientation/PointInDirection.cs b/Runtime/Utilities/Orientation/PointInDirection.cs similarity index 83% rename from Runtime/Utilities/Misc/Orientation/PointInDirection.cs rename to Runtime/Utilities/Orientation/PointInDirection.cs index 81c7579bf..a71a83191 100644 --- a/Runtime/Utilities/Misc/Orientation/PointInDirection.cs +++ b/Runtime/Utilities/Orientation/PointInDirection.cs @@ -1,20 +1,18 @@ using UnityEngine; -namespace Neodroid.Runtime.Utilities.Misc.Orientation { +namespace droid.Runtime.Utilities.Orientation { /// /// /// [ExecuteInEditMode] public class PointInDirection : MonoBehaviour { /// - /// /// [SerializeField] Vector3 _direction = Vector3.down; /// - /// /// void Update() { this.transform.rotation = Quaternion.LookRotation(this._direction); } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Orientation/PointInDirection.cs.meta b/Runtime/Utilities/Orientation/PointInDirection.cs.meta new file mode 100644 index 000000000..8d8067eff --- /dev/null +++ b/Runtime/Utilities/Orientation/PointInDirection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85ccef30fe10a486389326bacc3bdfd4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Paths.cs b/Runtime/Utilities/Paths.cs new file mode 100644 index 000000000..b0e8dd3f5 --- /dev/null +++ b/Runtime/Utilities/Paths.cs @@ -0,0 +1,29 @@ +using System.IO; +using UnityEngine; + +namespace droid.Runtime.Utilities { + /// + /// + public static partial class NeodroidUtilities { + /// + /// + /// + /// + /// + /// + public static string GetPersistentDataPath(string[] folders, string file_name = null) { + var data_path = Path.Combine(folders); + data_path = Path.Combine(Application.persistentDataPath, data_path); + + if (!Directory.Exists(data_path)) { + Directory.CreateDirectory(data_path); + } + + if (file_name != null) { + data_path = Path.Combine(data_path, file_name); + } + + return data_path; + } + } +} diff --git a/Runtime/Utilities/Paths.cs.meta b/Runtime/Utilities/Paths.cs.meta new file mode 100644 index 000000000..76666c9c9 --- /dev/null +++ b/Runtime/Utilities/Paths.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f05098058b0b49248cb0580bf2f8453d +timeCreated: 1562943259 \ No newline at end of file diff --git a/Runtime/Utilities/Plotting/PlotFunctions.cs b/Runtime/Utilities/Plotting/PlotFunctions.cs deleted file mode 100644 index 72831ef0a..000000000 --- a/Runtime/Utilities/Plotting/PlotFunctions.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections.Generic; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Plotting { - public static class PlotFunctions { - static List _points = new List(); - - /// - /// - /// - /// - /// - /// - /// - /// - public static Points.ValuePoint[] SampleRandomSeries( - int size, - float min_val = 0, - float max_val = 5, - float particle_size = 1) { - _points.Clear(); - for (var j = 0; j < size; j++) { - var point = new Vector3(j, Random.Range(min_val, max_val), 0); - var vp = new Points.ValuePoint(point, Random.Range(min_val, max_val), particle_size); - _points.Add(vp); - } - - var points = _points.ToArray(); - return points; - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Plotting/ValueRangePlotter.cs b/Runtime/Utilities/Plotting/ValueRangePlotter.cs deleted file mode 100644 index f71ea6d61..000000000 --- a/Runtime/Utilities/Plotting/ValueRangePlotter.cs +++ /dev/null @@ -1,39 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Plotting { - [ExecuteInEditMode] - public class ValueRangePlotter : MonoBehaviour { - [SerializeField] Shader _shader; - [SerializeField] Bounds _value_range = new Bounds(Vector3.zero, Vector3.one * 2); - - Material _material; - - void OnDestroy() { - if (this._material != null) { - if (Application.isPlaying) { - Destroy(this._material); - } else { - DestroyImmediate(this._material); - } - } - } - - public void OnRenderObject() { - if (this._material == null) { - this._material = new Material(this._shader); - this._material.hideFlags = HideFlags.DontSave; - } - - this._material.SetVector( - "_Range", - new Vector4( - this._value_range.min.x, - this._value_range.max.x, - this._value_range.center.y, - this._value_range.extents.y + this._value_range.center.y)); - - this._material.SetPass(0); - Graphics.DrawProcedural(MeshTopology.LineStrip, 512, 1); - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/PostProcessesEffects.meta b/Runtime/Utilities/PostProcessesEffects.meta new file mode 100644 index 000000000..15d85dc1d --- /dev/null +++ b/Runtime/Utilities/PostProcessesEffects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e66e1ddb315c58388d4cfce84e8fa5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/PostProcessesEffects/Flipper.cs b/Runtime/Utilities/PostProcessesEffects/Flipper.cs new file mode 100644 index 000000000..ce0d5a04a --- /dev/null +++ b/Runtime/Utilities/PostProcessesEffects/Flipper.cs @@ -0,0 +1,42 @@ + +using UnityEngine; +#if UNITY_POST_PROCESSING_STACK_V2 +using System; +using UnityEngine.Rendering.PostProcessing; + +namespace droid.Runtime.Utilities.PostProcessesEffects { + /// + /// + /// + [Serializable] + [PostProcess(typeof(FlipperRenderer), + PostProcessEvent.AfterStack, + "Neodroid/Flip")] + public sealed class Flipper : PostProcessEffectSettings { + /// + /// + /// + public BoolParameter flip_x = new BoolParameter {value = false}; + + /// + /// + /// + public BoolParameter flip_y = new BoolParameter {value = false}; + } + + public sealed class FlipperRenderer : PostProcessEffectRenderer { + static readonly Int32 _flip_x = Shader.PropertyToID("_Flip_x"); + static readonly Int32 _flip_y = Shader.PropertyToID("_Flip_y"); + + public override void Render(PostProcessRenderContext context) { + var sheet = context.propertySheets.Get(Shader.Find("Neodroid/PostProcessing/Flip")); + sheet.properties.SetFloat(_flip_x, this.settings.flip_x ? -1.0f : 1.0f); + sheet.properties.SetFloat(_flip_y, this.settings.flip_y ? -1.0f : 1.0f); + context.command.BlitFullscreenTriangle(context.source, + context.destination, + sheet, + 0); + } + } +} +#endif diff --git a/Runtime/Utilities/PostProcessesEffects/Flipper.cs.meta b/Runtime/Utilities/PostProcessesEffects/Flipper.cs.meta new file mode 100644 index 000000000..aa94f3645 --- /dev/null +++ b/Runtime/Utilities/PostProcessesEffects/Flipper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 27e7996936cd4376a6bf457e8ba9da7f +timeCreated: 1568234731 \ No newline at end of file diff --git a/Runtime/Utilities/PostProcessesEffects/Grayscale.cs b/Runtime/Utilities/PostProcessesEffects/Grayscale.cs new file mode 100644 index 000000000..dc1c0b204 --- /dev/null +++ b/Runtime/Utilities/PostProcessesEffects/Grayscale.cs @@ -0,0 +1,39 @@ + +using UnityEngine; +#if UNITY_POST_PROCESSING_STACK_V2 +using System; +using UnityEngine.Rendering.PostProcessing; + +namespace droid.Runtime.Utilities.PostProcessesEffects { + /// + /// + /// + [Serializable] + [PostProcess(typeof(GrayscaleRenderer), + PostProcessEvent.AfterStack, + "Neodroid/Grayscale")] + public sealed class Grayscale : PostProcessEffectSettings { + /// + /// + /// + [Range(0f, 1f), Tooltip("Grayscale effect intensity.")] + public FloatParameter blend = new FloatParameter {value = 0.5f}; + } + + /// + /// + /// + public sealed class GrayscaleRenderer : PostProcessEffectRenderer { + static readonly Int32 _blend = Shader.PropertyToID("_Blend"); + + public override void Render(PostProcessRenderContext context) { + var sheet = context.propertySheets.Get(Shader.Find("Neodroid/PostProcessing/Grayscale")); + sheet.properties.SetFloat(_blend, this.settings.blend); + context.command.BlitFullscreenTriangle(context.source, + context.destination, + sheet, + 0); + } + } +} +#endif diff --git a/Runtime/Utilities/PostProcessesEffects/Grayscale.cs.meta b/Runtime/Utilities/PostProcessesEffects/Grayscale.cs.meta new file mode 100644 index 000000000..1a4b6a87a --- /dev/null +++ b/Runtime/Utilities/PostProcessesEffects/Grayscale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17ce5c57799f57960969bed40633c20e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Procedural.meta b/Runtime/Utilities/Procedural.meta similarity index 100% rename from Runtime/Utilities/Misc/Procedural.meta rename to Runtime/Utilities/Procedural.meta diff --git a/Runtime/Utilities/Procedural/GameObjectCloner.cs b/Runtime/Utilities/Procedural/GameObjectCloner.cs new file mode 100644 index 000000000..69fde2c04 --- /dev/null +++ b/Runtime/Utilities/Procedural/GameObjectCloner.cs @@ -0,0 +1,49 @@ +using UnityEngine; + +namespace droid.Runtime.Utilities.Procedural { + /// + /// + /// + public class GameObjectCloner : MonoBehaviour { + [SerializeField] GameObject[] _clones = null; + [SerializeField] Vector3 _initial_offset = new Vector3(0, 0, 0); + [SerializeField] [Range(0, 99)] int _num_clones = 0; + [SerializeField] Vector3 _offset = new Vector3(20, 0, 20); + [SerializeField] GameObject _prefab = null; + + void Start() { this.InstantiateClones(); } + + void InstantiateClones() { + if (this._clones.Length > 0) { + this.ClearClones(); + } + + var clone_id = 0; + this._clones = new GameObject[this._num_clones]; + if (this._prefab) { + var clone_coords = NeodroidUtilities.SnakeSpaceFillingGenerator(this._num_clones); + foreach (var c in clone_coords) { + var go = Instantiate(this._prefab, + this._initial_offset + Vector3.Scale(this._offset, c), + Quaternion.identity, + this.transform); + go.name = $"{go.name}{clone_id}"; + this._clones[clone_id] = go; + clone_id++; + } + } + } + + void ClearClones() { + foreach (var clone in this._clones) { + Destroy(clone); + } + } + + void Update() { + if (this._num_clones != this._clones.Length) { + this.InstantiateClones(); + } + } + } +} diff --git a/Runtime/Utilities/Misc/Procedural/GameObjectCloner.cs.meta b/Runtime/Utilities/Procedural/GameObjectCloner.cs.meta similarity index 100% rename from Runtime/Utilities/Misc/Procedural/GameObjectCloner.cs.meta rename to Runtime/Utilities/Procedural/GameObjectCloner.cs.meta diff --git a/Runtime/Utilities/Procedural/ProceduralCapsule.cs b/Runtime/Utilities/Procedural/ProceduralCapsule.cs new file mode 100644 index 000000000..4d84665eb --- /dev/null +++ b/Runtime/Utilities/Procedural/ProceduralCapsule.cs @@ -0,0 +1,159 @@ +//------------------------------// +// ProceduralCapsule.cs // +// Written by Jay Kay // +// 2016/05/27 // +//------------------------------// + +using UnityEngine; + +namespace droid.Runtime.Utilities.Procedural { + /// + /// + /// + [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] + [ExecuteInEditMode] + public class ProceduralCapsule : MonoBehaviour { + /// + /// + public float _Height = 2f; + + /// + /// + public float _Radius = 0.5f; + + /// + /// + public int _Segments = 24; + #if UNITY_EDITOR + /// + /// + [ContextMenu("Generate Procedural Capsule")] + public void GenerateProceduralCapsule() { this.CreateMesh(); } + #endif + + void Start() { + var mesh_filter = this.GetComponent(); + if (!mesh_filter.sharedMesh + || mesh_filter.sharedMesh.vertexCount == 0 + || mesh_filter.sharedMesh.name != "ProceduralCapsule") { + this.CreateMesh(); + } + } + + /// + /// + public void CreateMesh() { + // make segments an even number + if (this._Segments % 2 != 0) { + this._Segments++; + } + + // extra vertex on the seam + var points = this._Segments + 1; + + // calculate points around a circle + var p_x = new float[points]; + var p_z = new float[points]; + var p_y = new float[points]; + var p_r = new float[points]; + + var calc_h = 0f; + var calc_v = 0f; + + for (var i = 0; i < points; i++) { + p_x[i] = Mathf.Sin(calc_h * Mathf.Deg2Rad); + p_z[i] = Mathf.Cos(calc_h * Mathf.Deg2Rad); + p_y[i] = Mathf.Cos(calc_v * Mathf.Deg2Rad); + p_r[i] = Mathf.Sin(calc_v * Mathf.Deg2Rad); + + calc_h += 360f / this._Segments; + calc_v += 180f / this._Segments; + } + + // - Vertices and UVs - + + var vertices = new Vector3[points * (points + 1)]; + var uvs = new Vector2[vertices.Length]; + var ind = 0; + + // Y-offset is half the height minus the diameter + // float yOff = ( height - ( radius * 2f ) ) * 0.5f; + var y_off = (this._Height - this._Radius) * 0.5f; + if (y_off < 0) { + y_off = 0; + } + + // uv calculations + var step_x = 1f / (points - 1); + float uv_x, uv_y; + + // Top Hemisphere + var top = Mathf.CeilToInt(points * 0.5f); + + for (var y = 0; y < top; y++) { + for (var x = 0; x < points; x++) { + vertices[ind] = new Vector3(p_x[x] * p_r[y], p_y[y], p_z[x] * p_r[y]) * this._Radius; + vertices[ind].y = y_off + vertices[ind].y; + + uv_x = 1f - step_x * x; + uv_y = (vertices[ind].y + this._Height * 0.5f) / this._Height; + uvs[ind] = new Vector2(uv_x, uv_y); + + ind++; + } + } + + // Bottom Hemisphere + var btm = Mathf.FloorToInt(points * 0.5f); + + for (var y = btm; y < points; y++) { + for (var x = 0; x < points; x++) { + vertices[ind] = new Vector3(p_x[x] * p_r[y], p_y[y], p_z[x] * p_r[y]) * this._Radius; + vertices[ind].y = -y_off + vertices[ind].y; + + uv_x = 1f - step_x * x; + uv_y = (vertices[ind].y + this._Height * 0.5f) / this._Height; + uvs[ind] = new Vector2(uv_x, uv_y); + + ind++; + } + } + + // - Triangles - + + var triangles = new int[this._Segments * (this._Segments + 1) * 2 * 3]; + + for (int y = 0, t = 0; y < this._Segments + 1; y++) { + for (var x = 0; x < this._Segments; x++, t += 6) { + triangles[t + 0] = (y + 0) * (this._Segments + 1) + x + 0; + triangles[t + 1] = (y + 1) * (this._Segments + 1) + x + 0; + triangles[t + 2] = (y + 1) * (this._Segments + 1) + x + 1; + + triangles[t + 3] = (y + 0) * (this._Segments + 1) + x + 1; + triangles[t + 4] = (y + 0) * (this._Segments + 1) + x + 0; + triangles[t + 5] = (y + 1) * (this._Segments + 1) + x + 1; + } + } + + // - Assign Mesh - + + var mf = this.gameObject.GetComponent(); + var mesh = mf.sharedMesh; + if (!mesh) { + mesh = new Mesh(); + mf.sharedMesh = mesh; + } + + mesh.Clear(); + + mesh.name = "ProceduralCapsule"; + + mesh.vertices = vertices; + mesh.uv = uvs; + mesh.triangles = triangles; + + mesh.RecalculateBounds(); + mesh.RecalculateNormals(); + } + } +} diff --git a/Runtime/Utilities/Procedural/ProceduralCapsule.cs.meta b/Runtime/Utilities/Procedural/ProceduralCapsule.cs.meta new file mode 100644 index 000000000..d84523316 --- /dev/null +++ b/Runtime/Utilities/Procedural/ProceduralCapsule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d940240a49514996a7c1face83becce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 83aa900cbe9b64fc9b6d7493fac5030f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Misc/Procedural/SnakeSpaceFilling.cs b/Runtime/Utilities/Procedural/SnakeSpaceFilling.cs similarity index 93% rename from Runtime/Utilities/Misc/Procedural/SnakeSpaceFilling.cs rename to Runtime/Utilities/Procedural/SnakeSpaceFilling.cs index 2eb1078af..1e1c4b4fb 100644 --- a/Runtime/Utilities/Misc/Procedural/SnakeSpaceFilling.cs +++ b/Runtime/Utilities/Procedural/SnakeSpaceFilling.cs @@ -2,24 +2,9 @@ using System.Collections.Generic; using UnityEngine; -namespace Neodroid.Runtime.Utilities.Misc.Procedural { - public static partial class NeodroidUtilities { +namespace droid.Runtime.Utilities.Procedural { + public static class NeodroidUtilities { /// - /// - /// - enum GeneratorState { - Expand_x_ = 0, - Expand_y_ = 1, - - Inc_x_ = 2, - Dec_x_ = 3, - - Inc_y_ = 4, - Dec_y_ = 5 - } - - /// - /// /// /// /// @@ -80,5 +65,18 @@ public static IEnumerable SnakeSpaceFillingGenerator(int length = 100) return out_vectors; } + + /// + /// + enum GeneratorState { + Expand_x_ = 0, + Expand_y_ = 1, + + Inc_x_ = 2, + Dec_x_ = 3, + + Inc_y_ = 4, + Dec_y_ = 5 + } } -} \ No newline at end of file +} diff --git a/Runtime/Utilities/Procedural/SnakeSpaceFilling.cs.meta b/Runtime/Utilities/Procedural/SnakeSpaceFilling.cs.meta new file mode 100644 index 000000000..6d4c73cbf --- /dev/null +++ b/Runtime/Utilities/Procedural/SnakeSpaceFilling.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 261571a3ddc74d5caa40fde7cfa54662 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a861b8894568348a9a71a5b438e2ef74, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/RegistrationUtilities.cs b/Runtime/Utilities/RegistrationUtilities.cs new file mode 100644 index 000000000..c31c30ebf --- /dev/null +++ b/Runtime/Utilities/RegistrationUtilities.cs @@ -0,0 +1,272 @@ +using droid.Runtime.Environments.Prototyping; +using droid.Runtime.GameObjects.ChildSensors; +using droid.Runtime.Interfaces; +using droid.Runtime.Prototyping.Actors; +using UnityEngine; + +namespace droid.Runtime.Utilities { + /// + /// + public static partial class NeodroidRegistrationUtilities { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static void + RegisterCollisionTriggerCallbacksOnChildren( + Component caller, + Transform parent, + ChildColliderSensor.OnChildCollisionEnterDelegate on_collision_enter_child + = null, + ChildColliderSensor.OnChildTriggerEnterDelegate on_trigger_enter_child = + null, + ChildColliderSensor.OnChildCollisionExitDelegate on_collision_exit_child = + null, + ChildColliderSensor.OnChildTriggerExitDelegate on_trigger_exit_child = + null, + ChildColliderSensor.OnChildCollisionStayDelegate on_collision_stay_child = + null, + ChildColliderSensor.OnChildTriggerStayDelegate on_trigger_stay_child = + null, + bool debug = false) + where TChildColliderSensor : ChildColliderSensor where TCollider : Component { + var children_with_colliders = parent.GetComponentsInChildren(); + + //TODO add check and warning for not all callbacks = null + + foreach (var child in children_with_colliders) { + var child_sensors = child.GetComponents(); + ChildColliderSensor collider_sensor = null; + foreach (var child_sensor in child_sensors) { + if (child_sensor.Caller != null && child_sensor.Caller == caller) { + collider_sensor = child_sensor; + break; + } + + if (child_sensor.Caller == null) { + child_sensor.Caller = caller; + collider_sensor = child_sensor; + break; + } + } + + if (collider_sensor == null) { + collider_sensor = child.gameObject.AddComponent(); + collider_sensor.Caller = caller; + } + + if (on_collision_enter_child != null) { + collider_sensor.OnCollisionEnterDelegate = on_collision_enter_child; + } + + if (on_trigger_enter_child != null) { + collider_sensor.OnTriggerEnterDelegate = on_trigger_enter_child; + } + + if (on_collision_exit_child != null) { + collider_sensor.OnCollisionExitDelegate = on_collision_exit_child; + } + + if (on_trigger_exit_child != null) { + collider_sensor.OnTriggerExitDelegate = on_trigger_exit_child; + } + + if (on_trigger_stay_child != null) { + collider_sensor.OnTriggerStayDelegate = on_trigger_stay_child; + } + + if (on_collision_stay_child != null) { + collider_sensor.OnCollisionStayDelegate = on_collision_stay_child; + } + + #if NEODROID_DEBUG + if (debug) { + Debug.Log($"{caller.name} has created {collider_sensor.name} on {child.name} under parent {parent.name}"); + } + #endif + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static IHasRegister RegisterComponent( + IHasRegister r, + TCaller c, + bool only_parents = false, + bool debug = false) where TCaller : Component, IRegisterable { + IHasRegister component = null; + if (r != null) { + component = r; //.GetComponent(); + } else { + if (c.GetComponentInParent() != null) { + component = c.GetComponentInParent(); + } else if (!only_parents) { + component = Object.FindObjectOfType(); + } + } + + if (component == null) { + if (c.GetComponentInParent() != null) { + component = c.GetComponentInParent(); + } else if (!only_parents) { + component = Object.FindObjectOfType(); + } + } + + if (component != null) { + component.Register((IActuator)c); + } else { + #if NEODROID_DEBUG + if (debug) { + Debug.Log($"Could not find a IHasRegister recipient during registration"); + } + #endif + } + + return component; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static IHasRegister RegisterComponent( + IHasRegister r, + TCaller c, + string identifier, + bool only_parents = false, + bool debug = false) where TCaller : Component, IRegisterable { + IHasRegister component = null; + if (r != null) { + component = r; //.GetComponent(); + } else { + if (c.GetComponentInParent() != null) { + component = c.GetComponentInParent(); + } else if (!only_parents) { + component = Object.FindObjectOfType(); + } + } + + if (component == null) { + if (c.GetComponentInParent() != null) { + component = c.GetComponentInParent(); + } else if (!only_parents) { + component = Object.FindObjectOfType(); + } + } + + if (component != null) { + component.Register((IActuator)c, identifier); + } else { + #if NEODROID_DEBUG + if (debug) { + Debug.Log($"Could not find a IHasRegister recipient during registration"); + } + #endif + } + + return component; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static TRecipient RegisterComponent( + TRecipient r, + TCaller c, + bool only_parents = false, + bool debug = false) + where TRecipient : Object, IHasRegister where TCaller : Component, IRegisterable { + TRecipient component = null; + if (r != null) { + component = r; //.GetComponent(); + } else if (c.GetComponentInParent() != null) { + component = c.GetComponentInParent(); + } else if (!only_parents) { + component = Object.FindObjectOfType(); + } + + if (component != null) { + component.Register(c); + } else { + #if NEODROID_DEBUG + if (debug) { + Debug.Log($"Could not find a {typeof(TRecipient)} recipient during registration"); + } + #endif + } + + return component; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static TRecipient RegisterComponent( + TRecipient r, + TCaller c, + string identifier, + bool only_parents = false, + bool debug = false) + where TRecipient : Object, IHasRegister where TCaller : Component, IRegisterable { + TRecipient component = null; + if (r != null) { + component = r; + } else if (c.GetComponentInParent() != null) { + component = c.GetComponentInParent(); + } else if (!only_parents) { + component = Object.FindObjectOfType(); + } + + if (component != null) { + component.Register(c, identifier); + } else { + #if NEODROID_DEBUG + if (debug) { + Debug.Log($"Could not find a {typeof(TRecipient)} recipient during registration"); + } + + #endif + } + + return component; + } + } +} diff --git a/Runtime/Utilities/RegistrationUtilities.cs.meta b/Runtime/Utilities/RegistrationUtilities.cs.meta new file mode 100644 index 000000000..8533a3fdf --- /dev/null +++ b/Runtime/Utilities/RegistrationUtilities.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 238de6d3973a4a8bae1ee7a0ecc9fe4e +timeCreated: 1562926554 \ No newline at end of file diff --git a/Runtime/Utilities/SceneUtilities.cs b/Runtime/Utilities/SceneUtilities.cs new file mode 100644 index 000000000..4473afd3e --- /dev/null +++ b/Runtime/Utilities/SceneUtilities.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; +using Object = UnityEngine.Object; + +namespace droid.Runtime.Utilities { + /// + /// + public static partial class NeodroidSceneUtilities { + /// + /// Find UnityEngine.Object assignables from Generic Type T, this allows for FindObjectOfType with interfaces. + /// + /// + /// + /// + public static T[] FindObjectsOfType() { + if (FindAllObjectsOfTypeInScene() is T[] obj) { + return obj; + } + + throw new ArgumentException($"Found no UnityEngine.Object assignables from type {typeof(T).Name}"); + } + + /// + /// + /// + /// + /// + public static T FindObjectOfType() { return FindObjectsOfType()[0]; } + + /// + /// + /// + /// + public static GameObject[] FindAllGameObjectsExceptLayer(int layer) { + var goa = Object.FindObjectsOfType(); + var game_objects = new List(); + foreach (var go in goa) { + if (go.layer != layer) { + game_objects.Add(go); + } + } + + return game_objects.ToArray(); + } + + /// + /// + /// + /// + /// + /// + public static T RecursiveFirstSelfSiblingParentGetComponent(Transform child) where T : Component { + var a = child.GetComponent(); + if (a != null) { + return a; + } + + if (child.parent) { + foreach (Transform go in child.parent) { + a = go.GetComponent(); + if (a != null) { + return a; + } + } + + a = child.parent.GetComponent(); + if (a != null) { + return a; + } + + return RecursiveFirstSelfSiblingParentGetComponent(child.parent); + } + + return null; + } + + /// + /// + /// + /// + /// + public static GameObject[] RecursiveChildGameObjectsExceptLayer(Transform parent, int layer) { + var game_objects = new List(); + foreach (Transform go in parent) { + if (go) { + if (go.gameObject.layer != layer) { + game_objects.Add(go.gameObject); + var children = RecursiveChildGameObjectsExceptLayer(go, layer); + if (children != null && children.Length > 0) { + game_objects.AddRange(children); + } + } + } + } + + return game_objects.ToArray(); + } + + /// Use this method to get all loaded objects of some type, including inactive objects. + /// This is an alternative to Resources.FindObjectsOfTypeAll (returns project assets, including prefabs), and GameObject.FindObjectsOfTypeAll (deprecated). + public static T[] FindAllObjectsOfTypeInScene() { + //(Scene scene) { + var results = new List(); + for (var i = 0; i < SceneManager.sceneCount; i++) { + var s = SceneManager.GetSceneAt(i); // maybe EditorSceneManager + if (!s.isLoaded) { + continue; + } + + var all_game_objects = s.GetRootGameObjects(); + foreach (var go in all_game_objects) { + results.AddRange(go.GetComponentsInChildren(true)); + } + } + + return results.ToArray(); + } + } +} diff --git a/Runtime/Utilities/SceneUtilities.cs.meta b/Runtime/Utilities/SceneUtilities.cs.meta new file mode 100644 index 000000000..2b939f9d1 --- /dev/null +++ b/Runtime/Utilities/SceneUtilities.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 905ca5d1e67c4dc794e60d3f679aab38 +timeCreated: 1562927049 \ No newline at end of file diff --git a/Runtime/Utilities/ScriptableObjects.meta b/Runtime/Utilities/ScriptableObjects.meta deleted file mode 100644 index 68b044e53..000000000 --- a/Runtime/Utilities/ScriptableObjects.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 50e6994f366644dcb8e02764bcab0e5a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/ScriptableObjects/Curriculum.cs b/Runtime/Utilities/ScriptableObjects/Curriculum.cs deleted file mode 100644 index c12c2fd02..000000000 --- a/Runtime/Utilities/ScriptableObjects/Curriculum.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.ScriptableObjects { - [CreateAssetMenu(fileName = "Curriculum", menuName = "Neodroid/ScriptableObjects/Curriculum", order = 1)] - public class Curriculum : ScriptableObject { - public Level[] _Levels; - } - - [Serializable] - public struct Level { - public ConfigurableEntry[] _Configurable_Entries; - public float _Min_Reward; - public float _Max_Reward; - } - - [Serializable] - public struct ConfigurableEntry { - public string _Configurable_Name; - public float _Min_Value; - public float _Max_Value; - } -} \ No newline at end of file diff --git a/Runtime/Utilities/ScriptableObjects/NeodroidTask.cs b/Runtime/Utilities/ScriptableObjects/NeodroidTask.cs deleted file mode 100644 index 090e71968..000000000 --- a/Runtime/Utilities/ScriptableObjects/NeodroidTask.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.ScriptableObjects { - [CreateAssetMenu( - fileName = "NeodroidTask", - menuName = "Neodroid/ScriptableObjects/NeodroidTask", - order = 1)] - public class NeodroidTask : ScriptableObject { - public Vector3 _Position; - public float _Radius; - } -} \ No newline at end of file diff --git a/Runtime/Utilities/ScriptableObjects/PlayerMotions.cs b/Runtime/Utilities/ScriptableObjects/PlayerMotions.cs deleted file mode 100644 index c61aa1a8a..000000000 --- a/Runtime/Utilities/ScriptableObjects/PlayerMotions.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using Neodroid.Runtime.Utilities.Misc.SearchableEnum; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.ScriptableObjects { - /// - /// - /// - [CreateAssetMenu( - fileName = "PlayerMotions", - menuName = "Neodroid/ScriptableObjects/PlayerMotions", - order = 1)] - public class PlayerMotions : ScriptableObject { - /// - /// - /// - public PlayerMotion[] _Motions; - } - - /// - /// - /// - [Serializable] - public struct PlayerMotion { - /// - /// - /// - [SearchableEnum] - public KeyCode _Key; - - /// - /// - /// - public string _Actor; - - /// - /// - /// - public string _Motor; - - /// - /// - /// - public float _Strength; - } -} \ No newline at end of file diff --git a/Runtime/Utilities/ScriptableObjects/Segmentation.cs b/Runtime/Utilities/ScriptableObjects/Segmentation.cs deleted file mode 100644 index bd2e19240..000000000 --- a/Runtime/Utilities/ScriptableObjects/Segmentation.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.ScriptableObjects { - /// - /// - /// - [CreateAssetMenu( - fileName = "Segmentation", - menuName = "Neodroid/ScriptableObjects/Segmentation", - order = 1)] - public class Segmentation : ScriptableObject { - /// - /// - /// - public ColorByTag[] _Color_By_Tags; - } -} \ No newline at end of file diff --git a/Runtime/Utilities/ScriptableObjects/SimulatorConfiguration.cs b/Runtime/Utilities/ScriptableObjects/SimulatorConfiguration.cs deleted file mode 100644 index 39f6f9530..000000000 --- a/Runtime/Utilities/ScriptableObjects/SimulatorConfiguration.cs +++ /dev/null @@ -1,369 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Messaging.Messages; -using Neodroid.Runtime.Utilities.Misc.SearchableEnum; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.ScriptableObjects { - /// - /// Determines the discrete timesteps of the simulation environment. - /// - public enum SimulationType { - /// - /// Waiting for frame instead means stable physics(Multiple fixed updates) and camera has updated their rendertextures. Pauses the game after every reaction until next reaction is received. - /// - Frame_dependent_, // TODO: Sometimes some frame seems to be dropped with the frame dependent configuration at high frame rates. - - /// - /// Camera observers should be manually rendered to ensure validity and freshness with camera.Render() - /// - Physics_dependent_, - - /// - /// Continue simulation - /// - Independent_ - } - - /// - /// Determines where in the monobehaviour cycle a frame/step is finished - /// - public enum FrameFinishes { - /// - /// When ever all scripts has run their respective updates - /// NOTE: Not working as expected, does not seem to work with physics engine. - /// - Late_update_, - - /// - /// NOTE: Not working as expected, does not seem to work with physics engine. - /// - End_of_frame_, - - /// - /// When ever the scene has been rendered - /// - On_render_image_, - - /// - /// When ever the scene has been rendered, default - /// - On_post_render_ - } - - /// - /// - /// Contains everything relevant to configuring simulation environments engine specific settings - /// - [CreateAssetMenu( - fileName = "SimulatorConfiguration", - menuName = "Neodroid/ScriptableObjects/SimulatorConfiguration", - order = 1), Serializable] - public class SimulatorConfiguration : ScriptableObject, - ISimulatorConfiguration { - /// - /// - /// - [Header("Graphics"), SerializeField] - bool _apply_resolution_settings; - - [SerializeField] bool _full_screen; - - /// - /// - /// - [SerializeField, Range(0, 9999)] - int _width = 500; - - /// - /// - /// - [SerializeField, Range(0, 9999)] - int _height = 500; - - /// - /// - /// - [SerializeField, Range(1, 4)] - int _quality_level = 1; - - /// - /// - /// - [Header("Simulation"), SerializeField] - FrameFinishes _frame_finishes = FrameFinishes.On_post_render_; - - /// - /// Allow relative transforms to reset a couple of times. - /// - [SerializeField, Range(1, 99)] - int _reset_iterations = 1; - - /// - /// - /// - [SerializeField, Range(0, 99)] - int _frame_skips; - - /// - /// - /// - [SerializeField, SearchableEnum] - SimulationType _simulation_type = SimulationType.Frame_dependent_; - - /// - /// - /// - [SerializeField] - ExecutionPhase _step_execution_phase = ExecutionPhase.Middle_; - - /// - /// Allows physics loop to be run more often than frame loop - /// - [Header("Time"), SerializeField, Range(0f, float.MaxValue)] - float _time_scale = 1; - - /// - /// Target frame rate = -1 means that no waiting/v-syncing is done and the simulation can run as fast as possible. - /// - [SerializeField, Range(-1, 9999)] - int _target_frame_rate = -1; - - /// - /// - /// - [Header("Connection"), SerializeField] - string _ip_address = "localhost"; - - /// - /// - /// - [SerializeField] - int _port = 6969; - - [Header("Performance (Disable for faster serialisation, but with loss of functionality)"), SerializeField] - bool _always_serialise_unobservables; - - [SerializeField] bool _always_serialise_indidual_observables; - - /// - /// WARNING When _update_fixed_time_scale is true, MAJOR slow downs due to PHYSX updates on change. - /// - [Header("Experimental (Warning, it is important to read docs before use!)"), SerializeField] - bool _update_fixed_time_scale; - - /// - /// - /// - [SerializeField, Range(0, 9999)] - float _max_reply_interval; - - /// - /// - /// - [SerializeField, Range(0, 999)] - int _num_of_environments; - - [SerializeField] bool _replay_reaction_in_skips; - - /// - /// - /// - public void SetToDefault() { - this.Width = 500; - this.Height = 500; - this.FullScreen = false; - this.QualityLevel = 1; - this.TimeScale = 1; - this.TargetFrameRate = -1; - this.SimulationType = SimulationType.Frame_dependent_; - this.FrameFinishes = FrameFinishes.Late_update_; - this.FrameSkips = 0; - this.ResetIterations = 1; - this.MaxReplyInterval = 0; - this.NumOfEnvironments = 1; - } - - #region Getter Setters - - /// - /// - /// - public int FrameSkips { - get { return this._frame_skips; } - set { - if (value >= 0) { - this._frame_skips = value; - } - } - } - - /// - /// - /// - public int ResetIterations { - get { return this._reset_iterations; } - set { - if (value >= 1) { - this._reset_iterations = value; - } - } - } - //When resetting transforms we run multiple times to ensure that we properly reset hierachies of objects - - /// - /// - /// - public SimulationType SimulationType { - get { return this._simulation_type; } - set { this._simulation_type = value; } - } - - public bool ApplyResolutionSettings { - get { return this._apply_resolution_settings; } - set { this._apply_resolution_settings = value; } - } - - /// - /// - /// - public int Width { - get { return this._width; } - set { - if (value >= 0) { - this._width = value; - } - } - } - - /// - /// - /// - public int Height { - get { return this._height; } - set { - if (value >= 0) { - this._height = value; - } - } - } - - /// - /// - /// - public bool FullScreen { - get { return this._full_screen; } - set { this._full_screen = value; } - } - - /// - /// - /// - public int NumOfEnvironments { - get { return this._num_of_environments; } - set { this._num_of_environments = value; } - } - - /// - /// - /// - public int TargetFrameRate { - get { return this._target_frame_rate; } - set { - if (value >= -1) { - this._target_frame_rate = value; - } - } - } - - /// - /// - /// - public int QualityLevel { - get { return this._quality_level; } - set { - if (value >= 1 && value <= 4) { - this._quality_level = value; - } - } - } - - /// - /// - /// - public float TimeScale { - get { return this._time_scale; } - set { - if (value >= 0) { - this._time_scale = value; - } - } - } - - /// - /// - /// - public float MaxReplyInterval { - get { return this._max_reply_interval; } - set { this._max_reply_interval = value; } - } - - /// - /// - /// - public FrameFinishes FrameFinishes { - get { return this._frame_finishes; } - set { this._frame_finishes = value; } - } - - /// - /// - /// - public ExecutionPhase StepExecutionPhase { - get { return this._step_execution_phase; } - set { this._step_execution_phase = value; } - } - - /// - /// WARNING When _update_fixed_time_scale is true, MAJOR slow downs due to PHYSX updates on change. - /// - /// - public bool UpdateFixedTimeScale { - get { return this._update_fixed_time_scale; } - set { this._update_fixed_time_scale = value; } - } - - public bool AlwaysSerialiseUnobservables { - get { return this._always_serialise_unobservables; } - set { this._always_serialise_unobservables = value; } - } - - public bool AlwaysSerialiseIndividualObservables { - get { return this._always_serialise_indidual_observables; } - set { this._always_serialise_indidual_observables = value; } - } - - public bool ReplayReactionInSkips { - get { return this._replay_reaction_in_skips; } - set { this._replay_reaction_in_skips = value; } - } - - /// - /// - /// - public Int32 Port { - get { return this._port; } - set { this._port = value; } - } - - /// - /// - /// - public String IpAddress { - get { return this._ip_address; } - set { this._ip_address = value; } - } - - #endregion - } -} \ No newline at end of file diff --git a/Runtime/Utilities/SearchableEnumAttribute.cs b/Runtime/Utilities/SearchableEnumAttribute.cs new file mode 100644 index 000000000..1d94f3500 --- /dev/null +++ b/Runtime/Utilities/SearchableEnumAttribute.cs @@ -0,0 +1,13 @@ +using System; +using UnityEngine; + +namespace droid.Runtime.Utilities { + /// + /// + /// Put this attribute on a public (or SerialzeField) enum in a + /// MonoBehaviour or ScriptableObject to get an improved enum selector + /// popup. The enum list is scrollable and can be filtered by typing. + /// + [AttributeUsage(AttributeTargets.Field)] + public class SearchableEnumAttribute : PropertyAttribute { } +} diff --git a/Runtime/Utilities/SearchableEnumAttribute.cs.meta b/Runtime/Utilities/SearchableEnumAttribute.cs.meta new file mode 100644 index 000000000..7baf88932 --- /dev/null +++ b/Runtime/Utilities/SearchableEnumAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d57bf0a9f2e56043b171bac62dcd313 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a861b8894568348a9a71a5b438e2ef74, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByInstance.cs b/Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByInstance.cs deleted file mode 100644 index e961ab406..000000000 --- a/Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByInstance.cs +++ /dev/null @@ -1,197 +0,0 @@ -using System; -using System.Collections.Generic; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; -using Random = UnityEngine.Random; - -namespace Neodroid.Runtime.Utilities.Segmentation { - /// - /// - /// - [ExecuteInEditMode] - public class ChangeMaterialOnRenderByInstance : Segmenter{ - /// - /// - /// - Renderer[] _all_renders; - - /// - /// - /// - MaterialPropertyBlock _block; - - /// - /// - /// - LinkedList[] _original_colors; - - /// - /// - public Dictionary ColorsDictGameObject { get; private set; } = - new Dictionary(); - - - /// - /// - /// - public override Dictionary ColorsDict { - get { - var colors = new Dictionary(); - foreach (var key_val in this.ColorsDictGameObject) { - colors.Add(key_val.Key.GetInstanceID().ToString(),key_val.Value); - } - - return colors; - } - } - - /// - /// - /// - public ColorByInstance[] InstanceColors { - get { - if (this.ColorsDictGameObject != null) { - var instance_color_array = new ColorByInstance[this.ColorsDictGameObject.Keys.Count]; - var i = 0; - foreach (var key in this.ColorsDictGameObject.Keys) { - var seg = new ColorByInstance {_Obj = key, _Col = this.ColorsDictGameObject[key]}; - instance_color_array[i] = seg; - i++; - } - - return instance_color_array; - } - - return null; - } - set { - foreach (var seg in value) { - this.ColorsDictGameObject[seg._Obj] = seg._Col; - } - } - } - - // Use this for initialization - /// - /// - /// - void Start() { this.Setup(); } - - /// - /// - /// - void Awake() { - this._all_renders = FindObjectsOfType(); - this._block = new MaterialPropertyBlock(); - this.Setup(); - } - - // Update is called once per frame - /// - /// - /// - void Update() { - var renderers = FindObjectsOfType(); - if (this.ColorsDictGameObject == null) { - this.Setup(); - } else if (this.ColorsDictGameObject.Keys.Count != renderers.Length) { - this._all_renders = renderers; - this.Setup(); - } - } - - void CheckBlock() { - if (this._block == null) { - this._block = new MaterialPropertyBlock(); - } - } - - /// - /// - /// - void Setup() { - this.CheckBlock(); - - this.ColorsDictGameObject.Clear(); - foreach (var rend in this._all_renders) { - if (rend) { - this.ColorsDictGameObject.Add(rend.gameObject, Random.ColorHSV()); - } - } - } - - /// - /// - /// - void Change() { - this.CheckBlock(); - this._original_colors = new LinkedList[this._all_renders.Length]; - - for (var i = 0; i < this._original_colors.Length; i++) { - this._original_colors[i] = new LinkedList(); - } - - for (var i = 0; i < this._all_renders.Length; i++) { - var c_renderer = this._all_renders[i]; - if (c_renderer) { - foreach (var mat in c_renderer.sharedMaterials) { - if (mat != null && mat.HasProperty("_Color")) { - this._original_colors[i].AddFirst(mat.color); - } - - if (this.ColorsDictGameObject.ContainsKey(c_renderer.gameObject)) { - var val = this.ColorsDictGameObject[c_renderer.gameObject]; - this._block.SetColor("_Color", val); - } - - c_renderer.SetPropertyBlock(this._block); - } - } - } - } - - /// - /// - /// - void Restore() { - this.CheckBlock(); - for (var i = 0; i < this._all_renders.Length; i++) { - var c_renderer = this._all_renders[i]; - if (c_renderer) { - foreach (var mat in c_renderer.sharedMaterials) { - if (mat != null - && mat.HasProperty("_Color") - && this._original_colors != null - && i < this._original_colors.Length) { - var c_original_color = this._original_colors[i]; - if (c_original_color != null) { - var last_val = c_original_color.Last.Value; - this._block.SetColor("_Color", last_val); - c_original_color.RemoveLast(); - c_renderer.SetPropertyBlock(this._block); - } - } - } - } - } - } - - /// - /// - /// - void OnPreRender() { - // change - this.Change(); - } - - /// - /// - /// - void OnPostRender() { - // change back - this.Restore(); - } - - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByTag.cs b/Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByTag.cs deleted file mode 100644 index 0a2d15a6b..000000000 --- a/Runtime/Utilities/Segmentation/ChangeMaterialOnRenderByTag.cs +++ /dev/null @@ -1,189 +0,0 @@ -using System; -using System.Collections.Generic; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Utilities.Structs; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Segmentation { - /// - /// - /// - [ExecuteInEditMode] - public class ChangeMaterialOnRenderByTag : Segmenter { - /// - /// - /// - Renderer[] _all_renders; - - /// - /// - /// - MaterialPropertyBlock _block; - - /// - /// - /// - protected ColorByTag[] _Colors_By_Tag; - - [SerializeField] ScriptableObjects.Segmentation _segmentation; - - /// - /// - /// - LinkedList[] _original_colors; - - /// - /// - /// - public bool _Replace_Untagged_Color = true; - - /// - /// - /// - Dictionary _tag_colors_dict = new Dictionary(); - - /// - /// - /// - public Color _Untagged_Color = Color.black; - - /// - /// - /// - public ColorByTag[] ColorsByTag { - get { return this._Colors_By_Tag; } - } - - /// - /// - /// - public override Dictionary ColorsDict { - get { return this._tag_colors_dict; } - } - - /// - /// - /// - void Awake() { - this._block = new MaterialPropertyBlock(); - this._tag_colors_dict.Clear(); - var colors_by_tag = this._Colors_By_Tag; - if (colors_by_tag != null && colors_by_tag.Length > 0) { - foreach (var tag_color in this._Colors_By_Tag) { - if (!this._tag_colors_dict.ContainsKey(tag_color._Tag)) { - this._tag_colors_dict.Add(tag_color._Tag, tag_color._Col); - } - } - } - - if (this._segmentation) { - var segmentation_color_by_tags = this._segmentation._Color_By_Tags; - if (segmentation_color_by_tags != null) { - foreach (var tag_color in segmentation_color_by_tags) { - if (!this._tag_colors_dict.ContainsKey(tag_color._Tag)) { - this._tag_colors_dict.Add(tag_color._Tag, tag_color._Col); - } - } - } - } - - this.Setup(); - } - - /// - /// - /// - void Update() { - this.Setup(); // renderes maybe be disable and enabled, that is why every update we find all renderers again - } - - /// - /// - /// - void Setup() { - this.CheckBlock(); - - this._all_renders = FindObjectsOfType(); - } - - /// - /// - /// - void Change() { - this._original_colors = new LinkedList[this._all_renders.Length]; - for (var i = 0; i < this._original_colors.Length; i++) { - this._original_colors[i] = new LinkedList(); - } - - this.CheckBlock(); - - for (var i = 0; i < this._all_renders.Length; i++) { - var c_renderer = this._all_renders[i]; - if (c_renderer) { - if (this._tag_colors_dict != null && this._tag_colors_dict.ContainsKey(this._all_renders[i].tag)) { - foreach (var mat in this._all_renders[i].sharedMaterials) { - if (mat != null && mat.HasProperty("_Color")) { - this._original_colors[i].AddFirst(mat.color); - } - - this._block.SetColor("_Color", this._tag_colors_dict[this._all_renders[i].tag]); - this._all_renders[i].SetPropertyBlock(this._block); - } - } else if (this._Replace_Untagged_Color) { - foreach (var mat in this._all_renders[i].sharedMaterials) { - if (mat != null && mat.HasProperty("_Color")) { - this._original_colors[i].AddFirst(mat.color); - } - - this._block.SetColor("_Color", this._Untagged_Color); - this._all_renders[i].SetPropertyBlock(this._block); - } - } - } - } - } - - void CheckBlock() { - if (this._block == null) { - this._block = new MaterialPropertyBlock(); - } - } - - /// - /// - /// - void Restore() { - this.CheckBlock(); - - for (var i = 0; i < this._all_renders.Length; i++) { - if (this._all_renders[i]) { - foreach (var mat in this._all_renders[i].sharedMaterials) { - if (mat != null - && mat.HasProperty("_Color") - && this._original_colors != null - && i < this._original_colors.Length) { - var last_val = this._original_colors[i].Last.Value; - this._block.SetColor("_Color",last_val); - this._original_colors[i].RemoveLast(); - this._all_renders[i].SetPropertyBlock(this._block); - } - } - } - } - } - - /*void OnPreCull() { - // change - }*/ - - void OnPreRender() { - // change - this.Change(); - } - - void OnPostRender() { - // change back - this.Restore(); - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Segmentation/Segmenter.cs b/Runtime/Utilities/Segmentation/Segmenter.cs deleted file mode 100644 index dce8c81b0..000000000 --- a/Runtime/Utilities/Segmentation/Segmenter.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using Neodroid.Runtime.Interfaces; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Segmentation { - /// - /// - /// - public abstract class Segmenter : MonoBehaviour, IMaterialManipulator { - public abstract Dictionary ColorsDict { get; } - } -} diff --git a/Runtime/Utilities/Sensors/ChildColliderSensor.cs b/Runtime/Utilities/Sensors/ChildColliderSensor.cs deleted file mode 100644 index 20563de98..000000000 --- a/Runtime/Utilities/Sensors/ChildColliderSensor.cs +++ /dev/null @@ -1,138 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Sensors { - /// - /// - /// - public class ChildColliderSensor : MonoBehaviour { - /// - /// - /// - /// - /// - public delegate void OnChildCollisionEnterDelegate( - GameObject child_sensor_game_object, - Collision collision); - - /// - /// - /// - /// - /// - public delegate void OnChildCollisionExitDelegate( - GameObject child_sensor_game_object, - Collision collision); - - /// - /// - /// - /// - /// - public delegate void OnChildCollisionStayDelegate( - GameObject child_sensor_game_object, - Collision collision); - - /// - /// - /// - /// - /// - public delegate void OnChildTriggerEnterDelegate(GameObject child_sensor_game_object, Collider collider); - - /// - /// - /// - /// - /// - public delegate void OnChildTriggerExitDelegate(GameObject child_sensor_game_object, Collider collider); - - /// - /// - /// - /// - /// - public delegate void OnChildTriggerStayDelegate(GameObject child_sensor_game_object, Collider collider); - - [SerializeField] Component _caller; - - [SerializeField] OnChildCollisionEnterDelegate _on_collision_enter_delegate; - - [SerializeField] OnChildCollisionExitDelegate _on_collision_exit_delegate; - - [SerializeField] OnChildCollisionStayDelegate _on_collision_stay_delegate; - - [SerializeField] OnChildTriggerEnterDelegate _on_trigger_enter_delegate; - - [SerializeField] OnChildTriggerExitDelegate _on_trigger_exit_delegate; - - [SerializeField] OnChildTriggerStayDelegate _on_trigger_stay_delegate; - - /// - /// - /// - public OnChildCollisionEnterDelegate OnCollisionEnterDelegate { - set { this._on_collision_enter_delegate = value; } - } - - /// - /// - /// - public OnChildTriggerEnterDelegate OnTriggerEnterDelegate { - set { this._on_trigger_enter_delegate = value; } - } - - /// - /// - /// - public OnChildTriggerStayDelegate OnTriggerStayDelegate { - set { this._on_trigger_stay_delegate = value; } - } - - /// - /// - /// - public OnChildCollisionStayDelegate OnCollisionStayDelegate { - set { this._on_collision_stay_delegate = value; } - } - - /// - /// - /// - public OnChildCollisionExitDelegate OnCollisionExitDelegate { - set { this._on_collision_exit_delegate = value; } - } - - /// - /// - /// - public OnChildTriggerExitDelegate OnTriggerExitDelegate { - set { this._on_trigger_exit_delegate = value; } - } - - /// - /// - /// - public Component Caller { - get { return this._caller; } - set { this._caller = value; } - } - - void OnCollisionEnter(Collision collision) { - this._on_collision_enter_delegate?.Invoke(this.gameObject, collision); - } - - void OnTriggerEnter(Collider other) { this._on_trigger_enter_delegate?.Invoke(this.gameObject, other); } - - void OnTriggerStay(Collider other) { this._on_trigger_stay_delegate?.Invoke(this.gameObject, other); } - - void OnCollisionStay(Collision collision) { - this._on_collision_stay_delegate?.Invoke(this.gameObject, collision); - } - - void OnTriggerExit(Collider other) { this._on_trigger_exit_delegate?.Invoke(this.gameObject, other); } - - void OnCollisionExit(Collision collision) { - this._on_collision_exit_delegate?.Invoke(this.gameObject, collision); - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/SerialisableDictionary/Example.cs b/Runtime/Utilities/SerialisableDictionary/Example.cs deleted file mode 100644 index c87177669..000000000 --- a/Runtime/Utilities/SerialisableDictionary/Example.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.SerialisableDictionary { - /// - /// - /// - [CreateAssetMenu(menuName = "Example Asset")] - public class Example : ScriptableObject { - /// - /// - /// - [SerializeField] - GameObjectFloatDictionary _game_object_float_store = - GameObjectFloatDictionary.New(); - - /// - /// - /// - [SerializeField] - StringIntDictionary _string_integer_store = StringIntDictionary.New(); - - /// - /// - /// - Dictionary StringIntegers { - get { return this._string_integer_store._Dict; } - } - - /// - /// - /// - Dictionary Screenshots { - get { return this._game_object_float_store._Dict; } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/StatusDisplayer/AutoSetupStatusDisplayer.cs b/Runtime/Utilities/StatusDisplayer/AutoSetupStatusDisplayer.cs deleted file mode 100644 index 76f30ca5a..000000000 --- a/Runtime/Utilities/StatusDisplayer/AutoSetupStatusDisplayer.cs +++ /dev/null @@ -1,150 +0,0 @@ -#if UNITY_EDITOR -using UnityEditor.Events; - - -using Neodroid.Runtime.Environments; -using Neodroid.Runtime.Managers; -using Neodroid.Runtime.Prototyping.Evaluation; -using Neodroid.Runtime.Utilities.EventRecipients; -using Neodroid.Runtime.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted; -using UnityEngine; -using UnityEngine.Events; -using UnityEngine.UI; - -namespace Neodroid.Runtime.Utilities.StatusDisplayer { - /// - /// - /// - [ExecuteInEditMode] - public class AutoSetupStatusDisplayer : MonoBehaviour { - [SerializeField] NeodroidManager _manager; - [SerializeField] NeodroidEnvironment _environment; - [SerializeField] ObjectiveFunction _evaluation_function; - - [SerializeField] TextUpdater _environment_text; - [SerializeField] TextUpdater _environment_frame; - [SerializeField] TextUpdater _environment_obs; - [SerializeField] TextUpdater _signal; - [SerializeField] ToggleUpdater _terminated; - [SerializeField] TextUpdater _status_text; - [SerializeField] Toggle _testing_toggle; - [SerializeField] Button _reset_button; - [SerializeField] bool _clean_empty_no_target_events = true; - [SerializeField] bool _debugging; - [SerializeField] UnityEventCallState _unity_event_call_state = UnityEventCallState.RuntimeOnly; - - void TryRegister(DataPoller poller, UnityAction f) { - if (poller) { - var count = poller.PollEvent.GetPersistentEventCount(); - if (this._clean_empty_no_target_events && count > 0) { - //poller.PollEvent.RemoveAllListeners(); // Only non-persistant listeners. - for (var i = 0; i < count; i++) { - if (poller.PollEvent.GetPersistentTarget(i) == null - || poller.PollEvent.GetPersistentMethodName(i) == null) { - UnityEventTools.RemovePersistentListener(poller.PollEvent, i); - } - } - } - - count = poller.PollEvent.GetPersistentEventCount(); - if (count == 0) { - UnityEventTools.AddObjectPersistentListener(poller.PollEvent, f, poller); - poller.PollEvent.SetPersistentListenerState(0, this._unity_event_call_state); - } else if (count > 0 && poller.PollEvent.GetPersistentTarget(0) != poller) { - if (this.Debugging) { - Debug.Log($"PollEvent on {poller} already has a listeners"); - } - } - } - } - - void TryRegisterVoid(UnityEventBase poller, UnityAction f) { - var count = poller.GetPersistentEventCount(); - if (this._clean_empty_no_target_events && count > 0) { - //poller.PollEvent.RemoveAllListeners(); // Only non-persistant listeners. - for (var i = 0; i < count; i++) { - if (poller.GetPersistentTarget(i) == null || poller.GetPersistentMethodName(i) == null) { - UnityEventTools.RemovePersistentListener(poller, i); - } - } - } - - count = poller.GetPersistentEventCount(); - if (count == 0) { - UnityEventTools.AddVoidPersistentListener(poller, f); - poller.SetPersistentListenerState(0, this._unity_event_call_state); - } else if (count > 0) { - if (this.Debugging) { - Debug.Log($"PollEvent on {poller} already has a listeners"); - } - } - } - - void TryRegisterProperty(Toggle.ToggleEvent poller, UnityAction f) { - var count = poller.GetPersistentEventCount(); - if (this._clean_empty_no_target_events && count > 0) { - //poller.PollEvent.RemoveAllListeners(); // Only non-persistent listeners. - for (var i = 0; i < count; i++) { - if (poller.GetPersistentTarget(i) == null || poller.GetPersistentMethodName(i) == null) { - UnityEventTools.RemovePersistentListener(poller, i); - } - } - } - - count = poller.GetPersistentEventCount(); - if (count == 0) { - UnityEventTools.AddPersistentListener(poller, f); - poller.SetPersistentListenerState(0, this._unity_event_call_state); - } else if (count > 0) { - if (this.Debugging) { - Debug.Log($"PollEvent on {poller} already has a listeners"); - } - } - } - - bool Debugging { - get { return this._debugging; } - set { this._debugging = value; } - } - - void Start() { - if (!this._environment) { - this._environment = FindObjectOfType(); - } - - if (this._environment) { - this.TryRegister(this._environment_text, this._environment.IdentifierString); - this.TryRegister(this._environment_frame, this._environment.FrameString); - this.TryRegister(this._environment_obs, this._environment.ObservationsString); - this.TryRegister(this._terminated, this._environment.TerminatedBoolean); - } - - if (!this._evaluation_function) { - this._evaluation_function = FindObjectOfType(); - } - - if (this._evaluation_function) { - this.TryRegister(this._signal, this._evaluation_function.SignalString); - } - - if (!this._manager) { - this._manager = FindObjectOfType(); - } - - if (this._manager) { - if (this._status_text) { - this.TryRegister(this._status_text, this._manager.StatusString); - } - - if (this._testing_toggle) { - this.TryRegisterProperty(this._testing_toggle.onValueChanged, this._manager.SetTesting); - } - } - - if (this._reset_button) { - this.TryRegisterVoid(this._reset_button.onClick, this._manager.ResetAllEnvironments); - } - } - } -} -#endif \ No newline at end of file diff --git a/Runtime/Utilities/Structs.meta b/Runtime/Utilities/Structs.meta deleted file mode 100644 index c0a39bb4d..000000000 --- a/Runtime/Utilities/Structs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ecfe5a6d4ed394c848d09c87499e2b0f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Structs/DoubleVector3.cs b/Runtime/Utilities/Structs/DoubleVector3.cs deleted file mode 100644 index f53135bec..000000000 --- a/Runtime/Utilities/Structs/DoubleVector3.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Structs { - [Serializable] - public struct DoubleVector3 { - [SerializeField] public double _X; - [SerializeField] public double _Y; - [SerializeField] public double _Z; - - public DoubleVector3(Vector3 vec3) { - this._X = vec3.x; - this._Y = vec3.y; - this._Z = vec3.z; - } - - public static DoubleVector3 operator+(DoubleVector3 a, DoubleVector3 b) { - a._X += b._X; - a._Y += b._Y; - a._Z += b._Z; - return a; - } - - public DoubleVector3(double x, double y, double z) { - this._X = x; - this._Y = y; - this._Z = z; - } - - public Double X { - get { return this._X; } - set { this._X = value; } - } - - public Double Y { - get { return this._Y; } - set { this._Y = value; } - } - - public Double Z { - get { return this._Z; } - set { this._Z = value; } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Structs/DoubleVector3.cs.meta b/Runtime/Utilities/Structs/DoubleVector3.cs.meta deleted file mode 100644 index 3b01b003a..000000000 --- a/Runtime/Utilities/Structs/DoubleVector3.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 781fdf8289f4403aa39938692fba4d40 -timeCreated: 1526034791 \ No newline at end of file diff --git a/Runtime/Utilities/Structs/IntVector3.cs b/Runtime/Utilities/Structs/IntVector3.cs deleted file mode 100644 index e1887e862..000000000 --- a/Runtime/Utilities/Structs/IntVector3.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Structs { - [Serializable] - public struct IntVector3 { - [SerializeField] public int _X; - [SerializeField] public int _Y; - [SerializeField] public int _Z; - - public IntVector3(Vector3 vec3) { - this._X = Mathf.RoundToInt(vec3.x); - this._Y = Mathf.RoundToInt(vec3.y); - this._Z = Mathf.RoundToInt(vec3.z); - } - - public static IntVector3 operator+(IntVector3 a, IntVector3 b) { - a._X += b._X; - a._Y += b._Y; - a._Z += b._Z; - return a; - } - - public IntVector3(int x, int y, int z) { - this._X = x; - this._Y = y; - this._Z = z; - } - - public int X { - get { return this._X; } - set { this._X = value; } - } - - public int Y { - get { return this._Y; } - set { this._Y = value; } - } - - public int Z { - get { return this._Z; } - set { this._Z = value; } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Structs/IntVector3.cs.meta b/Runtime/Utilities/Structs/IntVector3.cs.meta deleted file mode 100644 index f6e100b57..000000000 --- a/Runtime/Utilities/Structs/IntVector3.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 33a2480439cd4a598d4466bc1341f665 -timeCreated: 1516159795 \ No newline at end of file diff --git a/Runtime/Utilities/Structs/Points.cs b/Runtime/Utilities/Structs/Points.cs deleted file mode 100644 index 86673683f..000000000 --- a/Runtime/Utilities/Structs/Points.cs +++ /dev/null @@ -1,29 +0,0 @@ -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Structs { - public class Points : MonoBehaviour { - public struct StringPoint { - public Vector3 _Pos; - public float _Size; - public string _Val; - - public StringPoint(Vector3 pos, string val, float size) { - this._Pos = pos; - this._Val = val; - this._Size = size; - } - } - - public struct ValuePoint { - public Vector3 _Pos; - public float _Size; - public float _Val; - - public ValuePoint(Vector3 pos, float val, float size) { - this._Pos = pos; - this._Val = val; - this._Size = size; - } - } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Structs/Points.cs.meta b/Runtime/Utilities/Structs/Points.cs.meta deleted file mode 100644 index 57f5bf4a3..000000000 --- a/Runtime/Utilities/Structs/Points.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a58a7e1cfe8a84a7682ce2569744b864 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Structs/SegmentationColor.cs b/Runtime/Utilities/Structs/SegmentationColor.cs deleted file mode 100644 index e99a20542..000000000 --- a/Runtime/Utilities/Structs/SegmentationColor.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using UnityEngine; - -namespace Neodroid.Runtime.Utilities.Structs { - /// - /// - /// - [Serializable] - public struct ColorByTag { - /// - /// - /// - public string _Tag; - - /// - /// - /// - public Color _Col; - } - - /// - /// - /// - [Serializable] - public struct ColorByInstance { - /// - /// - /// - public GameObject _Obj; - - /// - /// - /// - public Color _Col; - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Structs/SegmentationColor.cs.meta b/Runtime/Utilities/Structs/SegmentationColor.cs.meta deleted file mode 100644 index cb6e7dcb0..000000000 --- a/Runtime/Utilities/Structs/SegmentationColor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 902dd37b51e3945448da855ee131cf3f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Utilities/Structs/Space2.cs b/Runtime/Utilities/Structs/Space2.cs deleted file mode 100644 index 05bda0b1a..000000000 --- a/Runtime/Utilities/Structs/Space2.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using UnityEngine; -using Random = UnityEngine.Random; - -namespace Neodroid.Runtime.Utilities.Structs { - [Serializable] - public struct Space2 { - public int _Decimal_Granularity; - public Vector2 _Min_Values; - public Vector2 _Max_Values; - - public Space2(int decimal_granularity = 10) : this() { - this._Min_Values = Vector2.one * -100f; //Vector2.negativeInfinity; - this._Max_Values = Vector2.one * 100f; //Vector2.positiveInfinity; - this._Decimal_Granularity = decimal_granularity; - } - - public Vector2 Span { - get { return this._Max_Values - this._Min_Values; } - } - - public Vector2 RandomVector2() { - var x = Random.Range(this._Min_Values.x, this._Max_Values.x); - var y = Random.Range(this._Min_Values.y, this._Max_Values.y); - - return new Vector3(x, y); - } - - public Vector2 ClipNormaliseRound(Vector2 v) { - if (v.x > this._Max_Values.x) { - v.x = this._Max_Values.x; - } else if (v.x < this._Min_Values.x) { - v.x = this._Min_Values.x; - } - - if (this.Span.x > 0) { - v.x = this.Round((v.x - this._Min_Values.x) / this.Span.x); - } else { - v.x = 0; - } - - if (v.y > this._Max_Values.y) { - v.y = this._Max_Values.y; - } else if (v.y < this._Min_Values.y) { - v.y = this._Min_Values.y; - } - - if (this.Span.y > 0) { - v.y = this.Round((v.y - this._Min_Values.y) / this.Span.y); - } else { - v.y = 0; - } - - return v; - } - - /// - /// - /// - /// - /// - public float Round(float v) { return (float)Math.Round(v, this._Decimal_Granularity); } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Structs/Space2.cs.meta b/Runtime/Utilities/Structs/Space2.cs.meta deleted file mode 100644 index 79ea561ba..000000000 --- a/Runtime/Utilities/Structs/Space2.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0c32e90183bb42bd9a4a1db7d7fd889b -timeCreated: 1515794768 \ No newline at end of file diff --git a/Runtime/Utilities/Structs/Space3.cs b/Runtime/Utilities/Structs/Space3.cs deleted file mode 100644 index 8b8ee58e6..000000000 --- a/Runtime/Utilities/Structs/Space3.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System; -using UnityEngine; -using Random = UnityEngine.Random; - -namespace Neodroid.Runtime.Utilities.Structs { - [Serializable] - public struct Space3 { - public int _Decimal_Granularity; - public Vector3 _Min_Values; - public Vector3 _Max_Values; - - public Space3(int decimal_granularity = 10) { - this._Decimal_Granularity = decimal_granularity; - this._Min_Values = Vector3.one * -100f; - this._Max_Values = Vector3.one * 100f; //Vector3.positiveInfinity; - } - - public Vector3 Span { - get { return this._Max_Values - this._Min_Values; } - } - - public Vector3 RandomVector3() { - var x = Random.Range(this._Min_Values.x, this._Max_Values.x); - var y = Random.Range(this._Min_Values.y, this._Max_Values.y); - var z = Random.Range(this._Min_Values.z, this._Max_Values.z); - - return new Vector3(x, y, z); - } - - public Vector3 ClipNormaliseRound(Vector3 v) { - if (v.x > this._Max_Values.x) { - v.x = this._Max_Values.x; - } else if (v.x < this._Min_Values.x) { - v.x = this._Min_Values.x; - } - - if (this.Span.x > 0) { - v.x = this.Round((v.x - this._Min_Values.x) / this.Span.x); - } else { - v.x = 0; - } - - if (v.y > this._Max_Values.y) { - v.y = this._Max_Values.y; - } else if (v.y < this._Min_Values.y) { - v.y = this._Min_Values.y; - } - - if (this.Span.y > 0) { - v.y = this.Round((v.y - this._Min_Values.y) / this.Span.y); - } else { - v.y = 0; - } - - if (v.z > this._Max_Values.z) { - v.z = this._Max_Values.z; - } else if (v.z < this._Min_Values.z) { - v.z = this._Min_Values.z; - } - - if (this.Span.z > 0) { - v.z = this.Round((v.z - this._Min_Values.z) / this.Span.z); - } else { - v.z = 0; - } - - return v; - } - - public float Round(float v) { return (float)Math.Round(v, this._Decimal_Granularity); } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Structs/Space3.cs.meta b/Runtime/Utilities/Structs/Space3.cs.meta deleted file mode 100644 index eb0d96c79..000000000 --- a/Runtime/Utilities/Structs/Space3.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 270d1185672f4953823d1ca574cfc379 -timeCreated: 1515794709 \ No newline at end of file diff --git a/Runtime/Utilities/Structs/Space4.cs b/Runtime/Utilities/Structs/Space4.cs deleted file mode 100644 index 410c27c0f..000000000 --- a/Runtime/Utilities/Structs/Space4.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System; -using UnityEngine; -using Random = UnityEngine.Random; - -namespace Neodroid.Runtime.Utilities.Structs { - /// - /// - /// - [Serializable] - public struct Space4 { - public int _DecimalGranularity; - public Vector4 _Min_Values; - public Vector4 _Max_Values; - - public Space4(int decimal_granularity = int.MaxValue) { - this._DecimalGranularity = decimal_granularity; - this._Min_Values = Vector4.negativeInfinity; - this._Max_Values = Vector4.positiveInfinity; - } - - public Vector4 Span { - get { return this._Max_Values - this._Min_Values; } - } - - public Vector4 RandomVector4() { - var x = Random.Range(this._Min_Values.x, this._Max_Values.x); - var y = Random.Range(this._Min_Values.y, this._Max_Values.y); - var z = Random.Range(this._Min_Values.z, this._Max_Values.z); - var w = Random.Range(this._Min_Values.w, this._Max_Values.w); - - return new Vector4(x, y, z, w); - } - - public Quaternion RandomQuaternion() { - var vector = this.RandomVector4(); - return new Quaternion(vector.x, vector.y, vector.z, vector.w); - } - - public Vector4 ClipNormaliseRound(Vector4 v) { - if (v.x > this._Max_Values.x) { - v.x = this._Max_Values.x; - } else if (v.x < this._Min_Values.x) { - v = this._Min_Values; - } - - if (this.Span.x > 0) { - v.x = this.Round((v.x - this._Min_Values.x) / this.Span.x); - } else { - v.x = 0; - } - - if (v.y > this._Max_Values.y) { - v.y = this._Max_Values.y; - } else if (v.y < this._Min_Values.y) { - v = this._Min_Values; - } - - if (this.Span.y > 0) { - v.y = this.Round((v.y - this._Min_Values.y) / this.Span.y); - } else { - v.y = 0; - } - - if (v.z > this._Max_Values.z) { - v.z = this._Max_Values.z; - } else if (v.z < this._Min_Values.z) { - v = this._Min_Values; - } - - if (this.Span.z > 0) { - v.z = this.Round((v.z - this._Min_Values.z) / this.Span.z); - } else { - v.z = 0; - } - - if (v.w > this._Max_Values.w) { - v.w = this._Max_Values.w; - } else if (v.w < this._Min_Values.w) { - v = this._Min_Values; - } - - if (this.Span.w > 0) { - v.w = this.Round((v.w - this._Min_Values.w) / this.Span.w); - } else { - v.w = 0; - } - - return v; - } - - public float Round(float v) { return (float)Math.Round(v, this._DecimalGranularity); } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Structs/Space4.cs.meta b/Runtime/Utilities/Structs/Space4.cs.meta deleted file mode 100644 index ae778adab..000000000 --- a/Runtime/Utilities/Structs/Space4.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 222235e034124a2da02443d769812d9b -timeCreated: 1516262151 \ No newline at end of file diff --git a/Runtime/Utilities/Structs/ValueSpace.cs b/Runtime/Utilities/Structs/ValueSpace.cs deleted file mode 100644 index cb0f79acd..000000000 --- a/Runtime/Utilities/Structs/ValueSpace.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using Random = UnityEngine.Random; - -namespace Neodroid.Runtime.Utilities.Structs { - [Serializable] - public struct ValueSpace { - public int _Decimal_Granularity; - public float _Min_Value; - public float _Max_Value; - - public ValueSpace(int decimal_granularity = 2) { - this._Decimal_Granularity = decimal_granularity; - this._Min_Value = -1f; //float.NegativeInfinity; - this._Max_Value = 1f; //float.PositiveInfinity; - } - - public float RandomValue() { - var x = Random.Range(this._Min_Value, this._Max_Value); - - return x; - } - - public float Sample() { return this.RandomValue(); } - - public float Span { - get { return this._Max_Value - this._Min_Value; } - } - - public float ClipNormaliseRound(float v) { - if (v > this._Max_Value) { - v = this._Max_Value; - } else if (v < this._Min_Value) { - v = this._Min_Value; - } - - return this.Round((v - this._Min_Value) / this.Span); - } - - public float Round(float v) { return (float)Math.Round(v, this._Decimal_Granularity); } - } -} \ No newline at end of file diff --git a/Runtime/Utilities/Structs/ValueSpace.cs.meta b/Runtime/Utilities/Structs/ValueSpace.cs.meta deleted file mode 100644 index 3c730f8bc..000000000 --- a/Runtime/Utilities/Structs/ValueSpace.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 2f45be3f8b3a745eaa31b626e6970fac -timeCreated: 1514302138 -licenseType: Pro -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/nuget.config b/Runtime/nuget.config index 07d7b676a..7963af22d 100644 --- a/Runtime/nuget.config +++ b/Runtime/nuget.config @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/Runtime/packages.config b/Runtime/packages.config index be7134ba4..b1ef6e6c6 100644 --- a/Runtime/packages.config +++ b/Runtime/packages.config @@ -1,9 +1,9 @@ - - - - - - - - - + + + + + + + + + diff --git a/Samples/MultiArmedBandit.unity b/Samples/MultiArmedBandit.unity deleted file mode 100644 index a8f21ae15..000000000 --- a/Samples/MultiArmedBandit.unity +++ /dev/null @@ -1,1492 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 0 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 10 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 1 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!114 &149719887 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114638356156934590, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - m_PrefabInstance: {fileID: 1089945723} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &318632412 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114142010206075190, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - m_PrefabInstance: {fileID: 1089945723} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &558790915 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 558790916} - m_Layer: 0 - m_Name: ArmLeft - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &558790916 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 558790915} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 903449911} - - {fileID: 578315296} - m_Father: {fileID: 898419344} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -300, y: 0} - m_SizeDelta: {x: 100, y: 300} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1001 &578315295 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 558790916} - m_Modifications: - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1247594942759636, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Name - value: ValueBarLeft - objectReference: {fileID: 0} - - target: {fileID: 1837730243121884, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Name - value: ValueTextLeft - objectReference: {fileID: 0} - - target: {fileID: 1380061422114852, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Name - value: BeliefBarLeft - objectReference: {fileID: 0} - - target: {fileID: 1685958238231828, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Name - value: ValueDisplayerLeft - objectReference: {fileID: 0} - - target: {fileID: 1392557157429368, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Name - value: BeliefDisplayerLeft - objectReference: {fileID: 0} - - target: {fileID: 1808157719511378, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Name - value: BeliefTextLeft - objectReference: {fileID: 0} - - target: {fileID: 1388701424054228, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Name - value: CountTextLeft - objectReference: {fileID: 0} - - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_RaycastTarget - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Material - value: - objectReference: {fileID: 0} - - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Color.r - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Color.g - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Color.b - value: 1 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} ---- !u!224 &578315296 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 578315295} - m_PrefabAsset: {fileID: 0} ---- !u!114 &578315297 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114312675401615462, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 578315295} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &578315298 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114540525651406706, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 578315295} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &578315299 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114334249277451982, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 578315295} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &578315300 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114476191495675034, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 578315295} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1001 &814446580 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1341081093} - m_Modifications: - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} ---- !u!224 &814446581 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 814446580} - m_PrefabAsset: {fileID: 0} ---- !u!114 &814446582 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114312675401615462, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 814446580} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &814446583 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114540525651406706, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 814446580} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &814446584 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114508576442056390, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 814446580} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &814446585 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114476191495675034, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} - m_PrefabInstance: {fileID: 814446580} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!224 &865889675 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - m_PrefabInstance: {fileID: 1641151717} - m_PrefabAsset: {fileID: 0} ---- !u!1 &898419343 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 898419344} - - component: {fileID: 898419345} - - component: {fileID: 898419346} - m_Layer: 0 - m_Name: MultiArmedBandit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &898419344 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 898419343} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 558790916} - - {fileID: 1341081093} - - {fileID: 1766601507} - m_Father: {fileID: 1381552603} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &898419345 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 898419343} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1b572378012c8483dadbb0e7244d13c5, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _bounds: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - _draw_bounds: 0 - _is_alive: 1 ---- !u!114 &898419346 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 898419343} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 18da66e1f21b4429faf09c7a18e49c0a, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _motion_value_space: - _Decimal_Granularity: 0 - _Min_Value: 0 - _Max_Value: 2 - _energy_spend_since_reset: 0 - _energy_cost: 0 - _indicators: - - {fileID: 2100000, guid: b63e9efe7a9924d56ac1acf75e4db8e3, type: 2} - - {fileID: 2100000, guid: 9b8f86f172881439f9ac439ac5f06317, type: 2} - - {fileID: 2100000, guid: dab1db1368b6744ec954efc08a689113, type: 2} - _inactive_color: {r: 1, g: 1, b: 0, a: 1} - _win_color: {r: 0, g: 1, b: 0, a: 1} - _lose_color: {r: 1, g: 0, b: 0, a: 1} - _win_amounts: - - 3 - - 2 - - 5 - _win_likelihoods: - - 0.3 - - 0.6 - - 0.1 - _last_index: 0 - _won: 0 ---- !u!1 &903449910 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 903449911} - - component: {fileID: 903449913} - - component: {fileID: 903449912} - m_Layer: 0 - m_Name: Indicator - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &903449911 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 903449910} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 558790916} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &903449912 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 903449910} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 2100000, guid: b63e9efe7a9924d56ac1acf75e4db8e3, type: 2} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!222 &903449913 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 903449910} - m_CullTransparentMesh: 0 ---- !u!1001 &1089945723 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 898419344} - m_Modifications: - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_AnchoredPosition.x - value: 300 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_SizeDelta.x - value: 100 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_SizeDelta.y - value: 300 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1698925828775076, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_Name - value: CountTextRight - objectReference: {fileID: 0} - - target: {fileID: 224908010201914998, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224908010201914998, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114142010206075190, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - propertyPath: _value - value: 0.432 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} ---- !u!1 &1242305450 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1242305451} - m_Layer: 0 - m_Name: Statics - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1242305451 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1242305450} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 865889675} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1341081092 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1341081093} - m_Layer: 0 - m_Name: ArmMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1341081093 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1341081092} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1787058675} - - {fileID: 814446581} - m_Father: {fileID: 898419344} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 300} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1381552596 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1381552603} - - component: {fileID: 1381552597} - - component: {fileID: 1381552602} - - component: {fileID: 1381552598} - - component: {fileID: 1381552604} - - component: {fileID: 1381552605} - - component: {fileID: 1381552599} - - component: {fileID: 1381552606} - - component: {fileID: 1381552607} - - component: {fileID: 1381552600} - m_Layer: 0 - m_Name: Environment - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1381552597 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4675f9235ecc46a5982e50590d858cc, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _episode_length: 0 - _Lastest_Reset_Time: 0 - _Energy_Spent: 0 - _Terminated: 0 - _Terminable: 1 - _LastTermination_Reason: None - _Resetting: 0 - _current_frame_number: 0 - _objective_function: {fileID: 0} - _coordinate_reference_point: {fileID: 0} - _track_only_children: 1 - _coordinate_system: 0 - _playable_area: {fileID: 0} - _reset_i: 0 - _initials_saved_flag: 0 - _update_observations_with_every_tick: 0 ---- !u!223 &1381552598 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 1443820763} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 1 - m_TargetDisplay: 0 ---- !u!114 &1381552599 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 1 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 1 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!114 &1381552600 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0a1c2f6fda1324e1dbb824ee2e6e7321, type: 3} - m_Name: - m_EditorClassIdentifier: - _Manager: {fileID: 1381552606} - _debugging: 0 - _player_motions: {fileID: 11400000, guid: 9bef801c1f9ee4eb7a656eb2e158eece, type: 2} - _auto_reset: 0 ---- !u!114 &1381552602 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a40191f007b1d4026857ce299e6bed05, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _Episode_Return: 0 - _environment: {fileID: 0} - _solved_threshold: 0 - _last_signal: 0 - _normalised_values: - - 0.34615386 - - 0.46153846 - - 0.19230768 - _arms: {fileID: 898419346} - _text_bar_plot_displayer: {fileID: 1381552604} ---- !u!224 &1381552603 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 898419344} - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!114 &1381552604 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc412003ee62499ab6c770141c6a0585, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: ValuePlotter - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _canvas_bars: - - {fileID: 578315298} - - {fileID: 814446583} - - {fileID: 318632412} - _canvas_text: - - {fileID: 578315297} - - {fileID: 814446582} - - {fileID: 149719887} - _values: - - 0.5 - - 0.5 - - 0.5 ---- !u!114 &1381552605 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc412003ee62499ab6c770141c6a0585, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: BeliefPlotter - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _canvas_bars: - - {fileID: 578315300} - - {fileID: 814446585} - - {fileID: 1719147517} - _canvas_text: - - {fileID: 578315299} - - {fileID: 814446584} - - {fileID: 1535647868} - _values: - - 0.7 - - 0.1 - - 0.2 ---- !u!114 &1381552606 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 74a1dc8369fb4a558f780b51d8d95442, type: 3} - m_Name: - m_EditorClassIdentifier: - _debugging: 0 - _testing_motors: 0 - _configuration: {fileID: 0} - _skip_frame_i: 0 - _syncing_environments: 0 - _awaiting_reply: 0 - _step: 0 - _last_simulation_time: 0 - _has_stepped: 0 - _allow_in_editor_blockage: 0 ---- !u!114 &1381552607 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381552596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!1 &1443820761 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1443820764} - - component: {fileID: 1443820763} - - component: {fileID: 1443820762} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1443820762 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1443820761} - m_Enabled: 1 ---- !u!20 &1443820763 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1443820761} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.2784314, g: 0.2784314, b: 0.2784314, a: 1} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 1000 - field of view: 60 - orthographic: 1 - orthographic size: -1 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 0 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1443820764 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1443820761} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1535647868 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114078270753135082, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - m_PrefabInstance: {fileID: 1089945723} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1001 &1641151717 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1242305451} - m_Modifications: - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_Pivot.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_Pivot.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114501781773825270, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1381552597} - - target: {fileID: 114221796099513398, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1381552597} - - target: {fileID: 114988635351345222, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1381552597} - - target: {fileID: 114543584020609536, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1381552606} - - target: {fileID: 114088500222901950, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1381552602} - - target: {fileID: 114152215923272706, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1381552606} - - target: {fileID: 114988635351345222, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, net.cnheider.neodroid - objectReference: {fileID: 0} - - target: {fileID: 114501781773825270, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, net.cnheider.neodroid - objectReference: {fileID: 0} - - target: {fileID: 114088500222901950, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, net.cnheider.neodroid - objectReference: {fileID: 0} - - target: {fileID: 114221796099513398, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, net.cnheider.neodroid - objectReference: {fileID: 0} - - target: {fileID: 224110368661715722, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224701342121933384, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchoredPosition.x - value: 284 - objectReference: {fileID: 0} - - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224582703667719680, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224582703667719680, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224110368661715722, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224241792838047938, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224241792838047938, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224022790003590410, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224022790003590410, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchoredPosition.y - value: 16.5 - objectReference: {fileID: 0} - - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _unity_event_call_state - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _manager - value: - objectReference: {fileID: 1381552606} - - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _environment - value: - objectReference: {fileID: 1381552597} - - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: _evaluation_function - value: - objectReference: {fileID: 1381552602} - - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} ---- !u!114 &1719147517 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 114871921216616518, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - m_PrefabInstance: {fileID: 1089945723} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!224 &1766601507 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} - m_PrefabInstance: {fileID: 1089945723} - m_PrefabAsset: {fileID: 0} ---- !u!1 &1787058674 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1787058675} - - component: {fileID: 1787058677} - - component: {fileID: 1787058676} - m_Layer: 0 - m_Name: Indicator - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1787058675 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1787058674} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 1341081093} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1787058676 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1787058674} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 2100000, guid: 9b8f86f172881439f9ac439ac5f06317, type: 2} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!222 &1787058677 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1787058674} - m_CullTransparentMesh: 0 diff --git a/Samples/MultiArmedBandit/Actuators.meta b/Samples/MultiArmedBandit/Actuators.meta new file mode 100644 index 000000000..fce68333e --- /dev/null +++ b/Samples/MultiArmedBandit/Actuators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 999e32d92b86cf900be350134f0c528a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/Actuators/MultiArmedBanditActuator.cs b/Samples/MultiArmedBandit/Actuators/MultiArmedBanditActuator.cs new file mode 100644 index 000000000..c6e30984a --- /dev/null +++ b/Samples/MultiArmedBandit/Actuators/MultiArmedBanditActuator.cs @@ -0,0 +1,135 @@ +using System; +using System.Linq; +using droid.Runtime.GameObjects.StatusDisplayer.EventRecipients; +using droid.Runtime.Interfaces; +using droid.Runtime.Prototyping.Actuators; +using UnityEngine; +using UnityEngine.UI; +using Random = UnityEngine.Random; + +namespace droid.Samples.MultiArmedBandit.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "MultiArmedBandit" + + ActuatorComponentMenuPath._Postfix)] + public class MultiArmedBanditActuator : Actuator { + [SerializeField] Color _inactive_color = Color.yellow; + + /// + /// + /// + [SerializeField] + protected Material[] _Indicators; + + [SerializeField] int _last_index; + [SerializeField] Color _lose_color = Color.red; + + [SerializeField] protected float[] _Win_Amounts; + + [SerializeField] Color _win_color = Color.green; + + [SerializeField] protected float[] _Win_Likelihoods; + + [SerializeField] bool _won; + + /// + /// + public Single[] WinAmounts { get { return this._Win_Amounts; } set { this._Win_Amounts = value; } } + + /// + /// + public Int32 LastIndex { get { return this._last_index; } set { this._last_index = value; } } + + /// + /// + public Boolean Won { get { return this._won; } set { this._won = value; } } + + /// + /// + public Single[] WinLikelihoods { + get { return this._Win_Likelihoods; } + set { this._Win_Likelihoods = value; } + } + + /// + /// + /// + public override void Setup() { + var mvs = this.MotionSpace; + mvs.Min = 0; + mvs.Max = 2; + mvs.DecimalGranularity = 0; + this.MotionSpace = mvs; + if (this._Win_Likelihoods == null || this._Win_Likelihoods.Length == 0) { + this._Win_Likelihoods = new Single[this._Indicators.Length]; + for (var index = 0; index < this._Indicators.Length; index++) { + this._Win_Likelihoods[index] = 0.5f; + } + } + + if (this._Win_Amounts == null || this._Win_Amounts.Length == 0) { + this._Win_Amounts = new Single[this._Indicators.Length]; + for (var index = 0; index < this._Indicators.Length; index++) { + this._Win_Amounts[index] = 10f; + } + } + } + + public void UpdatePayoutArm1(Text amount) { this.UpdatePayoutArm(0, float.Parse(amount.text)); } + public void UpdatePayoutArm2(Text amount) { this.UpdatePayoutArm(1, float.Parse(amount.text)); } + public void UpdatePayoutArm3(Text amount) { this.UpdatePayoutArm(2, float.Parse(amount.text)); } + + public void GetPayoutArm1(DataPoller recipient) { recipient.PollData(this.GetPayoutArm(0)); } + public void GetPayoutArm2(DataPoller recipient) { recipient.PollData(this.GetPayoutArm(1)); } + public void GetPayoutArm3(DataPoller recipient) { recipient.PollData(this.GetPayoutArm(2)); } + + public void GetPctArm1(DataPoller recipient) { recipient.PollData(this.GetPctArm(0)); } + public void GetPctArm2(DataPoller recipient) { recipient.PollData(this.GetPctArm(1)); } + public void GetPctArm3(DataPoller recipient) { recipient.PollData(this.GetPctArm(2)); } + + public void UpdatePercentageArm1(Text amount) { this.UpdatePercentageArm(0, float.Parse(amount.text)); } + public void UpdatePercentageArm2(Text amount) { this.UpdatePercentageArm(1, float.Parse(amount.text)); } + public void UpdatePercentageArm3(Text amount) { this.UpdatePercentageArm(2, float.Parse(amount.text)); } + + void UpdatePayoutArm(int index, float amount) { this._Win_Amounts[index] = amount; } + + string GetPayoutArm(int index) { return this._Win_Amounts[index].ToString("F"); } + + string GetPctArm(int index) { return this._Win_Likelihoods[index].ToString("F"); } + + void UpdatePercentageArm(int index, float amount) { this._Win_Likelihoods[index] = amount; } + + /// + /// + /// + /// + protected override void InnerApplyMotion(IMotion motion) { + foreach (var indicator in this._Indicators) { + indicator.color = this._inactive_color; + } + + var index = (int)motion.Strength; + + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"MultiArmedBandit got index {index}"); + } + #endif + + this._last_index = index; + + var random_value = Random.Range(0f, 1f); + if (random_value < this._Win_Likelihoods[this._last_index]) { + this._Indicators[this._last_index].color = this._win_color; + this._won = true; + } else { + this._Indicators[this._last_index].color = this._lose_color; + this._won = false; + } + } + + public override string[] InnerMotionNames => this._Indicators.Select(m => this.Identifier).ToArray(); + } +} diff --git a/Samples/MultiArmedBandit/MultiArmedBanditMotor.cs.meta b/Samples/MultiArmedBandit/Actuators/MultiArmedBanditActuator.cs.meta similarity index 100% rename from Samples/MultiArmedBandit/MultiArmedBanditMotor.cs.meta rename to Samples/MultiArmedBandit/Actuators/MultiArmedBanditActuator.cs.meta diff --git a/Samples/MultiArmedBandit/Actuators/RestlessMultiArmedBanditActuator.cs b/Samples/MultiArmedBandit/Actuators/RestlessMultiArmedBanditActuator.cs new file mode 100644 index 000000000..55198f981 --- /dev/null +++ b/Samples/MultiArmedBandit/Actuators/RestlessMultiArmedBanditActuator.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections; +using droid.Runtime.Prototyping.Actuators; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace droid.Samples.MultiArmedBandit.Actuators { + /// + /// + /// + [AddComponentMenu(ActuatorComponentMenuPath._ComponentMenuPath + + "RestlessMultiArmedBandit" + + ActuatorComponentMenuPath._Postfix)] + public class RestlessMultiArmedBanditActuator : MultiArmedBanditActuator { + /// + /// + /// + public override void Setup() { + var mvs = this.MotionSpace; + mvs.Min = 0; + mvs.Max = this._Indicators.Length - 1; + this.MotionSpace = mvs; + + this.ReAssignValues(); + this.StartCoroutine(this.ExecuteAfterTime(2)); + } + + protected void ReAssignValues() { + for (var index = 0; index < this._Win_Likelihoods.Length; index++) { + this._Win_Likelihoods[index] = Random.Range(0.1f, 0.9f); + this._Win_Amounts[index] = Random.Range(0.1f, 0.9f); + } + + if (this._Win_Likelihoods == null || this._Win_Likelihoods.Length == 0) { + this._Win_Likelihoods = new Single[this._Indicators.Length]; + for (var index = 0; index < this._Indicators.Length; index++) { + this._Win_Likelihoods[index] = 0.5f; + } + } + + if (this._Win_Amounts == null || this._Win_Amounts.Length == 0) { + this._Win_Amounts = new Single[this._Indicators.Length]; + for (var index = 0; index < this._Indicators.Length; index++) { + this._Win_Amounts[index] = 10f; + } + } + } + + IEnumerator ExecuteAfterTime(float time) { + while (true) { + yield return new WaitForSeconds(time); + + this.ReAssignValues(); + } + } + } +} diff --git a/Samples/MultiArmedBandit/Actuators/RestlessMultiArmedBanditActuator.cs.meta b/Samples/MultiArmedBandit/Actuators/RestlessMultiArmedBanditActuator.cs.meta new file mode 100644 index 000000000..3dc239486 --- /dev/null +++ b/Samples/MultiArmedBandit/Actuators/RestlessMultiArmedBanditActuator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d58b11614d784a5ea4da047aadb42197 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 9ac6e392d128f40929350a662de676aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/ArmRight.prefab b/Samples/MultiArmedBandit/ArmRight.prefab deleted file mode 100644 index 497ad240d..000000000 --- a/Samples/MultiArmedBandit/ArmRight.prefab +++ /dev/null @@ -1,673 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 0} - m_RootGameObject: {fileID: 1778744838311600} - m_IsPrefabAsset: 1 ---- !u!1 &1099371028652892 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224650257927926310} - - component: {fileID: 222698790891264278} - - component: {fileID: 114202088366301622} - - component: {fileID: 114871921216616518} - m_Layer: 0 - m_Name: BeliefBarRight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1187722239322054 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224203619775937400} - - component: {fileID: 222810176558406212} - - component: {fileID: 114459941365535976} - - component: {fileID: 114078270753135082} - m_Layer: 0 - m_Name: BeliefTextRight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1305961033048870 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224813396840777178} - m_Layer: 0 - m_Name: Displayers - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1439251771707138 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224619401065742570} - - component: {fileID: 222959425200639528} - - component: {fileID: 114410939600049670} - - component: {fileID: 114638356156934590} - m_Layer: 0 - m_Name: ValueTextRight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1510193592015778 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224911143163519580} - - component: {fileID: 222518205752233356} - - component: {fileID: 114847711763113062} - - component: {fileID: 114142010206075190} - m_Layer: 0 - m_Name: ValueBarRight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1698925828775076 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224908010201914998} - - component: {fileID: 222214384887947564} - - component: {fileID: 114124118044431598} - - component: {fileID: 114388741516407742} - m_Layer: 0 - m_Name: CountTextMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1710489694317898 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224815019361619408} - m_Layer: 0 - m_Name: ValueDisplayerRight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1778744838311600 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224700568097968694} - m_Layer: 0 - m_Name: ArmRight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1844632326605182 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224773031444998254} - - component: {fileID: 222792942598794534} - - component: {fileID: 114882091551127374} - m_Layer: 0 - m_Name: Indicator - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1974081198828184 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224176431030412812} - m_Layer: 0 - m_Name: BeliefDisplayerRight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &114078270753135082 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1187722239322054} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 ---- !u!114 &114124118044431598 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1698925828775076} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} - m_FontSize: 20 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 66 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0 ---- !u!114 &114142010206075190 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1510193592015778} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _value: 0.336 ---- !u!114 &114202088366301622 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1099371028652892} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 21300000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - m_Type: 3 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 1 - m_FillAmount: 0.2 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114388741516407742 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1698925828775076} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 ---- !u!114 &114410939600049670 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1439251771707138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0.1923077 ---- !u!114 &114459941365535976 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1187722239322054} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0.2 ---- !u!114 &114638356156934590 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1439251771707138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 ---- !u!114 &114847711763113062 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1510193592015778} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 21300000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - m_Type: 3 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 1 - m_FillAmount: 0.19230768 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114871921216616518 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1099371028652892} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _value: 0.336 ---- !u!114 &114882091551127374 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1844632326605182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 2100000, guid: dab1db1368b6744ec954efc08a689113, type: 2} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!222 &222214384887947564 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1698925828775076} - m_CullTransparentMesh: 0 ---- !u!222 &222518205752233356 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1510193592015778} - m_CullTransparentMesh: 0 ---- !u!222 &222698790891264278 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1099371028652892} - m_CullTransparentMesh: 0 ---- !u!222 &222792942598794534 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1844632326605182} - m_CullTransparentMesh: 0 ---- !u!222 &222810176558406212 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1187722239322054} - m_CullTransparentMesh: 0 ---- !u!222 &222959425200639528 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1439251771707138} - m_CullTransparentMesh: 0 ---- !u!224 &224176431030412812 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1974081198828184} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224650257927926310} - - {fileID: 224203619775937400} - m_Father: {fileID: 224813396840777178} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 60} - m_Pivot: {x: 0.5, y: 0} ---- !u!224 &224203619775937400 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1187722239322054} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224176431030412812} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 22} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224619401065742570 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1439251771707138} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224815019361619408} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 22} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224650257927926310 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1099371028652892} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224176431030412812} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 60} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224700568097968694 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1778744838311600} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224773031444998254} - - {fileID: 224813396840777178} - - {fileID: 224908010201914998} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 300, y: 0} - m_SizeDelta: {x: 100, y: 300} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224773031444998254 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1844632326605182} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 224700568097968694} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224813396840777178 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1305961033048870} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224815019361619408} - - {fileID: 224176431030412812} - m_Father: {fileID: 224700568097968694} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224815019361619408 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1710489694317898} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224911143163519580} - - {fileID: 224619401065742570} - m_Father: {fileID: 224813396840777178} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 60} - m_Pivot: {x: 0.5, y: 1} ---- !u!224 &224908010201914998 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1698925828775076} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.9999954, y: 0.9999954, z: 0.9999954} - m_Children: [] - m_Father: {fileID: 224700568097968694} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -300.00012, y: -0.000015258789} - m_SizeDelta: {x: 100, y: 40} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224911143163519580 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1510193592015778} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224815019361619408} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 60} - m_Pivot: {x: 0.5, y: 0.5} diff --git a/Samples/MultiArmedBandit/Displayers.meta b/Samples/MultiArmedBandit/Displayers.meta new file mode 100644 index 000000000..45b6447a5 --- /dev/null +++ b/Samples/MultiArmedBandit/Displayers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8b625ab5b19d9699ab76ad33bb26d3f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/Displayers.prefab b/Samples/MultiArmedBandit/Displayers.prefab deleted file mode 100644 index d529a0205..000000000 --- a/Samples/MultiArmedBandit/Displayers.prefab +++ /dev/null @@ -1,569 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 0} - m_RootGameObject: {fileID: 1306904594304590} - m_IsPrefabAsset: 1 ---- !u!1 &1247594942759636 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224461135023927076} - - component: {fileID: 222532021748512434} - - component: {fileID: 114073670917320040} - - component: {fileID: 114540525651406706} - m_Layer: 0 - m_Name: ValueBarMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1306904594304590 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224255984113990750} - m_Layer: 0 - m_Name: Displayers - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1380061422114852 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224400406986486252} - - component: {fileID: 222647721120260878} - - component: {fileID: 114412126352879728} - - component: {fileID: 114476191495675034} - m_Layer: 0 - m_Name: BeliefBarMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1388701424054228 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224388045424496694} - - component: {fileID: 222293654638580732} - - component: {fileID: 114717800613675260} - - component: {fileID: 114508576442056390} - m_Layer: 0 - m_Name: CountTextMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1392557157429368 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224297758690406416} - m_Layer: 0 - m_Name: BeliefDisplayerMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1685958238231828 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224515220760352112} - m_Layer: 0 - m_Name: ValueDisplayerMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1808157719511378 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224664047206075702} - - component: {fileID: 222038714770066838} - - component: {fileID: 114345268607198822} - - component: {fileID: 114334249277451982} - m_Layer: 0 - m_Name: BeliefTextMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1837730243121884 -GameObject: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224655529991717630} - - component: {fileID: 222735570337225286} - - component: {fileID: 114686202283368876} - - component: {fileID: 114312675401615462} - m_Layer: 0 - m_Name: ValueTextMiddle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &114073670917320040 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1247594942759636} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 21300000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - m_Type: 3 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 1 - m_FillAmount: 0.46153846 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114312675401615462 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1837730243121884} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 ---- !u!114 &114334249277451982 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1808157719511378} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 ---- !u!114 &114345268607198822 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1808157719511378} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0.2 ---- !u!114 &114412126352879728 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1380061422114852} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 21300000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} - m_Type: 3 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 1 - m_FillAmount: 0.2 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114476191495675034 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1380061422114852} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _value: 0.336 ---- !u!114 &114508576442056390 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1388701424054228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 ---- !u!114 &114540525651406706 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1247594942759636} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} - m_Name: - m_EditorClassIdentifier: - _Custom_Name: - _Use_Custom_Name: 0 - _disables_children: 0 - _editor_reregistering: 1 - _debugging: 0 - _value: 0.336 ---- !u!114 &114686202283368876 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1837730243121884} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0.4615385 ---- !u!114 &114717800613675260 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1388701424054228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} - m_FontSize: 20 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 66 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0 ---- !u!222 &222038714770066838 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1808157719511378} - m_CullTransparentMesh: 0 ---- !u!222 &222293654638580732 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1388701424054228} - m_CullTransparentMesh: 0 ---- !u!222 &222532021748512434 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1247594942759636} - m_CullTransparentMesh: 0 ---- !u!222 &222647721120260878 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1380061422114852} - m_CullTransparentMesh: 0 ---- !u!222 &222735570337225286 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1837730243121884} - m_CullTransparentMesh: 0 ---- !u!224 &224255984113990750 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1306904594304590} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224515220760352112} - - {fileID: 224297758690406416} - - {fileID: 224388045424496694} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224297758690406416 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1392557157429368} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224400406986486252} - - {fileID: 224664047206075702} - m_Father: {fileID: 224255984113990750} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 60} - m_Pivot: {x: 0.5, y: 0} ---- !u!224 &224388045424496694 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1388701424054228} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224255984113990750} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 40} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224400406986486252 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1380061422114852} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224297758690406416} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 60} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224461135023927076 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1247594942759636} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224515220760352112} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 60} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224515220760352112 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1685958238231828} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224461135023927076} - - {fileID: 224655529991717630} - m_Father: {fileID: 224255984113990750} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 60} - m_Pivot: {x: 0.5, y: 1} ---- !u!224 &224655529991717630 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1837730243121884} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224515220760352112} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 22} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224664047206075702 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1808157719511378} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224297758690406416} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 22} - m_Pivot: {x: 0.5, y: 0.5} diff --git a/Samples/MultiArmedBandit/Displayers/TextBarPlotDisplayer.cs b/Samples/MultiArmedBandit/Displayers/TextBarPlotDisplayer.cs new file mode 100644 index 000000000..3ce16315b --- /dev/null +++ b/Samples/MultiArmedBandit/Displayers/TextBarPlotDisplayer.cs @@ -0,0 +1,71 @@ +using System; +using droid.Runtime.Prototyping.Displayers; +using droid.Runtime.Prototyping.Displayers.Canvas; +using droid.Runtime.Prototyping.Unobservables; +using UnityEngine; + +namespace droid.Samples.MultiArmedBandit.Displayers { + /// + /// + /// + [AddComponentMenu(DisplayerComponentMenuPath._ComponentMenuPath + + "TextBarPlot" + + DisplayerComponentMenuPath._Postfix)] + public class TextBarPlotDisplayer : Unobservable { + [SerializeField] CanvasBarDisplayer[] _canvas_bars = { }; + [SerializeField] CanvasTextDisplayer[] _canvas_text = { }; + + /// + /// + /// + public override String PrototypingTypeName { get { return "TextBarPlot"; } } + + /// + /// + /// + public override void PrototypingReset() { + var canvas_bar_displayers = this._canvas_bars; + if (canvas_bar_displayers != null) { + foreach (var bar in canvas_bar_displayers) { + bar.Display(0.5); + } + } + } + + void Update() { + #if NEODROID_DEBUG + if (this.Debugging) { + //this.Display(this._values); + } + #endif + } + + /// + /// + /// + public void Display(float[] values) { + #if NEODROID_DEBUG + if (this.Debugging) { + Debug.Log($"Displaying {values} at {this.Identifier}"); + } + #endif + + var canvas_bar_displayers = this._canvas_bars; + var canvas_text_displayers = this._canvas_text; + + if (canvas_bar_displayers != null) { + for (var i = 0; i < canvas_bar_displayers.Length; i++) { + if (i < values.Length) { + var bar = canvas_bar_displayers[i]; + bar?.Display(values[i]); + + if (canvas_text_displayers != null) { + var text = canvas_text_displayers[i]; + text?.Display(values[i]); + } + } + } + } + } + } +} diff --git a/Samples/MultiArmedBandit/TextBarPlotDisplayer.cs.meta b/Samples/MultiArmedBandit/Displayers/TextBarPlotDisplayer.cs.meta similarity index 100% rename from Samples/MultiArmedBandit/TextBarPlotDisplayer.cs.meta rename to Samples/MultiArmedBandit/Displayers/TextBarPlotDisplayer.cs.meta diff --git a/Samples/MultiArmedBandit/Evaluation.meta b/Samples/MultiArmedBandit/Evaluation.meta new file mode 100644 index 000000000..95ce8cde9 --- /dev/null +++ b/Samples/MultiArmedBandit/Evaluation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bc53f0478582d53339f70a99156b7f62 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/Evaluation/MultiArmedBanditObjective.cs b/Samples/MultiArmedBandit/Evaluation/MultiArmedBanditObjective.cs new file mode 100644 index 000000000..55c76c2a8 --- /dev/null +++ b/Samples/MultiArmedBandit/Evaluation/MultiArmedBanditObjective.cs @@ -0,0 +1,70 @@ +using System; +using System.Linq; +using droid.Runtime.Prototyping.ObjectiveFunctions; +using droid.Samples.MultiArmedBandit.Actuators; +using droid.Samples.MultiArmedBandit.Displayers; +using UnityEngine; + +namespace droid.Samples.MultiArmedBandit.Evaluation { + /// + /// + /// + [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath + + "MultiArmedBandit" + + EvaluationComponentMenuPath._Postfix)] + public class MultiArmedBanditObjective : EpisodicObjective { + [SerializeField] MultiArmedBanditActuator _arms; + [SerializeField] float[] _normalised_values; + + [SerializeField] TextBarPlotDisplayer _text_bar_plot_displayer = null; + + /// + /// + /// + public override void RemotePostSetup() { + if (this._arms == null) { + this._arms = FindObjectOfType(); + } + + this.ComputeNormalisedValues(); + } + + void ComputeNormalisedValues() { + /*var sum = this._arms.WinAmounts.Sum(); +this._normalised_values = new Single[this._arms.WinAmounts.Length]; +for (var i = 0; i < this._arms.WinAmounts.Length; i++) { + this._normalised_values[i] = this._arms.WinAmounts[i] / sum; +}*/ + + var values = this._arms.WinAmounts.Zip(this._arms.WinLikelihoods, (f, f1) => f * f1).ToArray(); + var values_sum = values.Sum(); + + this._normalised_values = new Single[values.Length]; + for (var i = 0; i < values.Length; i++) { + this._normalised_values[i] = values[i] / values_sum; + } + + this._text_bar_plot_displayer.Display(this._normalised_values); + } + + /// + /// + /// + public override void InternalReset() { this.ComputeNormalisedValues(); } + + void Update() { this.ComputeNormalisedValues(); } + + /// + /// + /// + /// + /// + public override Single InternalEvaluate() { + if (this._arms.Won) { + return this._arms.WinAmounts[this._arms.LastIndex]; + } + + return 0; + } + } +} diff --git a/Samples/MultiArmedBandit/MultiArmedBanditEvaluation.cs.meta b/Samples/MultiArmedBandit/Evaluation/MultiArmedBanditObjective.cs.meta similarity index 100% rename from Samples/MultiArmedBandit/MultiArmedBanditEvaluation.cs.meta rename to Samples/MultiArmedBandit/Evaluation/MultiArmedBanditObjective.cs.meta diff --git a/Samples/MultiArmedBandit/Materials/BanditUnlit 1.mat b/Samples/MultiArmedBandit/Materials/BanditUnlit 1.mat index e018b8150..ddeb2c63a 100644 --- a/Samples/MultiArmedBandit/Materials/BanditUnlit 1.mat +++ b/Samples/MultiArmedBandit/Materials/BanditUnlit 1.mat @@ -73,5 +73,5 @@ Material: - _UVSec: 0 - _ZWrite: 1 m_Colors: - - _Color: {r: 1, g: 1, b: 0, a: 1} + - _Color: {r: 1, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Samples/MultiArmedBandit/Materials/BanditUnlit.mat b/Samples/MultiArmedBandit/Materials/BanditUnlit.mat index ea91b5aca..d49ce3f75 100644 --- a/Samples/MultiArmedBandit/Materials/BanditUnlit.mat +++ b/Samples/MultiArmedBandit/Materials/BanditUnlit.mat @@ -73,5 +73,5 @@ Material: - _UVSec: 0 - _ZWrite: 1 m_Colors: - - _Color: {r: 0, g: 1, b: 0, a: 1} + - _Color: {r: 1, g: 1, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Samples/MultiArmedBandit/Materials/UnlitDarkGray.mat b/Samples/MultiArmedBandit/Materials/UnlitDarkGray.mat new file mode 100644 index 000000000..584041c5b --- /dev/null +++ b/Samples/MultiArmedBandit/Materials/UnlitDarkGray.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UnlitDarkGray + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.20754719, g: 0.20754719, b: 0.20754719, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Samples/MultiArmedBandit/Materials/UnlitDarkGray.mat.meta b/Samples/MultiArmedBandit/Materials/UnlitDarkGray.mat.meta new file mode 100644 index 000000000..13435b769 --- /dev/null +++ b/Samples/MultiArmedBandit/Materials/UnlitDarkGray.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be262be74585691dd913b828943596aa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/MultiArmedBanditEvaluation.cs b/Samples/MultiArmedBandit/MultiArmedBanditEvaluation.cs deleted file mode 100644 index d6cef00da..000000000 --- a/Samples/MultiArmedBandit/MultiArmedBanditEvaluation.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Linq; -using Neodroid.Runtime.Prototyping.Evaluation; -using UnityEngine; - -namespace Neodroid.Samples.MultiArmedBandit { - /// - /// - /// - [AddComponentMenu( - EvaluationComponentMenuPath._ComponentMenuPath + "PoseDeviance" + EvaluationComponentMenuPath._Postfix)] - public class MultiArmedBanditEvaluation : ObjectiveFunction { - [SerializeField] float[] _normalised_values; - [SerializeField] MultiArmedBanditMotor _arms; - - [SerializeField] TextBarPlotDisplayer _text_bar_plot_displayer; - - /// - /// - /// - protected override void PostSetup() { - if (this._arms == null) { - this._arms = FindObjectOfType(); - } - - /*var sum = this._arms.WinAmounts.Sum(); - this._normalised_values = new Single[this._arms.WinAmounts.Length]; - for (var i = 0; i < this._arms.WinAmounts.Length; i++) { - this._normalised_values[i] = this._arms.WinAmounts[i] / sum; - }*/ - - var values = this._arms.WinAmounts.Zip(this._arms.WinLikelihoods, (f, f1) => f * f1).ToArray(); - var values_sum = values.Sum(); - - this._normalised_values = new Single[values.Length]; - for (var i = 0; i < values.Length; i++) { - this._normalised_values[i] = values[i] / values_sum; - } - - this._text_bar_plot_displayer.Display(this._normalised_values); - } - - /// - /// - /// - public override void InternalReset() { this._text_bar_plot_displayer.Display(this._normalised_values); } - - /// - /// - /// - /// - /// - public override Single InternalEvaluate() { - if (this._arms.Won) { - return this._arms.WinAmounts[this._arms.LastIndex]; - } - - return 0; - } - } -} \ No newline at end of file diff --git a/Samples/MultiArmedBandit/MultiArmedBanditMotor.cs b/Samples/MultiArmedBandit/MultiArmedBanditMotor.cs deleted file mode 100644 index 5fd2f8339..000000000 --- a/Samples/MultiArmedBandit/MultiArmedBanditMotor.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System; -using Neodroid.Runtime.Interfaces; -using Neodroid.Runtime.Prototyping.Motors; -using UnityEngine; -using Random = UnityEngine.Random; - -namespace Neodroid.Samples.MultiArmedBandit { - /// - /// - /// - [AddComponentMenu( - MotorComponentMenuPath._ComponentMenuPath + "MultiArmedBanditMotor" + MotorComponentMenuPath._Postfix)] - public class MultiArmedBanditMotor : Motor { - [SerializeField] Material[] _indicators; - [SerializeField] Color _inactive_color; - [SerializeField] Color _win_color = Color.green; - [SerializeField] Color _lose_color = Color.red; - [SerializeField] float[] _win_amounts; - [SerializeField] float[] _win_likelihoods; - [SerializeField] int _last_index; - [SerializeField] bool _won; - - /// - /// - /// - public Single[] WinAmounts { - get { return this._win_amounts; } - set { this._win_amounts = value; } - } - - /// - /// - /// - public Int32 LastIndex { - get { return this._last_index; } - set { this._last_index = value; } - } - - /// - /// - /// - public Boolean Won { - get { return this._won; } - set { this._won = value; } - } - - /// - /// - /// - public Single[] WinLikelihoods { - get { return this._win_likelihoods; } - set { this._win_likelihoods = value; } - } - - /// - /// - /// - protected override void Setup() { - var mvs = this.MotionValueSpace; - mvs._Min_Value = 0; - mvs._Max_Value = this._indicators.Length - 1; - this.MotionValueSpace = mvs; - if (this._win_likelihoods == null || this._win_likelihoods.Length == 0) { - this._win_likelihoods = new Single[this._indicators.Length]; - for (var index = 0; index < this._indicators.Length; index++) { - this._win_likelihoods[index] = 0.5f; - } - } - - if (this._win_amounts == null || this._win_amounts.Length == 0) { - this._win_amounts = new Single[this._indicators.Length]; - for (var index = 0; index < this._indicators.Length; index++) { - this._win_amounts[index] = 10f; - } - } - } - - /// - /// - /// - /// - protected override void InnerApplyMotion(IMotorMotion motion) { - foreach (var indicator in this._indicators) { - indicator.color = this._inactive_color; - } - - var index = (int)motion.Strength; - - #if NEODROID_DEBUG - if (this.Debugging) { - Debug.Log($"MultiArmedBandit got index {index}"); - } - #endif - - this._last_index = index; - - var random_value = Random.Range(0f, 1f); - if (random_value <= this._win_likelihoods[this._last_index]) { - this._indicators[this._last_index].color = this._win_color; - this._won = true; - } else { - this._indicators[this._last_index].color = this._lose_color; - this._won = false; - } - } - } -} \ No newline at end of file diff --git a/Samples/MultiArmedBandit/PlayerReaction.meta b/Samples/MultiArmedBandit/PlayerReaction.meta new file mode 100644 index 000000000..5bc0d02ae --- /dev/null +++ b/Samples/MultiArmedBandit/PlayerReaction.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e97faa37f3fe2a2e8e0daee26fb7feb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/MultiArmedBanditPlayerMotions.asset b/Samples/MultiArmedBandit/PlayerReaction/MultiArmedBanditPlayerMotions.asset similarity index 76% rename from Samples/MultiArmedBandit/MultiArmedBanditPlayerMotions.asset rename to Samples/MultiArmedBandit/PlayerReaction/MultiArmedBanditPlayerMotions.asset index 21a479f4d..d1bda34ad 100644 --- a/Samples/MultiArmedBandit/MultiArmedBanditPlayerMotions.asset +++ b/Samples/MultiArmedBandit/PlayerReaction/MultiArmedBanditPlayerMotions.asset @@ -4,7 +4,8 @@ MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 @@ -14,13 +15,13 @@ MonoBehaviour: _Motions: - _Key: 97 _Actor: MultiArmedBanditKillableActor - _Motor: MultiArmedBanditMultiArmedBanditMotor + _Actuator: _Strength: 0 - _Key: 115 _Actor: MultiArmedBanditKillableActor - _Motor: MultiArmedBanditMultiArmedBanditMotor + _Actuator: _Strength: 1 - _Key: 100 _Actor: MultiArmedBanditKillableActor - _Motor: MultiArmedBanditMultiArmedBanditMotor + _Actuator: _Strength: 2 diff --git a/Samples/MultiArmedBandit/MultiArmedBanditPlayerMotions.asset.meta b/Samples/MultiArmedBandit/PlayerReaction/MultiArmedBanditPlayerMotions.asset.meta similarity index 100% rename from Samples/MultiArmedBandit/MultiArmedBanditPlayerMotions.asset.meta rename to Samples/MultiArmedBandit/PlayerReaction/MultiArmedBanditPlayerMotions.asset.meta diff --git a/Samples/MultiArmedBandit/Prefabs.meta b/Samples/MultiArmedBandit/Prefabs.meta new file mode 100644 index 000000000..e5cc47a05 --- /dev/null +++ b/Samples/MultiArmedBandit/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a185b3c3af9d3e15843fa5d7f3ef5c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/Prefabs/ArmRight.prefab b/Samples/MultiArmedBandit/Prefabs/ArmRight.prefab new file mode 100644 index 000000000..a08879bb3 --- /dev/null +++ b/Samples/MultiArmedBandit/Prefabs/ArmRight.prefab @@ -0,0 +1,1097 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1099371028652892 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224650257927926310} + - component: {fileID: 222698790891264278} + - component: {fileID: 114202088366301622} + - component: {fileID: 114871921216616518} + m_Layer: 0 + m_Name: BeliefBarRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224650257927926310 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099371028652892} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224176431030412812} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222698790891264278 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099371028652892} + m_CullTransparentMesh: 0 +--- !u!114 &114202088366301622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099371028652892} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 0.2 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114871921216616518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099371028652892} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _RetainLastPlot: 1 + _value: 0.336 +--- !u!1 &1187722239322054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224203619775937400} + - component: {fileID: 222810176558406212} + - component: {fileID: 114459941365535976} + - component: {fileID: 114078270753135082} + m_Layer: 0 + m_Name: BeliefTextRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224203619775937400 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1187722239322054} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224176431030412812} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222810176558406212 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1187722239322054} + m_CullTransparentMesh: 0 +--- !u!114 &114459941365535976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1187722239322054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0.2 +--- !u!114 &114078270753135082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1187722239322054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _RetainLastPlot: 1 +--- !u!1 &1305961033048870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224813396840777178} + m_Layer: 0 + m_Name: Displayers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224813396840777178 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305961033048870} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224815019361619408} + - {fileID: 224176431030412812} + - {fileID: 224908010201914998} + m_Father: {fileID: 224700568097968694} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1439251771707138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224619401065742570} + - component: {fileID: 222959425200639528} + - component: {fileID: 114410939600049670} + - component: {fileID: 114638356156934590} + m_Layer: 0 + m_Name: ValueTextRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224619401065742570 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439251771707138} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224815019361619408} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222959425200639528 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439251771707138} + m_CullTransparentMesh: 0 +--- !u!114 &114410939600049670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439251771707138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0.1923077 +--- !u!114 &114638356156934590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439251771707138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _RetainLastPlot: 1 +--- !u!1 &1510193592015778 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224911143163519580} + - component: {fileID: 222518205752233356} + - component: {fileID: 114847711763113062} + - component: {fileID: 114142010206075190} + m_Layer: 0 + m_Name: ValueBarRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224911143163519580 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510193592015778} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224815019361619408} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222518205752233356 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510193592015778} + m_CullTransparentMesh: 0 +--- !u!114 &114847711763113062 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510193592015778} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 0.19230768 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114142010206075190 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510193592015778} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _RetainLastPlot: 1 + _value: 0.336 +--- !u!1 &1698925828775076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224908010201914998} + - component: {fileID: 222214384887947564} + - component: {fileID: 114124118044431598} + - component: {fileID: 114388741516407742} + m_Layer: 0 + m_Name: CountTextMiddle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224908010201914998 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1698925828775076} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224813396840777178} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -300.00012, y: -0.000015258789} + m_SizeDelta: {x: 100, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222214384887947564 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1698925828775076} + m_CullTransparentMesh: 0 +--- !u!114 &114124118044431598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1698925828775076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 66 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &114388741516407742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1698925828775076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _RetainLastPlot: 1 +--- !u!1 &1710489694317898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224815019361619408} + m_Layer: 0 + m_Name: ValueDisplayerRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224815019361619408 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1710489694317898} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224911143163519580} + - {fileID: 224619401065742570} + - {fileID: 5261152204455275431} + m_Father: {fileID: 224813396840777178} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 60} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &1778744838311600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224700568097968694} + m_Layer: 0 + m_Name: ArmRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224700568097968694 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778744838311600} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8690711581452377237} + - {fileID: 224773031444998254} + - {fileID: 224813396840777178} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 300, y: 0} + m_SizeDelta: {x: 100, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1844632326605182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224773031444998254} + - component: {fileID: 222792942598794534} + - component: {fileID: 114882091551127374} + m_Layer: 0 + m_Name: Indicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224773031444998254 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844632326605182} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 224700568097968694} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222792942598794534 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844632326605182} + m_CullTransparentMesh: 0 +--- !u!114 &114882091551127374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844632326605182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: dab1db1368b6744ec954efc08a689113, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!1 &1974081198828184 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224176431030412812} + m_Layer: 0 + m_Name: BeliefDisplayerRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224176431030412812 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1974081198828184} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224650257927926310} + - {fileID: 224203619775937400} + - {fileID: 2962560233566135085} + m_Father: {fileID: 224813396840777178} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 60} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &711735333675564990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2962560233566135085} + - component: {fileID: 484613378196963498} + - component: {fileID: 292333162119817681} + - component: {fileID: 526642749843407577} + m_Layer: 0 + m_Name: BeliefInfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2962560233566135085 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711735333675564990} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224176431030412812} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -20} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &484613378196963498 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711735333675564990} + m_CullTransparentMesh: 0 +--- !u!114 &292333162119817681 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711735333675564990} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: (Belief) +--- !u!114 &526642749843407577 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711735333675564990} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _RetainLastPlot: 1 +--- !u!1 &4759770564154517658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5261152204455275431} + - component: {fileID: 3296015609702706990} + - component: {fileID: 3843873691197011742} + - component: {fileID: 7412836036939558259} + m_Layer: 0 + m_Name: ValueInfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5261152204455275431 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4759770564154517658} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224815019361619408} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -20} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3296015609702706990 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4759770564154517658} + m_CullTransparentMesh: 0 +--- !u!114 &3843873691197011742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4759770564154517658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: (True Value) +--- !u!114 &7412836036939558259 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4759770564154517658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _RetainLastPlot: 1 +--- !u!1 &4772556775176981757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8690711581452377237} + - component: {fileID: 5749648641296129753} + - component: {fileID: 5412690713190314820} + m_Layer: 0 + m_Name: Frame + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8690711581452377237 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4772556775176981757} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1169601040856925098} + m_Father: {fileID: 224700568097968694} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 400} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5749648641296129753 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4772556775176981757} + m_CullTransparentMesh: 0 +--- !u!114 &5412690713190314820 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4772556775176981757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: be262be74585691dd913b828943596aa, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!1 &5329693252784782102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1169601040856925098} + - component: {fileID: 6215989643215024304} + - component: {fileID: 6424472762039561836} + - component: {fileID: 1841870067092571040} + m_Layer: 0 + m_Name: ArmNumber + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1169601040856925098 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5329693252784782102} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8690711581452377237} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 30, y: -20} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6215989643215024304 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5329693252784782102} + m_CullTransparentMesh: 0 +--- !u!114 &6424472762039561836 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5329693252784782102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: c9f6d0e7bc8541498c9a4799ba184ede, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Arm #3' +--- !u!114 &1841870067092571040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5329693252784782102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_GeneratorAsset: {fileID: 0} + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _RetainLastPlot: 1 diff --git a/Samples/MultiArmedBandit/ArmRight.prefab.meta b/Samples/MultiArmedBandit/Prefabs/ArmRight.prefab.meta similarity index 100% rename from Samples/MultiArmedBandit/ArmRight.prefab.meta rename to Samples/MultiArmedBandit/Prefabs/ArmRight.prefab.meta diff --git a/Samples/MultiArmedBandit/Prefabs/Displayers.prefab b/Samples/MultiArmedBandit/Prefabs/Displayers.prefab new file mode 100644 index 000000000..105995023 --- /dev/null +++ b/Samples/MultiArmedBandit/Prefabs/Displayers.prefab @@ -0,0 +1,1564 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1247594942759636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224461135023927076} + - component: {fileID: 222532021748512434} + - component: {fileID: 114073670917320040} + - component: {fileID: 114540525651406706} + m_Layer: 0 + m_Name: ValueBarLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224461135023927076 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247594942759636} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224515220760352112} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222532021748512434 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247594942759636} + m_CullTransparentMesh: 0 +--- !u!114 &114073670917320040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247594942759636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 0.34615386 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114540525651406706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247594942759636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _RetainLastPlot: 1 + clean_all_children: 1 + clean_before_every_plot: 1 + _PlotRandomSeries: 0 + always_random_sample_new: 1 + _value: 0.336 +--- !u!1 &1306904594304590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224255984113990750} + m_Layer: 0 + m_Name: Displayers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224255984113990750 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306904594304590} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224515220760352112} + - {fileID: 224297758690406416} + - {fileID: 224388045424496694} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1380061422114852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224400406986486252} + - component: {fileID: 222647721120260878} + - component: {fileID: 114412126352879728} + - component: {fileID: 114476191495675034} + m_Layer: 0 + m_Name: BeliefBarLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224400406986486252 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380061422114852} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224297758690406416} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222647721120260878 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380061422114852} + m_CullTransparentMesh: 0 +--- !u!114 &114412126352879728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380061422114852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: f003877df8db542b0aeb0d3e8ea5b2ff, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 0.2 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114476191495675034 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380061422114852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _RetainLastPlot: 1 + clean_all_children: 1 + clean_before_every_plot: 1 + _PlotRandomSeries: 0 + always_random_sample_new: 1 + _value: 0.336 +--- !u!1 &1388701424054228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224388045424496694} + - component: {fileID: 222293654638580732} + - component: {fileID: 114717800613675260} + - component: {fileID: 114508576442056390} + m_Layer: 0 + m_Name: CountTextLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224388045424496694 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1388701424054228} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224255984113990750} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222293654638580732 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1388701424054228} + m_CullTransparentMesh: 0 +--- !u!114 &114717800613675260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1388701424054228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 66 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &114508576442056390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1388701424054228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _RetainLastPlot: 1 + clean_all_children: 1 + clean_before_every_plot: 1 + _PlotRandomSeries: 0 + always_random_sample_new: 1 +--- !u!1 &1392557157429368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224297758690406416} + m_Layer: 0 + m_Name: BeliefDisplayerLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224297758690406416 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392557157429368} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224400406986486252} + - {fileID: 224664047206075702} + - {fileID: 2894065331053901884} + m_Father: {fileID: 224255984113990750} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 60} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &1685958238231828 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224515220760352112} + m_Layer: 0 + m_Name: ValueDisplayerLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224515220760352112 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1685958238231828} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224461135023927076} + - {fileID: 224655529991717630} + - {fileID: 8750747978390705542} + - {fileID: 5539744176458420111} + - {fileID: 3895105484829524290} + m_Father: {fileID: 224255984113990750} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 60} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &1808157719511378 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224664047206075702} + - component: {fileID: 222038714770066838} + - component: {fileID: 114345268607198822} + - component: {fileID: 114334249277451982} + m_Layer: 0 + m_Name: BeliefTextLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224664047206075702 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808157719511378} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224297758690406416} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222038714770066838 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808157719511378} + m_CullTransparentMesh: 0 +--- !u!114 &114345268607198822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808157719511378} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0.2 +--- !u!114 &114334249277451982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808157719511378} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _RetainLastPlot: 1 + clean_all_children: 1 + clean_before_every_plot: 1 + _PlotRandomSeries: 0 + always_random_sample_new: 1 +--- !u!1 &1837730243121884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224655529991717630} + - component: {fileID: 222735570337225286} + - component: {fileID: 114686202283368876} + - component: {fileID: 114312675401615462} + m_Layer: 0 + m_Name: ValueTextLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224655529991717630 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837730243121884} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224515220760352112} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222735570337225286 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837730243121884} + m_CullTransparentMesh: 0 +--- !u!114 &114686202283368876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837730243121884} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0.3461539 +--- !u!114 &114312675401615462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837730243121884} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _unregister_at_disable: 0 + _RetainLastPlot: 1 + clean_all_children: 1 + clean_before_every_plot: 1 + _PlotRandomSeries: 0 + always_random_sample_new: 1 +--- !u!1 &41615451346243290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5924731566060419735} + - component: {fileID: 2186207436142275290} + - component: {fileID: 1207002837450417570} + m_Layer: 0 + m_Name: InfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5924731566060419735 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 41615451346243290} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000023, y: 1.0000023, z: 1.0000023} + m_Children: [] + m_Father: {fileID: 3895105484829524290} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -2} + m_SizeDelta: {x: 20, y: 17} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &2186207436142275290 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 41615451346243290} + m_CullTransparentMesh: 0 +--- !u!114 &1207002837450417570 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 41615451346243290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Pct. +--- !u!1 &1261152611773233167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8290732443787956373} + - component: {fileID: 3080594643108307222} + - component: {fileID: 1166913350078022185} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8290732443787956373 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261152611773233167} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3895105484829524290} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3080594643108307222 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261152611773233167} + m_CullTransparentMesh: 0 +--- !u!114 &1166913350078022185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1261152611773233167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0.30 +--- !u!1 &1548945917186833581 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1192242973803111599} + - component: {fileID: 1860430834982668159} + - component: {fileID: 396495150450796094} + m_Layer: 0 + m_Name: InfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1192242973803111599 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548945917186833581} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000023, y: 1.0000023, z: 1.0000023} + m_Children: [] + m_Father: {fileID: 5539744176458420111} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -2} + m_SizeDelta: {x: 20, y: 17} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &1860430834982668159 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548945917186833581} + m_CullTransparentMesh: 0 +--- !u!114 &396495150450796094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548945917186833581} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "Amt.\x13" +--- !u!1 &4517294610078232138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8750747978390705542} + - component: {fileID: 8738442209391841848} + - component: {fileID: 6606032916879324966} + m_Layer: 0 + m_Name: ValueInfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8750747978390705542 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4517294610078232138} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224515220760352112} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -20} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8738442209391841848 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4517294610078232138} + m_CullTransparentMesh: 0 +--- !u!114 &6606032916879324966 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4517294610078232138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: (True Value) +--- !u!1 &5219660758309126232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5539744176458420111} + - component: {fileID: 9196775735389421666} + - component: {fileID: 5047216924494583284} + - component: {fileID: 4833091182253759554} + m_Layer: 0 + m_Name: PayoutField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5539744176458420111 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5219660758309126232} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 62418543820054976} + - {fileID: 8905335076508065378} + - {fileID: 1192242973803111599} + m_Father: {fileID: 224515220760352112} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: 50, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9196775735389421666 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5219660758309126232} + m_CullTransparentMesh: 0 +--- !u!114 &5047216924494583284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5219660758309126232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &4833091182253759554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5219660758309126232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5047216924494583284} + m_TextComponent: {fileID: 7049690576661757868} + m_Placeholder: {fileID: 3118611800303462625} + m_ContentType: 3 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 2 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 2 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: UpdatePayoutArm1 + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 7049690576661757868} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Text, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 1 + m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: 3.00 + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!1 &5711354009591938013 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5981151901386335542} + - component: {fileID: 2603845603173680269} + - component: {fileID: 1906768660940031187} + m_Layer: 0 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5981151901386335542 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5711354009591938013} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3895105484829524290} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2603845603173680269 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5711354009591938013} + m_CullTransparentMesh: 0 +--- !u!114 &1906768660940031187 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5711354009591938013} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!1 &5859605189558696308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 62418543820054976} + - component: {fileID: 7043523034748956283} + - component: {fileID: 3118611800303462625} + m_Layer: 0 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &62418543820054976 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5859605189558696308} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5539744176458420111} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7043523034748956283 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5859605189558696308} + m_CullTransparentMesh: 0 +--- !u!114 &3118611800303462625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5859605189558696308} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!1 &6392910503810817697 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8905335076508065378} + - component: {fileID: 5208126602819424498} + - component: {fileID: 7049690576661757868} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8905335076508065378 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392910503810817697} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5539744176458420111} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5208126602819424498 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392910503810817697} + m_CullTransparentMesh: 0 +--- !u!114 &7049690576661757868 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6392910503810817697} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 3.00 +--- !u!1 &7153128047365391551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3895105484829524290} + - component: {fileID: 7664735205323849991} + - component: {fileID: 974345196145404840} + - component: {fileID: 3925648317117628905} + m_Layer: 0 + m_Name: PercentageField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3895105484829524290 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7153128047365391551} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5981151901386335542} + - {fileID: 8290732443787956373} + - {fileID: 5924731566060419735} + m_Father: {fileID: 224515220760352112} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: 50, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7664735205323849991 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7153128047365391551} + m_CullTransparentMesh: 0 +--- !u!114 &974345196145404840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7153128047365391551} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &3925648317117628905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7153128047365391551} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 974345196145404840} + m_TextComponent: {fileID: 1166913350078022185} + m_Placeholder: {fileID: 1906768660940031187} + m_ContentType: 3 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 2 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 2 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: UpdatePercentageArm1 + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 1166913350078022185} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Text, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 1 + m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: 0.30 + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!1 &7630233037765909144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2894065331053901884} + - component: {fileID: 564112541122413414} + - component: {fileID: 7851676633368456118} + m_Layer: 0 + m_Name: BeliefInfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2894065331053901884 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7630233037765909144} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224297758690406416} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -20} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &564112541122413414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7630233037765909144} + m_CullTransparentMesh: 0 +--- !u!114 &7851676633368456118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7630233037765909144} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: (Belief) diff --git a/Samples/MultiArmedBandit/Displayers.prefab.meta b/Samples/MultiArmedBandit/Prefabs/Displayers.prefab.meta similarity index 100% rename from Samples/MultiArmedBandit/Displayers.prefab.meta rename to Samples/MultiArmedBandit/Prefabs/Displayers.prefab.meta diff --git a/Samples/MultiArmedBandit/Scenes.meta b/Samples/MultiArmedBandit/Scenes.meta new file mode 100644 index 000000000..3667980db --- /dev/null +++ b/Samples/MultiArmedBandit/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67557e6b84e19037a89272a023f51f72 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/Scenes/MultiArmedBandit.unity b/Samples/MultiArmedBandit/Scenes/MultiArmedBandit.unity new file mode 100644 index 000000000..300b177e8 --- /dev/null +++ b/Samples/MultiArmedBandit/Scenes/MultiArmedBandit.unity @@ -0,0 +1,3224 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!114 &45355145 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114334249277451982, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &88118462 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224815019361619408, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} +--- !u!114 &149719887 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114638356156934590, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &307557403 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 307557404} + - component: {fileID: 307557406} + - component: {fileID: 307557405} + m_Layer: 0 + m_Name: InfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &307557404 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 307557403} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000023, y: 1.0000023, z: 1.0000023} + m_Children: [] + m_Father: {fileID: 1018438113} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -2} + m_SizeDelta: {x: 20, y: 17} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &307557405 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 307557403} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Pct. +--- !u!222 &307557406 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 307557403} + m_CullTransparentMesh: 0 +--- !u!114 &318632412 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114142010206075190, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &456721931 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 456721932} + - component: {fileID: 456721934} + - component: {fileID: 456721933} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &456721932 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 456721931} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1018438113} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &456721933 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 456721931} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0.10 +--- !u!222 &456721934 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 456721931} + m_CullTransparentMesh: 0 +--- !u!1 &558790915 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 558790916} + m_Layer: 0 + m_Name: ArmLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &558790916 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 558790915} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1780912995} + - {fileID: 578315296} + m_Father: {fileID: 898419344} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -220, y: 0} + m_SizeDelta: {x: 100, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &578315295 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 558790916} + m_Modifications: + - target: {fileID: 1306904594304590, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: Displayers + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 898419346} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_ContentType + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_KeyboardType + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_CharacterValidation + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 898419346} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} +--- !u!224 &578315296 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} +--- !u!114 &578315297 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114312675401615462, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &578315298 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114540525651406706, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &578315299 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114334249277451982, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &578315300 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114476191495675034, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &814446580 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1341081093} + m_Modifications: + - target: {fileID: 1306904594304590, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: Displayers + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 898419346} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdatePayoutArm2 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.UI.Text, UnityEngine.UI + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgument + value: + objectReference: {fileID: 814446584} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 898419346} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdatePayoutArm2 + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.UI.Text, UnityEngine.UI + objectReference: {fileID: 0} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgument + value: + objectReference: {fileID: 814446584} + - target: {fileID: 4833091182253759554, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Text + value: 2.00 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 898419346} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdatePercentageArm2 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.UI.Text, UnityEngine.UI + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgument + value: + objectReference: {fileID: 814446586} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 898419346} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdatePercentageArm2 + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.UI.Text, UnityEngine.UI + objectReference: {fileID: 0} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_OnEndEdit.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgument + value: + objectReference: {fileID: 814446586} + - target: {fileID: 3925648317117628905, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Text + value: 0.60 + objectReference: {fileID: 0} + - target: {fileID: 1166913350078022185, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Text + value: 0.60 + objectReference: {fileID: 0} + - target: {fileID: 1166913350078022185, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 7049690576661757868, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Text + value: 2.00 + objectReference: {fileID: 0} + - target: {fileID: 7049690576661757868, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114717800613675260, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114345268607198822, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114686202283368876, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 6606032916879324966, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 7851676633368456118, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 1207002837450417570, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 396495150450796094, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 1906768660940031187, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 3118611800303462625, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 1247594942759636, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: ValueBarMiddle + objectReference: {fileID: 0} + - target: {fileID: 1837730243121884, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: ValueTextMiddle + objectReference: {fileID: 0} + - target: {fileID: 1380061422114852, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: BeliefBarMiddle + objectReference: {fileID: 0} + - target: {fileID: 1685958238231828, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: ValueDisplayerMiddle + objectReference: {fileID: 0} + - target: {fileID: 1392557157429368, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: BeliefDisplayerMiddle + objectReference: {fileID: 0} + - target: {fileID: 1808157719511378, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: BeliefTextMiddle + objectReference: {fileID: 0} + - target: {fileID: 1388701424054228, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: CountTextMiddle + objectReference: {fileID: 0} + - target: {fileID: 4517294610078232138, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Name + value: ValueInfoMiddle + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} +--- !u!224 &814446581 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} +--- !u!114 &814446582 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114312675401615462, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &814446583 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114540525651406706, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &814446584 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7049690576661757868, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &814446585 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114476191495675034, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &814446586 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1166913350078022185, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &865889675 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + m_PrefabInstance: {fileID: 1641151717} + m_PrefabAsset: {fileID: 0} +--- !u!1 &898419343 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 898419344} + - component: {fileID: 898419346} + m_Layer: 0 + m_Name: MultiArmedBandit + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &898419344 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 898419343} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 558790916} + - {fileID: 1341081093} + - {fileID: 1766601507} + m_Father: {fileID: 1381552603} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &898419346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 898419343} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 18da66e1f21b4429faf09c7a18e49c0a, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _unregister_at_disable: 0 + _motion_value_space: + _space: + _min_: 0 + _max_: 2 + _decimal_granularity: 0 + normalised: 0 + _distribution_sampler: + _Direction: 0 + _factor: 0 + _de: 0 + _inactive_color: {r: 1, g: 1, b: 0, a: 1} + _Indicators: + - {fileID: 2100000, guid: b63e9efe7a9924d56ac1acf75e4db8e3, type: 2} + - {fileID: 2100000, guid: 9b8f86f172881439f9ac439ac5f06317, type: 2} + - {fileID: 2100000, guid: dab1db1368b6744ec954efc08a689113, type: 2} + _last_index: 0 + _lose_color: {r: 1, g: 0, b: 0, a: 1} + _Win_Amounts: + - 3 + - 2 + - 5 + _win_color: {r: 0, g: 1, b: 0, a: 1} + _Win_Likelihoods: + - 0.3 + - 0.6 + - 0.1 + _won: 0 +--- !u!1 &903449910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 903449911} + - component: {fileID: 903449913} + - component: {fileID: 903449912} + m_Layer: 0 + m_Name: Indicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &903449911 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 903449910} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1780912995} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &903449912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 903449910} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: b63e9efe7a9924d56ac1acf75e4db8e3, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &903449913 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 903449910} + m_CullTransparentMesh: 0 +--- !u!1 &913131065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 913131066} + - component: {fileID: 913131068} + - component: {fileID: 913131067} + m_Layer: 0 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &913131066 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913131065} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1018438113} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &913131067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913131065} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!222 &913131068 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913131065} + m_CullTransparentMesh: 0 +--- !u!1 &972076876 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 972076877} + - component: {fileID: 972076880} + - component: {fileID: 972076879} + - component: {fileID: 972076878} + m_Layer: 0 + m_Name: Payout + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &972076877 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972076876} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1661071653} + - {fileID: 1653598084} + - {fileID: 1272982684} + m_Father: {fileID: 88118462} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: 50, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &972076878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972076876} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 972076879} + m_TextComponent: {fileID: 1653598085} + m_Placeholder: {fileID: 1661071654} + m_ContentType: 3 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 2 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 2 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 898419346} + m_MethodName: UpdatePayoutArm3 + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 1653598085} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Text, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: 5.00 + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!114 &972076879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972076876} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &972076880 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972076876} + m_CullTransparentMesh: 0 +--- !u!1 &1018438112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1018438113} + - component: {fileID: 1018438116} + - component: {fileID: 1018438115} + - component: {fileID: 1018438114} + m_Layer: 0 + m_Name: Pct + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1018438113 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1018438112} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 913131066} + - {fileID: 456721932} + - {fileID: 307557404} + m_Father: {fileID: 88118462} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: 50, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1018438114 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1018438112} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1018438115} + m_TextComponent: {fileID: 456721933} + m_Placeholder: {fileID: 913131067} + m_ContentType: 3 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 2 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 2 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 898419346} + m_MethodName: UpdatePercentageArm3 + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 456721933} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Text, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: 0.10 + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!114 &1018438115 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1018438112} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1018438116 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1018438112} + m_CullTransparentMesh: 0 +--- !u!1001 &1089945723 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 898419344} + m_Modifications: + - target: {fileID: 114142010206075190, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: _value + value: 0.432 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 220 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_SizeDelta.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_SizeDelta.y + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1698925828775076, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} + propertyPath: m_Name + value: CountTextRight + objectReference: {fileID: 0} + - target: {fileID: 224908010201914998, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224908010201914998, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224908010201914998, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_SizeDelta.y + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 114410939600049670, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 3843873691197011742, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114124118044431598, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114459941365535976, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 292333162119817681, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 6424472762039561836, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + m_RemovedComponents: + - {fileID: 7412836036939558259, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} + - {fileID: 526642749843407577, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} + - {fileID: 1841870067092571040, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} +--- !u!1 &1158646246 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1158646247} + - component: {fileID: 1158646250} + - component: {fileID: 1158646249} + m_Layer: 0 + m_Name: ArmNumber + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1158646247 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158646246} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2023851092} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 30, y: -20} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1158646249 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158646246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "Arm #2\x13" +--- !u!222 &1158646250 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158646246} + m_CullTransparentMesh: 0 +--- !u!1 &1242305450 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1242305451} + m_Layer: 0 + m_Name: Statics + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 0 +--- !u!4 &1242305451 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242305450} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 865889675} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1272982683 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272982684} + - component: {fileID: 1272982686} + - component: {fileID: 1272982685} + m_Layer: 0 + m_Name: InfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1272982684 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272982683} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000023, y: 1.0000023, z: 1.0000023} + m_Children: [] + m_Father: {fileID: 972076877} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -2} + m_SizeDelta: {x: 20, y: 17} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1272982685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272982683} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "Amt.\x13" +--- !u!222 &1272982686 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272982683} + m_CullTransparentMesh: 0 +--- !u!1 &1341081092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1341081093} + m_Layer: 0 + m_Name: ArmMiddle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1341081093 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341081092} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2023851092} + - {fileID: 1787058675} + - {fileID: 814446581} + m_Father: {fileID: 898419344} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1381552596 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1381552603} + - component: {fileID: 1381552602} + - component: {fileID: 1381552598} + - component: {fileID: 1381552604} + - component: {fileID: 1381552605} + - component: {fileID: 1381552599} + - component: {fileID: 1381552606} + - component: {fileID: 1381552607} + - component: {fileID: 1381552600} + - component: {fileID: 1381552597} + m_Layer: 0 + m_Name: Environment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1381552597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a2e55e7cb1b037a08e96ce3b11a9114, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _unregister_at_disable: 0 + _LastResetTime: 0 + _LastTerminationReason: None + _Resetting: 0 + _Terminable: 1 + _Terminated: 0 + _current_frame_number: 0 + _objective_function: {fileID: 1381552602} + _coordinate_reference_point: {fileID: 0} + _track_only_children: 1 + _coordinate_system: 1 + _playable_area: {fileID: 0} + update_observations_with_every_tick: 1 +--- !u!223 &1381552598 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 1443820763} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 1 + m_TargetDisplay: 0 +--- !u!114 &1381552599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 1 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &1381552600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0a1c2f6fda1324e1dbb824ee2e6e7321, type: 3} + m_Name: + m_EditorClassIdentifier: + _debugging: 0 + _Manager: {fileID: 1381552606} + _auto_reset: 0 + _player_motions: {fileID: 11400000, guid: 9bef801c1f9ee4eb7a656eb2e158eece, type: 2} + terminated: 0 +--- !u!114 &1381552602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a40191f007b1d4026857ce299e6bed05, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _unregister_at_disable: 0 + _last_signal: 0 + _signal_space: + _min_: 0 + _max_: 1 + _decimal_granularity: 2 + normalised: 0 + _solved_reward: 1 + _failed_reward: -1 + _default_reward: -0.001 + _Episode_Return: 0 + _episode_length: 1000 + _arms: {fileID: 898419346} + _normalised_values: + - 0.34615386 + - 0.46153846 + - 0.19230768 + _text_bar_plot_displayer: {fileID: 1381552604} +--- !u!224 &1381552603 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 898419344} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1381552604 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc412003ee62499ab6c770141c6a0585, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: ValuePlotter + _debugging: 0 + _disables_children: 0 + _unregister_at_disable: 0 + _Parent_Environment: {fileID: 1381552597} + _canvas_bars: + - {fileID: 578315298} + - {fileID: 814446583} + - {fileID: 318632412} + _canvas_text: + - {fileID: 578315297} + - {fileID: 814446582} + - {fileID: 149719887} +--- !u!114 &1381552605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc412003ee62499ab6c770141c6a0585, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: BeliefPlotter + _debugging: 0 + _disables_children: 0 + _unregister_at_disable: 0 + _Parent_Environment: {fileID: 1381552597} + _canvas_bars: + - {fileID: 578315300} + - {fileID: 814446585} + - {fileID: 1719147517} + _canvas_text: + - {fileID: 578315299} + - {fileID: 45355145} + - {fileID: 1535647868} +--- !u!114 &1381552606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 74a1dc8369fb4a558f780b51d8d95442, type: 3} + m_Name: + m_EditorClassIdentifier: + _debugging: 0 + _testing_Actuators: 0 + _configuration: {fileID: 11400000, guid: 6ab9ebed65ab2426f916a7e9e82a0dfa, type: 2} + _skip_frame_i: 0 + _awaiting_reply: 0 + _executing_step: 0 + _last_simulation_time: 0 + _has_stepped: 0 + _allow_in_editor_blockage: 0 +--- !u!114 &1381552607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &1443820761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1443820764} + - component: {fileID: 1443820763} + - component: {fileID: 1443820762} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1443820762 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443820761} + m_Enabled: 1 +--- !u!20 &1443820763 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443820761} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.754717, g: 0.24919902, b: 0.31696293, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: -1 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1443820764 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443820761} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1507492856 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1507492857} + - component: {fileID: 1507492859} + - component: {fileID: 1507492858} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1507492857 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1507492856} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1507492858 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1507492856} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 1 + m_ForceModuleActive: 0 +--- !u!114 &1507492859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1507492856} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!114 &1535647868 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114078270753135082, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1641151717 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1242305451} + m_Modifications: + - target: {fileID: 1190758182245004, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 16.5 + objectReference: {fileID: 0} + - target: {fileID: 224110368661715722, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224110368661715722, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224110368661715722, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.74854165 + objectReference: {fileID: 0} + - target: {fileID: 114543584020609536, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552606} + - target: {fileID: 114152215923272706, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552606} + - target: {fileID: 224701342121933384, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -596.5006 + objectReference: {fileID: 0} + - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224582703667719680, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224582703667719680, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224582703667719680, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.x + value: -17 + objectReference: {fileID: 0} + - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: -17 + objectReference: {fileID: 0} + - target: {fileID: 224241792838047938, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224241792838047938, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.x + value: -17 + objectReference: {fileID: 0} + - target: {fileID: 224022790003590410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224022790003590410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: -17 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _unity_event_call_state + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _manager + value: + objectReference: {fileID: 1381552606} + - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _environment + value: + objectReference: {fileID: 0} + - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _evaluation_function + value: + objectReference: {fileID: 1381552602} + - target: {fileID: 114501781773825270, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 114501781773825270, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, + net.cnheider.neodroid + objectReference: {fileID: 0} + - target: {fileID: 114988635351345222, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 114988635351345222, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, + net.cnheider.neodroid + objectReference: {fileID: 0} + - target: {fileID: 114088500222901950, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552602} + - target: {fileID: 114088500222901950, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, + net.cnheider.neodroid + objectReference: {fileID: 0} + - target: {fileID: 114221796099513398, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 114221796099513398, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, + net.cnheider.neodroid + objectReference: {fileID: 0} + - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: -2 + objectReference: {fileID: 0} + - target: {fileID: 114926636315371600, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114992145804104380, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114813592669122650, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114363195186259392, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114773818650062018, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114923601699482010, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114672680113300006, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 114142662467235474, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 443670472594811449, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 5135798919197093671, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 6670239989405288345, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 6884846545023304649, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 7220922875528953747, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 8183055893458739422, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 8183055892966245194, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 8183055894462551068, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 9145649986185136029, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + - target: {fileID: 9091559542559102938, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, + type: 3} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} +--- !u!1 &1653598083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1653598084} + - component: {fileID: 1653598086} + - component: {fileID: 1653598085} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1653598084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653598083} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 972076877} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1653598085 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653598083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 5.00 +--- !u!222 &1653598086 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653598083} + m_CullTransparentMesh: 0 +--- !u!1 &1661071652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1661071653} + - component: {fileID: 1661071655} + - component: {fileID: 1661071654} + m_Layer: 0 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1661071653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661071652} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 972076877} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1661071654 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661071652} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!222 &1661071655 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661071652} + m_CullTransparentMesh: 0 +--- !u!114 &1719147517 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114871921216616518, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1736707602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1736707603} + - component: {fileID: 1736707606} + - component: {fileID: 1736707605} + m_Layer: 0 + m_Name: ArmNumber + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1736707603 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736707602} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1780912995} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 30, y: -20} + m_SizeDelta: {x: 100, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1736707605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736707602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Arm #1 + +' +--- !u!222 &1736707606 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736707602} + m_CullTransparentMesh: 0 +--- !u!224 &1766601507 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1780912994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1780912995} + - component: {fileID: 1780912997} + - component: {fileID: 1780912996} + m_Layer: 0 + m_Name: Frame + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1780912995 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780912994} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1736707603} + - {fileID: 903449911} + m_Father: {fileID: 558790916} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 400} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1780912996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780912994} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: be262be74585691dd913b828943596aa, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1780912997 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780912994} + m_CullTransparentMesh: 0 +--- !u!1 &1787058674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1787058675} + - component: {fileID: 1787058677} + - component: {fileID: 1787058676} + m_Layer: 0 + m_Name: Indicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1787058675 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787058674} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 1341081093} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1787058676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787058674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: 9b8f86f172881439f9ac439ac5f06317, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1787058677 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787058674} + m_CullTransparentMesh: 0 +--- !u!1 &2023851091 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2023851092} + - component: {fileID: 2023851094} + - component: {fileID: 2023851093} + m_Layer: 0 + m_Name: Frame + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2023851092 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2023851091} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1158646247} + m_Father: {fileID: 1341081093} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 400} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2023851093 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2023851091} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: be262be74585691dd913b828943596aa, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2023851094 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2023851091} + m_CullTransparentMesh: 0 diff --git a/Samples/MultiArmedBandit.unity.meta b/Samples/MultiArmedBandit/Scenes/MultiArmedBandit.unity.meta similarity index 100% rename from Samples/MultiArmedBandit.unity.meta rename to Samples/MultiArmedBandit/Scenes/MultiArmedBandit.unity.meta diff --git a/Samples/MultiArmedBandit/Scenes/RestlessMultiArmedBandit.unity b/Samples/MultiArmedBandit/Scenes/RestlessMultiArmedBandit.unity new file mode 100644 index 000000000..bcaadd31f --- /dev/null +++ b/Samples/MultiArmedBandit/Scenes/RestlessMultiArmedBandit.unity @@ -0,0 +1,1644 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!114 &45355145 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114334249277451982, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &149719887 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114638356156934590, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &318632412 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114142010206075190, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &558790915 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 558790916} + m_Layer: 0 + m_Name: ArmLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &558790916 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 558790915} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 903449911} + - {fileID: 578315296} + m_Father: {fileID: 898419344} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -300, y: 0} + m_SizeDelta: {x: 100, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &578315295 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 558790916} + m_Modifications: + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1247594942759636, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: ValueBarLeft + objectReference: {fileID: 0} + - target: {fileID: 1837730243121884, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: ValueTextLeft + objectReference: {fileID: 0} + - target: {fileID: 1380061422114852, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: BeliefBarLeft + objectReference: {fileID: 0} + - target: {fileID: 1685958238231828, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: ValueDisplayerLeft + objectReference: {fileID: 0} + - target: {fileID: 1392557157429368, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: BeliefDisplayerLeft + objectReference: {fileID: 0} + - target: {fileID: 1808157719511378, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: BeliefTextLeft + objectReference: {fileID: 0} + - target: {fileID: 1388701424054228, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} + propertyPath: m_Name + value: CountTextLeft + objectReference: {fileID: 0} + - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_RaycastTarget + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Color.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Color.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114412126352879728, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Color.b + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} +--- !u!224 &578315296 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} +--- !u!114 &578315297 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114312675401615462, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &578315298 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114540525651406706, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &578315299 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114334249277451982, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &578315300 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114476191495675034, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 578315295} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &814446580 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1341081093} + m_Modifications: + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 114540525651406706, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: _debugging + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114334249277451982, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + propertyPath: _debugging + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9b61d6c901c1941578eed89185a25d35, type: 3} +--- !u!224 &814446581 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224255984113990750, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} +--- !u!114 &814446582 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114312675401615462, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &814446583 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114540525651406706, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &814446585 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114476191495675034, guid: 9b61d6c901c1941578eed89185a25d35, + type: 3} + m_PrefabInstance: {fileID: 814446580} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &865889675 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + m_PrefabInstance: {fileID: 1641151717} + m_PrefabAsset: {fileID: 0} +--- !u!1 &898419343 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 898419344} + - component: {fileID: 898419345} + - component: {fileID: 898419346} + m_Layer: 0 + m_Name: MultiArmedBandit + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &898419344 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 898419343} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 558790916} + - {fileID: 1341081093} + - {fileID: 1766601507} + m_Father: {fileID: 1381552603} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &898419345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 898419343} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b572378012c8483dadbb0e7244d13c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + _draw_bounds: 0 + _is_alive: 1 +--- !u!114 &898419346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 898419343} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d58b11614d784a5ea4da047aadb42197, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _motion_value_space: + _Decimal_Granularity: 0 + _Min_Value: 0 + _Max_Value: 2 + _energy_spend_since_reset: 0 + _energy_cost: 0 + _inactive_color: {r: 0.999918, g: 1, b: 0, a: 0} + _Indicators: + - {fileID: 2100000, guid: b63e9efe7a9924d56ac1acf75e4db8e3, type: 2} + - {fileID: 2100000, guid: 9b8f86f172881439f9ac439ac5f06317, type: 2} + - {fileID: 2100000, guid: dab1db1368b6744ec954efc08a689113, type: 2} + _last_index: 0 + _lose_color: {r: 1, g: 0, b: 0, a: 1} + _Win_Amounts: + - 0.6501262 + - 0.30426794 + - 0.618942 + _win_color: {r: 0, g: 1, b: 0, a: 1} + _Win_Likelihoods: + - 0.10519991 + - 0.3196798 + - 0.81710994 + _won: 0 +--- !u!1 &903449910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 903449911} + - component: {fileID: 903449913} + - component: {fileID: 903449912} + m_Layer: 0 + m_Name: Indicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &903449911 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 903449910} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 558790916} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &903449912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 903449910} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: b63e9efe7a9924d56ac1acf75e4db8e3, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!222 &903449913 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 903449910} + m_CullTransparentMesh: 0 +--- !u!1001 &1089945723 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 898419344} + m_Modifications: + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_SizeDelta.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_SizeDelta.y + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1698925828775076, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} + propertyPath: m_Name + value: CountTextRight + objectReference: {fileID: 0} + - target: {fileID: 224908010201914998, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224908010201914998, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114142010206075190, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + propertyPath: _value + value: 0.432 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cbb15ff2d062f4cec887e06445cf7050, type: 3} +--- !u!1 &1242305450 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1242305451} + m_Layer: 0 + m_Name: Statics + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1242305451 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242305450} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 865889675} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1341081092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1341081093} + m_Layer: 0 + m_Name: ArmMiddle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1341081093 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341081092} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1787058675} + - {fileID: 814446581} + m_Father: {fileID: 898419344} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1381552596 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1381552603} + - component: {fileID: 1381552597} + - component: {fileID: 1381552602} + - component: {fileID: 1381552598} + - component: {fileID: 1381552604} + - component: {fileID: 1381552605} + - component: {fileID: 1381552599} + - component: {fileID: 1381552606} + - component: {fileID: 1381552607} + - component: {fileID: 1381552600} + m_Layer: 0 + m_Name: Environment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1381552597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4675f9235ecc46a5982e50590d858cc, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _current_frame_number: 0 + _Energy_Spent: 0 + _episode_length: 0 + _Lastest_Reset_Time: 0 + _LastTermination_Reason: None + _Resetting: 0 + _Terminable: 1 + _Terminated: 0 + _objective_function: {fileID: 1381552602} + _coordinate_reference_point: {fileID: 0} + _track_only_children: 1 + _coordinate_system: 0 + _playable_area: {fileID: 0} + _reset_i: 0 + _initials_saved_flag: 0 + _update_observations_with_every_tick: 0 +--- !u!223 &1381552598 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 1443820763} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 1 + m_TargetDisplay: 0 +--- !u!114 &1381552599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 1 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &1381552600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0a1c2f6fda1324e1dbb824ee2e6e7321, type: 3} + m_Name: + m_EditorClassIdentifier: + _debugging: 0 + _Manager: {fileID: 1381552606} + _auto_reset: 0 + _player_motions: {fileID: 11400000, guid: 9bef801c1f9ee4eb7a656eb2e158eece, type: 2} +--- !u!114 &1381552602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a40191f007b1d4026857ce299e6bed05, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 0 + _Episode_Return: 0 + _environment: {fileID: 1381552597} + _solved_threshold: 0 + _last_signal: 0 + _arms: {fileID: 898419346} + _normalised_values: + - 0.24631953 + - 0.5800647 + - 0.17361577 + _text_bar_plot_displayer: {fileID: 1381552604} +--- !u!224 &1381552603 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 898419344} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1381552604 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc412003ee62499ab6c770141c6a0585, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: ValuePlotter + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 1 + _canvas_bars: + - {fileID: 578315298} + - {fileID: 814446583} + - {fileID: 318632412} + _canvas_text: + - {fileID: 578315297} + - {fileID: 814446582} + - {fileID: 149719887} +--- !u!114 &1381552605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc412003ee62499ab6c770141c6a0585, type: 3} + m_Name: + m_EditorClassIdentifier: + _Custom_Name: BeliefPlotter + _debugging: 0 + _disables_children: 0 + _editor_reregistering: 1 + _Use_Custom_Name: 1 + _canvas_bars: + - {fileID: 578315300} + - {fileID: 814446585} + - {fileID: 1719147517} + _canvas_text: + - {fileID: 578315299} + - {fileID: 45355145} + - {fileID: 1535647868} +--- !u!114 &1381552606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 74a1dc8369fb4a558f780b51d8d95442, type: 3} + m_Name: + m_EditorClassIdentifier: + _debugging: 0 + _testing_motors: 0 + _configuration: {fileID: 11400000, guid: 88c3c899a02384efdba0c7ba008dad77, type: 2} + _skip_frame_i: 0 + _syncing_environments: 0 + _awaiting_reply: 0 + _step: 0 + _last_simulation_time: 0 + _has_stepped: 0 + _allow_in_editor_blockage: 0 +--- !u!114 &1381552607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381552596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &1443820761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1443820764} + - component: {fileID: 1443820763} + - component: {fileID: 1443820762} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1443820762 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443820761} + m_Enabled: 1 +--- !u!20 &1443820763 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443820761} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.2784314, g: 0.2784314, b: 0.2784314, a: 1} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: -1 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1443820764 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443820761} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1535647868 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114078270753135082, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5417bfee9342518a9768fda4c81337, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1641151717 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1242305451} + m_Modifications: + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224293318527779910, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114501781773825270, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552597} + - target: {fileID: 114221796099513398, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552597} + - target: {fileID: 114988635351345222, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552597} + - target: {fileID: 114543584020609536, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552606} + - target: {fileID: 114088500222901950, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552602} + - target: {fileID: 114152215923272706, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1381552606} + - target: {fileID: 114988635351345222, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, + net.cnheider.neodroid + objectReference: {fileID: 0} + - target: {fileID: 114501781773825270, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, + net.cnheider.neodroid + objectReference: {fileID: 0} + - target: {fileID: 114088500222901950, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, + net.cnheider.neodroid + objectReference: {fileID: 0} + - target: {fileID: 114221796099513398, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _poll_event.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: Neodroid.Utilities.EventRecipients.droid.Neodroid.Utilities.Unsorted.DataPoller, + net.cnheider.neodroid + objectReference: {fileID: 0} + - target: {fileID: 224110368661715722, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224701342121933384, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -596.5 + objectReference: {fileID: 0} + - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224582703667719680, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224582703667719680, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224110368661715722, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224001375150637708, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224241792838047938, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224241792838047938, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224022790003590410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224022790003590410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224015848551928794, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224267871597078786, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 16.5 + objectReference: {fileID: 0} + - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _unity_event_call_state + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _manager + value: + objectReference: {fileID: 1381552606} + - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _environment + value: + objectReference: {fileID: 1381552597} + - target: {fileID: 114905969786602410, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: _evaluation_function + value: + objectReference: {fileID: 1381552602} + - target: {fileID: 224219095199356408, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224582703667719680, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224110368661715722, guid: 2e92782f81c5740819ca66bda35481ce, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2e92782f81c5740819ca66bda35481ce, type: 3} +--- !u!114 &1719147517 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114871921216616518, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f515b417b121405c809d6e4e30ec5281, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &1766601507 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224700568097968694, guid: cbb15ff2d062f4cec887e06445cf7050, + type: 3} + m_PrefabInstance: {fileID: 1089945723} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1787058674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1787058675} + - component: {fileID: 1787058677} + - component: {fileID: 1787058676} + m_Layer: 0 + m_Name: Indicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1787058675 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787058674} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 1341081093} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1787058676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787058674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: 9b8f86f172881439f9ac439ac5f06317, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!222 &1787058677 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787058674} + m_CullTransparentMesh: 0 diff --git a/Samples/MultiArmedBandit/Scenes/RestlessMultiArmedBandit.unity.meta b/Samples/MultiArmedBandit/Scenes/RestlessMultiArmedBandit.unity.meta new file mode 100644 index 000000000..d6a74ce9f --- /dev/null +++ b/Samples/MultiArmedBandit/Scenes/RestlessMultiArmedBandit.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ba7a13cc28c4a2c05b50cfd093a741ed +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples/MultiArmedBandit/TextBarPlotDisplayer.cs b/Samples/MultiArmedBandit/TextBarPlotDisplayer.cs deleted file mode 100644 index 5b60d60a9..000000000 --- a/Samples/MultiArmedBandit/TextBarPlotDisplayer.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using Neodroid.Runtime.Prototyping.Displayers; -using Neodroid.Runtime.Prototyping.Displayers.Canvas; -using Neodroid.Runtime.Prototyping.Internals; -using UnityEngine; - -namespace Neodroid.Samples.MultiArmedBandit { - /// - /// - /// - [AddComponentMenu( - DisplayerComponentMenuPath._ComponentMenuPath + "TextBarPlot" + DisplayerComponentMenuPath._Postfix)] - public class TextBarPlotDisplayer : Resetable { - /// - /// - /// - public override String PrototypingTypeName { - get { return "TextBarPlot"; } - } - - [SerializeField] CanvasBarDisplayer[] _canvas_bars; - [SerializeField] CanvasTextDisplayer[] _canvas_text; - [SerializeField] float[] _Values; - - /// - /// - /// - public override void EnvironmentReset() { - foreach (var bar in this._canvas_bars) { - bar.Display(0.5); - } - } - - void Update() { - if (this.Debugging) { - this.Display(this._Values); - } - } - - /// - /// - /// - /// - public void Display(float[] values) { - for (var i = 0; i < this._canvas_bars.Length; i++) { - if (i < values.Length) { - var bar = this._canvas_bars[i]; - bar?.Display(values[i]); - - var text = this._canvas_text[i]; - text?.Display(values[i]); - } - } - } - } -} \ No newline at end of file diff --git a/TUTORIAL.md b/TUTORIAL.md new file mode 100644 index 000000000..832f15645 --- /dev/null +++ b/TUTORIAL.md @@ -0,0 +1,77 @@ +############################################################################# +# _ _ ______ ____ _____ _____ ____ _____ _____ # +# | \ | | | ____| / __ \ | __ \ | __ \ / __ \ |_ _| | __ \ # +# | \| | | |__ | | | | | | | | | |__) | | | | | | | | | | | # +# | . ` | | __| | | | | | | | | | _ / | | | | | | | | | | # +# | |\ | | |____ | |__| | | |__| | | | \ \ | |__| | _| |_ | |__| | # +# |_| \_| |______| \____/ |_____/ |_| \_\ \____/ |_____| |_____/ # +# # +############################################################################# + +-------------------------------- TUTORIAL ----------------------------------- + +In this very simple tutorial you create a Neodroid environment from a new scene, please refer to online resources at sintefneodroid.github.io/documentation for more information. + +1. Create a new scene with a basic prebuilt simulation manager and prototyping environment setup + - 1.1 [Right click] the scene view in the editor + - 1.2 Select Neodroid/Prebuilt/SimpleEnvironment + +2. Using the Player Reaction component to respond to keyboard input + - 2.1 Select the "SimpleEnvironment" GameObject in the Scene Hierarchy + - 2.2 [Left click] the "Add Component" button + - 2.3 Search for "player" + - 2.4 Select the "Player Reaction" component + - 2.5 [Left click] the little circular icon to the right of the "Player_motions" field in the newly added + component. + - 2.6 Select the "DefaultActorMotions" ScriptableObject + +3. Testing the scene + - 3.1 Play scene and try moving the actor object about using the [W,A,S,D,Q,E] keys on your keyboard. + +4. Replace the existing TransformMotor component with a RigidbodyMotor component + - 4.1 Ensure Scene is not playing + - 4.2 Try opening the accompanying Neodroid:Environment window, by navigating to + Window/Neodroid/EnvironmentsWindow in the top menu bar + - 4.3 A window will appear, inside a scrollable view in the bottom part you will be able to inspect a the + Neodroid relevant information the currently open scene + - 4.4 Expand the "SimpleEnvironmentPrototypingEnvironment" + - 4.5 Find the "Motor" sub-box + - 4.6 [Double Left Click] one of the boxes with a tiny GameController icon, this select the occupant + GameObject of the Motor component + - 4.7 Remove the "Euler Transform Motor" by [Right click]ing on the title and selecting [Remove component] + in the inspector View + - 4.8 with actor object still selected, scroll to the bottom in the inspector view and [Left Click] the + "Add Component" button + - 4.9 Search for "rigidbody" + - 4.10 Select the "RigidbodyMotor3DofMotor" + +5. Configure Motion Space + - 5.1 Expand the "Motion_value_space" + - 5.2 Insert the values -100 and 100 in the "Min_Value" and "Max_Value" respectively + +6. Disable gravity on the Actors rigidbody + - 6.1 Find the rigidbody component of the "Actor" + - 6.2 Uncheck the "Use Gravity" field + +7. Testing the scene again + - 7.1 Play scene and try moving the actor object about using the [W,A,S,D,Q,E] keys on your keyboard. + - 7.2 Now we are affecting the rigidbody of the GameObject through the physics engine instead of the + transform directly. + +8. ( Assuming you have installed 'neo' Python package ) + + Connect an interacting python process to the environment + - 8.1 While letting the Scene continue playing, open a new shell/console on your computer + - 8.2 Type in 'neodroid-sample' and hit [Enter] + - 8.3 Switch back to Unity and watch the python process sample random motions + - 8.4 Try disconnecting, reconnecting, stop play and replay the agent will try to reconnect a keep sampling + +9. See the observations and signals given by the environment + - 9.1 Ensure both the Unity scene and Python process is running + - 9.2 Switch to the console and observe the values being printed, these a values return to the process from + the running Unity scene, we call these observations and signals and are necessaries for doing reinforcement learning, the Neodroid eco-system set up of this up for you in the scene you built + - 9.3 Again refer to the online resources for more information at sintefneodroid.github.io/documentation + +10. Lastly feel free to report any issues at https://github.com/sintefneodroid/droid/issues. + +Have a great day! diff --git a/TUTORIAL.md.meta b/TUTORIAL.md.meta new file mode 100644 index 000000000..f151f0a2b --- /dev/null +++ b/TUTORIAL.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f6e767dcac7ce0ac381a51d0c5ea865e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TUTORIAL.txt b/TUTORIAL.txt deleted file mode 100644 index 1dc4ccfa6..000000000 --- a/TUTORIAL.txt +++ /dev/null @@ -1,19 +0,0 @@ -############################################################################# -# _ _ ______ ____ _____ _____ ____ _____ _____ # -# | \ | | | ____| / __ \ | __ \ | __ \ / __ \ |_ _| | __ \ # -# | \| | | |__ | | | | | | | | | |__) | | | | | | | | | | | # -# | . ` | | __| | | | | | | | | | _ / | | | | | | | | | | # -# | |\ | | |____ | |__| | | |__| | | | \ \ | |__| | _| |_ | |__| | # -# |_| \_| |______| \____/ |_____/ |_| \_\ \____/ |_____| |_____/ # -# # -############################################################################# - --------------------------------- TUTORIAL ----------------------------------- - -1. New scene -2. Create prebuilt environment -3. Play Scene -4. Test Motors - - - \ No newline at end of file diff --git a/TUTORIAL.txt.meta b/TUTORIAL.txt.meta deleted file mode 100644 index 3c383a9c3..000000000 --- a/TUTORIAL.txt.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 16affbe33d5cd4aa1af161addff92967 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/Editor/GithubExtensionTests.cs b/Tests/Editor/GithubExtensionTests.cs new file mode 100644 index 000000000..07761e31e --- /dev/null +++ b/Tests/Editor/GithubExtensionTests.cs @@ -0,0 +1,118 @@ +#if UNITY_2019_1_OR_NEWER && USE_GITHUB_EXTENSION && False +using System.Collections; +using System.IO; +using System.Linq; +using droid.Editor.Utilities.Git; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; +using UnityEngine.UIElements; + +namespace droid.Tests.Editor { + public class GithubExtensionTests { + const string _package_name = "com.cnheider.gitpackagetest"; + const string _user_repo = "cnheider/GitPackageTest"; + const string _repo_url = "https://github.com/" + _user_repo; + const string _revision_hash = "9cd79485e6b8a696aac0e7bb9128ba2926121188"; + const string _file_name = "README.md"; + const string _file_url = _repo_url + "/blob/" + _revision_hash + "/" + _file_name; + + [TestCase("", ExpectedResult = "")] + [TestCase(_package_name + "@https://github.com/" + _user_repo + ".git", ExpectedResult = _repo_url)] + [TestCase(_package_name + "@https://github.com/" + _user_repo + ".git#0.3.0", ExpectedResult = _repo_url)] + [TestCase(_package_name + "@ssh://git@github.com/" + _user_repo + ".git", ExpectedResult = _repo_url)] + [TestCase(_package_name + "@ssh://git@github.com/" + _user_repo + ".git#0.3.0", + ExpectedResult = _repo_url)] + [TestCase(_package_name + "@git@github.com:" + _user_repo + ".git", ExpectedResult = _repo_url)] + [TestCase(_package_name + "@git@github.com:" + _user_repo + ".git#0.3.0", ExpectedResult = _repo_url)] + [TestCase(_package_name + "@git:git@github.com:" + _user_repo + ".git", ExpectedResult = _repo_url)] + [TestCase(_package_name + "@git:git@github.com:" + _user_repo + ".git#0.3.0", ExpectedResult = _repo_url)] + public string GetRepoUrlTest(string package_id) { return GithubExtension.GetRepoUrl(package_id); } + + [TestCase("", ExpectedResult = "")] + [TestCase(_package_name + "@https://github.com/" + _user_repo + ".git", ExpectedResult = _user_repo)] + [TestCase(_package_name + "@https://github.com/" + _user_repo + ".git#0.3.0", + ExpectedResult = _user_repo)] + [TestCase(_package_name + "@ssh://git@github.com/" + _user_repo + ".git", ExpectedResult = _user_repo)] + [TestCase(_package_name + "@ssh://git@github.com/" + _user_repo + ".git#0.3.0", + ExpectedResult = _user_repo)] + [TestCase(_package_name + "@git@github.com:" + _user_repo + ".git", ExpectedResult = _user_repo)] + [TestCase(_package_name + "@git@github.com:" + _user_repo + ".git#0.3.0", ExpectedResult = _user_repo)] + [TestCase(_package_name + "@git:git@github.com:" + _user_repo + ".git", ExpectedResult = _user_repo)] + [TestCase(_package_name + "@git:git@github.com:" + _user_repo + ".git#0.3.0", + ExpectedResult = _user_repo)] + public string GetRepoIdTest(string package_id) { return GithubExtension.GetRepoUrl(package_id); } + + [TestCase("", ExpectedResult = true)] + [TestCase("true", ExpectedResult = true)] + [TestCase("false", ExpectedResult = false)] + [TestCase("false,true", ExpectedResult = true)] + [TestCase("true,false", ExpectedResult = false)] + public bool ElementVisibleTest(string operations) { + var element = new VisualElement(); + if (0 < operations.Length) { + foreach (var flag in operations.Split(',').Select(System.Convert.ToBoolean)) { + GithubExtension.SetElementDisplay(element, flag); + } + } + + return GithubExtension.IsElementDisplay(element); + } + + [TestCase("", ExpectedResult = false)] + [TestCase("true", ExpectedResult = true)] + [TestCase("false", ExpectedResult = false)] + [TestCase("false,true", ExpectedResult = true)] + [TestCase("true,false", ExpectedResult = false)] + public bool ElementClassTest(string operations) { + var element = new VisualElement(); + if (0 < operations.Length) { + foreach (var flag in operations.Split(',').Select(System.Convert.ToBoolean)) { + GithubExtension.SetElementClass(element, "test", flag); + } + } + + return GithubExtension.HasElementClass(element, "test"); + } + + [TestCase(LogType.Log, + "Success", + "https://api.github.com/repos/" + _user_repo + "/tags", + ExpectedResult = null)] + [TestCase(LogType.Error, + "HTTP/1.1 404 Not Found", + "https://api.github.com/repos/" + _user_repo + "/tags2", + ExpectedResult = null)] + [TestCase(LogType.Error, + "Cannot resolve destination host", + "https://api.githuberror.com/repos/" + _user_repo + "/tags", + ExpectedResult = null)] + [UnityTest] + [Order(0)] + public IEnumerator RequestTest(LogType log_type, string message, string url) { + var path = GithubExtension.GetRequestCachePath(url); + Debug.Log(path); + if (File.Exists(path)) { + File.Delete(path); + } + + LogAssert.Expect(log_type, message); + yield return GithubExtension.Request(url, x => Debug.Log("Success")); + } + + [TestCase(LogType.Log, + "Success", + "https://api.github.com/repos/" + _user_repo + "/tags", + ExpectedResult = null)] + [UnityTest] + [Order(1)] + public IEnumerator RequestCacheTest(LogType log_type, string message, string url) { + Assert.IsNotNull(GithubExtension.GetRequestCache(url)); + + LogAssert.Expect(log_type, message); + GithubExtension.Request(url, x => Debug.Log("Success")); + yield break; + } + } +} +#endif diff --git a/Tests/Editor/GithubExtensionTests.cs.meta b/Tests/Editor/GithubExtensionTests.cs.meta new file mode 100644 index 000000000..424d54d8b --- /dev/null +++ b/Tests/Editor/GithubExtensionTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13b2e0c23b5ce229d83782462f9bc8b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Editor/Neodroid.EditorTests.asmdef b/Tests/Editor/Neodroid.EditorTests.asmdef new file mode 100644 index 000000000..fa41edb54 --- /dev/null +++ b/Tests/Editor/Neodroid.EditorTests.asmdef @@ -0,0 +1,20 @@ +{ + "name": "Neodroid.EditorTests", + "references": [ + "Neodroid.Editor", + "Neodroid.Runtime" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [] +} \ No newline at end of file diff --git a/Tests/Editor/Neodroid.EditorTests.asmdef.meta b/Tests/Editor/Neodroid.EditorTests.asmdef.meta new file mode 100644 index 000000000..cd441de44 --- /dev/null +++ b/Tests/Editor/Neodroid.EditorTests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b9c2f5389a47634bc89f67779d635ed4 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Editor/NeodroidTestsNewTestScript.cs b/Tests/Editor/NeodroidTestsNewTestScript.cs index f279da1ec..125b5f79f 100644 --- a/Tests/Editor/NeodroidTestsNewTestScript.cs +++ b/Tests/Editor/NeodroidTestsNewTestScript.cs @@ -2,7 +2,7 @@ using NUnit.Framework; using UnityEngine.TestTools; -namespace Neodroid.Tests.Editor { +namespace droid.Tests.Editor { public class NeodroidTestsNewTestScript { [Test] public void NewTestScriptSimplePasses() { diff --git a/Tests/Editor/NeodroidTestsNewTestScript.cs.meta b/Tests/Editor/NeodroidTestsNewTestScript.cs.meta index f41968559..fb1179dcb 100644 --- a/Tests/Editor/NeodroidTestsNewTestScript.cs.meta +++ b/Tests/Editor/NeodroidTestsNewTestScript.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Tests/Editor/Structs.meta b/Tests/Editor/Structs.meta new file mode 100644 index 000000000..e07bf326f --- /dev/null +++ b/Tests/Editor/Structs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 78f2ce93682a4578ab5077a3dac9ca23 +timeCreated: 1562922443 \ No newline at end of file diff --git a/Tests/Editor/Structs/Space.meta b/Tests/Editor/Structs/Space.meta new file mode 100644 index 000000000..1ce7a7ebf --- /dev/null +++ b/Tests/Editor/Structs/Space.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e51a579251f74b57b9cec10aae080113 +timeCreated: 1562922485 \ No newline at end of file diff --git a/Tests/Editor/Structs/Space/Space1Tests.cs b/Tests/Editor/Structs/Space/Space1Tests.cs new file mode 100644 index 000000000..fdcb4f594 --- /dev/null +++ b/Tests/Editor/Structs/Space/Space1Tests.cs @@ -0,0 +1,90 @@ +using System; +using droid.Runtime.Enums; +using droid.Runtime.Structs.Space; +using NUnit.Framework; + +namespace droid.Tests.Editor.Structs.Space { + /// + /// + /// + [TestFixture] + public class Space1Tests { + /// + /// + /// + [TestCase(0, 0, 0, ExpectedResult = 0f)] + [TestCase(1, 0, 0, ExpectedResult = 0f)] + [TestCase(0, 0, 10, ExpectedResult = 0f)] + [TestCase(0.5f, 0, 1, ExpectedResult = 0.5f)] + [TestCase(0.1f, 0, 10, ExpectedResult = 1f)] + [TestCase(1.0f, 0, 10, ExpectedResult = 10f)] + [TestCase(0.5f, 5, 10, ExpectedResult = 7.5f)] + [TestCase(0.5f, -10, 10, ExpectedResult = 0f)] + [TestCase(0.75f, -10, 10, ExpectedResult = 5f)] + [TestCase(0.5f, -10, -5, ExpectedResult = -7.5f)] + [TestCase(0.5f, -10, 0, ExpectedResult = -5f)] + public float TestDenormalise010(float v, float min_value, float max_value) { + var space = new Space1 {Min = min_value, Max = max_value, Normalised = Normalisation.Zero_one_, DecimalGranularity = 1}; + + return space.Reproject(v); + } + + [TestCase(-1)] + [TestCase(11)] + public void TestDenormalise010Throws(float v) { + var space = new Space1 {Min = 0, Max = 10, Normalised = Normalisation.Zero_one_}; + + Assert.That(() => space.Reproject(v), Throws.TypeOf()); + } + + [TestCase(-1)] + [TestCase(10.1f)] + public void TestNormalise010Throws(float v) { + var space = new Space1 {Min = 0, Max = 10, Normalised = Normalisation.Zero_one_}; + + Assert.That(() => space.Project(v), Throws.TypeOf()); + } + + /// + /// + /// + [TestCase(5, 0, 10, ExpectedResult = 0.5f)] + [TestCase(0.2f, 0, 1, ExpectedResult = 0.2f)] + [TestCase(0.5f, -1, 1, ExpectedResult = 0.75f)] + [TestCase(-0.8f, -1, 0, ExpectedResult = 0.2f)] + public float TestNormalise010(float v, float min_value, float max_value) { + var space = new Space1 {Min = min_value, Max = max_value,DecimalGranularity = 1, Normalised = Normalisation.Zero_one_}; + + //Assert.AreEqual(expected, result, tolerance); + return space.Round(space.Project(v)); + } + + /// + /// + /// + [Test] + public void TestNormaliseMinus11() { + var space = new Space1 {Min = -1, Max = 1, Normalised = Normalisation.Zero_one_}; + + Assert.That(Math.Abs(space.Project(0.5f) - 0.75f) <= float.Epsilon, Is.True); + } + + [Test] + public void TestClipDenormalise01RoundClip() { + var space = new Space1 {Min = -1, Max = 1, Normalised = Normalisation.Zero_one_}; + + Assert.That(Math.Abs(space.Reproject(0.5f) - 0.0f) <= float.Epsilon, Is.True); + } + + /// + /// + /// + [Test] + public void TestDenormaliseMinus11() { + var space = new Space1 {Min = -1f, Max = 1f, Normalised = Normalisation.Zero_one_,DecimalGranularity = 1}; + + var d = space.Reproject(0.75f); + Assert.That(Math.Abs(d - 0.5f) <= float.Epsilon, Is.True); + } + } +} diff --git a/Tests/Editor/Structs/Space/Space1Tests.cs.meta b/Tests/Editor/Structs/Space/Space1Tests.cs.meta new file mode 100644 index 000000000..67086ef3f --- /dev/null +++ b/Tests/Editor/Structs/Space/Space1Tests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 662c7c4cb14b4b958c6bb9fc1ecaecf4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Editor/Structs/Space/Space2Tests.cs b/Tests/Editor/Structs/Space/Space2Tests.cs new file mode 100644 index 000000000..4322b6439 --- /dev/null +++ b/Tests/Editor/Structs/Space/Space2Tests.cs @@ -0,0 +1,59 @@ +using droid.Runtime.Enums; +using droid.Runtime.Structs.Space; +using NUnit.Framework; +using UnityEngine; + +namespace droid.Tests.Editor.Structs.Space { + /// + /// + /// + [TestFixture] + public class Space2Tests { + /// + /// + /// + [Test] + public void TestDenormalise010() { + var space = new Space2 {Min = Vector2.zero, Max = Vector2.one * 10, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector2.Distance(space.Reproject(Vector2.one * 0.5f), Vector2.one * 5f) + <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestNormalise010() { + var space = new Space2 {Min = Vector2.zero, Max = Vector2.one * 10, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector2.Distance(space.Project(6 * Vector2.one), Vector2.one * 0.6f) <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestNormaliseMinus11() { + var space = new Space2 {Min = Vector2.one * -1, Max = Vector2.one * 1, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector2.Distance(space.Project(0.5f * Vector2.one), Vector2.one * 0.75f) + <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestDenormaliseMinus11() { + var space = new Space2 {Min = Vector2.one * -1, Max = Vector2.one * 1, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector2.Distance(space.Reproject(0.75f * Vector2.one), Vector2.one * 0.5f) + <= float.Epsilon, + Is.True); + } + } +} diff --git a/Tests/Editor/Structs/Space/Space2Tests.cs.meta b/Tests/Editor/Structs/Space/Space2Tests.cs.meta new file mode 100644 index 000000000..3c212ae9f --- /dev/null +++ b/Tests/Editor/Structs/Space/Space2Tests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 006c1ad2de534c34a9c626093ecaf9ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Editor/Structs/Space/Space3Tests.cs b/Tests/Editor/Structs/Space/Space3Tests.cs new file mode 100644 index 000000000..20e9c3a03 --- /dev/null +++ b/Tests/Editor/Structs/Space/Space3Tests.cs @@ -0,0 +1,59 @@ +using droid.Runtime.Enums; +using droid.Runtime.Structs.Space; +using NUnit.Framework; +using UnityEngine; + +namespace droid.Tests.Editor.Structs.Space { + /// + /// + /// + [TestFixture] + public class Space3Tests { + /// + /// + /// + [Test] + public void TestDenormalise010() { + var space = new Space3 {Min = Vector3.zero, Max = Vector3.one * 10, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector3.Distance(space.Reproject(Vector3.one * 0.5f), Vector3.one * 5f) + <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestNormalise010() { + var space = new Space3 {Min = Vector3.zero, Max = Vector3.one * 10, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector3.Distance(space.Project(6 * Vector3.one), Vector3.one * 0.6f) <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestNormaliseMinus11() { + var space = new Space3 {Min = Vector3.one * -1, Max = Vector3.one * 1, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector3.Distance(space.Project(0.5f * Vector3.one), Vector3.one * 0.75f) + <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestDenormaliseMinus11() { + var space = new Space3 {Min = Vector3.one * -1, Max = Vector3.one * 1, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector3.Distance(space.Reproject(0.75f * Vector3.one), Vector3.one * 0.5f) + <= float.Epsilon, + Is.True); + } + } +} diff --git a/Tests/Editor/Structs/Space/Space3Tests.cs.meta b/Tests/Editor/Structs/Space/Space3Tests.cs.meta new file mode 100644 index 000000000..1e07c8ada --- /dev/null +++ b/Tests/Editor/Structs/Space/Space3Tests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b8dc33eb4154b80b31386ccbf0094f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Editor/Structs/Space/Space4Tests.cs b/Tests/Editor/Structs/Space/Space4Tests.cs new file mode 100644 index 000000000..897148b11 --- /dev/null +++ b/Tests/Editor/Structs/Space/Space4Tests.cs @@ -0,0 +1,59 @@ +using droid.Runtime.Enums; +using droid.Runtime.Structs.Space; +using NUnit.Framework; +using UnityEngine; + +namespace droid.Tests.Editor.Structs.Space { + /// + /// + /// + [TestFixture] + public class Space4Tests { + /// + /// + /// + [Test] + public void TestDenormalise010() { + var space = new Space4 {Min = Vector4.zero, Max = Vector4.one * 10, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector4.Distance(space.Reproject(Vector4.one * 0.5f), Vector4.one * 5f) + <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestNormalise010() { + var space = new Space4 {Min = Vector4.zero, Max = Vector4.one * 10, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector4.Distance(space.Project(6 * Vector4.one), Vector4.one * 0.6f) <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestNormaliseMinus11() { + var space = new Space4 {Min = Vector4.one * -1, Max = Vector4.one * 1, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector4.Distance(space.Project(0.5f * Vector4.one), Vector4.one * 0.75f) + <= float.Epsilon, + Is.True); + } + + /// + /// + /// + [Test] + public void TestDenormaliseMinus11() { + var space = new Space4 {Min = Vector4.one * -1, Max = Vector4.one * 1, Normalised = Normalisation.Zero_one_}; + + Assert.That(Vector4.Distance(space.Reproject(0.75f * Vector4.one), Vector4.one * 0.5f) + <= float.Epsilon, + Is.True); + } + } +} diff --git a/Tests/Editor/Structs/Space/Space4Tests.cs.meta b/Tests/Editor/Structs/Space/Space4Tests.cs.meta new file mode 100644 index 000000000..1403913b1 --- /dev/null +++ b/Tests/Editor/Structs/Space/Space4Tests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3ace6c2a8624253afb94e18ace43cd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Runtime/Neodroid.RuntimeTests.asmdef b/Tests/Runtime/Neodroid.RuntimeTests.asmdef new file mode 100644 index 000000000..c8ca6c4a3 --- /dev/null +++ b/Tests/Runtime/Neodroid.RuntimeTests.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Neodroid.RuntimeTests", + "references": [ + "GUID:68af22e97abf36b1f9e89f9483bd37f1", + "GUID:d2007c2033e45bf2aaeedbdb8504ed4a" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [] +} \ No newline at end of file diff --git a/Tests/Runtime/Neodroid.RuntimeTests.asmdef.meta b/Tests/Runtime/Neodroid.RuntimeTests.asmdef.meta new file mode 100644 index 000000000..f0ce3adc3 --- /dev/null +++ b/Tests/Runtime/Neodroid.RuntimeTests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cfe60eab6a7bb62f894c69bac3f1ec8e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Runtime/RegistrationTests.cs b/Tests/Runtime/RegistrationTests.cs new file mode 100644 index 000000000..4a13de437 --- /dev/null +++ b/Tests/Runtime/RegistrationTests.cs @@ -0,0 +1,21 @@ +using System; +using NUnit.Framework; +using UnityEngine; + +namespace droid.Tests.Runtime { + /// + /// + /// + [TestFixture] + public class RegistrationTests { + /// + /// + /// + [Test] + public void RegistrationNameCheck() { + const String go_name = "MyGameObject"; + var go = new GameObject(go_name); + Assert.AreEqual(go_name, go.name); + } + } +} diff --git a/Tests/Runtime/RegistrationTests.cs.meta b/Tests/Runtime/RegistrationTests.cs.meta new file mode 100644 index 000000000..c05d69cd5 --- /dev/null +++ b/Tests/Runtime/RegistrationTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7993bb68de746b68329aa378cbabe2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Runtime/SanityTests.cs b/Tests/Runtime/SanityTests.cs new file mode 100644 index 000000000..f8a1481e1 --- /dev/null +++ b/Tests/Runtime/SanityTests.cs @@ -0,0 +1,15 @@ +using NUnit.Framework; + +namespace droid.Tests.Runtime { + /// + /// + /// + [TestFixture] + public class SanityTests { + /// + /// + /// + [Test] + public void Sanity() { Assert.That(true, Is.True); } + } +} diff --git a/Tests/Runtime/SanityTests.cs.meta b/Tests/Runtime/SanityTests.cs.meta new file mode 100644 index 000000000..c94b04a7b --- /dev/null +++ b/Tests/Runtime/SanityTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a69e775b04c940bc88b9bae2b343b467 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/Runtime/SimulatorTests.cs b/Tests/Runtime/SimulatorTests.cs index 545feb80a..7dc7fefe4 100644 --- a/Tests/Runtime/SimulatorTests.cs +++ b/Tests/Runtime/SimulatorTests.cs @@ -1,4 +1,4 @@ -namespace Neodroid.Tests.Runtime { +namespace droid.Tests.Runtime { /*[TestFixture] public class SimulatorTests { [Test] public void Sanity() { Assert.That(true, Is.True); } @@ -10,4 +10,4 @@ public void RegistrationNameCheck() { Assert.AreEqual(go_name, go.name); } }*/ -} \ No newline at end of file +} diff --git a/Tests/Runtime/SimulatorTests.cs.meta b/Tests/Runtime/SimulatorTests.cs.meta index 35ba06603..d95aab362 100644 --- a/Tests/Runtime/SimulatorTests.cs.meta +++ b/Tests/Runtime/SimulatorTests.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 227186d05e4274badb26b928c6923707, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/csc.rsp b/csc.rsp index 44f44ac55..7ab6fd8ee 100644 --- a/csc.rsp +++ b/csc.rsp @@ -1,9 +1,10 @@ --define:NEODROID --define:NEODROID_EXISTS --define:NEODROID_DEBUG_NOT --define:UNITY_EDITOR_NOT - --define:RECORDER_EXISTS_NOT --define:TEXT_MESH_PRO_EXISTS_NOT --define:ECS_EXISTS_NOT +-define:NEODROID +-define:NEODROID_EXISTS +-define:NEODROID_DEBUG_NOT +-define:GH_IN_PROJECT +-define:UNITY_EDITOR_NOT + +-define:RECORDER_EXISTS_NOT +-define:TEXT_MESH_PRO_EXISTS_NOT +-define:ECS_EXISTS_NOT -define:BIOIK_EXISTS \ No newline at end of file diff --git a/docs.meta b/docs.meta index 6b6ac3619..cd05dab15 100644 --- a/docs.meta +++ b/docs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2baead79ef58b4dd7946e4ae0b5f0b20 +guid: 27abf193126eefeb4870731ee06fe95e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 000000000..c7150d322 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +droid.neodroid.ml \ No newline at end of file diff --git a/docs/CNAME.meta b/docs/CNAME.meta new file mode 100644 index 000000000..f463b400d --- /dev/null +++ b/docs/CNAME.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d2865292372d628869771d40dacc7d39 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/docs/Doxyfile b/docs/Doxyfile new file mode 100644 index 000000000..f6e1f360b --- /dev/null +++ b/docs/Doxyfile @@ -0,0 +1,2494 @@ +# Doxyfile 1.8.13 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = Neodroid + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = 0.2.0 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Machine Learning Environment Prototyping Tool" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = /home/heider/Pictures/Unsorted/neodroidcropped124.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = cvs + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 2 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = YES + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = ../Runtime + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = ../cvs + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 32 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 19 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 63 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /